1// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/debug/profiler.h"
6
7#include <string>
8
9#include "base/process_util.h"
10#include "base/string_util.h"
11
12#if defined(ENABLE_PROFILING) && !defined(NO_TCMALLOC)
13#include "third_party/tcmalloc/chromium/src/google/profiler.h"
14#endif
15
16namespace base {
17namespace debug {
18
19#if defined(ENABLE_PROFILING) && !defined(NO_TCMALLOC)
20
21static int profile_count = 0;
22
23void StartProfiling(const std::string& name) {
24  ++profile_count;
25  std::string full_name(name);
26  std::string pid = StringPrintf("%d", GetCurrentProcId());
27  std::string count = StringPrintf("%d", profile_count);
28  ReplaceSubstringsAfterOffset(&full_name, 0, "{pid}", pid);
29  ReplaceSubstringsAfterOffset(&full_name, 0, "{count}", count);
30  ProfilerStart(full_name.c_str());
31}
32
33void StopProfiling() {
34  ProfilerFlush();
35  ProfilerStop();
36}
37
38void FlushProfiling() {
39  ProfilerFlush();
40}
41
42bool BeingProfiled() {
43  return ProfilingIsEnabledForAllThreads();
44}
45
46#else
47
48void StartProfiling(const std::string& name) {
49}
50
51void StopProfiling() {
52}
53
54void FlushProfiling() {
55}
56
57bool BeingProfiled() {
58  return false;
59}
60
61#endif
62
63}  // namespace debug
64}  // namespace base
65
66