4 * Copyright (Thread::*c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
8 * Woojin Jung <woojin2.jung@samsung.com>
9 * Yeongtaik Byeon <yeongtaik.byeon@samsung.com>
10 * Jaewon Lim <jaewon81.lim@samsung.com>
11 * Juyoung Kim <j0.kim@samsung.com>
12 * Anastasia Lyupa <a.lyupa@samsung.com>
14 * This library is free software; you can redistribute it and/or modify it under
15 * the terms of the GNU Lesser General Public License as published by the
16 * Free Software Foundation; either version 2.1 of the License, or (at your option)
19 * This library is distributed in the hope that it will be useful, but WITHOUT ANY
20 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
21 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
22 * License for more details.
24 * You should have received a copy of the GNU Lesser General Public License
25 * along with this library; if not, write to the Free Software Foundation, Inc., 51
26 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30 * - Samsung RnD Institute Russia
36 #include "probeinfo.h"
41 static enum DaOptions _sopt = OPT_THREAD;
49 // virtual result Stop(void);
51 // virtual result Finalize(void);
52 const Thread* GetThread(void) const;
54 static void* ThreadProc(void* pParam);
59 //_ThreadImpl::GetThread(void) const
61 // typedef const Thread*
62 // (_ThreadImpl::*methodType)(void) const;
63 // static methodType GetThreadp = 0;
64 // probeInfo_t probeInfo;
67 // bool bfiltering = false;
72 // void* lib_handle = dlopen("libosp-appfw.so", RTLD_LAZY);
73 // if (lib_handle == NULL) {
74 // perror("dlopen failed : libosp-appfw.so");
77 // tmpPtr = dlsym(lib_handle, "_ZNK5Tizen4Base7Runtime11_ThreadImpl9GetThreadEv");
79 // if (tmpPtr == NULL || dlerror() != NULL) {
80 // perror("dlsym failed : Tizen::Base::Runtime::_ThreadImpl::GetThreadp");
84 // memcpy(&GetThreadp, &tmpPtr, sizeof(tmpPtr));
89 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
90 // setProbePoint(&probeInfo);
94 // const Thread* ret = (this->*GetThreadp)();
95 // result res = GetLastResult();
97 // if (postBlockBegin(blockresult)) {
100 // log.data[0] = '\0';
101 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
102 // probeInfo.eventIndex, "_ThreadImpl::GetThread", probeInfo.currentTime,
103 // probeInfo.pID, probeInfo.tID);
106 // log.length += sprintf(log.data + log.length, "`,`,0x%x",ret);
107 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
108 // log.length += sprintf(log.data + log.length,
109 // "`,0`,%ld`,%d`,0`,%u`,0x%x`,%d`,%d`,`,", res,blockresult,
110 // (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_OTHER);
112 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
113 // getBacktraceString(&log, 4096 - log.length - 17);
114 // log.length += sprintf(log.data + log.length, "`,callstack_end");
116 // printLog(&log, MSG_LOG);
123 _ThreadImpl::ThreadProc(void* params) {
125 (*methodType)(void*);
126 static methodType ThreadProcp = 0;
127 probeInfo_t probeInfo;
129 bool bfiltering = false;
135 if(lib_handle[LIBOSP_APPFW] == NULL) {
136 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
137 if (lib_handle[LIBOSP_APPFW] == NULL) {
138 perror("dlopen failed : libosp-appfw.so");
142 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime11_ThreadImpl10ThreadProcEPv");
144 if (tmpPtr == NULL || dlerror() != NULL) {
145 perror("dlsym failed : Tizen::Base::Runtime::_ThreadImpl::ThreadProc");
149 memcpy(&ThreadProcp, &tmpPtr, sizeof(tmpPtr));
154 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
155 setProbePoint(&probeInfo);
157 _ThreadImpl* pSelf =(_ThreadImpl*)params;
158 const Thread* pThread = NULL;
160 pThread = pSelf->GetThread();
164 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
165 API_ID_void___ThreadImpl__ThreadProc_void__params_,
166 "p", voidp_to_uint64(params));
167 PACK_COMMON_END('p', 0, 0, blockresult);
168 PACK_THREAD((unsigned int)pThread, THREAD_TIZENTHREAD_WORKER, THREAD_API_INTERNAL_START);
174 // all probe should be reachable inside thread start_routine (user implemented Thread::Run)
175 ret = (ThreadProcp)(params);
177 if (postBlockBegin(blockresult)) {
179 setProbePoint(&probeInfo);
181 _ThreadImpl* pSelf =(_ThreadImpl*)params;
182 const Thread* pThread = NULL;
184 pThread = pSelf->GetThread();
188 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
189 API_ID_void___ThreadImpl__ThreadProc_void__params_,
190 "p", voidp_to_uint64(params));
191 PACK_COMMON_END('p', ret, 0, blockresult);
192 PACK_THREAD((unsigned int)pThread, THREAD_TIZENTHREAD_WORKER, THREAD_API_INTERNAL_STOP);
199 //result _ThreadImpl::Stop(void) {
201 // (_ThreadImpl::*methodType)(void);
202 // static methodType Stopp = 0;
203 // probeInfo_t probeInfo;
206 // bool bfiltering = true;
210 // probeBlockStart();
211 // void* lib_handle = dlopen("libosp-appfw.so", RTLD_LAZY);
212 // if (lib_handle == NULL) {
213 // perror("dlopen failed : libosp-appfw.so");
216 // tmpPtr = dlsym(lib_handle, "_ZN5Tizen4Base7Runtime11_ThreadImpl4StopEv");
218 // if (tmpPtr == NULL || dlerror() != NULL) {
219 // perror("dlsym failed : Tizen::Base::Runtime::_ThreadImpl::Stopp");
223 // memcpy(&Stopp, &tmpPtr, sizeof(tmpPtr));
228 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
229 // setProbePoint(&probeInfo);
233 // result ret= (this->*Stopp)();
235 // if (postBlockBegin(blockresult)) {
238 // log.data[0] = '\0';
239 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
240 // probeInfo.eventIndex, "_ThreadImpl::Stop", probeInfo.currentTime,
241 // probeInfo.pID, probeInfo.tID);
243 // log.length += sprintf(log.data + log.length, "`,`,%ld", ret);
244 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
245 // log.length += sprintf(log.data + log.length,
246 // "`,0`,%ld`,%d`,0`,%u`,0x%x`,%d`,%d`,`,", ret, blockresult,
247 // (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_CLOSE);
249 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
250 // getBacktraceString(&log, 4096 - log.length - 17);
251 // log.length += sprintf(log.data + log.length, "`,callstack_end");
253 // printLog(&log, MSG_LOG);
259 //result _ThreadImpl::Finalize(void) {
261 // (_ThreadImpl::*methodType)(void);
262 // static methodType Finalizep = 0;
263 // probeInfo_t probeInfo;
266 // bool bfiltering = false;
270 // probeBlockStart();
271 // void* lib_handle = dlopen("libosp-appfw.so", RTLD_LAZY);
272 // if (lib_handle == NULL) {
273 // perror("dlopen failed : libosp-appfw.so");
276 // tmpPtr = dlsym(lib_handle, "_ZN5Tizen4Base7Runtime11_ThreadImpl8FinalizeEv");
278 // if (tmpPtr == NULL || dlerror() != NULL) {
279 // perror("dlsym failed : Tizen::Base::Runtime::_ThreadImpl::Finalizep");
283 // memcpy(&Finalizep, &tmpPtr, sizeof(tmpPtr));
287 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
288 // setProbePoint(&probeInfo);
292 // result ret= (this->*Finalizep)();
294 // if (postBlockBegin(blockresult)) {
297 // log.data[0] = '\0';
298 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
299 // probeInfo.eventIndex, "_ThreadImpl::Finalize", probeInfo.currentTime,
300 // probeInfo.pID, probeInfo.tID);
302 // log.length += sprintf(log.data + log.length, "`,`,%ld", ret);
303 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
304 // log.length += sprintf(log.data + log.length,
305 // "`,0`,%ld`,%d`,0`,%u`,0x%x`,%d`,%d`,`,", ret, blockresult,
306 // (unsigned int)CALLER_ADDRESS, (unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_CLOSE);
308 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
309 // getBacktraceString(&log, 4096 - log.length - 17);
310 // log.length += sprintf(log.data + log.length, "`,callstack_end");
312 // printLog(&log, MSG_LOG);
317 //Thread::Thread(void) {
318 // typedef void (Thread::*methodType)();
319 // static methodType Threadp = 0;
320 // probeInfo_t probeInfo;
323 // bool bfiltering = true;
327 // probeBlockStart();
329 // tmpPtr = dlsym(RTLD_NEXT, "_ZN5Tizen4Base7Runtime6ThreadC1Ev");
331 // if (tmpPtr == NULL || dlerror() != NULL) {
334 // log.data[0] = '\0';
335 // log.length = sprintf(log.data,"dlsym failed : Tizen::Base::Runtime::Thread::Thread");
336 // perror("dlsym failed : Tizen::Base::Runtime::Thread::Thread");
337 // printLog(&log, MSG_MSG);
341 // memcpy(&Threadp, &tmpPtr, sizeof(tmpPtr));
345 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
346 // setProbePoint(&probeInfo);
350 // (this->*Threadp)();
352 // if (postBlockBegin(blockresult)) {
355 // log.data[0] = '\0';
356 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
357 // probeInfo.eventIndex, "Thread::Thread", probeInfo.currentTime,
358 // probeInfo.pID, probeInfo.tID);
360 // log.length += sprintf(log.data + log.length, "`,`,");
361 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
363 // log.length += sprintf(log.data + log.length,
364 // "`,0`,0`,%d`,0`,0x%x`,%d`,%d`,`,", blockresult,
365 // (unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_OPEN);
367 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
368 // getBacktraceString(&log, 4096 - log.length - 17);
369 // log.length += sprintf(log.data + log.length, "`,callstack_end");
371 // printLog(&log, MSG_LOG);
376 //Thread::~Thread(void) {
377 // typedef void (Thread::*methodType)();
378 // static methodType ThreadDp = 0;
379 // probeInfo_t probeInfo;
382 // bool bfiltering = true;
386 // probeBlockStart();
388 // void* lib_handle = dlopen("libosp-appfw.so", RTLD_LAZY);
389 // if (lib_handle == NULL) {
390 // perror("dlopen failed : libosp-appfw.so");
393 // tmpPtr = dlsym(lib_handle, "_ZN5Tizen4Base7Runtime6ThreadD0Ev");
395 // if (tmpPtr == NULL || dlerror() != NULL) {
396 // perror("dlsym failed : Tizen::Base::Runtime::Thread::~Thread");
400 // memcpy(&ThreadDp, &tmpPtr, sizeof(tmpPtr));
404 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
405 // setProbePoint(&probeInfo);
409 // (this->*ThreadDp)();
411 // if (postBlockBegin(blockresult)) {
414 // log.data[0] = '\0';
415 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
416 // probeInfo.eventIndex, "Thread::~Thread", probeInfo.currentTime,
417 // probeInfo.pID, probeInfo.tID);
419 // log.length += sprintf(log.data + log.length, "`,`,");
420 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
422 // log.length += sprintf(log.data + log.length,
423 // "`,0`,0`,%d`,0`,0x%x`,%d`,%d`,`,", blockresult,
424 // (unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_CLOSE);
426 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
427 // getBacktraceString(&log, 4096 - log.length - 17);
428 // log.length += sprintf(log.data + log.length, "`,callstack_end");
430 // printLog(&log, MSG_LOG);
434 result Thread::Sleep(long milliSeconds) {
437 static methodType Sleepp = 0;
438 probeInfo_t probeInfo;
440 bool bfiltering = true;
445 if(lib_handle[LIBOSP_APPFW] == NULL) {
446 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
447 if (lib_handle[LIBOSP_APPFW] == NULL) {
448 perror("dlopen failed : libosp-appfw.so");
452 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread5SleepEl");
454 if (tmpPtr == NULL || dlerror() != NULL) {
455 perror("dlsym failed : Tizen::Base::Runtime::Thread::Sleep");
459 memcpy(&Sleepp, &tmpPtr, sizeof(tmpPtr));
464 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
465 setProbePoint(&probeInfo);
467 Thread *currentThread;
468 currentThread = GetCurrentThread();
471 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
472 API_ID_result_Thread__Sleep_long_milliSeconds_,
473 "x", (uint64_t)(milliSeconds));
474 PACK_COMMON_END('x', 0, 0, blockresult);
475 PACK_THREAD((unsigned int)currentThread, THREAD_TIZENTHREAD_WORKER, THREAD_API_WAIT_START);
481 result ret = (Sleepp)(milliSeconds);
483 if (postBlockBegin(blockresult)) {
484 setProbePoint(&probeInfo);
486 Thread *currentThread;
487 currentThread = GetCurrentThread();
490 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
491 API_ID_result_Thread__Yield_void_,
492 "x", (uint64_t)(milliSeconds));
493 PACK_COMMON_END('x', ret, ret, blockresult);
494 PACK_THREAD((unsigned int)currentThread, THREAD_TIZENTHREAD_WORKER, THREAD_API_WAIT_END);
502 Thread* Thread::GetCurrentThread(void) {
505 static methodType GetCurrentThreadp = 0;
506 probeInfo_t probeInfo;
508 bool bfiltering = true;
511 if (!GetCurrentThreadp) {
513 if(lib_handle[LIBOSP_APPFW] == NULL) {
514 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
515 if (lib_handle[LIBOSP_APPFW] == NULL) {
516 perror("dlopen failed : libosp-appfw.so");
520 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread16GetCurrentThreadEv");
522 if (tmpPtr == NULL || dlerror() != NULL) {
523 perror("dlsym failed : Tizen::Base::Runtime::Thread::GetCurrentThread");
527 memcpy(&GetCurrentThreadp, &tmpPtr, sizeof(tmpPtr));
532 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
533 setProbePoint(&probeInfo);
537 Thread *currentThread = (GetCurrentThreadp)();
538 result res = GetLastResult();
540 if (postBlockBegin(blockresult)) {
543 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
544 API_ID_Thread__Thread__GetCurrentThread_void_,
546 PACK_COMMON_END('p', voidp_to_uint64(currentThread),
548 PACK_THREAD((unsigned int)currentThread, THREAD_TIZENTHREAD_WORKER, THREAD_API_OTHER);
553 return currentThread;
556 result Thread::Yield(void) {
559 static methodType Yieldp = 0;
560 probeInfo_t probeInfo;
562 bool bfiltering = true;
567 if(lib_handle[LIBOSP_APPFW] == NULL) {
568 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
569 if (lib_handle[LIBOSP_APPFW] == NULL) {
570 perror("dlopen failed : libosp-appfw.so");
574 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread5YieldEv");
576 if (tmpPtr == NULL || dlerror() != NULL) {
577 perror("dlsym failed : Tizen::Base::Runtime::Thread::Yield");
581 memcpy(&Yieldp, &tmpPtr, sizeof(tmpPtr));
586 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
587 setProbePoint(&probeInfo);
591 result ret = (Yieldp)();
593 if (postBlockBegin(blockresult)) {
594 Thread *currentThread;
595 currentThread = GetCurrentThread();
598 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
599 API_ID_result_Thread__Yield_void_,
601 PACK_COMMON_END('x', ret, ret, blockresult);
602 PACK_THREAD((unsigned int)currentThread, THREAD_TIZENTHREAD_WORKER, THREAD_API_OTHER);
610 result Thread::Exit(int exitCode) {
612 (*methodType)(int exitCode);
613 static methodType Exitp = 0;
614 probeInfo_t probeInfo;
616 bool bfiltering = true;
621 if(lib_handle[LIBOSP_APPFW] == NULL) {
622 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
623 if (lib_handle[LIBOSP_APPFW] == NULL) {
624 perror("dlopen failed : libosp-appfw.so");
628 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread4ExitEi");
630 if (tmpPtr == NULL || dlerror() != NULL) {
631 perror("dlsym failed : Tizen::Base::Runtime::Thread::Exit");
635 memcpy(&Exitp, &tmpPtr, sizeof(tmpPtr));
640 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
641 setProbePoint(&probeInfo);
643 Thread *currentThread;
644 currentThread = GetCurrentThread();
647 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
648 API_ID_result_Thread__Exit_int_exitCode_,
650 PACK_COMMON_END('n', 0, 0, blockresult);
651 PACK_THREAD((unsigned int)currentThread, THREAD_TIZENTHREAD_WORKER, THREAD_API_EXIT);
657 result ret = (Exitp)(exitCode);
662 result Thread::Construct(ThreadType threadType, long stackSize,
663 ThreadPriority priority) {
665 (Thread::*methodType)(ThreadType threadType, long stackSize,
666 ThreadPriority priority);
667 static methodType Constructp = 0;
669 probeInfo_t probeInfo;
671 bool bfiltering = true;
676 if(lib_handle[LIBOSP_APPFW] == NULL) {
677 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
678 if (lib_handle[LIBOSP_APPFW] == NULL) {
679 perror("dlopen failed : libosp-appfw.so");
685 lib_handle[LIBOSP_APPFW],
686 "_ZN5Tizen4Base7Runtime6Thread9ConstructENS1_10ThreadTypeElNS1_14ThreadPriorityE");
688 if (tmpPtr == NULL || dlerror() != NULL) {
689 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
693 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
697 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
698 setProbePoint(&probeInfo);
702 ret = (this->*Constructp)(threadType, stackSize, priority);
704 if (postBlockBegin(blockresult)) {
707 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
708 API_ID_result_Thread__Construct_ThreadType_threadType__long_stackSize__ThreadPriority_priority_,
709 "dxd", threadType, (uint64_t)(stackSize),
711 PACK_COMMON_END('x', ret, ret, blockresult);
712 PACK_THREAD((unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_NEW);
719 result Thread::Construct(long stackSize, ThreadPriority priority) {
721 (Thread::*methodType)(long stackSize, ThreadPriority priority);
722 static methodType Constructp = 0;
724 probeInfo_t probeInfo;
726 bool bfiltering = true;
731 if(lib_handle[LIBOSP_APPFW] == NULL) {
732 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
733 if (lib_handle[LIBOSP_APPFW] == NULL) {
734 perror("dlopen failed : libosp-appfw.so");
738 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW],
739 "_ZN5Tizen4Base7Runtime6Thread9ConstructElNS1_14ThreadPriorityE");
740 if (tmpPtr == NULL || dlerror() != NULL) {
741 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
745 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
749 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
750 setProbePoint(&probeInfo);
754 ret = (this->*Constructp)(stackSize, priority);
756 if (postBlockBegin(blockresult)) {
759 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
760 API_ID_result_Thread__Construct_long_stackSize__ThreadPriority_priority_,
761 "xd", (uint64_t)(stackSize), priority);
762 PACK_COMMON_END('x', ret, ret, blockresult);
763 PACK_THREAD((unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_NEW);
770 result Thread::Construct(const Tizen::Base::String &name, long stackSize,
771 ThreadPriority priority) {
773 (Thread::*methodType)(const Tizen::Base::String &name, long stackSize,
774 ThreadPriority priority);
775 static methodType Constructp = 0;
777 probeInfo_t probeInfo;
779 bool bfiltering = true;
785 if(lib_handle[LIBOSP_APPFW] == NULL) {
786 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
787 if (lib_handle[LIBOSP_APPFW] == NULL) {
788 perror("dlopen failed : libosp-appfw.so");
794 lib_handle[LIBOSP_APPFW],
795 "_ZN5Tizen4Base7Runtime6Thread9ConstructERKNS0_6StringElNS1_14ThreadPriorityE");
797 if (tmpPtr == NULL || dlerror() != NULL) {
798 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
802 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
806 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
807 setProbePoint(&probeInfo);
811 ret = (this->*Constructp)(name, stackSize, priority);
813 if (postBlockBegin(blockresult)) {
816 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
817 API_ID_result_Thread__Construct_const_Tizen__Base__String__name__long_stackSize__ThreadPriority_priority_,
818 "sxd", temp, (uint64_t)(stackSize), priority);
819 PACK_COMMON_END('x', ret, ret, blockresult);
820 PACK_THREAD((unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_NEW);
827 result Thread::Construct(const Tizen::Base::String &name, ThreadType threadType,
828 long stackSize, ThreadPriority priority) {
830 (Thread::*methodType)(const Tizen::Base::String &name, ThreadType threadType,
831 long stackSize, ThreadPriority priority);
832 static methodType Constructp = 0;
834 probeInfo_t probeInfo;
836 bool bfiltering = true;
842 if(lib_handle[LIBOSP_APPFW] == NULL) {
843 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
844 if (lib_handle[LIBOSP_APPFW] == NULL) {
845 perror("dlopen failed : libosp-appfw.so");
852 lib_handle[LIBOSP_APPFW],
853 "_ZN5Tizen4Base7Runtime6Thread9ConstructERKNS0_6StringENS1_10ThreadTypeElNS1_14ThreadPriorityE");
854 if (tmpPtr == NULL || dlerror() != NULL) {
855 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
859 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
863 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
864 setProbePoint(&probeInfo);
868 ret = (this->*Constructp)(name, threadType, stackSize, priority);
870 if (postBlockBegin(blockresult)) {
872 WcharToChar(temp, name.GetPointer());
875 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
876 API_ID_result_Thread__Construct_const_Tizen__Base__String__name__ThreadType_threadType__long_stackSize__ThreadPriority_priority_,
877 "sdxd", temp, threadType,
878 (uint64_t)(stackSize), priority);
879 PACK_COMMON_END('x', ret, ret, blockresult);
880 PACK_THREAD((unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_NEW);
887 result Thread::Construct(IRunnable &target, long stackSize,
888 ThreadPriority priority) {
890 (Thread::*methodType)(IRunnable &target, long stackSize,
891 ThreadPriority priority);
892 static methodType Constructp = 0;
894 probeInfo_t probeInfo;
896 bool bfiltering = true;
901 if(lib_handle[LIBOSP_APPFW] == NULL) {
902 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
903 if (lib_handle[LIBOSP_APPFW] == NULL) {
904 perror("dlopen failed : libosp-appfw.so");
910 lib_handle[LIBOSP_APPFW],
911 "_ZN5Tizen4Base7Runtime6Thread9ConstructERNS1_9IRunnableElNS1_14ThreadPriorityE");
913 if (tmpPtr == NULL || dlerror() != NULL) {
914 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
918 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
922 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
923 setProbePoint(&probeInfo);
927 ret = (this->*Constructp)(target, stackSize, priority);
929 if (postBlockBegin(blockresult)) {
932 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
933 API_ID_result_Thread__Construct_IRunnable__target__long_stackSize__ThreadPriority_priority_,
934 "xxd", (uint64_t)(&target),
935 (uint64_t)(stackSize), priority);
936 PACK_COMMON_END('x', ret, ret, blockresult);
937 PACK_THREAD((unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_NEW);
944 result Thread::Construct(const Tizen::Base::String &name, IRunnable &target,
945 long stackSize, ThreadPriority priority) {
947 (Thread::*methodType)(const Tizen::Base::String &name, IRunnable &target,
948 long stackSize, ThreadPriority priority);
949 static methodType Constructp = 0;
951 probeInfo_t probeInfo;
953 bool bfiltering = true;
959 if(lib_handle[LIBOSP_APPFW] == NULL) {
960 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
961 if (lib_handle[LIBOSP_APPFW] == NULL) {
962 perror("dlopen failed : libosp-appfw.so");
968 lib_handle[LIBOSP_APPFW],
969 "_ZN5Tizen4Base7Runtime6Thread9ConstructERKNS0_6StringERNS1_9IRunnableElNS1_14ThreadPriorityE");
971 if (tmpPtr == NULL || dlerror() != NULL) {
972 perror("dlsym failed : Tizen::Base::Runtime::Thread::Construct");
976 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
980 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
981 setProbePoint(&probeInfo);
985 ret = (this->*Constructp)(name, target, stackSize, priority);
987 if (postBlockBegin(blockresult)) {
989 WcharToChar(temp, name.GetPointer());
992 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
993 API_ID_result_Thread__Construct_const_Tizen__Base__String__name__IRunnable__target__long_stackSize__ThreadPriority_priority_,
994 "sxxd", temp, (uint64_t)(&target),
995 (uint64_t)(stackSize), priority);
996 PACK_COMMON_END('x', ret, ret, blockresult);
997 PACK_THREAD((unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_NEW);
1005 result Thread::GetExitCode(int &exitCode) const {
1007 (Thread::*methodType)(int &exitCode) const;
1008 static methodType GetExitCodep = 0;
1010 probeInfo_t probeInfo;
1012 bool bfiltering = true;
1014 // int exitOld = exitCode;
1016 if (!GetExitCodep) {
1018 if(lib_handle[LIBOSP_APPFW] == NULL) {
1019 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1020 if (lib_handle[LIBOSP_APPFW] == NULL) {
1021 perror("dlopen failed : libosp-appfw.so");
1025 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW],
1026 "_ZNK5Tizen4Base7Runtime6Thread11GetExitCodeERi");
1028 if (tmpPtr == NULL || dlerror() != NULL) {
1029 perror("dlsym failed : Tizen::Base::Runtime::Thread::GetExitCode");
1033 memcpy(&GetExitCodep, &tmpPtr, sizeof(tmpPtr));
1037 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1038 setProbePoint(&probeInfo);
1042 ret = (this->*GetExitCodep)(exitCode);
1044 if (postBlockBegin(blockresult)) {
1046 PREPARE_LOCAL_BUF();
1047 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1048 API_ID_result_Thread__GetExitCode_int__exitCode__const,
1050 PACK_COMMON_END('x', ret, ret, blockresult);
1051 PACK_THREAD((unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_OTHER);
1059 const Tizen::Base::String & Thread::GetName(void) const {
1060 typedef const Tizen::Base::String &
1061 (Thread::*methodType)(void) const;
1062 static methodType GetNamep = 0;
1063 probeInfo_t probeInfo;
1065 bool bfiltering = true;
1071 if(lib_handle[LIBOSP_APPFW] == NULL) {
1072 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1073 if (lib_handle[LIBOSP_APPFW] == NULL) {
1074 perror("dlopen failed : libosp-appfw.so");
1078 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZNK5Tizen4Base7Runtime6Thread7GetNameEv");
1080 if (tmpPtr == NULL || dlerror() != NULL) {
1081 perror("dlsym failed : Tizen::Base::Runtime::Thread::GetName");
1085 memcpy(&GetNamep, &tmpPtr, sizeof(tmpPtr));
1089 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1090 setProbePoint(&probeInfo);
1094 const Tizen::Base::String& ret = (this->*GetNamep)();
1095 result res = GetLastResult();
1097 if (postBlockBegin(blockresult)) {
1099 WcharToChar(temp, ret.GetPointer());
1101 PREPARE_LOCAL_BUF();
1102 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1103 API_ID_const_Tizen__Base__String___Thread__GetName_void__const,
1105 PACK_COMMON_END('p', ret.GetPointer(), res, blockresult);
1106 PACK_THREAD((unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_OTHER);
1114 result Thread::Join(void) {
1116 (Thread::*methodType)(void);
1117 static methodType Joinp = 0;
1119 probeInfo_t probeInfo;
1121 bool bfiltering = true;
1126 if(lib_handle[LIBOSP_APPFW] == NULL) {
1127 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1128 if (lib_handle[LIBOSP_APPFW] == NULL) {
1129 perror("dlopen failed : libosp-appfw.so");
1133 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread4JoinEv");
1135 if (tmpPtr == NULL || dlerror() != NULL) {
1136 perror("dlsym failed : Tizen::Base::Runtime::Thread::Join");
1140 memcpy(&Joinp, &tmpPtr, sizeof(tmpPtr));
1144 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1145 setProbePoint(&probeInfo);
1147 PREPARE_LOCAL_BUF();
1148 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1149 API_ID_result_Thread__Join_void_,
1151 PACK_COMMON_END('x', 0, 0, blockresult);
1152 PACK_THREAD((unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_WAIT_START);
1158 ret = (this->*Joinp)();
1160 if (postBlockBegin(blockresult)) {
1161 setProbePoint(&probeInfo);
1163 PREPARE_LOCAL_BUF();
1164 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1165 API_ID_result_Thread__Join_void_,
1167 PACK_COMMON_END('x', ret, ret, blockresult);
1168 PACK_THREAD((unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_WAIT_END);
1175 //Tizen::Base::Object * Thread::Run(void) {
1176 // typedef Tizen::Base::Object * (Thread::*methodType)(void);
1177 // static methodType Runp = 0;
1178 // Tizen::Base::Object * ret;
1179 // probeInfo_t probeInfo;
1182 // bool bfiltering = true;
1186 // log.data[0] = '\0';
1187 // log.length = sprintf(log.data, "call Thread::Run");
1188 // printLog(&log, MSG_MSG);
1191 // probeBlockStart();
1192 // void* lib_handle = dlopen("libosp-appfw.so", RTLD_LAZY);
1193 // if (lib_handle == NULL) {
1194 // perror("dlopen failed : libosp-appfw.so");
1197 // log.data[0] = '\0';
1198 // log.length = sprintf(log.data, "dlopen failed :libosp-appfw.so");
1199 // printLog(&log, MSG_MSG);
1205 // "_ZN5Tizen4Base7Runtime6Thread3RunEv");
1207 // if (tmpPtr == NULL || dlerror() != NULL) {
1208 // perror("dlsym failed : Thread::Run");
1211 // log.data[0] = '\0';
1212 // log.length = sprintf(log.data, "dlsym failed : Thread::Run");
1213 // printLog(&log, MSG_MSG);
1217 // memcpy(&Runp, &tmpPtr, sizeof(tmpPtr));
1221 // if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1222 // setProbePoint(&probeInfo);
1226 // ret = (this->*Runp)();
1228 // if (postBlockBegin(blockresult)) {
1231 // log.data[0] = '\0';
1232 // log.length = sprintf(log.data, "%d`,%d`,%s`,%lu`,%d`,%d", LC_THREAD,
1233 // probeInfo.eventIndex, "Thread::Run",
1234 // probeInfo.currentTime, probeInfo.pID, probeInfo.tID);
1236 // log.length += sprintf(log.data + log.length, "`,`,0x%x",(unsigned int)ret;
1237 // //PCAddr,errno,InternalCall,size,FD,FDType,FDApiType,FileSize,FilePath
1240 // log.length += sprintf(log.data + log.length,
1241 // "`,0`,0`,%d`,0`,0x%x`,%d`,%d`,`,", blockresult,
1242 // (unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_OTHER);
1244 // log.length += sprintf(log.data + log.length, "`,\ncallstack_start`,");
1245 // getBacktraceString(&log, 4096 - log.length - 17);
1246 // log.length += sprintf(log.data + log.length, "`,callstack_end");
1248 // printLog(&log, MSG_LOG);
1254 result Thread::Start(void) {
1255 typedef result (Thread::*methodType)(void);
1256 static methodType Startp = 0;
1258 probeInfo_t probeInfo;
1260 bool bfiltering = true;
1265 if(lib_handle[LIBOSP_APPFW] == NULL) {
1266 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1267 if (lib_handle[LIBOSP_APPFW] == NULL) {
1268 perror("dlopen failed : libosp-appfw.so");
1272 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread5StartEv");
1274 if (tmpPtr == NULL || dlerror() != NULL) {
1275 perror("dlsym failed : Tizen::Base::Runtime::Thread::Start");
1279 memcpy(&Startp, &tmpPtr, sizeof(tmpPtr));
1283 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1284 setProbePoint(&probeInfo);
1288 ret = (this->*Startp)();
1290 if (postBlockBegin(blockresult)) {
1292 PREPARE_LOCAL_BUF();
1293 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1294 API_ID_result_Thread__Start_void_,
1296 PACK_COMMON_END('x', ret, ret, blockresult);
1297 PACK_THREAD((unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_START);
1304 result Thread::Stop(void) {
1305 typedef result (Thread::*methodType)(void);
1306 static methodType Stopp = 0;
1308 probeInfo_t probeInfo;
1310 bool bfiltering = true;
1315 if(lib_handle[LIBOSP_APPFW] == NULL) {
1316 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1317 if (lib_handle[LIBOSP_APPFW] == NULL) {
1318 perror("dlopen failed : libosp-appfw.so");
1322 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime6Thread4StopEv");
1324 if (tmpPtr == NULL || dlerror() != NULL) {
1325 perror("dlsym failed : Tizen::Base::Runtime::Thread::Stop");
1329 memcpy(&Stopp, &tmpPtr, sizeof(tmpPtr));
1333 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1334 setProbePoint(&probeInfo);
1338 ret = (this->*Stopp)();
1340 if (postBlockBegin(blockresult)) {
1342 PREPARE_LOCAL_BUF();
1343 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1344 API_ID_result_Thread__Stop_void_,
1346 PACK_COMMON_END('x', ret, ret, blockresult);
1347 PACK_THREAD((unsigned int) this, THREAD_TIZENTHREAD_WORKER, THREAD_API_STOP);
1355 result EventDrivenThread::Construct(long stackSize, ThreadPriority priority) {
1357 (Thread::*methodType)(long stackSize, ThreadPriority priority);
1358 static methodType Constructp = 0;
1360 probeInfo_t probeInfo;
1362 bool bfiltering = true;
1367 if(lib_handle[LIBOSP_APPFW] == NULL) {
1368 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1369 if (lib_handle[LIBOSP_APPFW] == NULL) {
1370 perror("dlopen failed : libosp-appfw.so");
1374 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW],
1375 "_ZN5Tizen4Base7Runtime17EventDrivenThread9ConstructElNS1_14ThreadPriorityE");
1376 if (tmpPtr == NULL || dlerror() != NULL) {
1377 perror("dlsym failed : Tizen::Base::Runtime::EventDrivenThread::Construct");
1381 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
1385 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1386 setProbePoint(&probeInfo);
1390 ret = (this->*Constructp)(stackSize, priority);
1392 if (postBlockBegin(blockresult)) {
1394 PREPARE_LOCAL_BUF();
1395 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1396 API_ID_result_EventDrivenThread__Construct_long_stackSize__ThreadPriority_priority_,
1397 "xd", (uint64_t)(stackSize), priority);
1398 PACK_COMMON_END('x', ret, ret, blockresult);
1399 PACK_THREAD((unsigned int) this, THREAD_TIZENTHREAD_EVENTDRIVEN, THREAD_API_NEW);
1407 result EventDrivenThread::Construct(const Tizen::Base::String &name, long stackSize,
1408 ThreadPriority priority) {
1410 (Thread::*methodType)(const Tizen::Base::String &name, long stackSize,
1411 ThreadPriority priority);
1412 static methodType Constructp = 0;
1414 probeInfo_t probeInfo;
1416 bool bfiltering = true;
1422 if(lib_handle[LIBOSP_APPFW] == NULL) {
1423 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1424 if (lib_handle[LIBOSP_APPFW] == NULL) {
1425 perror("dlopen failed : libosp-appfw.so");
1431 lib_handle[LIBOSP_APPFW],
1432 "_ZN5Tizen4Base7Runtime17EventDrivenThread9ConstructERKNS0_6StringElNS1_14ThreadPriorityE");
1434 if (tmpPtr == NULL || dlerror() != NULL) {
1435 perror("dlsym failed : Tizen::Base::Runtime::EventDrivenThread::Construct");
1439 memcpy(&Constructp, &tmpPtr, sizeof(tmpPtr));
1443 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1444 setProbePoint(&probeInfo);
1448 ret = (this->*Constructp)(name, stackSize, priority);
1450 if (postBlockBegin(blockresult)) {
1452 WcharToChar(temp, name.GetPointer());
1454 PREPARE_LOCAL_BUF();
1455 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1456 API_ID_result_EventDrivenThread__Construct_const_Tizen__Base__String__name__long_stackSize__ThreadPriority_priority_,
1457 "sx", temp, (uint64_t)(stackSize));
1458 PACK_COMMON_END('x', ret, ret, blockresult);
1459 PACK_THREAD((unsigned int) this, THREAD_TIZENTHREAD_EVENTDRIVEN, THREAD_API_NEW);
1468 result EventDrivenThread::Quit() {
1469 typedef result (Thread::*methodType)(void);
1470 static methodType Quitp = 0;
1472 probeInfo_t probeInfo;
1474 bool bfiltering = true;
1479 if(lib_handle[LIBOSP_APPFW] == NULL) {
1480 lib_handle[LIBOSP_APPFW] = dlopen(lib_string[LIBOSP_APPFW], RTLD_LAZY);
1481 if (lib_handle[LIBOSP_APPFW] == NULL) {
1482 perror("dlopen failed : libosp-appfw.so");
1486 tmpPtr = dlsym(lib_handle[LIBOSP_APPFW], "_ZN5Tizen4Base7Runtime17EventDrivenThread4QuitEv");
1488 if (tmpPtr == NULL || dlerror() != NULL) {
1489 perror("dlsym failed : Tizen::Base::Runtime::EventThread::Quit");
1493 memcpy(&Quitp, &tmpPtr, sizeof(tmpPtr));
1497 if ((blockresult = preBlockBegin(CALLER_ADDRESS, bfiltering, _sopt)) != 0) {
1498 setProbePoint(&probeInfo);
1502 ret = (this->*Quitp)();
1504 if (postBlockBegin(blockresult)) {
1506 PREPARE_LOCAL_BUF();
1507 PACK_COMMON_BEGIN(MSG_PROBE_THREAD,
1508 API_ID_result_EventDrivenThread__Quit__,
1510 PACK_COMMON_END('x', ret, ret, blockresult);
1511 PACK_THREAD((unsigned int) this, THREAD_TIZENTHREAD_EVENTDRIVEN, THREAD_API_STOP);