hwc: Add ttrace tag of hwc 87/293087/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Fri, 19 May 2023 09:22:08 +0000 (18:22 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Fri, 19 May 2023 09:22:30 +0000 (18:22 +0900)
Change-Id: I539ae9d5c37f4ee7c1786f0d8c34362c71e2343e

src/tdm_display.c
src/tdm_hwc.c
src/tdm_monitor_server.c
src/tdm_private_types.h

index 46cd486f3484959db9e1bdd632945c93012f0f8f..85a026e95a28c96c463d64a6908079f014c16dfb 100644 (file)
@@ -338,6 +338,8 @@ tdm_display_enable_ttrace(tdm_private_display *private_display, const char *ttra
                        tdm_ttrace_module |= TDM_TTRACE_PP;
                else if (!strncmp(arg, "capture", 7))
                        tdm_ttrace_module |= TDM_TTRACE_CAPTURE;
+               else if (!strncmp(arg, "hwc", 3))
+                       tdm_ttrace_module |= TDM_TTRACE_HWC;
                else  {
                        tdm_ttrace_module = 0;
                        tdm_display_enable_ttrace_vblank(private_display, NULL, 0);
index 18fca9c5ce916f980889b6cd65f6291263d25244..185ee6ab4b6d5ea699ff49cf662e46376989a9ae 100644 (file)
@@ -129,6 +129,10 @@ _tdm_hwc_thread_cb_commit(tdm_private_display *private_display, void *object,
                TDM_INFO("handler(%p)", hwc_commit_handler);
        }
 
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_ASYNC_END((intptr_t)hwc_commit_handler, "[HWC_COMMIT~HANDLER] %d",
+                                               private_hwc->private_output->pipe);
+
        /* LCOV_EXCL_START */
        if (private_display->print_fps) {
                double curr = tdm_helper_get_time();
@@ -561,6 +565,15 @@ tdm_hwc_set_client_target_buffer(tdm_hwc *hwc, tbm_surface_h target_buffer, tdm_
 
        _pthread_mutex_lock(&private_display->lock);
 
+       if (tdm_ttrace_module & TDM_TTRACE_HWC) {
+               if (target_buffer) {
+                       tbm_bo bo = tbm_surface_internal_get_bo(target_buffer, 0);
+                       TDM_TRACE_BEGIN("tdm_hwc_set_client_target_buffer %d", tbm_bo_export(bo));
+               } else {
+                       TDM_TRACE_BEGIN("tdm_hwc_set_client_target_buffer NULL");
+               }
+       }
+
        if (tdm_debug_dump & TDM_DUMP_FLAG_WINDOW) {
                /* LCOV_EXCL_START */
                char str[TDM_PATH_LEN];
@@ -580,9 +593,9 @@ tdm_hwc_set_client_target_buffer(tdm_hwc *hwc, tbm_surface_h target_buffer, tdm_
        } else {
                if (!func_hwc->hwc_set_client_target_buffer) {
                        /* LCOV_EXCL_START */
-                       _pthread_mutex_unlock(&private_display->lock);
                        TDM_WRN("not implemented!!");
-                       return TDM_ERROR_NOT_IMPLEMENTED;
+                       ret = TDM_ERROR_NOT_IMPLEMENTED;
+                       goto done;
                        /* LCOV_EXCL_STOP */
                }
 
@@ -602,6 +615,10 @@ tdm_hwc_set_client_target_buffer(tdm_hwc *hwc, tbm_surface_h target_buffer, tdm_
                }
        }
 
+done:
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_END();
+
        _pthread_mutex_unlock(&private_display->lock);
 
        return ret;
@@ -653,37 +670,36 @@ tdm_hwc_validate(tdm_hwc *hwc, tdm_hwc_window **composited_wnds, uint32_t num_wn
 
        _pthread_mutex_lock(&private_display->lock);
 
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_BEGIN(__FUNCTION__);
+
        private_module = private_hwc->private_module;
        func_hwc = &private_module->func_hwc;
 
        if (private_module->use_hal_tdm) {
                if (num_wnds == 0) {
                        ret = (tdm_error)hal_tdm_hwc_validate((hal_tdm_hwc *)private_hwc->hwc_backend, NULL, 0, num_types);
-
-                       _pthread_mutex_unlock(&private_display->lock);
-                       return ret;
+                       goto done;
                }
        } else {
                if (!func_hwc->hwc_validate) {
                        /* LCOV_EXCL_START */
-                       _pthread_mutex_unlock(&private_display->lock);
                        TDM_WRN("not implemented!!");
-                       return TDM_ERROR_NOT_IMPLEMENTED;
+                       ret = TDM_ERROR_NOT_IMPLEMENTED;
+                       goto done;
                        /* LCOV_EXCL_STOP */
                }
 
                if (num_wnds == 0) {
                        ret = func_hwc->hwc_validate(private_hwc->hwc_backend, NULL, 0, num_types);
-
-                       _pthread_mutex_unlock(&private_display->lock);
-                       return ret;
+                       goto done;
                }
        }
        composited_wnds_backend = calloc(num_wnds, sizeof(tdm_hwc_window *));
        if (!composited_wnds_backend) {
                /* LCOV_EXCL_START */
-               _pthread_mutex_unlock(&private_display->lock);
-               return TDM_ERROR_OUT_OF_MEMORY;
+               ret = TDM_ERROR_OUT_OF_MEMORY;
+               goto done;
                /* LCOV_EXCL_STOP */
        }
 
@@ -701,6 +717,10 @@ tdm_hwc_validate(tdm_hwc *hwc, tdm_hwc_window **composited_wnds, uint32_t num_wn
 
        free(composited_wnds_backend);
 
+done:
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_END();
+
        _pthread_mutex_unlock(&private_display->lock);
 
        return ret;
@@ -722,6 +742,9 @@ tdm_hwc_get_changed_composition_types(tdm_hwc *hwc, uint32_t *num_elements,
 
        _pthread_mutex_lock(&private_display->lock);
 
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_BEGIN(__FUNCTION__);
+
        private_module = private_hwc->private_module;
        func_hwc = &private_module->func_hwc;
 
@@ -732,9 +755,9 @@ tdm_hwc_get_changed_composition_types(tdm_hwc *hwc, uint32_t *num_elements,
        } else {
                if (!func_hwc->hwc_get_changed_composition_types) {
                        /* LCOV_EXCL_START */
-                       _pthread_mutex_unlock(&private_display->lock);
                        TDM_WRN("not implemented!!");
-                       return TDM_ERROR_NOT_IMPLEMENTED;
+                       ret = TDM_ERROR_NOT_IMPLEMENTED;
+                       goto done;
                        /* LCOV_EXCL_STOP */
                }
 
@@ -743,14 +766,12 @@ tdm_hwc_get_changed_composition_types(tdm_hwc *hwc, uint32_t *num_elements,
        }
        if (ret != TDM_ERROR_NONE) {
                /* LCOV_EXCL_START */
-               _pthread_mutex_unlock(&private_display->lock);
-               return ret;
+               goto done;
                /* LCOV_EXCL_STOP */
        }
 
        if (hwc_window == NULL || composition_types == NULL) {
-               _pthread_mutex_unlock(&private_display->lock);
-               return TDM_ERROR_NONE;
+               goto done;
        }
 
        for (i = 0; i < *num_elements; i++) {
@@ -760,14 +781,18 @@ tdm_hwc_get_changed_composition_types(tdm_hwc *hwc, uint32_t *num_elements,
                        TDM_ERR("failed! This should never happen!");
                        tdm_hwc_window_destroy_internal(private_hwc_window);
                        *num_elements = 0;
-                       _pthread_mutex_unlock(&private_display->lock);
-                       return TDM_ERROR_OPERATION_FAILED;
+                       ret = TDM_ERROR_OPERATION_FAILED;
+                       goto done;
                        /* LCOV_EXCL_STOP */
                }
 
                hwc_window[i] = (tdm_hwc_window*)private_hwc_window;
        }
 
+done:
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_END();
+
        _pthread_mutex_unlock(&private_display->lock);
 
        return ret;
@@ -783,6 +808,9 @@ tdm_hwc_accept_validation(tdm_hwc *hwc)
 
        _pthread_mutex_lock(&private_display->lock);
 
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_BEGIN(__FUNCTION__);
+
        private_module = private_hwc->private_module;
        func_hwc = &private_module->func_hwc;
 
@@ -791,14 +819,19 @@ tdm_hwc_accept_validation(tdm_hwc *hwc)
        } else {
                if (!func_hwc->hwc_validate) {
                        /* LCOV_EXCL_START */
-                       _pthread_mutex_unlock(&private_display->lock);
                        TDM_WRN("not implemented!!");
-                       return TDM_ERROR_NOT_IMPLEMENTED;
+                       ret = TDM_ERROR_NOT_IMPLEMENTED;
+                       goto done;
                        /* LCOV_EXCL_STOP */
                }
 
                ret = func_hwc->hwc_accept_validation(private_hwc->hwc_backend);
        }
+
+done:
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_END();
+
        _pthread_mutex_unlock(&private_display->lock);
 
        return ret;
@@ -817,6 +850,9 @@ tdm_hwc_commit(tdm_hwc *hwc, int sync, tdm_hwc_commit_handler func, void *user_d
 
        _pthread_mutex_lock(&private_display->lock);
 
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_BEGIN(__FUNCTION__);
+
        private_module = private_hwc->private_module;
        func_hwc = &private_module->func_hwc;
 
@@ -824,8 +860,8 @@ tdm_hwc_commit(tdm_hwc *hwc, int sync, tdm_hwc_commit_handler func, void *user_d
                if (!func_hwc->hwc_commit) {
                        /* LCOV_EXCL_START */
                        TDM_WRN("not implemented!!");
-                       _pthread_mutex_unlock(&private_display->lock);
-                       return TDM_ERROR_NOT_IMPLEMENTED;
+                       ret = TDM_ERROR_NOT_IMPLEMENTED;
+                       goto done;
                        /* LCOV_EXCL_STOP */
                }
        }
@@ -847,8 +883,8 @@ tdm_hwc_commit(tdm_hwc *hwc, int sync, tdm_hwc_commit_handler func, void *user_d
        if (private_module == private_display->virtual_module) {
                if (!private_output->private_voutput) {
                        TDM_ERR("virtual module but don't have voutput");
-                       _pthread_mutex_unlock(&private_display->lock);
-                       return TDM_ERROR_BAD_MODULE;
+                       ret = TDM_ERROR_BAD_MODULE;
+                       goto done;
                }
        }
 
@@ -862,8 +898,7 @@ tdm_hwc_commit(tdm_hwc *hwc, int sync, tdm_hwc_commit_handler func, void *user_d
                if (ret != TDM_ERROR_NONE) {
                        private_hwc->regist_commit_cb = 0;
                        TDM_ERR("hwc(%d) fail to set hwc_set_commit_handler", private_hwc->index);
-                       _pthread_mutex_unlock(&private_display->lock);
-                       return ret;
+                       goto done;
                /* LCOV_EXCL_STOP */
                }
        }
@@ -872,8 +907,8 @@ tdm_hwc_commit(tdm_hwc *hwc, int sync, tdm_hwc_commit_handler func, void *user_d
        if (!hwc_commit_handler) {
                /* LCOV_EXCL_START */
                TDM_ERR("failed: alloc memory");
-               _pthread_mutex_unlock(&private_display->lock);
-               return TDM_ERROR_OUT_OF_MEMORY;
+               ret = TDM_ERROR_OUT_OF_MEMORY;
+               goto done;
                /* LCOV_EXCL_STOP */
        }
 
@@ -882,8 +917,7 @@ tdm_hwc_commit(tdm_hwc *hwc, int sync, tdm_hwc_commit_handler func, void *user_d
        if (ret != TDM_ERROR_NONE) {
                TDM_ERR("tdm_thread_cb_add failed");
                free(hwc_commit_handler);
-               _pthread_mutex_unlock(&private_display->lock);
-               return ret;
+               goto done;
        }
 
        LIST_ADDTAIL(&hwc_commit_handler->link, &private_hwc->hwc_commit_handler_list);
@@ -925,12 +959,23 @@ tdm_hwc_commit(tdm_hwc *hwc, int sync, tdm_hwc_commit_handler func, void *user_d
                                        private_hwc->index, hwc_commit_handler, func, user_data);
        }
 
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_ASYNC_BEGIN((intptr_t)hwc_commit_handler, "[HWC_COMMIT~HANDLER] %d",
+                                                       private_hwc->private_output->pipe);
+
+done:
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_END();
+
        _pthread_mutex_unlock(&private_display->lock);
 
        return ret;
 
 commit_failed:
        /* LCOV_EXCL_START */
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_END();
+
        if (hwc_commit_handler) {
                tdm_thread_cb_remove(private_hwc, TDM_THREAD_CB_HWC_COMMIT, hwc_commit_handler,
                                                _tdm_hwc_thread_cb_commit, NULL);
@@ -954,6 +999,9 @@ tdm_hwc_get_commit_fence(tdm_hwc *hwc, int *commit_fence)
 
        _pthread_mutex_lock(&private_display->lock);
 
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_BEGIN(__FUNCTION__);
+
        private_module = private_hwc->private_module;
        func_hwc = &private_module->func_hwc;
 
@@ -962,14 +1010,19 @@ tdm_hwc_get_commit_fence(tdm_hwc *hwc, int *commit_fence)
        } else {
                if (!func_hwc->hwc_get_commit_fence) {
                        /* LCOV_EXCL_START */
-                       _pthread_mutex_unlock(&private_display->lock);
                        TDM_WRN("not implemented!!");
-                       return TDM_ERROR_NOT_IMPLEMENTED;
+                       ret = TDM_ERROR_NOT_IMPLEMENTED;
+                       goto done;
                        /* LCOV_EXCL_STOP */
                }
 
                ret = func_hwc->hwc_get_commit_fence(private_hwc->hwc_backend, commit_fence);
        }
+
+done:
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_END();
+
        _pthread_mutex_unlock(&private_display->lock);
 
        return ret;
@@ -988,6 +1041,9 @@ tdm_hwc_get_release_fences(tdm_hwc *hwc, uint32_t *num_elements,
 
        _pthread_mutex_lock(&private_display->lock);
 
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_BEGIN(__FUNCTION__);
+
        private_module = private_hwc->private_module;
        func_hwc = &private_module->func_hwc;
 
@@ -997,19 +1053,17 @@ tdm_hwc_get_release_fences(tdm_hwc *hwc, uint32_t *num_elements,
        } else {
                if (!func_hwc->hwc_get_release_fences) {
                        /* LCOV_EXCL_START */
-                       _pthread_mutex_unlock(&private_display->lock);
                        TDM_WRN("not implemented!!");
-                       return TDM_ERROR_NOT_IMPLEMENTED;
+                       ret = TDM_ERROR_NOT_IMPLEMENTED;
+                       goto done;
                        /* LCOV_EXCL_STOP */
                }
 
                ret = func_hwc->hwc_get_release_fences(private_hwc->hwc_backend, num_elements,
                                                                                        hwc_windows, fences);
        }
-       if (hwc_windows == NULL || fences == NULL) {
-               _pthread_mutex_unlock(&private_display->lock);
-               return TDM_ERROR_NONE;
-       }
+       if (hwc_windows == NULL || fences == NULL)
+               goto done;
 
        for (i = 0; i < *num_elements; i++) {
                private_hwc_window = _tdm_hwc_find_private_hwc_window(private_hwc, hwc_windows[i]);
@@ -1018,14 +1072,18 @@ tdm_hwc_get_release_fences(tdm_hwc *hwc, uint32_t *num_elements,
                        TDM_ERR("failed! This should never happen!");
                        tdm_hwc_window_destroy_internal(private_hwc_window);
                        *num_elements = 0;
-                       _pthread_mutex_unlock(&private_display->lock);
-                       return TDM_ERROR_OPERATION_FAILED;
+                       ret = TDM_ERROR_OPERATION_FAILED;
+                       goto done;
                        /* LCOV_EXCL_STOP */
                }
 
                hwc_windows[i] = (tdm_hwc_window*)private_hwc_window;
        }
 
+done:
+       if (tdm_ttrace_module & TDM_TTRACE_HWC)
+               TDM_TRACE_END();
+
        _pthread_mutex_unlock(&private_display->lock);
 
        return ret;
index 4402f3dfcac177449d0cad7c1365472e487275e5..b3ccf7e2219dce63be18d4079bfddf7f819b1922 100644 (file)
@@ -521,7 +521,7 @@ static struct {
        },
        {
                "ttrace", _tdm_monitor_server_ttrace,
-               "enable/disable ttrace (module: none,vsync,client_vblank,server_vblank,vblank,layer,pp,capture,all",
+               "enable/disable ttrace (module: none,vsync,client_vblank,server_vblank,vblank,layer,pp,capture,hwc,all",
                "<module>[@<output_idx>]",
                NULL
        },
index 69a2e1d6d631a3883e9f954646dd9f51a789eb22..5ec9411a6f9899feb6e266929055829889b10efd 100644 (file)
@@ -77,6 +77,7 @@ enum {
        TDM_TTRACE_LAYER            = (1 << 4),
        TDM_TTRACE_PP               = (1 << 5),
        TDM_TTRACE_CAPTURE          = (1 << 6),
+       TDM_TTRACE_HWC              = (1 << 7),
 };
 
 typedef enum {