Changeset 99901 in vbox for trunk/src/VBox/Runtime/r3/posix/thread-posix.cpp
- Timestamp:
- May 22, 2023 2:15:10 PM (21 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/r3/posix/thread-posix.cpp
r98103 r99901 732 732 733 733 /** @todo move this into platform specific files. */ 734 RTR3DECL(int) RTThreadGetExecutionTimeMilli(uint64_t *p KernelTime, uint64_t *pUserTime)734 RTR3DECL(int) RTThreadGetExecutionTimeMilli(uint64_t *pcMsKernelTime, uint64_t *pcMsUserTime) 735 735 { 736 736 #if defined(RT_OS_SOLARIS) 737 737 struct rusage ts; 738 int rc = getrusage(RUSAGE_LWP, &ts); 739 if (rc) 740 return RTErrConvertFromErrno(rc); 741 742 *pKernelTime = ts.ru_stime.tv_sec * 1000 + ts.ru_stime.tv_usec / 1000; 743 *pUserTime = ts.ru_utime.tv_sec * 1000 + ts.ru_utime.tv_usec / 1000; 738 int const rc = getrusage(RUSAGE_LWP, &ts); 739 AsserReturn(rc == 0, RTErrConvertFromErrno(rc)); 740 741 *pcMsKernelTime = ts.ru_stime.tv_sec * 1000 + ts.ru_stime.tv_usec / 1000; 742 *pcMsUserTime = ts.ru_utime.tv_sec * 1000 + ts.ru_utime.tv_usec / 1000; 744 743 return VINF_SUCCESS; 745 744 746 745 #elif defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD) 747 /* on Linux, getrusage(RUSAGE_THREAD, ...) is available since 2.6.26 */746 /* on Linux, getrusage(RUSAGE_THREAD, ...) is available since 2.6.26. maybe it's slower? */ 748 747 struct timespec ts; 749 int rc = clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts); 750 if (rc) 751 return RTErrConvertFromErrno(rc); 752 753 *pKernelTime = 0; 754 *pUserTime = (uint64_t)ts.tv_sec * 1000 + ts.tv_nsec / 1000000; 748 int const rc = clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts); 749 AssertReturn(rc == 0, RTErrConvertFromErrno(rc)); 750 751 *pcMsKernelTime = 0; 752 *pcMsUserTime = (uint64_t)ts.tv_sec * 1000 + ts.tv_nsec / 1000000; 755 753 return VINF_SUCCESS; 756 754 … … 761 759 AssertReturn(krc == KERN_SUCCESS, RTErrConvertFromDarwinKern(krc)); 762 760 763 *pKernelTime = ThreadInfo.system_time.seconds * 1000 + ThreadInfo.system_time.microseconds / 1000; 764 *pUserTime = ThreadInfo.user_time.seconds * 1000 + ThreadInfo.user_time.microseconds / 1000; 765 761 *pcMsKernelTime = ThreadInfo.system_time.seconds * 1000 + ThreadInfo.system_time.microseconds / 1000; 762 *pcMsUserTime = ThreadInfo.user_time.seconds * 1000 + ThreadInfo.user_time.microseconds / 1000; 766 763 return VINF_SUCCESS; 764 767 765 #elif defined(RT_OS_HAIKU) 768 766 thread_info ThreadInfo; … … 770 768 AssertReturn(status == B_OK, RTErrConvertFromErrno(status)); 771 769 772 *pKernelTime = ThreadInfo.kernel_time / 1000; 773 *pUserTime = ThreadInfo.user_time / 1000; 774 770 *pcMsKernelTime = ThreadInfo.kernel_time / 1000; 771 *pcMsUserTime = ThreadInfo.user_time / 1000; 775 772 return VINF_SUCCESS; 773 776 774 #else 775 RT_NOREF(pcMsKernelTime, pcMsUserTime); 777 776 return VERR_NOT_IMPLEMENTED; 778 777 #endif
Note:
See TracChangeset
for help on using the changeset viewer.