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

Side by Side Diff: content/browser/tracing/tracing_controller_impl_data_sinks.cc

Issue 1468173003: [Tracing Clock Sync] Add TracingAgent interface in Chrome (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix compile failure for cros Created 5 years 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #include "content/browser/tracing/tracing_controller_impl.h" 4 #include "content/browser/tracing/tracing_controller_impl.h"
5 5
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/files/file_util.h" 7 #include "base/files/file_util.h"
8 #include "base/json/json_writer.h" 8 #include "base/json/json_writer.h"
9 #include "content/public/browser/browser_thread.h" 9 #include "content/public/browser/browser_thread.h"
10 #include "third_party/zlib/zlib.h" 10 #include "third_party/zlib/zlib.h"
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 124
125 AddTraceChunkAndPassToEndpoint(trace_string); 125 AddTraceChunkAndPassToEndpoint(trace_string);
126 } 126 }
127 127
128 void AddTraceChunkAndPassToEndpoint(const std::string& chunk) { 128 void AddTraceChunkAndPassToEndpoint(const std::string& chunk) {
129 trace_ += chunk; 129 trace_ += chunk;
130 130
131 endpoint_->ReceiveTraceChunk(chunk); 131 endpoint_->ReceiveTraceChunk(chunk);
132 } 132 }
133 133
134 void SetSystemTrace(const std::string& data) override {
135 system_trace_ = data;
136 }
137
138 void SetPowerTrace(const std::string& data) override { power_trace_ = data; }
139
140 void Close() override { 134 void Close() override {
141 AddTraceChunkAndPassToEndpoint("]"); 135 AddTraceChunkAndPassToEndpoint("]");
142 if (!system_trace_.empty()) 136
143 AddTraceChunkAndPassToEndpoint(",\"systemTraceEvents\": " + 137 for (base::DictionaryValue::Iterator it(GetAdditionalTracingAgentTrace());
144 system_trace_); 138 !it.IsAtEnd(); it.Advance()) {
139 std::string trace;
140 DCHECK(it.value().GetAsString(&trace));
141 if (it.key() == base::trace_event::TracingAgent::kCrOSTracingAgentName ||
shatch 2015/11/27 19:29:18 Don't need to do this now but could probably go fu
Zhen Wang 2015/12/01 00:14:32 Done.
142 it.key() == base::trace_event::TracingAgent::kETWTracingAgentName) {
143 AddTraceChunkAndPassToEndpoint(",\"systemTraceEvents\": " + trace);
144 } else if (it.key() ==
145 base::trace_event::TracingAgent::kPowerTracingAgentName) {
146 AddTraceChunkAndPassToEndpoint(",\"powerTraceAsString\": " + trace);
147 }
148 }
149
145 std::string metadataJSON; 150 std::string metadataJSON;
146 if (base::JSONWriter::Write(GetMetadata(), &metadataJSON) && 151 if (base::JSONWriter::Write(GetMetadata(), &metadataJSON) &&
147 !metadataJSON.empty()) 152 !metadataJSON.empty())
148 AddTraceChunkAndPassToEndpoint(",\"metadata\": " + metadataJSON); 153 AddTraceChunkAndPassToEndpoint(",\"metadata\": " + metadataJSON);
149 if (!power_trace_.empty()) {
150 AddTraceChunkAndPassToEndpoint(",\"powerTraceAsString\": " +
151 power_trace_);
152 }
153 154
154 AddTraceChunkAndPassToEndpoint("}"); 155 AddTraceChunkAndPassToEndpoint("}");
155 156
156 scoped_ptr<const base::DictionaryValue> metadata(GetMetadata().DeepCopy()); 157 scoped_ptr<const base::DictionaryValue> metadata(GetMetadata().DeepCopy());
157 endpoint_->ReceiveTraceFinalContents(metadata.Pass(), trace_); 158 endpoint_->ReceiveTraceFinalContents(metadata.Pass(), trace_);
158 } 159 }
159 160
160 private: 161 private:
161 ~StringTraceDataSink() override {} 162 ~StringTraceDataSink() override {}
162 163
163 scoped_refptr<TracingController::TraceDataEndpoint> endpoint_; 164 scoped_refptr<TracingController::TraceDataEndpoint> endpoint_;
164 std::string trace_; 165 std::string trace_;
165 std::string system_trace_;
166 std::string power_trace_;
167 166
168 DISALLOW_COPY_AND_ASSIGN(StringTraceDataSink); 167 DISALLOW_COPY_AND_ASSIGN(StringTraceDataSink);
169 }; 168 };
170 169
171 class CompressedStringTraceDataSink : public TracingController::TraceDataSink { 170 class CompressedStringTraceDataSink : public TracingController::TraceDataSink {
172 public: 171 public:
173 explicit CompressedStringTraceDataSink( 172 explicit CompressedStringTraceDataSink(
174 scoped_refptr<TracingController::TraceDataEndpoint> endpoint) 173 scoped_refptr<TracingController::TraceDataEndpoint> endpoint)
175 : endpoint_(endpoint), already_tried_open_(false) {} 174 : endpoint_(endpoint), already_tried_open_(false) {}
176 175
177 void AddTraceChunk(const std::string& chunk) override { 176 void AddTraceChunk(const std::string& chunk) override {
178 std::string tmp = chunk; 177 std::string tmp = chunk;
179 scoped_refptr<base::RefCountedString> chunk_ptr = 178 scoped_refptr<base::RefCountedString> chunk_ptr =
180 base::RefCountedString::TakeString(&tmp); 179 base::RefCountedString::TakeString(&tmp);
181 BrowserThread::PostTask( 180 BrowserThread::PostTask(
182 BrowserThread::FILE, FROM_HERE, 181 BrowserThread::FILE, FROM_HERE,
183 base::Bind(&CompressedStringTraceDataSink::AddTraceChunkOnFileThread, 182 base::Bind(&CompressedStringTraceDataSink::AddTraceChunkOnFileThread,
184 this, chunk_ptr)); 183 this, chunk_ptr));
185 } 184 }
186 185
187 void SetSystemTrace(const std::string& data) override {
188 system_trace_ = data;
189 }
190
191 void SetPowerTrace(const std::string& data) override { power_trace_ = data; }
192
193 void Close() override { 186 void Close() override {
194 BrowserThread::PostTask( 187 BrowserThread::PostTask(
195 BrowserThread::FILE, FROM_HERE, 188 BrowserThread::FILE, FROM_HERE,
196 base::Bind(&CompressedStringTraceDataSink::CloseOnFileThread, this)); 189 base::Bind(&CompressedStringTraceDataSink::CloseOnFileThread, this));
197 } 190 }
198 191
199 private: 192 private:
200 ~CompressedStringTraceDataSink() override {} 193 ~CompressedStringTraceDataSink() override {}
201 194
202 bool OpenZStreamOnFileThread() { 195 bool OpenZStreamOnFileThread() {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 259
267 void CloseOnFileThread() { 260 void CloseOnFileThread() {
268 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 261 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
269 if (!OpenZStreamOnFileThread()) 262 if (!OpenZStreamOnFileThread())
270 return; 263 return;
271 264
272 if (compressed_trace_data_.empty()) 265 if (compressed_trace_data_.empty())
273 AddTraceChunkAndCompressOnFileThread("{\"traceEvents\":[", false); 266 AddTraceChunkAndCompressOnFileThread("{\"traceEvents\":[", false);
274 267
275 AddTraceChunkAndCompressOnFileThread("]", false); 268 AddTraceChunkAndCompressOnFileThread("]", false);
276 if (!system_trace_.empty()) { 269
277 AddTraceChunkAndCompressOnFileThread( 270 for (base::DictionaryValue::Iterator it(GetAdditionalTracingAgentTrace());
278 ",\"systemTraceEvents\": " + system_trace_, false); 271 !it.IsAtEnd(); it.Advance()) {
272 std::string trace;
273 DCHECK(it.value().GetAsString(&trace));
274 if (it.key() == base::trace_event::TracingAgent::kCrOSTracingAgentName ||
275 it.key() == base::trace_event::TracingAgent::kETWTracingAgentName) {
276 AddTraceChunkAndCompressOnFileThread(
277 ",\"systemTraceEvents\": " + trace, false);
278 } else if (it.key() ==
279 base::trace_event::TracingAgent::kPowerTracingAgentName) {
280 AddTraceChunkAndCompressOnFileThread(
281 ",\"powerTraceAsString\": " + trace, false);
282 }
279 } 283 }
284
280 std::string metadataJSON; 285 std::string metadataJSON;
281 if (base::JSONWriter::Write(GetMetadata(), &metadataJSON) && 286 if (base::JSONWriter::Write(GetMetadata(), &metadataJSON) &&
282 !metadataJSON.empty()) { 287 !metadataJSON.empty()) {
283 AddTraceChunkAndCompressOnFileThread(",\"metadata\": " + metadataJSON, 288 AddTraceChunkAndCompressOnFileThread(",\"metadata\": " + metadataJSON,
284 false); 289 false);
285 } 290 }
286 if (!power_trace_.empty()) {
287 AddTraceChunkAndCompressOnFileThread(
288 ",\"powerTraceAsString\": " + power_trace_, false);
289 }
290 AddTraceChunkAndCompressOnFileThread("}", true); 291 AddTraceChunkAndCompressOnFileThread("}", true);
291 292
292 deflateEnd(stream_.get()); 293 deflateEnd(stream_.get());
293 stream_.reset(); 294 stream_.reset();
294 295
295 scoped_ptr<const base::DictionaryValue> metadata(GetMetadata().DeepCopy()); 296 scoped_ptr<const base::DictionaryValue> metadata(GetMetadata().DeepCopy());
296 endpoint_->ReceiveTraceFinalContents(metadata.Pass(), 297 endpoint_->ReceiveTraceFinalContents(metadata.Pass(),
297 compressed_trace_data_); 298 compressed_trace_data_);
298 } 299 }
299 300
300 scoped_refptr<TracingController::TraceDataEndpoint> endpoint_; 301 scoped_refptr<TracingController::TraceDataEndpoint> endpoint_;
301 scoped_ptr<z_stream> stream_; 302 scoped_ptr<z_stream> stream_;
302 bool already_tried_open_; 303 bool already_tried_open_;
303 std::string compressed_trace_data_; 304 std::string compressed_trace_data_;
304 std::string system_trace_;
305 std::string power_trace_;
306 305
307 DISALLOW_COPY_AND_ASSIGN(CompressedStringTraceDataSink); 306 DISALLOW_COPY_AND_ASSIGN(CompressedStringTraceDataSink);
308 }; 307 };
309 308
310 } // namespace 309 } // namespace
311 310
311 void TracingController::TraceDataSink::AddAdditionalTracingAgentTrace(
312 const std::string& agent_name,
313 const std::string& trace_data) {
314 additional_tracing_agent_trace_.SetString(agent_name, trace_data);
315 }
316
317 const base::DictionaryValue&
318 TracingController::TraceDataSink::GetAdditionalTracingAgentTrace() const {
319 return additional_tracing_agent_trace_;
320 }
321
312 void TracingController::TraceDataSink::AddMetadata( 322 void TracingController::TraceDataSink::AddMetadata(
313 const base::DictionaryValue& data) { 323 const base::DictionaryValue& data) {
314 metadata_.MergeDictionary(&data); 324 metadata_.MergeDictionary(&data);
315 } 325 }
316 326
317 const base::DictionaryValue& 327 const base::DictionaryValue&
318 TracingController::TraceDataSink::GetMetadata() const { 328 TracingController::TraceDataSink::GetMetadata() const {
319 return metadata_; 329 return metadata_;
320 } 330 }
321 331
(...skipping 24 matching lines...) Expand all
346 return new StringTraceDataEndpoint(callback); 356 return new StringTraceDataEndpoint(callback);
347 } 357 }
348 358
349 scoped_refptr<TracingController::TraceDataEndpoint> 359 scoped_refptr<TracingController::TraceDataEndpoint>
350 TracingController::CreateFileEndpoint(const base::FilePath& file_path, 360 TracingController::CreateFileEndpoint(const base::FilePath& file_path,
351 const base::Closure& callback) { 361 const base::Closure& callback) {
352 return new FileTraceDataEndpoint(file_path, callback); 362 return new FileTraceDataEndpoint(file_path, callback);
353 } 363 }
354 364
355 } // namespace content 365 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698