diff options
author | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-01 23:35:25 +0000 |
---|---|---|
committer | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-01 23:35:25 +0000 |
commit | 7664ab3d9d921bc769977c2921ecb4e5ea0cc793 (patch) | |
tree | ab884002c040253f951d05ef7b3e5033d35d1c99 /base/debug | |
parent | 22258c851d500a42113c833ac06d244cf4d4236b (diff) | |
download | chromium_src-7664ab3d9d921bc769977c2921ecb4e5ea0cc793.zip chromium_src-7664ab3d9d921bc769977c2921ecb4e5ea0cc793.tar.gz chromium_src-7664ab3d9d921bc769977c2921ecb4e5ea0cc793.tar.bz2 |
Added command line switches and UI (controlled via a build option)
to make it easier to use the sampling profiler.
BUG=None
TEST=None
Review URL: http://codereview.chromium.org/6250070
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@73374 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/debug')
-rw-r--r-- | base/debug/profiler.cc | 65 | ||||
-rw-r--r-- | base/debug/profiler.h | 35 |
2 files changed, 100 insertions, 0 deletions
diff --git a/base/debug/profiler.cc b/base/debug/profiler.cc new file mode 100644 index 0000000..8597dac --- /dev/null +++ b/base/debug/profiler.cc @@ -0,0 +1,65 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/debug/profiler.h" + +#include <string> + +#include "base/process_util.h" +#include "base/string_util.h" + +#if defined(ENABLE_PROFILING) && !defined(NO_TCMALLOC) +#include "third_party/tcmalloc/chromium/src/google/profiler.h" +#endif + +namespace base { +namespace debug { + +#if defined(ENABLE_PROFILING) && !defined(NO_TCMALLOC) + +static int profile_count = 0; + +void StartProfiling(const std::string& name) { + ++profile_count; + std::string full_name(name); + std::string pid = StringPrintf("%d", GetCurrentProcId()); + std::string count = StringPrintf("%d", profile_count); + ReplaceSubstringsAfterOffset(&full_name, 0, "{pid}", pid); + ReplaceSubstringsAfterOffset(&full_name, 0, "{count}", count); + ProfilerStart(full_name.c_str()); +} + +void StopProfiling() { + ProfilerFlush(); + ProfilerStop(); +} + +void FlushProfiling() { + ProfilerFlush(); +} + +bool BeingProfiled() { + return ProfilingIsEnabledForAllThreads(); +} + +#else + +void StartProfiling(const std::string& name) { +} + +void StopProfiling() { +} + +void FlushProfiling() { +} + +bool BeingProfiled() { + return false; +} + +#endif + +} // namespace debug +} // namespace base + diff --git a/base/debug/profiler.h b/base/debug/profiler.h new file mode 100644 index 0000000..e3044d6 --- /dev/null +++ b/base/debug/profiler.h @@ -0,0 +1,35 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_DEBUG_PROFILER_H +#define BASE_DEBUG_PROFILER_H +#pragma once + +#include <string> + +// The Profiler functions allow usage of the underlying sampling based +// profiler. If the application has not been built with the necessary +// flags (-DENABLE_PROFILING and not -DNO_TCMALLOC) then these functions +// are noops. +namespace base { +namespace debug { + +// Start profiling with the supplied name. +// {pid} will be replaced by the process' pid and {count} will be replaced +// by the count of the profile run (starts at 1 with each process). +void StartProfiling(const std::string& name); + +// Stop profiling and write out data. +void StopProfiling(); + +// Force data to be written to file. +void FlushProfiling(); + +// Returns true if process is being profiled. +bool BeingProfiled(); + +} // namespace debug +} // namespace base + +#endif // BASE_DEBUG_DEBUGGER_H |