OLD | NEW |
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 <utility> | 4 #include <utility> |
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 "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/strings/pattern.h" | 10 #include "base/strings/pattern.h" |
11 #include "content/browser/tracing/tracing_controller_impl.h" | 11 #include "content/browser/tracing/tracing_controller_impl.h" |
12 #include "content/public/browser/browser_thread.h" | 12 #include "content/public/browser/browser_thread.h" |
13 #include "third_party/zlib/zlib.h" | 13 #include "third_party/zlib/zlib.h" |
14 | 14 |
15 namespace content { | 15 namespace content { |
16 | 16 |
17 namespace { | 17 namespace { |
18 | 18 |
19 const char kChromeTraceLabel[] = "traceEvents"; | 19 const char kChromeTraceLabel[] = "traceEvents"; |
20 const char kMetadataTraceLabel[] = "metadata"; | 20 const char kMetadataTraceLabel[] = "metadata"; |
21 | 21 |
22 class StringTraceDataEndpoint : public TracingController::TraceDataEndpoint { | 22 class StringTraceDataEndpoint : public TracingController::TraceDataEndpoint { |
23 public: | 23 public: |
24 typedef base::Callback<void(scoped_ptr<const base::DictionaryValue>, | 24 typedef base::Callback<void(std::unique_ptr<const base::DictionaryValue>, |
25 base::RefCountedString*)> CompletionCallback; | 25 base::RefCountedString*)> |
| 26 CompletionCallback; |
26 | 27 |
27 explicit StringTraceDataEndpoint(CompletionCallback callback) | 28 explicit StringTraceDataEndpoint(CompletionCallback callback) |
28 : completion_callback_(callback) {} | 29 : completion_callback_(callback) {} |
29 | 30 |
30 void ReceiveTraceFinalContents( | 31 void ReceiveTraceFinalContents( |
31 scoped_ptr<const base::DictionaryValue> metadata, | 32 std::unique_ptr<const base::DictionaryValue> metadata, |
32 const std::string& contents) override { | 33 const std::string& contents) override { |
33 std::string tmp = contents; | 34 std::string tmp = contents; |
34 scoped_refptr<base::RefCountedString> str = | 35 scoped_refptr<base::RefCountedString> str = |
35 base::RefCountedString::TakeString(&tmp); | 36 base::RefCountedString::TakeString(&tmp); |
36 | 37 |
37 BrowserThread::PostTask( | 38 BrowserThread::PostTask( |
38 BrowserThread::UI, FROM_HERE, | 39 BrowserThread::UI, FROM_HERE, |
39 base::Bind(completion_callback_, base::Passed(std::move(metadata)), | 40 base::Bind(completion_callback_, base::Passed(std::move(metadata)), |
40 base::RetainedRef(str))); | 41 base::RetainedRef(str))); |
41 } | 42 } |
(...skipping 17 matching lines...) Expand all Loading... |
59 void ReceiveTraceChunk(const std::string& chunk) override { | 60 void ReceiveTraceChunk(const std::string& chunk) override { |
60 std::string tmp = chunk; | 61 std::string tmp = chunk; |
61 scoped_refptr<base::RefCountedString> chunk_ptr = | 62 scoped_refptr<base::RefCountedString> chunk_ptr = |
62 base::RefCountedString::TakeString(&tmp); | 63 base::RefCountedString::TakeString(&tmp); |
63 BrowserThread::PostTask( | 64 BrowserThread::PostTask( |
64 BrowserThread::FILE, FROM_HERE, | 65 BrowserThread::FILE, FROM_HERE, |
65 base::Bind(&FileTraceDataEndpoint::ReceiveTraceChunkOnFileThread, this, | 66 base::Bind(&FileTraceDataEndpoint::ReceiveTraceChunkOnFileThread, this, |
66 chunk_ptr)); | 67 chunk_ptr)); |
67 } | 68 } |
68 | 69 |
69 void ReceiveTraceFinalContents( | 70 void ReceiveTraceFinalContents(std::unique_ptr<const base::DictionaryValue>, |
70 scoped_ptr<const base::DictionaryValue> , | 71 const std::string& contents) override { |
71 const std::string& contents) override { | |
72 BrowserThread::PostTask( | 72 BrowserThread::PostTask( |
73 BrowserThread::FILE, FROM_HERE, | 73 BrowserThread::FILE, FROM_HERE, |
74 base::Bind(&FileTraceDataEndpoint::CloseOnFileThread, this)); | 74 base::Bind(&FileTraceDataEndpoint::CloseOnFileThread, this)); |
75 } | 75 } |
76 | 76 |
77 private: | 77 private: |
78 ~FileTraceDataEndpoint() override { DCHECK(file_ == NULL); } | 78 ~FileTraceDataEndpoint() override { DCHECK(file_ == NULL); } |
79 | 79 |
80 void ReceiveTraceChunkOnFileThread( | 80 void ReceiveTraceChunkOnFileThread( |
81 const scoped_refptr<base::RefCountedString> chunk) { | 81 const scoped_refptr<base::RefCountedString> chunk) { |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 AddTraceChunkAndCompressOnFileThread("}", true); | 281 AddTraceChunkAndCompressOnFileThread("}", true); |
282 | 282 |
283 deflateEnd(stream_.get()); | 283 deflateEnd(stream_.get()); |
284 stream_.reset(); | 284 stream_.reset(); |
285 | 285 |
286 endpoint_->ReceiveTraceFinalContents(GetMetadataCopy(), | 286 endpoint_->ReceiveTraceFinalContents(GetMetadataCopy(), |
287 compressed_trace_data_); | 287 compressed_trace_data_); |
288 } | 288 } |
289 | 289 |
290 scoped_refptr<TracingController::TraceDataEndpoint> endpoint_; | 290 scoped_refptr<TracingController::TraceDataEndpoint> endpoint_; |
291 scoped_ptr<z_stream> stream_; | 291 std::unique_ptr<z_stream> stream_; |
292 bool already_tried_open_; | 292 bool already_tried_open_; |
293 std::string compressed_trace_data_; | 293 std::string compressed_trace_data_; |
294 | 294 |
295 DISALLOW_COPY_AND_ASSIGN(CompressedStringTraceDataSink); | 295 DISALLOW_COPY_AND_ASSIGN(CompressedStringTraceDataSink); |
296 }; | 296 }; |
297 | 297 |
298 } // namespace | 298 } // namespace |
299 | 299 |
300 TracingController::TraceDataSink::TraceDataSink() {} | 300 TracingController::TraceDataSink::TraceDataSink() {} |
301 | 301 |
(...skipping 15 matching lines...) Expand all Loading... |
317 void TracingController::TraceDataSink::AddMetadata( | 317 void TracingController::TraceDataSink::AddMetadata( |
318 const base::DictionaryValue& data) { | 318 const base::DictionaryValue& data) { |
319 metadata_.MergeDictionary(&data); | 319 metadata_.MergeDictionary(&data); |
320 } | 320 } |
321 | 321 |
322 void TracingController::TraceDataSink::SetMetadataFilterPredicate( | 322 void TracingController::TraceDataSink::SetMetadataFilterPredicate( |
323 const MetadataFilterPredicate& metadata_filter_predicate) { | 323 const MetadataFilterPredicate& metadata_filter_predicate) { |
324 metadata_filter_predicate_ = metadata_filter_predicate; | 324 metadata_filter_predicate_ = metadata_filter_predicate; |
325 } | 325 } |
326 | 326 |
327 scoped_ptr<const base::DictionaryValue> | 327 std::unique_ptr<const base::DictionaryValue> |
328 TracingController::TraceDataSink::GetMetadataCopy() const { | 328 TracingController::TraceDataSink::GetMetadataCopy() const { |
329 if (metadata_filter_predicate_.is_null()) | 329 if (metadata_filter_predicate_.is_null()) |
330 return scoped_ptr<const base::DictionaryValue>(metadata_.DeepCopy()); | 330 return std::unique_ptr<const base::DictionaryValue>(metadata_.DeepCopy()); |
331 | 331 |
332 scoped_ptr<base::DictionaryValue> metadata_copy(new base::DictionaryValue); | 332 std::unique_ptr<base::DictionaryValue> metadata_copy( |
| 333 new base::DictionaryValue); |
333 for (base::DictionaryValue::Iterator it(metadata_); !it.IsAtEnd(); | 334 for (base::DictionaryValue::Iterator it(metadata_); !it.IsAtEnd(); |
334 it.Advance()) { | 335 it.Advance()) { |
335 if (metadata_filter_predicate_.Run(it.key())) | 336 if (metadata_filter_predicate_.Run(it.key())) |
336 metadata_copy->Set(it.key(), it.value().DeepCopy()); | 337 metadata_copy->Set(it.key(), it.value().DeepCopy()); |
337 else | 338 else |
338 metadata_copy->SetString(it.key(), "__stripped__"); | 339 metadata_copy->SetString(it.key(), "__stripped__"); |
339 } | 340 } |
340 return std::move(metadata_copy); | 341 return std::move(metadata_copy); |
341 } | 342 } |
342 | 343 |
343 scoped_refptr<TracingController::TraceDataSink> | 344 scoped_refptr<TracingController::TraceDataSink> |
344 TracingController::CreateStringSink( | 345 TracingController::CreateStringSink( |
345 const base::Callback<void(scoped_ptr<const base::DictionaryValue>, | 346 const base::Callback<void(std::unique_ptr<const base::DictionaryValue>, |
346 base::RefCountedString*)>& callback) { | 347 base::RefCountedString*)>& callback) { |
347 return new StringTraceDataSink(new StringTraceDataEndpoint(callback)); | 348 return new StringTraceDataSink(new StringTraceDataEndpoint(callback)); |
348 } | 349 } |
349 | 350 |
350 scoped_refptr<TracingController::TraceDataSink> | 351 scoped_refptr<TracingController::TraceDataSink> |
351 TracingController::CreateCompressedStringSink( | 352 TracingController::CreateCompressedStringSink( |
352 scoped_refptr<TracingController::TraceDataEndpoint> endpoint) { | 353 scoped_refptr<TracingController::TraceDataEndpoint> endpoint) { |
353 return new CompressedStringTraceDataSink(endpoint); | 354 return new CompressedStringTraceDataSink(endpoint); |
354 } | 355 } |
355 | 356 |
356 scoped_refptr<TracingController::TraceDataSink> | 357 scoped_refptr<TracingController::TraceDataSink> |
357 TracingController::CreateFileSink(const base::FilePath& file_path, | 358 TracingController::CreateFileSink(const base::FilePath& file_path, |
358 const base::Closure& callback) { | 359 const base::Closure& callback) { |
359 return new StringTraceDataSink( | 360 return new StringTraceDataSink( |
360 CreateFileEndpoint(file_path, callback)); | 361 CreateFileEndpoint(file_path, callback)); |
361 } | 362 } |
362 | 363 |
363 scoped_refptr<TracingController::TraceDataEndpoint> | 364 scoped_refptr<TracingController::TraceDataEndpoint> |
364 TracingController::CreateCallbackEndpoint(const base::Callback< | 365 TracingController::CreateCallbackEndpoint( |
365 void(scoped_ptr<const base::DictionaryValue>, | 366 const base::Callback<void(std::unique_ptr<const base::DictionaryValue>, |
366 base::RefCountedString*)>& callback) { | 367 base::RefCountedString*)>& callback) { |
367 return new StringTraceDataEndpoint(callback); | 368 return new StringTraceDataEndpoint(callback); |
368 } | 369 } |
369 | 370 |
370 scoped_refptr<TracingController::TraceDataEndpoint> | 371 scoped_refptr<TracingController::TraceDataEndpoint> |
371 TracingController::CreateFileEndpoint(const base::FilePath& file_path, | 372 TracingController::CreateFileEndpoint(const base::FilePath& file_path, |
372 const base::Closure& callback) { | 373 const base::Closure& callback) { |
373 return new FileTraceDataEndpoint(file_path, callback); | 374 return new FileTraceDataEndpoint(file_path, callback); |
374 } | 375 } |
375 | 376 |
376 } // namespace content | 377 } // namespace content |
OLD | NEW |