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

Side by Side Diff: base/debug/trace_event.cc

Issue 6085015: Order function definitions in base/ according to the header. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: lrn2merge Created 9 years, 11 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/crypto/symmetric_key_nss.cc ('k') | base/file_util.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/debug/trace_event.h" 5 #include "base/debug/trace_event.h"
6 6
7 #include "base/format_macros.h" 7 #include "base/format_macros.h"
8 #include "base/file_path.h" 8 #include "base/file_path.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
(...skipping 10 matching lines...) Expand all
21 21
22 static const char* kEventTypeNames[] = { 22 static const char* kEventTypeNames[] = {
23 "BEGIN", 23 "BEGIN",
24 "END", 24 "END",
25 "INSTANT" 25 "INSTANT"
26 }; 26 };
27 27
28 static const FilePath::CharType* kLogFileName = 28 static const FilePath::CharType* kLogFileName =
29 FILE_PATH_LITERAL("trace_%d.log"); 29 FILE_PATH_LITERAL("trace_%d.log");
30 30
31 TraceLog::TraceLog() : enabled_(false), log_file_(NULL) {
32 base::ProcessHandle proc = base::GetCurrentProcessHandle();
33 #if !defined(OS_MACOSX)
34 process_metrics_.reset(base::ProcessMetrics::CreateProcessMetrics(proc));
35 #else
36 // The default port provider is sufficient to get data for the current
37 // process.
38 process_metrics_.reset(base::ProcessMetrics::CreateProcessMetrics(proc,
39 NULL));
40 #endif
41 }
42
43 TraceLog::~TraceLog() {
44 Stop();
45 }
46
47 // static 31 // static
48 TraceLog* TraceLog::GetInstance() { 32 TraceLog* TraceLog::GetInstance() {
49 return Singleton<TraceLog, DefaultSingletonTraits<TraceLog> >::get(); 33 return Singleton<TraceLog, DefaultSingletonTraits<TraceLog> >::get();
50 } 34 }
51 35
52 // static 36 // static
53 bool TraceLog::IsTracing() { 37 bool TraceLog::IsTracing() {
54 return TraceLog::GetInstance()->enabled_; 38 return TraceLog::GetInstance()->enabled_;
55 } 39 }
56 40
57 // static 41 // static
58 bool TraceLog::StartTracing() { 42 bool TraceLog::StartTracing() {
59 return TraceLog::GetInstance()->Start(); 43 return TraceLog::GetInstance()->Start();
60 } 44 }
61 45
62 bool TraceLog::Start() {
63 if (enabled_)
64 return true;
65 enabled_ = OpenLogFile();
66 if (enabled_) {
67 Log("var raw_trace_events = [\n");
68 trace_start_time_ = TimeTicks::Now();
69 timer_.Start(TimeDelta::FromMilliseconds(250), this, &TraceLog::Heartbeat);
70 }
71 return enabled_;
72 }
73
74 // static 46 // static
75 void TraceLog::StopTracing() { 47 void TraceLog::StopTracing() {
76 return TraceLog::GetInstance()->Stop(); 48 return TraceLog::GetInstance()->Stop();
77 } 49 }
78 50
79 void TraceLog::Stop() {
80 if (enabled_) {
81 enabled_ = false;
82 Log("];\n");
83 CloseLogFile();
84 timer_.Stop();
85 }
86 }
87
88 void TraceLog::Heartbeat() {
89 std::string cpu = StringPrintf("%.0f", process_metrics_->GetCPUUsage());
90 TRACE_EVENT_INSTANT("heartbeat.cpu", 0, cpu);
91 }
92
93 void TraceLog::CloseLogFile() {
94 if (log_file_) {
95 file_util::CloseFile(log_file_);
96 }
97 }
98
99 bool TraceLog::OpenLogFile() {
100 FilePath::StringType pid_filename =
101 StringPrintf(kLogFileName, base::GetCurrentProcId());
102 FilePath log_file_path;
103 if (!PathService::Get(base::DIR_EXE, &log_file_path))
104 return false;
105 log_file_path = log_file_path.Append(pid_filename);
106 log_file_ = file_util::OpenFile(log_file_path, "a");
107 if (!log_file_) {
108 // try the current directory
109 log_file_ = file_util::OpenFile(FilePath(pid_filename), "a");
110 if (!log_file_) {
111 return false;
112 }
113 }
114 return true;
115 }
116
117 void TraceLog::Trace(const std::string& name, 51 void TraceLog::Trace(const std::string& name,
118 EventType type, 52 EventType type,
119 const void* id, 53 const void* id,
120 const std::wstring& extra, 54 const std::wstring& extra,
121 const char* file, 55 const char* file,
122 int line) { 56 int line) {
123 if (!enabled_) 57 if (!enabled_)
124 return; 58 return;
125 Trace(name, type, id, WideToUTF8(extra), file, line); 59 Trace(name, type, id, WideToUTF8(extra), file, line);
126 } 60 }
(...skipping 24 matching lines...) Expand all
151 name.c_str(), 85 name.c_str(),
152 id, 86 id,
153 extra.c_str(), 87 extra.c_str(),
154 file, 88 file,
155 line, 89 line,
156 usec); 90 usec);
157 91
158 Log(msg); 92 Log(msg);
159 } 93 }
160 94
95 TraceLog::TraceLog() : enabled_(false), log_file_(NULL) {
96 base::ProcessHandle proc = base::GetCurrentProcessHandle();
97 #if !defined(OS_MACOSX)
98 process_metrics_.reset(base::ProcessMetrics::CreateProcessMetrics(proc));
99 #else
100 // The default port provider is sufficient to get data for the current
101 // process.
102 process_metrics_.reset(base::ProcessMetrics::CreateProcessMetrics(proc,
103 NULL));
104 #endif
105 }
106
107 TraceLog::~TraceLog() {
108 Stop();
109 }
110
111 bool TraceLog::OpenLogFile() {
112 FilePath::StringType pid_filename =
113 StringPrintf(kLogFileName, base::GetCurrentProcId());
114 FilePath log_file_path;
115 if (!PathService::Get(base::DIR_EXE, &log_file_path))
116 return false;
117 log_file_path = log_file_path.Append(pid_filename);
118 log_file_ = file_util::OpenFile(log_file_path, "a");
119 if (!log_file_) {
120 // try the current directory
121 log_file_ = file_util::OpenFile(FilePath(pid_filename), "a");
122 if (!log_file_) {
123 return false;
124 }
125 }
126 return true;
127 }
128
129 void TraceLog::CloseLogFile() {
130 if (log_file_) {
131 file_util::CloseFile(log_file_);
132 }
133 }
134
135 bool TraceLog::Start() {
136 if (enabled_)
137 return true;
138 enabled_ = OpenLogFile();
139 if (enabled_) {
140 Log("var raw_trace_events = [\n");
141 trace_start_time_ = TimeTicks::Now();
142 timer_.Start(TimeDelta::FromMilliseconds(250), this, &TraceLog::Heartbeat);
143 }
144 return enabled_;
145 }
146
147 void TraceLog::Stop() {
148 if (enabled_) {
149 enabled_ = false;
150 Log("];\n");
151 CloseLogFile();
152 timer_.Stop();
153 }
154 }
155
156 void TraceLog::Heartbeat() {
157 std::string cpu = StringPrintf("%.0f", process_metrics_->GetCPUUsage());
158 TRACE_EVENT_INSTANT("heartbeat.cpu", 0, cpu);
159 }
160
161 void TraceLog::Log(const std::string& msg) { 161 void TraceLog::Log(const std::string& msg) {
162 AutoLock lock(file_lock_); 162 AutoLock lock(file_lock_);
163 163
164 fprintf(log_file_, "%s", msg.c_str()); 164 fprintf(log_file_, "%s", msg.c_str());
165 } 165 }
166 166
167 } // namespace debug 167 } // namespace debug
168 } // namespace base 168 } // namespace base
OLDNEW
« no previous file with comments | « base/crypto/symmetric_key_nss.cc ('k') | base/file_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698