Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(664)

Unified Diff: base/time/time_mac.cc

Issue 56973012: Implement Time::ThreadNow() on Mac. (Closed) Base URL: https://src.chromium.org/chrome/trunk/src/
Patch Set: add checks to make sure that ThreadNow returns a non-zero value Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/time/time_mac.cc
===================================================================
--- base/time/time_mac.cc (revision 232726)
+++ base/time/time_mac.cc (working copy)
@@ -6,7 +6,11 @@
#include <CoreFoundation/CFDate.h>
#include <CoreFoundation/CFTimeZone.h>
+#include <mach/mach_init.h>
Robert Sesek 2013/11/05 18:32:07 Include mach/mach.h instead. It will also include
fmeawad 2013/11/05 19:34:25 Done.
+#include <mach/mach_port.h>
#include <mach/mach_time.h>
+#include <mach/thread_act.h>
+
Robert Sesek 2013/11/05 18:32:07 nit: remove this blank line
fmeawad 2013/11/05 19:34:25 Done.
#include <sys/sysctl.h>
#include <sys/time.h>
#include <sys/types.h>
@@ -64,6 +68,36 @@
#endif // defined(OS_IOS)
}
+uint64_t ComputeThreadTicks() {
+#if defined(OS_IOS)
+ NOTREACHED();
Robert Sesek 2013/11/05 18:32:07 NOTREACHED() or NOTIMPLEMENTED()? Can this be impl
fmeawad 2013/11/05 19:34:25 It can be implemented, but it should not be reache
fmeawad 2013/11/05 21:59:49 Done.
+ return 0;
+#else
+ mach_port_t thread;
Robert Sesek 2013/11/05 18:32:07 Why break up declaration from initialization?
fmeawad 2013/11/05 19:34:25 Done.
+ mach_msg_type_number_t thread_info_count = THREAD_BASIC_INFO_COUNT;
+ thread_basic_info_data_t thread_info_data;
+
+ thread = mach_thread_self();
Robert Sesek 2013/11/05 18:32:07 This is leaked. Store this in a ScopedMachPort.
fmeawad 2013/11/05 19:34:25 Done.
+ if (thread == MACH_PORT_NULL)
+ return 0;
+
+ kern_return_t kr;
Robert Sesek 2013/11/05 18:32:07 Same. No need to break up declaration from initial
fmeawad 2013/11/05 19:34:25 Done.
+
+ kr = thread_info(thread,
+ THREAD_BASIC_INFO,
+ reinterpret_cast<thread_info_t>(&thread_info_data),
+ &thread_info_count);
+
+ if (kr != KERN_SUCCESS) {
+ return 0;
Robert Sesek 2013/11/05 18:32:07 No logging or DCHECKing for failure?
fmeawad 2013/11/05 19:34:25 Done.
+ }
+
+ return (thread_info_data.user_time.seconds *
+ base::Time::kMicrosecondsPerSecond) +
+ thread_info_data.user_time.microseconds;
Robert Sesek 2013/11/05 18:32:07 nit: align this to underneath the (
fmeawad 2013/11/05 19:34:25 Done.
+#endif // defined(OS_IOS)
+}
+
} // namespace
namespace base {
@@ -196,8 +230,7 @@
// static
TimeTicks TimeTicks::ThreadNow() {
- NOTREACHED();
- return TimeTicks();
+ return TimeTicks(ComputeThreadTicks());
}
// static
« base/time/time.h ('K') | « base/time/time.h ('k') | base/time/time_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698