Languages

Menu
Sites
Language
Dynamic analyzer 사용시 발생되는 문제

tizen 2.4를 공부하고 있는 학생입니다.

tizen 2.4에 dynamic analyzer로 테스트 도중 발생된 문제 확인을 위하여 포럼에 글을 적습니다.

간단하게 쓰레드를 동작시켜 보고, dynamic analyzer에서 thread 동작 여부를 확인 하였지만, 확인하지 못하였습니다.

----------------------------------------------------------------------------------
*** 사용한 sample 코드: native app project > online sample > Contacts

thread 추가 부분

Contacts의 버튼 부분 중 Managing contacts settings 버튼에 thread를 추가하여 동작
Ecore_Thread와 pthread 모두 같은 아래의 이슈 발생

하기의 코드는 Ecore_thread를 추가한 부분

void _contacts_settings(appdata_s *ad, Evas_Object *obj, void *event_info)
{

 Ecore_Thread *thread;
 thread = ecore_thread_feedback_run(thread_run_cb, NULL, NULL, NULL, NULL, EINA_FALSE);
}
------------------------------------------------------------------------------------------------
static void thread_run_cb(void *data, Ecore_Thread *thread)
{
 contacts_name_display_order_e display_order;
     int error_code = contacts_setting_get_name_display_order(&display_order);
     if (error_code != CONTACTS_ERROR_NONE) {
         dlog_print(DLOG_ERROR, LOG_TAG, "contacts_setting_get_name_display_order failed: %d",
                    error_code);
         PRINT_MSG("contacts_setting_get_name_display_order failed: %d", error_code);
     }

     // Now you have the display order
     PRINT_MSG("Display order: %s",
               display_order ==
               CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST ? "CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST" :
               "CONTACTS_NAME_DISPLAY_ORDER_LASTFIRST");

     contacts_name_sorting_order_e sorting_order;
     error_code = contacts_setting_get_name_sorting_order(&sorting_order);
     if (error_code != CONTACTS_ERROR_NONE) {
         dlog_print(DLOG_ERROR, LOG_TAG, "contacts_setting_get_name_sorting_order failed: %d",
                    error_code);
         PRINT_MSG("contacts_setting_get_name_sorting_order failed: %d", error_code);
     }

     // Now you have the sorting order
     PRINT_MSG("Sorting order: %s",
               sorting_order ==
               CONTACTS_NAME_SORTING_ORDER_FIRSTLAST ? "CONTACTS_NAME_SORTING_ORDER_FIRSTLAST" :
               "CONTACTS_NAME_SORTING_ORDER_LASTFIRST");

     PRINT_MSG("Changing order.");
     error_code = contacts_setting_set_name_display_order(CONTACTS_NAME_DISPLAY_ORDER_FIRSTLAST);
     if (error_code != CONTACTS_ERROR_NONE) {
         dlog_print(DLOG_ERROR, LOG_TAG, "contacts_setting_set_name_display_order failed: %d",
                    error_code);
         PRINT_MSG("contacts_setting_set_name_display_order failed: %d", error_code);
     }

     error_code = contacts_setting_set_name_sorting_order(CONTACTS_NAME_SORTING_ORDER_FIRSTLAST);
     if (error_code != CONTACTS_ERROR_NONE) {
         dlog_print(DLOG_ERROR, LOG_TAG, "contacts_setting_set_name_sorting_order failed: %d",
                    error_code);
         PRINT_MSG("contacts_setting_set_name_sorting_order failed: %d", error_code);
     }

}
--------------------------------------------------------------------------------------------------------

위와 같이 thread를 동작 시켰을 경우, dynamic analyzer에서 발생된 문제

thread activity를 동작 시켰을 경우: app 실행후  Managing contacts settings 버튼을 클릭하면, thread 분석이 되지않고, 동작시킨 애플리케이션은 동작 중 작동 멈춤
이후 같은 동작을 반복하여도 같은 이슈가 발생

확인 되는 부분: 기존의 CPU bottleneck만 실행한 경우 와같이 summary가 생성되어 확인이 됩니다.

문제가 되는 부분: Thread Activity를 실행 할 경우, 위 그림에서 보여지는 쓰레드의 동작이 보이지 않고, APP 실행 후, 해당 버튼 클릭시 APP 중지

아래의 URL에서 보여주는 thread 관련 부분 문서에서 처럼 동작하는 것이 확인 되지 않아서 글올립니다.
https://developer.tizen.org/dev-guide/native/2.3.0///org.tizen.mobile.native.appprogramming/html/app_dev_process/da_multithread_sync.htm#life

혹시, 확인이 가능하신 부분있다면 확인 부탁드립니다.
감사합니다.

Responses

1 Replies
GEUNSOO KIM

it seems like your usage of ecore_thread_feedback_run() is the cause of the issue.

There are 2 ecore thread running APIs, one is ecore_thread_feedback_run() and the other one is ecore_thread_run().

As their function name tells you, ecore_thread_run() doesn't have interaction with main thread while the thread is running but ecore_thread_feedback_run() has and is expected.

But in your ecore_thread_feedback_run() call does not have feedback_cb() which is usually expected on the function call.

so you'd better try to use ecore_thread_run() instead of using ecore_thread_feedback_run().