X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Ftdm.c;h=3f6388c90e87b768d7c13a060d1199063ce010cb;hb=969d9f15369b577ba5b8cd29c1e818e6e7e0c2ca;hp=647230b1a9f5518b4eb67ad94dbb1ce1386ee23e;hpb=5fd366dd8c8e882db91851d9c5c45508e703c589;p=platform%2Fcore%2Fuifw%2Flibtdm.git diff --git a/src/tdm.c b/src/tdm.c index 647230b..3f6388c 100644 --- a/src/tdm.c +++ b/src/tdm.c @@ -676,15 +676,18 @@ _tdm_display_check_backend_functions(tdm_private_display *private_display) /* below functions should be implemented in backend side */ TDM_RETURN_VAL_IF_FAIL(func_display != NULL, TDM_ERROR_BAD_MODULE); - TDM_RETURN_VAL_IF_FAIL(func_display->display_get_capabilitiy, TDM_ERROR_BAD_MODULE); +// TDM_RETURN_VAL_IF_FAIL(func_display->display_get_capabilitiy, TDM_ERROR_BAD_MODULE); TDM_RETURN_VAL_IF_FAIL(func_display->display_get_outputs, TDM_ERROR_BAD_MODULE); TDM_RETURN_VAL_IF_FAIL(func_output->output_get_capability, TDM_ERROR_BAD_MODULE); TDM_RETURN_VAL_IF_FAIL(func_output->output_get_layers, TDM_ERROR_BAD_MODULE); TDM_RETURN_VAL_IF_FAIL(func_layer->layer_get_capability, TDM_ERROR_BAD_MODULE); - ret = func_display->display_get_capabilitiy(private_display->bdata, &private_display->caps_display); + if (func_display->display_get_capability) + ret = func_display->display_get_capability(private_display->bdata, &private_display->caps_display); + else + ret = func_display->display_get_capabilitiy(private_display->bdata, &private_display->caps_display); if (ret != TDM_ERROR_NONE) { - TDM_ERR("display_get_capabilitiy() failed"); + TDM_ERR("display_get_capability() failed"); return TDM_ERROR_BAD_MODULE; } @@ -753,7 +756,7 @@ _tdm_display_load_module_with_file(tdm_private_display *private_display, private_display->bdata = module_data->init((tdm_display *)private_display, &ret); TDM_TRACE_END(); if (ret != TDM_ERROR_NONE) { - TDM_ERR("'%s' init failed", file); + TDM_ERR("failed to init '%s' module", module_data->name); goto failed_load; } @@ -764,7 +767,7 @@ _tdm_display_load_module_with_file(tdm_private_display *private_display, goto failed_load; } - TDM_INFO("Success to load module(%s)", file); + TDM_INFO("Success to load '%s' module", module_data->name); return TDM_ERROR_NONE; failed_load: @@ -840,25 +843,25 @@ tdm_display_init(tdm_error *error) return g_private_display; } + private_display = calloc(1, sizeof(tdm_private_display)); + if (!private_display) { + ret = TDM_ERROR_OUT_OF_MEMORY; + TDM_ERR("'private_display != NULL' failed"); + goto failed_alloc; + } + debug = getenv("TDM_DEBUG_MODULE"); if (debug) tdm_display_enable_debug_module(debug); debug = getenv("TDM_DEBUG_DUMP"); if (debug) - tdm_display_enable_dump(debug); + tdm_display_enable_dump(private_display, debug, NULL, NULL); debug = getenv("TDM_DEBUG_PATH"); if (debug) tdm_display_enable_path(debug); - private_display = calloc(1, sizeof(tdm_private_display)); - if (!private_display) { - ret = TDM_ERROR_OUT_OF_MEMORY; - TDM_ERR("'private_display != NULL' failed"); - goto failed_alloc; - } - if (pthread_mutex_init(&private_display->lock, NULL)) { ret = TDM_ERROR_OPERATION_FAILED; TDM_ERR("mutex init failed: %m"); @@ -963,6 +966,11 @@ tdm_display_deinit(tdm_display *dpy) free(private_display); g_private_display = NULL; + if (tdm_debug_dump_dir) { + free(tdm_debug_dump_dir); + tdm_debug_dump_dir = NULL; + } + _pthread_mutex_unlock(&gLock); TDM_INFO("done"); @@ -1023,39 +1031,88 @@ tdm_display_enable_debug_module(const char*modules) } INTERN tdm_error -tdm_display_enable_dump(const char *dump_str) +tdm_display_enable_dump(tdm_private_display *private_display, const char *dump_str, char *reply, int *len) { - char temp[1024]; + char temp[TDM_PATH_LEN] = {0,}, temp2[TDM_PATH_LEN] = {0,}; + char *path, *path2; char *arg; char *end; + snprintf(temp2, TDM_PATH_LEN, "%s", dump_str); + path2 = strtostr(temp, TDM_PATH_LEN, temp2, "@"); + if (!path2 || path2[0] == '\0') + path2 = TDM_DUMP_DIR; + else + path2++; + + path = tdm_helper_dump_make_directory(path2, reply, len); + TDM_GOTO_IF_FAIL(path != NULL, done); + tdm_debug_dump = 0; snprintf(temp, sizeof(temp), "%s", dump_str); arg = strtok_r(temp, ",", &end); - while (arg) { - if (!strncmp(arg, "none", 4)) { - tdm_debug_dump = 0; - return TDM_ERROR_NONE; + TDM_GOTO_IF_FAIL(arg != NULL, done); + + if (!strncmp(arg, "none", 4)) { + tdm_debug_dump = 0; + if (tdm_debug_dump_dir) { + free(tdm_debug_dump_dir); + tdm_debug_dump_dir = NULL; + } + TDM_SNPRINTF(reply, len, "path: %s\n", path); + goto done; + } + + if (!strncmp(arg, "current", 7)) { + tdm_private_output *o = NULL; + if (!private_display) { + TDM_WRN("no private_display"); + goto done; } + + LIST_FOR_EACH_ENTRY(o, &private_display->output_list, link) { + tdm_private_layer *l = NULL; + LIST_FOR_EACH_ENTRY(l, &o->layer_list, link) { + char str[TDM_PATH_LEN]; + if (l->usable) + continue; + snprintf(str, TDM_PATH_LEN, "layer_%d_%d", o->index, l->index); + tdm_helper_dump_buffer_str(l->showing_buffer, path, str); + } + } + + TDM_SNPRINTF(reply, len, "path: %s\n", path); + goto done; + } + + TDM_SNPRINTF(reply, len, "dump: %s\n", arg); + + while (arg) { if (!strncmp(arg, "all", 3)) { tdm_debug_dump = 0xFFFFFFFF; - return TDM_ERROR_NONE; - } - if (!strncmp(arg, "layer", 5)) + goto done; + } else if (!strncmp(arg, "layer", 5)) { tdm_debug_dump |= TDM_DUMP_FLAG_LAYER; - else if (!strncmp(arg, "pp", 2)) + } else if (!strncmp(arg, "pp", 2)) { tdm_debug_dump |= TDM_DUMP_FLAG_PP; - else if (!strncmp(arg, "capture", 7)) + } else if (!strncmp(arg, "capture", 7)) { tdm_debug_dump |= TDM_DUMP_FLAG_CAPTURE; - else - return TDM_ERROR_BAD_REQUEST; + } else + goto done; arg = strtok_r(NULL, ",", &end); } + if (tdm_debug_dump_dir) + free(tdm_debug_dump_dir); + + tdm_debug_dump_dir = strndup(path, TDM_PATH_LEN); + TDM_INFO("dump... '%s'", dump_str); +done: + free(path); return TDM_ERROR_NONE; }