Chromium Code Reviews| Index: base/time/time_mac.cc |
| =================================================================== |
| --- base/time/time_mac.cc (revision 232726) |
| +++ base/time/time_mac.cc (working copy) |
| @@ -6,6 +6,7 @@ |
| #include <CoreFoundation/CFDate.h> |
| #include <CoreFoundation/CFTimeZone.h> |
| +#include <mach/mach.h> |
| #include <mach/mach_time.h> |
| #include <sys/sysctl.h> |
| #include <sys/time.h> |
| @@ -15,6 +16,7 @@ |
| #include "base/basictypes.h" |
| #include "base/logging.h" |
| #include "base/mac/scoped_cftyperef.h" |
| +#include "base/mac/scoped_mach_port.h" |
| namespace { |
| @@ -64,6 +66,33 @@ |
| #endif // defined(OS_IOS) |
| } |
| +uint64_t ComputeThreadTicks() { |
| +#if defined(OS_IOS) |
| + NOTREACHED(); |
| + return 0; |
| +#else |
| + base::mac::ScopedMachPort thread(mach_thread_self()); |
| + mach_msg_type_number_t thread_info_count = THREAD_BASIC_INFO_COUNT; |
| + thread_basic_info_data_t thread_info_data; |
| + |
| + if (thread == MACH_PORT_NULL) { |
| + DLOG(ERROR) << "Invalid thread"; |
|
Robert Sesek
2013/11/05 19:49:02
"Failed to get mach_thread_self()"
fmeawad
2013/11/05 21:59:49
Done.
|
| + return 0; |
| + } |
| + |
| + kern_return_t kr = thread_info( |
| + thread, |
|
Robert Sesek
2013/11/05 19:49:02
nit: Only indent 4 spaces from the previous line.
fmeawad
2013/11/05 21:59:49
Done.
|
| + THREAD_BASIC_INFO, |
| + reinterpret_cast<thread_info_t>(&thread_info_data), |
| + &thread_info_count); |
| + DCHECK_EQ(KERN_SUCCESS, kr); |
| + |
| + return (thread_info_data.user_time.seconds * |
| + base::Time::kMicrosecondsPerSecond) + |
| + thread_info_data.user_time.microseconds; |
| +#endif // defined(OS_IOS) |
| +} |
| + |
| } // namespace |
| namespace base { |
| @@ -196,8 +225,7 @@ |
| // static |
| TimeTicks TimeTicks::ThreadNow() { |
| - NOTREACHED(); |
| - return TimeTicks(); |
| + return TimeTicks(ComputeThreadTicks()); |
| } |
| // static |