From 9c4532473639a9a2f8002975bd7c1468ab86fe25 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Mon, 12 Feb 2018 18:10:02 +0900 Subject: [PATCH 01/16] helper: correct symbolic check function Change-Id: Id52e6ed434ae6a2aba926362a2ce02bf58b5788d --- src/tdm_helper.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/tdm_helper.c b/src/tdm_helper.c index cd6426f..a1b7427 100644 --- a/src/tdm_helper.c +++ b/src/tdm_helper.c @@ -61,26 +61,20 @@ tdm_helper_get_time(void) } static int -_tdm_helper_check_file_is_valid(const char* path, int del_link) +_tdm_helper_check_file_is_symbolic_link(const char* path) { - char *real_path; + struct stat sb; if (!path) return 0; - real_path = realpath(path, NULL); - if (real_path && strncmp(path, real_path, strlen(path))) { - if (del_link) - unlink(path); - free(real_path); - + if (stat(path, &sb) != 0) return 0; - } - if (real_path) - free(real_path); + if (S_ISLNK(sb.st_mode)) + return 1; - return 1; + return 0; } static void @@ -90,8 +84,10 @@ _tdm_helper_dump_raw(const char *file, void *data1, int size1, void *data2, unsigned int *blocks; FILE *fp; - if (!_tdm_helper_check_file_is_valid(file, 1)) - TDM_WRN("'%s' may be symbolic link\n", file); + if (_tdm_helper_check_file_is_symbolic_link(file)) { + TDM_ERR("'%s' may be symbolic link\n", file); + return; + } fp = fopen(file, "w+"); TDM_RETURN_IF_FAIL(fp != NULL); @@ -118,8 +114,10 @@ _tdm_helper_dump_png(const char *file, const void *data, int width, { FILE *fp; - if (!_tdm_helper_check_file_is_valid(file, 1)) - TDM_WRN("'%s' may be symbolic link\n", file); + if (_tdm_helper_check_file_is_symbolic_link(file)) { + TDM_ERR("'%s' may be symbolic link\n", file); + return; + } fp = fopen(file, "wb"); TDM_RETURN_IF_FAIL(fp != NULL); -- 2.7.4 From 586f8c6ea978452356d0a0793b375c4d450d2ece Mon Sep 17 00:00:00 2001 From: Boram Park Date: Tue, 20 Feb 2018 13:56:16 +0900 Subject: [PATCH 02/16] add tdm_layer_get_output Change-Id: Icbc2003297276a45b6d2d7f3cda54393aa12bc0d --- include/tdm.h | 8 ++++++++ src/tdm_layer.c | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/tdm.h b/include/tdm.h index 618f896..70c99af 100644 --- a/include/tdm.h +++ b/include/tdm.h @@ -765,6 +765,14 @@ tdm_output_hwc_get_video_supported_formats(tdm_layer *layer, const tbm_format ** int *count); /** + * @brief Get a output object of a layer object + * @param[in] layer A layer object + * @return A TDM output object if success. Otherwise, NULL. + */ +tdm_output* +tdm_layer_get_output(tdm_layer *layer, tdm_error *error); + +/** * @brief Get the capabilities of a layer object. * @param[in] layer A layer object * @param[out] capabilities The capabilities of a layer object diff --git a/src/tdm_layer.c b/src/tdm_layer.c index 2f97c5c..0ce567e 100644 --- a/src/tdm_layer.c +++ b/src/tdm_layer.c @@ -80,6 +80,25 @@ static void _tdm_layer_cb_output_commit(tdm_output *output, unsigned int sequenc unsigned int tv_sec, unsigned int tv_usec, void *user_data); static void _tdm_layer_reset_pending_data(tdm_private_layer *private_layer); +EXTERN tdm_output* +tdm_layer_get_output(tdm_layer *layer, tdm_error *error) +{ + tdm_output *output; + + LAYER_FUNC_ENTRY_ERROR(); + + _pthread_mutex_lock(&private_display->lock); + + if (error) + *error = TDM_ERROR_NONE; + + output = private_layer->private_output; + + _pthread_mutex_unlock(&private_display->lock); + + return output; +} + EXTERN tdm_error tdm_layer_get_capabilities(tdm_layer *layer, tdm_layer_capability *capabilities) { -- 2.7.4 From f08216fac3a6803d459b5cd267197cc4448deb58 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Tue, 20 Feb 2018 13:56:36 +0900 Subject: [PATCH 03/16] fix buffer leak when deiniting Change-Id: I7a742f011f0e75341f6a4d17140c2f0c184abc91 --- src/tdm.c | 2 ++ src/tdm_layer.c | 1 + 2 files changed, 3 insertions(+) diff --git a/src/tdm.c b/src/tdm.c index de6c179..33b27a7 100644 --- a/src/tdm.c +++ b/src/tdm.c @@ -137,6 +137,8 @@ _tdm_display_destroy_private_layer(tdm_private_layer *private_layer) LIST_DEL(&private_layer->link); + tdm_layer_unset_buffer_internal(private_layer); + LIST_FOR_EACH_ENTRY_SAFE(c, cc, &private_layer->capture_list, link) tdm_capture_destroy_internal(c); diff --git a/src/tdm_layer.c b/src/tdm_layer.c index 0ce567e..9add055 100644 --- a/src/tdm_layer.c +++ b/src/tdm_layer.c @@ -555,6 +555,7 @@ tdm_layer_unset_buffer(tdm_layer *layer) _pthread_mutex_lock(&private_display->lock); ret = tdm_layer_unset_buffer_internal(private_layer); + TDM_WARNING_IF_FAIL(ret == TDM_ERROR_NONE); _pthread_mutex_unlock(&private_display->lock); -- 2.7.4 From b73ff3145dafd2109ddac8f5ceda37286590994a Mon Sep 17 00:00:00 2001 From: Boram Park Date: Tue, 20 Feb 2018 13:57:40 +0900 Subject: [PATCH 04/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 05/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 06/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 07/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 08/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 09/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 10/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 11/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 12/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 14/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 15/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 16/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