diff options
author | qsr@chromium.org <qsr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-11 12:49:17 +0000 |
---|---|---|
committer | qsr@chromium.org <qsr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-11 12:49:17 +0000 |
commit | 915b344f5c907df65e6f21cda93d6f7859b1f853 (patch) | |
tree | 431505a67d9833b6082e4b62b2c8d16ec639b3b4 /base/tracked_objects.cc | |
parent | b7b044b56959787c43498e3fb8e644cff8ba3cb4 (diff) | |
download | chromium_src-915b344f5c907df65e6f21cda93d6f7859b1f853.zip chromium_src-915b344f5c907df65e6f21cda93d6f7859b1f853.tar.gz chromium_src-915b344f5c907df65e6f21cda93d6f7859b1f853.tar.bz2 |
Disable timing from chrome://profiler on Android.
On Android, on a arm CPU, TimeTicks::Now() is taking 900ns (20 times
what it takes on a desktop x86 CPU). The bigger user of TimeTicks::Now()
is tracked_objects::TrackedTime, and this impacts the overall
performance of Chrome on this platform.
This CL adds compile line flags that allows to disable
tracked_objects::TrackedTime. It also disable
tracked_objects::TrackedTime by default on Android.
BUG=315070
Review URL: https://codereview.chromium.org/99343002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@240092 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/tracked_objects.cc')
-rw-r--r-- | base/tracked_objects.cc | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/base/tracked_objects.cc b/base/tracked_objects.cc index 0847d5f..72049e4 100644 --- a/base/tracked_objects.cc +++ b/base/tracked_objects.cc @@ -7,6 +7,8 @@ #include <limits.h> #include <stdlib.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 +53,28 @@ const ThreadData::Status kInitialStartupState = // problem with its presence). static const bool kAllowAlternateTimeSourceHandling = true; +inline bool IsProfilerTimingEnabled() { + static enum { + UNDEFINED_TIMING, + ENABLED_TIMING, + DISABLED_TIMING, + } timing_enabled = UNDEFINED_TIMING; + // This initialization is not thread-safe, so the value of |timing_enabled| + // can be computed multiple times. This is not an issue, as the computed value + // will always be the same, and is side-effect free, while needing to use a + // lock or a memory barrier would be more costly. + if (timing_enabled == UNDEFINED_TIMING) { + if (!CommandLine::InitializedForCurrentProcess()) + return true; + timing_enabled = (CommandLine::ForCurrentProcess()->GetSwitchValueASCII( + switches::kProfilerTiming) == + switches::kProfilerTimingDisabledValue) + ? DISABLED_TIMING + : ENABLED_TIMING; + } + return timing_enabled == ENABLED_TIMING; +} + } // namespace //------------------------------------------------------------------------------ @@ -754,7 +778,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. } |