summaryrefslogtreecommitdiff
path: root/chromium/base/tracked_objects.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/base/tracked_objects.cc')
-rw-r--r--chromium/base/tracked_objects.cc31
1 files changed, 30 insertions, 1 deletions
diff --git a/chromium/base/tracked_objects.cc b/chromium/base/tracked_objects.cc
index 0847d5f9163..0db7094c498 100644
--- a/chromium/base/tracked_objects.cc
+++ b/chromium/base/tracked_objects.cc
@@ -7,6 +7,9 @@
#include <limits.h>
#include <stdlib.h>
+#include "base/atomicops.h"
+#include "base/base_switches.h"
+#include "base/command_line.h"
#include "base/compiler_specific.h"
#include "base/debug/leak_annotations.h"
#include "base/logging.h"
@@ -51,6 +54,32 @@ const ThreadData::Status kInitialStartupState =
// problem with its presence).
static const bool kAllowAlternateTimeSourceHandling = true;
+inline bool IsProfilerTimingEnabled() {
+ enum {
+ UNDEFINED_TIMING,
+ ENABLED_TIMING,
+ DISABLED_TIMING,
+ };
+ static base::subtle::Atomic32 timing_enabled = UNDEFINED_TIMING;
+ // Reading |timing_enabled| is done without barrier because multiple
+ // initialization is not an issue while the barrier can be relatively costly
+ // given that this method is sometimes called in a tight loop.
+ base::subtle::Atomic32 current_timing_enabled =
+ base::subtle::NoBarrier_Load(&timing_enabled);
+ if (current_timing_enabled == UNDEFINED_TIMING) {
+ if (!CommandLine::InitializedForCurrentProcess())
+ return true;
+ current_timing_enabled =
+ (CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+ switches::kProfilerTiming) ==
+ switches::kProfilerTimingDisabledValue)
+ ? DISABLED_TIMING
+ : ENABLED_TIMING;
+ base::subtle::NoBarrier_Store(&timing_enabled, current_timing_enabled);
+ }
+ return current_timing_enabled == ENABLED_TIMING;
+}
+
} // namespace
//------------------------------------------------------------------------------
@@ -754,7 +783,7 @@ void ThreadData::SetAlternateTimeSource(NowFunction* now_function) {
TrackedTime ThreadData::Now() {
if (kAllowAlternateTimeSourceHandling && now_function_)
return TrackedTime::FromMilliseconds((*now_function_)());
- if (kTrackAllTaskObjects && TrackingStatus())
+ if (kTrackAllTaskObjects && IsProfilerTimingEnabled() && TrackingStatus())
return TrackedTime::Now();
return TrackedTime(); // Super fast when disabled, or not compiled.
}