Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 // Trace events are for tracking application performance. | 5 // Trace events are for tracking application performance. |
| 6 // | 6 // |
| 7 // Events are issued against categories. Whereas LOG's | 7 // Events are issued against categories. Whereas LOG's |
| 8 // categories are statically defined, TRACE categories are created | 8 // categories are statically defined, TRACE categories are created |
| 9 // implicitly with a string. For example: | 9 // implicitly with a string. For example: |
| 10 // TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent") | 10 // TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent") |
| (...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 508 TimeTicks timestamp_; | 508 TimeTicks timestamp_; |
| 509 TraceEventPhase phase_; | 509 TraceEventPhase phase_; |
| 510 const TraceCategory* category_; | 510 const TraceCategory* category_; |
| 511 const char* name_; | 511 const char* name_; |
| 512 const char* arg_names_[kTraceMaxNumArgs]; | 512 const char* arg_names_[kTraceMaxNumArgs]; |
| 513 TraceValue arg_values_[kTraceMaxNumArgs]; | 513 TraceValue arg_values_[kTraceMaxNumArgs]; |
| 514 scoped_refptr<base::RefCountedString> parameter_copy_storage_; | 514 scoped_refptr<base::RefCountedString> parameter_copy_storage_; |
| 515 }; | 515 }; |
| 516 | 516 |
| 517 | 517 |
| 518 // TraceResultBuffer collects and merges trace fragments returned by TraceLog. | |
| 519 // Add all the trace event fragments with AddFragment and then call GetJSON to | |
| 520 // retrieve the full set of trace events in JSON format. | |
| 521 class TraceResultBuffer { | |
| 522 public: | |
| 523 TraceResultBuffer(); | |
| 524 ~TraceResultBuffer(); | |
| 525 | |
| 526 void AddFragment(const std::string& trace_fragment); | |
|
nduca
2011/10/20 00:28:03
Brownie points: typedef TraceFragment so nobody se
jbates
2011/10/20 22:18:49
I wanted to do this as well, but I didn't want to
nduca
2011/10/20 23:20:05
I realize its work, but we both agree its the righ
jbates
2011/10/20 23:55:13
Yup, we agree it's a good design, but low priority
| |
| 527 | |
| 528 void GetJSON(std::string* json_trace_output); | |
| 529 | |
| 530 private: | |
| 531 std::vector<std::string> fragments_; | |
| 532 }; | |
| 533 | |
| 534 | |
| 518 class BASE_EXPORT TraceLog { | 535 class BASE_EXPORT TraceLog { |
| 519 public: | 536 public: |
| 520 // Flags for passing to AddTraceEvent. | 537 // Flags for passing to AddTraceEvent. |
| 521 enum EventFlags { | 538 enum EventFlags { |
| 522 EVENT_FLAG_NONE = 0, | 539 EVENT_FLAG_NONE = 0, |
| 523 EVENT_FLAG_COPY = 1<<0 | 540 EVENT_FLAG_COPY = 1<<0 |
| 524 }; | 541 }; |
| 525 | 542 |
| 526 static TraceLog* GetInstance(); | 543 static TraceLog* GetInstance(); |
| 527 | 544 |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 542 // Disable tracing for all categories. | 559 // Disable tracing for all categories. |
| 543 void SetDisabled(); | 560 void SetDisabled(); |
| 544 // Helper method to enable/disable tracing for all categories. | 561 // Helper method to enable/disable tracing for all categories. |
| 545 void SetEnabled(bool enabled); | 562 void SetEnabled(bool enabled); |
| 546 bool IsEnabled() { return enabled_; } | 563 bool IsEnabled() { return enabled_; } |
| 547 | 564 |
| 548 float GetBufferPercentFull() const; | 565 float GetBufferPercentFull() const; |
| 549 | 566 |
| 550 // When enough events are collected, they are handed (in bulk) to | 567 // When enough events are collected, they are handed (in bulk) to |
| 551 // the output callback. If no callback is set, the output will be | 568 // the output callback. If no callback is set, the output will be |
| 552 // silently dropped. The callback must be thread safe. | 569 // silently dropped. The callback must be thread safe. The string format is |
| 570 // undefined. Use TraceResultBuffer to convert one or more trace strings to | |
| 571 // JSON. | |
| 553 typedef RefCountedData<std::string> RefCountedString; | 572 typedef RefCountedData<std::string> RefCountedString; |
| 554 typedef base::Callback<void(scoped_refptr<RefCountedString>)> OutputCallback; | 573 typedef base::Callback<void(scoped_refptr<RefCountedString>)> OutputCallback; |
| 555 void SetOutputCallback(const OutputCallback& cb); | 574 void SetOutputCallback(const OutputCallback& cb); |
| 556 | 575 |
| 557 // The trace buffer does not flush dynamically, so when it fills up, | 576 // The trace buffer does not flush dynamically, so when it fills up, |
| 558 // subsequent trace events will be dropped. This callback is generated when | 577 // subsequent trace events will be dropped. This callback is generated when |
| 559 // the trace buffer is full. The callback must be thread safe. | 578 // the trace buffer is full. The callback must be thread safe. |
| 560 typedef base::Callback<void(void)> BufferFullCallback; | 579 typedef base::Callback<void(void)> BufferFullCallback; |
| 561 void SetBufferFullCallback(const BufferFullCallback& cb); | 580 void SetBufferFullCallback(const BufferFullCallback& cb); |
| 562 | 581 |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 698 Data* p_data_; | 717 Data* p_data_; |
| 699 Data data_; | 718 Data data_; |
| 700 }; | 719 }; |
| 701 | 720 |
| 702 } // namespace internal | 721 } // namespace internal |
| 703 | 722 |
| 704 } // namespace debug | 723 } // namespace debug |
| 705 } // namespace base | 724 } // namespace base |
| 706 | 725 |
| 707 #endif // BASE_DEBUG_TRACE_EVENT_H_ | 726 #endif // BASE_DEBUG_TRACE_EVENT_H_ |
| OLD | NEW |