From b73ff3145dafd2109ddac8f5ceda37286590994a Mon Sep 17 00:00:00 2001 From: Boram Park Date: Tue, 20 Feb 2018 13:57:40 +0900 Subject: [PATCH 01/16] buffers: add extern for testing Change-Id: Ib23b11d99fc399a0673272c39786989a6aa4973a --- tools/buffers.c | 4 +--- tools/buffers.h | 8 ++++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/tools/buffers.c b/tools/buffers.c index 318dcde..8b04b41 100644 --- a/tools/buffers.c +++ b/tools/buffers.c @@ -37,8 +37,6 @@ #include #include -#include "tdm_log.h" -#include "tdm_macro.h" #include "buffers.h" #define ALPHA_VALUE 100 @@ -944,7 +942,7 @@ tdm_test_buffer_fill(tbm_surface_h buffer, int pattern) rand_seed = time(NULL); ret = tbm_surface_map(buffer, TBM_OPTION_WRITE, &info); - TDM_EXIT_IF_FAIL(ret == 0); + assert(ret == 0); plane[0] = info.planes[0].ptr; plane[1] = info.planes[1].ptr; diff --git a/tools/buffers.h b/tools/buffers.h index 55afd3d..acf5661 100644 --- a/tools/buffers.h +++ b/tools/buffers.h @@ -27,6 +27,10 @@ #ifndef __BUFFERS_H__ #define __BUFFERS_H__ +#ifdef __cplusplus +extern "C" { +#endif + enum fill_pattern { PATTERN_TILES = 0, PATTERN_PLAIN = 1, @@ -36,4 +40,8 @@ enum fill_pattern { void tdm_test_buffer_fill(tbm_surface_h buffer, int pattern); +#ifdef __cplusplus +} +#endif + #endif -- 2.7.4 From a44221f9e8dca1cb84da72c255e22d30c3fe08f3 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Tue, 20 Feb 2018 13:58:35 +0900 Subject: [PATCH 02/16] macro: move tdm_debug_module's extern position Change-Id: I5a302cc39c70f28416b7a243286b69749673fe5e --- src/tdm_macro.h | 1 + src/tdm_private.h | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tdm_macro.h b/src/tdm_macro.h index 4ac6a4f..0cafffe 100644 --- a/src/tdm_macro.h +++ b/src/tdm_macro.h @@ -386,6 +386,7 @@ extern const char *tdm_mutex_lock_func; extern int tdm_mutex_lock_line; extern const char *tdm_mutex_unlock_func; extern int tdm_mutex_unlock_line; +extern int tdm_debug_module; #define _pthread_mutex_lock(l) \ do { \ diff --git a/src/tdm_private.h b/src/tdm_private.h index 9c76d78..0424dd2 100644 --- a/src/tdm_private.h +++ b/src/tdm_private.h @@ -77,7 +77,6 @@ extern "C" { * - function prototypes *****************************************************************************/ -extern int tdm_debug_module; extern int tdm_debug_dump; extern int tdm_ttrace_module; extern int tdm_ttrace_output; -- 2.7.4 From 67f4c07ec0771e515f9e85537ce39b86c41d5f67 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Tue, 20 Feb 2018 13:59:12 +0900 Subject: [PATCH 03/16] helper: allow user_data's NULL Change-Id: I2b7c91dbfaf09be177a43e447692465e76c06944 --- src/tdm_helper.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/tdm_helper.c b/src/tdm_helper.c index a1b7427..e3d5f3f 100644 --- a/src/tdm_helper.c +++ b/src/tdm_helper.c @@ -723,7 +723,6 @@ tdm_helper_capture_output(tdm_output *output, tbm_surface_h dst_buffer, TDM_RETURN_VAL_IF_FAIL(w >= 0, TDM_ERROR_INVALID_PARAMETER); TDM_RETURN_VAL_IF_FAIL(h >= 0, TDM_ERROR_INVALID_PARAMETER); TDM_RETURN_VAL_IF_FAIL(func != NULL, TDM_ERROR_INVALID_PARAMETER); - TDM_RETURN_VAL_IF_FAIL(data != NULL, TDM_ERROR_INVALID_PARAMETER); err = tdm_output_get_layer_count(output, &count); if (err != TDM_ERROR_NONE) { -- 2.7.4 From 6fa5ff8f0fe0d8c7aac2ab70bc683f03fdfd18db Mon Sep 17 00:00:00 2001 From: Boram Park Date: Tue, 20 Feb 2018 13:59:48 +0900 Subject: [PATCH 04/16] layer: reset flags in case of success Change-Id: Ib8a9b489b22d0b7bf9381ba01cd87350128b5f97 --- src/tdm_layer.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tdm_layer.c b/src/tdm_layer.c index 9add055..a185ae5 100644 --- a/src/tdm_layer.c +++ b/src/tdm_layer.c @@ -1341,6 +1341,7 @@ tdm_layer_get_buffer_flags(tdm_layer *layer, unsigned int *flags) if (!func_layer->layer_get_buffer_flags) { /* LCOV_EXCL_START */ + *flags = 0; _pthread_mutex_unlock(&private_display->lock); TDM_ERR("not implemented!!"); return TDM_ERROR_NOT_IMPLEMENTED; -- 2.7.4 From f32418a879a78c311fbf37ac04ea1ab658a244de Mon Sep 17 00:00:00 2001 From: Boram Park Date: Tue, 20 Feb 2018 14:00:19 +0900 Subject: [PATCH 05/16] layer: allow func and user_data are null when removed Change-Id: Ia9d8d49209a4ef59e86b974a3193e1f64994bf38 --- src/tdm_layer.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/tdm_layer.c b/src/tdm_layer.c index a185ae5..275753c 100644 --- a/src/tdm_layer.c +++ b/src/tdm_layer.c @@ -1051,6 +1051,9 @@ tdm_layer_remove_commit_handler_internal(tdm_layer *layer, tdm_layer_commit_hand tdm_private_output *private_output = private_layer->private_output; tdm_private_layer_commit_handler *lm = NULL, *lmm = NULL; + if (!func && !user_data) + return; + TDM_RETURN_IF_FAIL(private_layer != NULL); TDM_RETURN_IF_FAIL(TDM_MUTEX_IS_LOCKED()); -- 2.7.4 From 65bfe30937ab4cec3729225c5acb804c879ea36b Mon Sep 17 00:00:00 2001 From: Boram Park Date: Tue, 20 Feb 2018 14:18:18 +0900 Subject: [PATCH 06/16] layer: set committing variable when commit Change-Id: Iac72ec1ff1f18e08c9b3170967f556ac9e771b64 --- src/tdm_layer.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/tdm_layer.c b/src/tdm_layer.c index 275753c..2d31817 100644 --- a/src/tdm_layer.c +++ b/src/tdm_layer.c @@ -733,6 +733,8 @@ _tdm_layer_cb_output_commit(tdm_output *output, unsigned int sequence, private_layer = layer_commit_handler->private_layer; + private_layer->committing = 0; + if (tdm_debug_module & TDM_DEBUG_COMMIT) TDM_INFO("layer(%p) commit: output(%d) committed. handle(%p)", private_layer, private_output->pipe, layer_commit_handler); @@ -913,6 +915,11 @@ _tdm_layer_commit(tdm_layer *layer, tdm_layer_commit_handler func, void *user_da layer_commit_handler->committed_buffer = private_layer->waiting_buffer; private_layer->waiting_buffer = NULL; + if (private_layer->committing) + TDM_WRN("layer(%d) too many commit", private_layer->index); + else + private_layer->committing = 1; + if (tdm_debug_module & TDM_DEBUG_BUFFER) TDM_INFO("layer(%p) waiting_buffer(%p) committed_buffer(%p)", private_layer, private_layer->waiting_buffer, @@ -930,11 +937,6 @@ _tdm_layer_commit(tdm_layer *layer, tdm_layer_commit_handler func, void *user_da } else { TDM_GOTO_IF_FAIL(private_output->commit_type == TDM_COMMIT_TYPE_LAYER, commit_failed); - if (private_layer->committing) - TDM_WRN("layer(%d) too many commit", private_layer->index); - else - private_layer->committing = 1; - if (_tdm_layer_commit_possible(private_layer)) { /* add to layer_commit_handler_list */ LIST_ADDTAIL(&layer_commit_handler->link, &private_output->layer_commit_handler_list); -- 2.7.4 From afbe2bb7692d791d25bccd604fdb5b9d63f85289 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Tue, 6 Feb 2018 13:12:59 +0900 Subject: [PATCH 07/16] utests: rename filename Change-Id: I9b3bf085adddef16a9f4e8a46878b9b455e9050e --- utests/Makefile.am | 4 ++-- utests/src/{ut_common.h => ut_tdm.h} | 0 utests/src/ut_tdm_buffer.cpp | 2 +- utests/src/ut_tdm_capture.cpp | 2 +- utests/src/ut_tdm_client.cpp | 2 +- utests/src/{ut_tdm.cpp => ut_tdm_display.cpp} | 0 utests/src/ut_tdm_event_loop.cpp | 2 +- utests/src/ut_tdm_helper.cpp | 2 +- utests/src/ut_tdm_hwc_window.cpp | 2 +- utests/src/ut_tdm_layer.cpp | 2 +- utests/src/{ut_main.cpp => ut_tdm_main.cpp} | 0 utests/src/ut_tdm_output.cpp | 2 +- utests/src/ut_tdm_pp.cpp | 2 +- utests/src/ut_tdm_vblank.cpp | 2 +- 14 files changed, 12 insertions(+), 12 deletions(-) rename utests/src/{ut_common.h => ut_tdm.h} (100%) rename utests/src/{ut_tdm.cpp => ut_tdm_display.cpp} (100%) rename utests/src/{ut_main.cpp => ut_tdm_main.cpp} (100%) diff --git a/utests/Makefile.am b/utests/Makefile.am index fe1e8b5..1c22d6a 100644 --- a/utests/Makefile.am +++ b/utests/Makefile.am @@ -1,8 +1,8 @@ bin_PROGRAMS = tdm-utests tdm_utests_SOURCES = \ - src/ut_main.cpp \ - src/ut_tdm.cpp \ + src/ut_tdm_main.cpp \ + src/ut_tdm_display.cpp \ src/ut_tdm_pp.cpp \ src/ut_tdm_capture.cpp \ src/ut_tdm_output.cpp \ diff --git a/utests/src/ut_common.h b/utests/src/ut_tdm.h similarity index 100% rename from utests/src/ut_common.h rename to utests/src/ut_tdm.h diff --git a/utests/src/ut_tdm_buffer.cpp b/utests/src/ut_tdm_buffer.cpp index c7b8029..db5c4ca 100644 --- a/utests/src/ut_tdm_buffer.cpp +++ b/utests/src/ut_tdm_buffer.cpp @@ -1,5 +1,5 @@ #include "gtest/gtest.h" -#include "ut_common.h" +#include "ut_tdm.h" #include "stdint.h" extern "C" { diff --git a/utests/src/ut_tdm_capture.cpp b/utests/src/ut_tdm_capture.cpp index 5e5e92f..068220a 100644 --- a/utests/src/ut_tdm_capture.cpp +++ b/utests/src/ut_tdm_capture.cpp @@ -29,7 +29,7 @@ **************************************************************************/ #include "gtest/gtest.h" -#include "ut_common.h" +#include "ut_tdm.h" #include "tdm.h" extern "C" { #include "tbm_bufmgr.h" diff --git a/utests/src/ut_tdm_client.cpp b/utests/src/ut_tdm_client.cpp index 678269b..adb71d5 100644 --- a/utests/src/ut_tdm_client.cpp +++ b/utests/src/ut_tdm_client.cpp @@ -30,7 +30,7 @@ **************************************************************************/ #include "gtest/gtest.h" -#include "ut_common.h" +#include "ut_tdm.h" #include diff --git a/utests/src/ut_tdm.cpp b/utests/src/ut_tdm_display.cpp similarity index 100% rename from utests/src/ut_tdm.cpp rename to utests/src/ut_tdm_display.cpp diff --git a/utests/src/ut_tdm_event_loop.cpp b/utests/src/ut_tdm_event_loop.cpp index 62b9165..b0dc4e7 100644 --- a/utests/src/ut_tdm_event_loop.cpp +++ b/utests/src/ut_tdm_event_loop.cpp @@ -1,5 +1,5 @@ #include "gtest/gtest.h" -#include "ut_common.h" +#include "ut_tdm.h" #include "stdint.h" #include "fcntl.h" diff --git a/utests/src/ut_tdm_helper.cpp b/utests/src/ut_tdm_helper.cpp index 0acd225..b9d8ba4 100644 --- a/utests/src/ut_tdm_helper.cpp +++ b/utests/src/ut_tdm_helper.cpp @@ -1,5 +1,5 @@ #include "gtest/gtest.h" -#include "ut_common.h" +#include "ut_tdm.h" #include "stdint.h" #include #include diff --git a/utests/src/ut_tdm_hwc_window.cpp b/utests/src/ut_tdm_hwc_window.cpp index b36b073..52ebc5b 100644 --- a/utests/src/ut_tdm_hwc_window.cpp +++ b/utests/src/ut_tdm_hwc_window.cpp @@ -30,7 +30,7 @@ #include #include "gtest/gtest.h" -#include "ut_common.h" +#include "ut_tdm.h" #include "stdint.h" #include "tdm.h" diff --git a/utests/src/ut_tdm_layer.cpp b/utests/src/ut_tdm_layer.cpp index db02e21..051c41f 100644 --- a/utests/src/ut_tdm_layer.cpp +++ b/utests/src/ut_tdm_layer.cpp @@ -29,7 +29,7 @@ **************************************************************************/ #include "gtest/gtest.h" -#include "ut_common.h" +#include "ut_tdm.h" #include #include #include diff --git a/utests/src/ut_main.cpp b/utests/src/ut_tdm_main.cpp similarity index 100% rename from utests/src/ut_main.cpp rename to utests/src/ut_tdm_main.cpp diff --git a/utests/src/ut_tdm_output.cpp b/utests/src/ut_tdm_output.cpp index a883cd4..0355065 100644 --- a/utests/src/ut_tdm_output.cpp +++ b/utests/src/ut_tdm_output.cpp @@ -29,7 +29,7 @@ **************************************************************************/ #include "gtest/gtest.h" -#include "ut_common.h" +#include "ut_tdm.h" #include #include "tdm.h" extern "C" { diff --git a/utests/src/ut_tdm_pp.cpp b/utests/src/ut_tdm_pp.cpp index 8cd08bb..d420204 100644 --- a/utests/src/ut_tdm_pp.cpp +++ b/utests/src/ut_tdm_pp.cpp @@ -29,7 +29,7 @@ **************************************************************************/ #include "gtest/gtest.h" -#include "ut_common.h" +#include "ut_tdm.h" #include "tdm.h" extern "C" { #include "tbm_bufmgr.h" diff --git a/utests/src/ut_tdm_vblank.cpp b/utests/src/ut_tdm_vblank.cpp index a7f5cde..9eed3dc 100644 --- a/utests/src/ut_tdm_vblank.cpp +++ b/utests/src/ut_tdm_vblank.cpp @@ -31,7 +31,7 @@ #include "gtest/gtest.h" #include "tdm.h" #include "tbm_bufmgr.h" -#include "ut_common.h" +#include "ut_tdm.h" #include #include #include -- 2.7.4 From 6b17e468595af689abfd115cba6e40afca32ef25 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Mon, 5 Feb 2018 17:56:25 +0900 Subject: [PATCH 08/16] log: check log level Change-Id: I314e2b31ecfd402b75dabaa66ffd8d6198a3d5cd --- common/tdm_log.c | 15 ++++++++------- include/tdm_log.h | 50 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 38 insertions(+), 27 deletions(-) diff --git a/common/tdm_log.c b/common/tdm_log.c index 7cce09c..2f7152b 100644 --- a/common/tdm_log.c +++ b/common/tdm_log.c @@ -63,13 +63,14 @@ static unsigned int dlog_enable = 1; static unsigned int color_enable = 1; -static unsigned int debug_level = TDM_LOG_LEVEL_INFO; static unsigned int need_check_env = 1; static unsigned int log_lock_init; static pthread_mutex_t log_lock; +unsigned int tdm_log_debug_level = TDM_LOG_LEVEL_INFO; + static void _tdm_log_check_env(void) { @@ -78,11 +79,11 @@ _tdm_log_check_env(void) str = getenv("TDM_DEBUG_LEVEL"); if (str) - debug_level = strtol(str, &end, 10); + tdm_log_debug_level = strtol(str, &end, 10); str = getenv("TDM_DEBUG"); if (str && (strstr(str, "1"))) - debug_level = TDM_LOG_LEVEL_DBG; + tdm_log_debug_level = TDM_LOG_LEVEL_DBG; str = getenv("TDM_DLOG"); if (str && (strstr(str, "0"))) @@ -105,15 +106,15 @@ EXTERN void tdm_log_enable_debug(unsigned int enable) { if (enable) - debug_level = TDM_LOG_LEVEL_DBG; + tdm_log_debug_level = TDM_LOG_LEVEL_DBG; else - debug_level = TDM_LOG_LEVEL_INFO; + tdm_log_debug_level = TDM_LOG_LEVEL_INFO; } EXTERN void tdm_log_set_debug_level(int level) { - debug_level = level; + tdm_log_debug_level = level; } EXTERN void @@ -132,7 +133,7 @@ tdm_log_print(int level, const char *fmt, ...) _tdm_log_check_env(); } - if (level > debug_level) + if (level > tdm_log_debug_level) return; if (dlog_enable) { diff --git a/include/tdm_log.h b/include/tdm_log.h index d402a99..1cab32d 100644 --- a/include/tdm_log.h +++ b/include/tdm_log.h @@ -70,37 +70,47 @@ void tdm_log_enable_debug(unsigned int enable); void tdm_log_set_debug_level(int level); void tdm_log_print(int level, const char *fmt, ...); +extern unsigned int tdm_log_debug_level; + #define TDM_DBG(fmt, args...) \ do { \ - struct timespec ts; \ - clock_gettime(CLOCK_MONOTONIC, &ts); \ - tdm_log_print(TDM_LOG_LEVEL_DBG, "[%5d.%06d][%d][%s %d]"fmt"\n", \ - (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \ - (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \ + if (tdm_log_debug_level >= TDM_LOG_LEVEL_DBG) { \ + struct timespec ts; \ + clock_gettime(CLOCK_MONOTONIC, &ts); \ + tdm_log_print(TDM_LOG_LEVEL_DBG, "[%5d.%06d][%d][%s %d]"fmt"\n", \ + (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \ + (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \ + } \ } while (0) #define TDM_INFO(fmt, args...) \ do { \ - struct timespec ts; \ - clock_gettime(CLOCK_MONOTONIC, &ts); \ - tdm_log_print(TDM_LOG_LEVEL_INFO, "[%5d.%06d][%d][%s %d]"fmt"\n", \ - (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \ - (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \ + if (tdm_log_debug_level >= TDM_LOG_LEVEL_INFO) { \ + struct timespec ts; \ + clock_gettime(CLOCK_MONOTONIC, &ts); \ + tdm_log_print(TDM_LOG_LEVEL_INFO, "[%5d.%06d][%d][%s %d]"fmt"\n", \ + (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \ + (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \ + } \ } while (0) #define TDM_WRN(fmt, args...) \ do { \ - struct timespec ts; \ - clock_gettime(CLOCK_MONOTONIC, &ts); \ - tdm_log_print(TDM_LOG_LEVEL_WRN, "[%5d.%06d][%d][%s %d]"fmt"\n", \ - (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \ - (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \ + if (tdm_log_debug_level >= TDM_LOG_LEVEL_WRN) { \ + struct timespec ts; \ + clock_gettime(CLOCK_MONOTONIC, &ts); \ + tdm_log_print(TDM_LOG_LEVEL_WRN, "[%5d.%06d][%d][%s %d]"fmt"\n", \ + (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \ + (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \ + } \ } while (0) #define TDM_ERR(fmt, args...) \ do { \ - struct timespec ts; \ - clock_gettime(CLOCK_MONOTONIC, &ts); \ - tdm_log_print(TDM_LOG_LEVEL_ERR, "[%5d.%06d][%d][%s %d]"fmt"\n", \ - (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \ - (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \ + if (tdm_log_debug_level >= TDM_LOG_LEVEL_ERR) { \ + struct timespec ts; \ + clock_gettime(CLOCK_MONOTONIC, &ts); \ + tdm_log_print(TDM_LOG_LEVEL_ERR, "[%5d.%06d][%d][%s %d]"fmt"\n", \ + (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \ + (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \ + } \ } while (0) #ifdef __cplusplus -- 2.7.4 From 505b4dc6d1b806180064f836a75459652f6a4873 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Thu, 8 Feb 2018 14:04:02 +0900 Subject: [PATCH 09/16] client: handling wayland protocol error Change-Id: I2d064e7808298820dd7e44f0c185aea673fa9999 --- client/tdm_client.c | 160 +++++++++++++++++++++++++++++++++++++++++++++++++-- include/tdm_common.h | 1 + src/tdm_macro.h | 1 + 3 files changed, 158 insertions(+), 4 deletions(-) diff --git a/client/tdm_client.c b/client/tdm_client.c index 51e5c5e..9d00023 100644 --- a/client/tdm_client.c +++ b/client/tdm_client.c @@ -134,6 +134,30 @@ typedef struct _tdm_client_wait_info { struct list_head call_link; } tdm_client_wait_info; +static unsigned int +_tdm_client_check_wl_error(tdm_private_client *private_client, const char *func, int line) +{ + uint32_t ec, id; + const struct wl_interface *intf; + int err; + + err = wl_display_get_error(private_client->display); + if (!err) + return false; + + if (err == EINVAL || err == ENOMEM || err == EFAULT || err == EPROTO) { + ec = wl_display_get_protocol_error(private_client->display, &intf, &id); + TDM_ERR("[%s,%d] errno(%d) Got protocol error '%u' on interface '%s' (object '%u')", + func, line, err, ec, (intf) ? intf->name : "destroyed", id); + } else { + TDM_ERR("[%s,%d] errno(%d)", func, line, err); + } + + return true; +} + +#define CHECK_WL_PROTOCOL_ERROR(pc) _tdm_client_check_wl_error(pc, __FUNCTION__, __LINE__) + static void _tdm_client_vblank_cb_stamp(void *data, struct wl_tdm_vblank *wl_tdm_vblank, uint32_t stamp) { @@ -435,6 +459,9 @@ tdm_client_create(tdm_error *error) &tdm_client_registry_listener, private_client); wl_display_roundtrip(private_client->display); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) + goto create_failed; + /* check global objects */ TDM_GOTO_IF_FAIL(private_client->tdm != NULL, create_failed); @@ -516,6 +543,11 @@ tdm_client_handle_events(tdm_client *client) pthread_mutex_lock(&private_client->lock); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + if (private_client->enable_ttrace) TDM_TRACE_ASYNC_BEGIN((int)private_client->stamp, "TDM_Client_Events:%u", (unsigned int)private_client->stamp); @@ -524,6 +556,11 @@ tdm_client_handle_events(tdm_client *client) if (private_client->enable_ttrace) TDM_TRACE_ASYNC_END((int)private_client->stamp, "TDM_Client_Events:%u", (unsigned int)private_client->stamp); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + pthread_mutex_unlock(&private_client->lock); return TDM_ERROR_NONE; @@ -575,6 +612,9 @@ tdm_client_wait_vblank(tdm_client *client, char *name, TDM_RETURN_VAL_IF_FAIL(interval > 0, TDM_ERROR_INVALID_PARAMETER); TDM_RETURN_VAL_IF_FAIL(func != NULL, TDM_ERROR_INVALID_PARAMETER); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) + return TDM_ERROR_PROTOCOL_ERROR; + if (!private_client->temp_vblank) { output = tdm_client_get_output(client, name, &ret); TDM_RETURN_VAL_IF_FAIL(output != NULL, ret); @@ -617,6 +657,13 @@ tdm_client_get_output(tdm_client *client, char *name, tdm_error *error) pthread_mutex_lock(&private_client->lock); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + if (error) + *error = TDM_ERROR_PROTOCOL_ERROR; + pthread_mutex_unlock(&private_client->lock); + return NULL; + } + if (!name) name = "primary"; @@ -671,7 +718,6 @@ tdm_client_get_output(tdm_client *client, char *name, tdm_error *error) LIST_INITHEAD(&private_output->vblank_list); LIST_INITHEAD(&private_output->change_handler_list); - LIST_ADDTAIL(&private_output->link, &private_client->output_list); wl_tdm_output_add_listener(private_output->output, &tdm_client_output_listener, private_output); @@ -679,6 +725,17 @@ tdm_client_get_output(tdm_client *client, char *name, tdm_error *error) wl_proxy_set_queue((struct wl_proxy *)private_output->output, NULL); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + wl_tdm_output_destroy(private_output->output); + free(private_output); + if (error) + *error = TDM_ERROR_PROTOCOL_ERROR; + pthread_mutex_unlock(&private_client->lock); + return NULL; + } + + LIST_ADDTAIL(&private_output->link, &private_client->output_list); + pthread_mutex_unlock(&private_client->lock); return (tdm_client_output*)private_output; @@ -704,6 +761,12 @@ tdm_client_output_add_change_handler(tdm_client_output *output, pthread_mutex_lock(&private_client->lock); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + free(h); + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + if (LIST_IS_EMPTY(&private_output->change_handler_list)) { wl_tdm_output_watch_output_changes(private_output->output, 1); @@ -751,8 +814,10 @@ tdm_client_output_remove_change_handler(tdm_client_output *output, LIST_DEL(&h->link); free(h); - if (LIST_IS_EMPTY(&private_output->change_handler_list)) - wl_tdm_output_watch_output_changes(private_output->output, 0); + if (LIST_IS_EMPTY(&private_output->change_handler_list)) { + if (!CHECK_WL_PROTOCOL_ERROR(private_client)) + wl_tdm_output_watch_output_changes(private_output->output, 0); + } pthread_mutex_unlock(&private_client->lock); @@ -782,11 +847,21 @@ tdm_client_output_get_refresh_rate(tdm_client_output *output, unsigned int *refr return TDM_ERROR_NONE; } + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + wl_proxy_set_queue((struct wl_proxy *)private_output->output, private_client->queue); wl_tdm_output_get_mode(private_output->output); wl_display_roundtrip_queue(private_client->display, private_client->queue); wl_proxy_set_queue((struct wl_proxy *)private_output->output, NULL); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + *refresh = private_output->refresh; pthread_mutex_unlock(&private_client->lock); @@ -814,11 +889,21 @@ tdm_client_output_get_conn_status(tdm_client_output *output, tdm_output_conn_sta return TDM_ERROR_NONE; } + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + wl_proxy_set_queue((struct wl_proxy *)private_output->output, private_client->queue); wl_tdm_output_get_connection(private_output->output); wl_display_roundtrip_queue(private_client->display, private_client->queue); wl_proxy_set_queue((struct wl_proxy *)private_output->output, NULL); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + *status = private_output->connection; pthread_mutex_unlock(&private_client->lock); @@ -845,11 +930,21 @@ tdm_client_output_get_dpms(tdm_client_output *output, tdm_output_dpms *dpms) pthread_mutex_lock(&private_client->lock); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + wl_proxy_set_queue((struct wl_proxy *)private_output->output, private_client->queue); wl_tdm_output_get_dpms(private_output->output); wl_display_roundtrip_queue(private_client->display, private_client->queue); wl_proxy_set_queue((struct wl_proxy *)private_output->output, NULL); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + *dpms = private_output->dpms; pthread_mutex_unlock(&private_client->lock); @@ -880,6 +975,13 @@ tdm_client_output_create_vblank(tdm_client_output *output, tdm_error *error) pthread_mutex_lock(&private_client->lock); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + if (error) + *error = TDM_ERROR_PROTOCOL_ERROR; + pthread_mutex_unlock(&private_client->lock); + return NULL; + } + wrapper = wl_proxy_create_wrapper(private_output->output); if (!wrapper) { TDM_ERR("create output_wrapper failed"); @@ -928,7 +1030,6 @@ tdm_client_output_create_vblank(tdm_client_output *output, tdm_error *error) private_vblank->enable_fake = 0; LIST_INITHEAD(&private_vblank->wait_list); - LIST_ADDTAIL(&private_vblank->link, &private_output->vblank_list); wl_tdm_vblank_add_listener(private_vblank->vblank, &tdm_client_vblank_listener, private_vblank); @@ -936,6 +1037,17 @@ tdm_client_output_create_vblank(tdm_client_output *output, tdm_error *error) wl_proxy_set_queue((struct wl_proxy *)private_vblank->vblank, NULL); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + wl_tdm_vblank_destroy(private_vblank->vblank); + free(private_vblank); + if (error) + *error = TDM_ERROR_PROTOCOL_ERROR; + pthread_mutex_unlock(&private_client->lock); + return NULL; + } + + LIST_ADDTAIL(&private_vblank->link, &private_output->vblank_list); + pthread_mutex_unlock(&private_client->lock); return (tdm_client_vblank*)private_vblank; @@ -982,6 +1094,11 @@ tdm_client_vblank_set_name(tdm_client_vblank *vblank, const char *name) pthread_mutex_lock(&private_client->lock); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + if (!name) name = TDM_VBLANK_DEFAULT_NAME; @@ -1027,6 +1144,11 @@ tdm_client_vblank_set_fps(tdm_client_vblank *vblank, unsigned int fps) pthread_mutex_lock(&private_client->lock); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + if (private_vblank->fps == fps) { pthread_mutex_unlock(&private_client->lock); return TDM_ERROR_NONE; @@ -1056,6 +1178,11 @@ tdm_client_vblank_set_offset(tdm_client_vblank *vblank, int offset_ms) pthread_mutex_lock(&private_client->lock); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + if (private_vblank->offset == offset_ms) { pthread_mutex_unlock(&private_client->lock); return TDM_ERROR_NONE; @@ -1083,6 +1210,11 @@ tdm_client_vblank_set_enable_fake(tdm_client_vblank *vblank, unsigned int enable pthread_mutex_lock(&private_client->lock); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + if (private_vblank->enable_fake == enable_fake) { pthread_mutex_unlock(&private_client->lock); return TDM_ERROR_NONE; @@ -1122,6 +1254,11 @@ tdm_client_vblank_wait(tdm_client_vblank *vblank, unsigned int interval, tdm_cli pthread_mutex_lock(&private_client->lock); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + if (!private_vblank->started) private_vblank->started = 1; @@ -1196,6 +1333,11 @@ tdm_client_vblank_wait(tdm_client_vblank *vblank, unsigned int interval, tdm_cli LIST_DEL(&w->link); free(w); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + pthread_mutex_unlock(&private_client->lock); return TDM_ERROR_NONE; @@ -1224,6 +1366,11 @@ tdm_client_vblank_wait_seq(tdm_client_vblank *vblank, unsigned int sequence, pthread_mutex_lock(&private_client->lock); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + if (!private_vblank->started) private_vblank->started = 1; @@ -1298,6 +1445,11 @@ tdm_client_vblank_wait_seq(tdm_client_vblank *vblank, unsigned int sequence, LIST_DEL(&w->link); free(w); + if (CHECK_WL_PROTOCOL_ERROR(private_client)) { + pthread_mutex_unlock(&private_client->lock); + return TDM_ERROR_PROTOCOL_ERROR; + } + pthread_mutex_unlock(&private_client->lock); return TDM_ERROR_NONE; diff --git a/include/tdm_common.h b/include/tdm_common.h index dd01247..4c264ed 100644 --- a/include/tdm_common.h +++ b/include/tdm_common.h @@ -68,6 +68,7 @@ typedef enum { TDM_ERROR_NO_CAPABILITY = -9, /**< no capability */ TDM_ERROR_DPMS_OFF = -10, /**< dpms off */ TDM_ERROR_OUTPUT_DISCONNECTED = -11, /**< output disconnected */ + TDM_ERROR_PROTOCOL_ERROR = -12, /**< protocol error */ } tdm_error; /** diff --git a/src/tdm_macro.h b/src/tdm_macro.h index 0cafffe..e75220c 100644 --- a/src/tdm_macro.h +++ b/src/tdm_macro.h @@ -169,6 +169,7 @@ static struct tdm_type_name tdm_error_names[] = { { TDM_ERROR_NO_CAPABILITY, "no capability" }, { TDM_ERROR_DPMS_OFF, "dpms off" }, { TDM_ERROR_OUTPUT_DISCONNECTED, "output disconnected" }, + { TDM_ERROR_PROTOCOL_ERROR, "protocol error" }, }; TDM_TYPE_NAME_FN(error) -- 2.7.4 From 2dc316b1fc5cfd77b254416313a858c8c3909df4 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Tue, 20 Feb 2018 16:05:00 +0900 Subject: [PATCH 11/16] package version up to 1.14.0 Change-Id: Iaf72619db33492b9609c3f509f1f0505c87d5433 --- configure.ac | 2 +- doc/tdm_doc.h | 2 +- packaging/libtdm.spec | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 26ba06d..9a706cf 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@ AC_PREREQ([2.60]) m4_define([tdm_major_version], [1]) -m4_define([tdm_minor_version], [11]) +m4_define([tdm_minor_version], [14]) m4_define([tdm_micro_version], [0]) m4_define([tdm_version], [tdm_major_version.tdm_minor_version.tdm_micro_version]) diff --git a/doc/tdm_doc.h b/doc/tdm_doc.h index 02d418c..0c14af6 100644 --- a/doc/tdm_doc.h +++ b/doc/tdm_doc.h @@ -39,7 +39,7 @@ /** * @mainpage TDM * @author Boram Park, boram1288.park@samsung.com - * @version 1.11.0 + * @version 1.14.0 * @par Introduction * TDM stands for Tizen Display Manager. It's the display HAL layer for tizen * display server. It offers the frontend APIs(@ref tdm.h) for a frontend user diff --git a/packaging/libtdm.spec b/packaging/libtdm.spec index 4cb9d26..876648f 100644 --- a/packaging/libtdm.spec +++ b/packaging/libtdm.spec @@ -2,7 +2,7 @@ %define UTEST_GCOV 0 Name: libtdm -Version: 1.13.1 +Version: 1.14.0 Release: 0 Summary: User Library of Tizen Display Manager Group: Development/Libraries -- 2.7.4 From 3bf98d8cee5f7abf33073b1590b39c9aa6773a7c Mon Sep 17 00:00:00 2001 From: Boram Park Date: Thu, 18 Jan 2018 09:50:54 +0900 Subject: [PATCH 12/16] output: remove unused params Change-Id: Id92aa4041890a16d87e564800dbc017c50701554 --- src/tdm_output.c | 17 ++++++++--------- src/tdm_private.h | 3 +-- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/tdm_output.c b/src/tdm_output.c index 54ad8dc..918940d 100644 --- a/src/tdm_output.c +++ b/src/tdm_output.c @@ -234,7 +234,7 @@ tdm_output_cb_status(tdm_output *output_backend, tdm_output_conn_status status, tdm_output_call_change_handler_internal(private_output, &private_output->change_handler_list_sub, TDM_OUTPUT_CHANGE_CONNECTION, - value, 0); + value); ret = tdm_thread_send_cb(private_display->private_loop, &output_status.base); TDM_WARNING_IF_FAIL(ret == TDM_ERROR_NONE); @@ -252,7 +252,7 @@ tdm_output_cb_status(tdm_output *output_backend, tdm_output_conn_status status, tdm_output_call_change_handler_internal(private_output, &private_output->change_handler_list_main, TDM_OUTPUT_CHANGE_CONNECTION, - value, 0); + value); } /* LCOV_EXCL_STOP */ @@ -1179,7 +1179,7 @@ _tdm_output_dpms_changed_timeout(void *user_data) tdm_output_call_change_handler_internal(private_output, &private_output->change_handler_list_sub, TDM_OUTPUT_CHANGE_DPMS, - value, 0); + value); return TDM_ERROR_NONE; } @@ -1212,7 +1212,7 @@ tdm_output_call_dpms_change_handler(tdm_output *output) tdm_output_call_change_handler_internal(private_output, &private_output->change_handler_list_main, TDM_OUTPUT_CHANGE_DPMS, - value, 0); + value); if (!LIST_IS_EMPTY(&private_output->change_handler_list_sub)) { tdm_error ret = tdm_event_loop_source_timer_update(private_output->dpms_changed_timer, 1); @@ -1252,7 +1252,7 @@ tdm_output_cb_dpms(tdm_output *output_backend, tdm_output_dpms dpms, void *user_ tdm_output_call_change_handler_internal(private_output, &private_output->change_handler_list_sub, TDM_OUTPUT_CHANGE_DPMS, - value, 0); + value); ret = tdm_thread_send_cb(private_display->private_loop, &output_dpms.base); TDM_WARNING_IF_FAIL(ret == TDM_ERROR_NONE); @@ -1269,7 +1269,7 @@ tdm_output_cb_dpms(tdm_output *output_backend, tdm_output_dpms dpms, void *user_ tdm_output_call_change_handler_internal(private_output, &private_output->change_handler_list_main, TDM_OUTPUT_CHANGE_DPMS, - value, 0); + value); } /* LCOV_EXCL_STOP */ @@ -2021,8 +2021,7 @@ INTERN void tdm_output_call_change_handler_internal(tdm_private_output *private_output, struct list_head *change_handler_list, tdm_output_change_type type, - tdm_value value, - int no_check_thread_id) + tdm_value value) { tdm_private_display *private_display; tdm_private_change_handler *change_handler = NULL; @@ -2044,7 +2043,7 @@ tdm_output_call_change_handler_internal(tdm_private_output *private_output, return; LIST_FOR_EACH_ENTRY(change_handler, change_handler_list, link) { - if (!no_check_thread_id && change_handler->owner_tid != syscall(SYS_gettid)) + if (change_handler->owner_tid != syscall(SYS_gettid)) TDM_NEVER_GET_HERE(); _pthread_mutex_unlock(&private_display->lock); diff --git a/src/tdm_private.h b/src/tdm_private.h index 0424dd2..5a07b89 100644 --- a/src/tdm_private.h +++ b/src/tdm_private.h @@ -176,8 +176,7 @@ void tdm_output_call_change_handler_internal(tdm_private_output *private_output, struct list_head *change_handler_list, tdm_output_change_type type, - tdm_value value, - int no_check_thread_id); + tdm_value value); tdm_private_pp * tdm_pp_create_internal(tdm_private_display *private_display, tdm_error *error); -- 2.7.4 From ad05aa68c250148cf799f0769a37724549582080 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Thu, 18 Jan 2018 10:10:55 +0900 Subject: [PATCH 13/16] types: move to the frontned's types header Change-Id: I322acc5654651122661ec5bc0f68541df7818e38 --- include/tdm.h | 18 ------------------ include/tdm_types.h | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/include/tdm.h b/include/tdm.h index 70c99af..7ee3edc 100644 --- a/include/tdm.h +++ b/include/tdm.h @@ -58,24 +58,6 @@ extern "C" { */ /** - * @brief The display capability enumeration - */ -typedef enum { - TDM_DISPLAY_CAPABILITY_PP = (1 << 0), /**< if hardware supports pp operation */ - TDM_DISPLAY_CAPABILITY_CAPTURE = (1 << 1), /**< if hardware supports capture operation */ -} tdm_display_capability; - -/** - * @brief The output change handler - * @details This handler will be called when the status of a output object is - * changed in runtime. - */ -typedef void (*tdm_output_change_handler)(tdm_output *output, - tdm_output_change_type type, - tdm_value value, - void *user_data); - -/** * @brief Initialize a display object * @param[out] error #TDM_ERROR_NONE if success. Otherwise, error value. * @return A display object diff --git a/include/tdm_types.h b/include/tdm_types.h index d2013b7..055005f 100644 --- a/include/tdm_types.h +++ b/include/tdm_types.h @@ -67,6 +67,14 @@ typedef enum { } tdm_event_loop_mask; /** + * @brief The display capability enumeration + */ +typedef enum { + TDM_DISPLAY_CAPABILITY_PP = (1 << 0), /**< if hardware supports pp operation */ + TDM_DISPLAY_CAPABILITY_CAPTURE = (1 << 1), /**< if hardware supports capture operation */ +} tdm_display_capability; + +/** * @brief The output mode structure */ typedef struct _tdm_output_mode { @@ -244,6 +252,16 @@ typedef void tdm_pp; typedef void tdm_vblank; /** + * @brief The output change handler + * @details This handler will be called when the status of a output object is + * changed in runtime. + */ +typedef void (*tdm_output_change_handler)(tdm_output *output, + tdm_output_change_type type, + tdm_value value, + void *user_data); + +/** * @brief The vblank handler * @see output_set_vblank_handler() function of #tdm_func_display */ -- 2.7.4 From d80a43a53be5839b954d446e099e19ee3f0941d1 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Thu, 18 Jan 2018 10:23:52 +0900 Subject: [PATCH 14/16] types: give a detail name to structure Change-Id: Id3f0471e1d040f38810c85c1b2dcab6b6c83b208 --- src/tdm.c | 2 +- src/tdm_output.c | 8 ++++---- src/tdm_private_types.h | 22 +++++++++++----------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/tdm.c b/src/tdm.c index 33b27a7..312bac9 100644 --- a/src/tdm.c +++ b/src/tdm.c @@ -157,7 +157,7 @@ _tdm_display_destroy_private_output(tdm_private_output *private_output) tdm_private_vblank_handler *v = NULL, *vv = NULL; tdm_private_output_commit_handler *om = NULL, *omm = NULL; tdm_private_layer_commit_handler *lm = NULL, *lmm = NULL; - tdm_private_change_handler *h = NULL, *hh = NULL; + tdm_private_output_change_handler *h = NULL, *hh = NULL; LIST_DEL(&private_output->link); diff --git a/src/tdm_output.c b/src/tdm_output.c index 918940d..1edf7fc 100644 --- a/src/tdm_output.c +++ b/src/tdm_output.c @@ -261,14 +261,14 @@ tdm_output_add_change_handler(tdm_output *output, tdm_output_change_handler func, void *user_data) { - tdm_private_change_handler *change_handler; + tdm_private_output_change_handler *change_handler; OUTPUT_FUNC_ENTRY(); TDM_RETURN_VAL_IF_FAIL(func != NULL, TDM_ERROR_INVALID_PARAMETER); _pthread_mutex_lock(&private_display->lock); - change_handler = calloc(1, sizeof(tdm_private_change_handler)); + change_handler = calloc(1, sizeof(tdm_private_output_change_handler)); if (!change_handler) { /* LCOV_EXCL_START */ TDM_ERR("failed: alloc memory"); @@ -299,7 +299,7 @@ tdm_output_remove_change_handler(tdm_output *output, { tdm_private_display *private_display; tdm_private_output *private_output; - tdm_private_change_handler *h = NULL, *hh = NULL; + tdm_private_output_change_handler *h = NULL, *hh = NULL; TDM_RETURN_IF_FAIL(tdm_output_is_valid(output)); TDM_RETURN_IF_FAIL(func != NULL); @@ -2024,7 +2024,7 @@ tdm_output_call_change_handler_internal(tdm_private_output *private_output, tdm_value value) { tdm_private_display *private_display; - tdm_private_change_handler *change_handler = NULL; + tdm_private_output_change_handler *change_handler = NULL; TDM_RETURN_IF_FAIL(TDM_MUTEX_IS_LOCKED()); TDM_RETURN_IF_FAIL(private_output); diff --git a/src/tdm_private_types.h b/src/tdm_private_types.h index 26b4b12..cc234c0 100644 --- a/src/tdm_private_types.h +++ b/src/tdm_private_types.h @@ -105,12 +105,12 @@ typedef struct _tdm_private_loop tdm_private_loop; typedef struct _tdm_private_server tdm_private_server; typedef struct _tdm_private_thread tdm_private_thread; typedef struct _tdm_private_vblank_handler tdm_private_vblank_handler; +typedef struct _tdm_private_output_change_handler tdm_private_output_change_handler; typedef struct _tdm_private_output_commit_handler tdm_private_output_commit_handler; typedef struct _tdm_private_layer_commit_handler tdm_private_layer_commit_handler; typedef struct _tdm_private_hwc_window_commit_handler tdm_private_hwc_window_commit_handler; typedef struct _tdm_private_output_hwc_target_buffer_window_commit_handler tdm_private_output_hwc_target_buffer_commit_handler; -typedef struct _tdm_private_change_handler tdm_private_change_handler; typedef struct _tdm_private_layer_buffer tdm_private_layer_buffer; struct _tdm_private_display { @@ -355,24 +355,24 @@ struct _tdm_private_vblank_handler { pid_t owner_tid; }; -struct _tdm_private_output_commit_handler { +struct _tdm_private_output_change_handler { struct list_head link; tdm_private_output *private_output; - tdm_output_commit_handler func; + tdm_output_change_handler func; void *user_data; pid_t owner_tid; }; -struct _tdm_private_layer_commit_handler { +struct _tdm_private_output_commit_handler { struct list_head link; - tdm_private_layer *private_layer; - tdm_layer_commit_handler func; + tdm_private_output *private_output; + tdm_output_commit_handler func; void *user_data; - tdm_private_layer_buffer *committed_buffer; /* for layer_commit */ + pid_t owner_tid; }; struct _tdm_private_hwc_window_commit_handler { @@ -387,14 +387,14 @@ struct _tdm_private_output_hwc_target_buffer_window_commit_handler { void *user_data; }; -struct _tdm_private_change_handler { +struct _tdm_private_layer_commit_handler { struct list_head link; - tdm_private_output *private_output; - tdm_output_change_handler func; + tdm_private_layer *private_layer; + tdm_layer_commit_handler func; void *user_data; - pid_t owner_tid; + tdm_private_layer_buffer *committed_buffer; /* for layer_commit */ }; struct _tdm_private_layer_buffer { -- 2.7.4 From 9dc1c7cc7ea2b379fa3f5e26bd8c61bb71998c88 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Thu, 18 Jan 2018 14:39:19 +0900 Subject: [PATCH 15/16] vblank: add description Change-Id: I516ed249e61a26640968cfcc53d32ed99daa89c8 --- src/tdm_vblank.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/tdm_vblank.c b/src/tdm_vblank.c index 73f7214..ad4b9c0 100644 --- a/src/tdm_vblank.c +++ b/src/tdm_vblank.c @@ -584,8 +584,11 @@ tdm_vblank_cb_vblank_create(tdm_vblank *vblank, double vblank_stamp) } LIST_FOR_EACH_ENTRY_SAFE(ch_info, hh, &create_handler_list, link) { + /* use in_create_handler instead of mutext unlock/lock */ private_vblank->in_create_handler = 1; + //_pthread_mutex_unlock(&private_display->lock); ch_info->func(private_vblank, ch_info->user_data); + //_pthread_mutex_lock(&private_display->lock); private_vblank->in_create_handler = 0; } -- 2.7.4 From 5cf857010133d1048d03ad93623cdc3d79d20c61 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Tue, 23 Jan 2018 08:19:58 +0900 Subject: [PATCH 16/16] tests: correct capture information Change-Id: Ib03a067db3c7e885495005ba27c7730cee77a1a6 --- tools/tdm_test_server.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/tdm_test_server.c b/tools/tdm_test_server.c index 7dff9eb..52e0f61 100644 --- a/tools/tdm_test_server.c +++ b/tools/tdm_test_server.c @@ -1360,6 +1360,7 @@ capture_setup(tdm_test_server_capture *c, tbm_surface_h b) c->info.dst_config.size.v = info.height; } c->info.dst_config.format = info.format; + c->info.type = TDM_CAPTURE_TYPE_ONESHOT; ret = tdm_capture_set_info(c->capture, &c->info); TDM_EXIT_IF_FAIL(ret == TDM_ERROR_NONE); -- 2.7.4