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

Side by Side Diff: base/trace_event/trace_event_impl.h

Issue 1122153002: Fixit: Fork base::TimeTicks --> TimeTicks + ThreadTicks + TraceTicks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@FIXIT_timeclasses_1of2
Patch Set: REBASE after it passed CQ but did not commit to tree Created 5 years, 6 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
« no previous file with comments | « base/trace_event/trace_event_android.cc ('k') | base/trace_event/trace_event_impl.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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 5
6 #ifndef BASE_TRACE_EVENT_TRACE_EVENT_IMPL_H_ 6 #ifndef BASE_TRACE_EVENT_TRACE_EVENT_IMPL_H_
7 #define BASE_TRACE_EVENT_TRACE_EVENT_IMPL_H_ 7 #define BASE_TRACE_EVENT_TRACE_EVENT_IMPL_H_
8 8
9 #include <stack> 9 #include <stack>
10 #include <string> 10 #include <string>
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 100
101 TraceEvent(); 101 TraceEvent();
102 ~TraceEvent(); 102 ~TraceEvent();
103 103
104 // We don't need to copy TraceEvent except when TraceEventBuffer is cloned. 104 // We don't need to copy TraceEvent except when TraceEventBuffer is cloned.
105 // Use explicit copy method to avoid accidentally misuse of copy. 105 // Use explicit copy method to avoid accidentally misuse of copy.
106 void CopyFrom(const TraceEvent& other); 106 void CopyFrom(const TraceEvent& other);
107 107
108 void Initialize( 108 void Initialize(
109 int thread_id, 109 int thread_id,
110 TimeTicks timestamp, 110 TraceTicks timestamp,
111 TimeTicks thread_timestamp, 111 ThreadTicks thread_timestamp,
112 char phase, 112 char phase,
113 const unsigned char* category_group_enabled, 113 const unsigned char* category_group_enabled,
114 const char* name, 114 const char* name,
115 unsigned long long id, 115 unsigned long long id,
116 int num_args, 116 int num_args,
117 const char** arg_names, 117 const char** arg_names,
118 const unsigned char* arg_types, 118 const unsigned char* arg_types,
119 const unsigned long long* arg_values, 119 const unsigned long long* arg_values,
120 const scoped_refptr<ConvertableToTraceFormat>* convertable_values, 120 const scoped_refptr<ConvertableToTraceFormat>* convertable_values,
121 unsigned char flags); 121 unsigned char flags);
122 122
123 void Reset(); 123 void Reset();
124 124
125 void UpdateDuration(const TimeTicks& now, const TimeTicks& thread_now); 125 void UpdateDuration(const TraceTicks& now, const ThreadTicks& thread_now);
126 126
127 // Serialize event data to JSON 127 // Serialize event data to JSON
128 typedef base::Callback<bool(const char* category_group_name, 128 typedef base::Callback<bool(const char* category_group_name,
129 const char* event_name)> ArgumentFilterPredicate; 129 const char* event_name)> ArgumentFilterPredicate;
130 void AppendAsJSON( 130 void AppendAsJSON(
131 std::string* out, 131 std::string* out,
132 const ArgumentFilterPredicate& argument_filter_predicate) const; 132 const ArgumentFilterPredicate& argument_filter_predicate) const;
133 void AppendPrettyPrinted(std::ostringstream* out) const; 133 void AppendPrettyPrinted(std::ostringstream* out) const;
134 134
135 static void AppendValueAsJSON(unsigned char type, 135 static void AppendValueAsJSON(unsigned char type,
136 TraceValue value, 136 TraceValue value,
137 std::string* out); 137 std::string* out);
138 138
139 TimeTicks timestamp() const { return timestamp_; } 139 TraceTicks timestamp() const { return timestamp_; }
140 TimeTicks thread_timestamp() const { return thread_timestamp_; } 140 ThreadTicks thread_timestamp() const { return thread_timestamp_; }
141 char phase() const { return phase_; } 141 char phase() const { return phase_; }
142 int thread_id() const { return thread_id_; } 142 int thread_id() const { return thread_id_; }
143 TimeDelta duration() const { return duration_; } 143 TimeDelta duration() const { return duration_; }
144 TimeDelta thread_duration() const { return thread_duration_; } 144 TimeDelta thread_duration() const { return thread_duration_; }
145 unsigned long long id() const { return id_; } 145 unsigned long long id() const { return id_; }
146 unsigned char flags() const { return flags_; } 146 unsigned char flags() const { return flags_; }
147 147
148 // Exposed for unittesting: 148 // Exposed for unittesting:
149 149
150 const base::RefCountedString* parameter_copy_storage() const { 150 const base::RefCountedString* parameter_copy_storage() const {
151 return parameter_copy_storage_.get(); 151 return parameter_copy_storage_.get();
152 } 152 }
153 153
154 const unsigned char* category_group_enabled() const { 154 const unsigned char* category_group_enabled() const {
155 return category_group_enabled_; 155 return category_group_enabled_;
156 } 156 }
157 157
158 const char* name() const { return name_; } 158 const char* name() const { return name_; }
159 159
160 #if defined(OS_ANDROID) 160 #if defined(OS_ANDROID)
161 void SendToATrace(); 161 void SendToATrace();
162 #endif 162 #endif
163 163
164 private: 164 private:
165 // Note: these are ordered by size (largest first) for optimal packing. 165 // Note: these are ordered by size (largest first) for optimal packing.
166 TimeTicks timestamp_; 166 TraceTicks timestamp_;
167 TimeTicks thread_timestamp_; 167 ThreadTicks thread_timestamp_;
168 TimeDelta duration_; 168 TimeDelta duration_;
169 TimeDelta thread_duration_; 169 TimeDelta thread_duration_;
170 // id_ can be used to store phase-specific data. 170 // id_ can be used to store phase-specific data.
171 unsigned long long id_; 171 unsigned long long id_;
172 TraceValue arg_values_[kTraceMaxNumArgs]; 172 TraceValue arg_values_[kTraceMaxNumArgs];
173 const char* arg_names_[kTraceMaxNumArgs]; 173 const char* arg_names_[kTraceMaxNumArgs];
174 scoped_refptr<ConvertableToTraceFormat> convertable_values_[kTraceMaxNumArgs]; 174 scoped_refptr<ConvertableToTraceFormat> convertable_values_[kTraceMaxNumArgs];
175 const unsigned char* category_group_enabled_; 175 const unsigned char* category_group_enabled_;
176 const char* name_; 176 const char* name_;
177 scoped_refptr<base::RefCountedString> parameter_copy_storage_; 177 scoped_refptr<base::RefCountedString> parameter_copy_storage_;
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 372
373 // Not using base::Callback because of its limited by 7 parameters. 373 // Not using base::Callback because of its limited by 7 parameters.
374 // Also, using primitive type allows directly passing callback from WebCore. 374 // Also, using primitive type allows directly passing callback from WebCore.
375 // WARNING: It is possible for the previously set callback to be called 375 // WARNING: It is possible for the previously set callback to be called
376 // after a call to SetEventCallbackEnabled() that replaces or a call to 376 // after a call to SetEventCallbackEnabled() that replaces or a call to
377 // SetEventCallbackDisabled() that disables the callback. 377 // SetEventCallbackDisabled() that disables the callback.
378 // This callback may be invoked on any thread. 378 // This callback may be invoked on any thread.
379 // For TRACE_EVENT_PHASE_COMPLETE events, the client will still receive pairs 379 // For TRACE_EVENT_PHASE_COMPLETE events, the client will still receive pairs
380 // of TRACE_EVENT_PHASE_BEGIN and TRACE_EVENT_PHASE_END events to keep the 380 // of TRACE_EVENT_PHASE_BEGIN and TRACE_EVENT_PHASE_END events to keep the
381 // interface simple. 381 // interface simple.
382 typedef void (*EventCallback)(TimeTicks timestamp, 382 typedef void (*EventCallback)(TraceTicks timestamp,
383 char phase, 383 char phase,
384 const unsigned char* category_group_enabled, 384 const unsigned char* category_group_enabled,
385 const char* name, 385 const char* name,
386 unsigned long long id, 386 unsigned long long id,
387 int num_args, 387 int num_args,
388 const char* const arg_names[], 388 const char* const arg_names[],
389 const unsigned char arg_types[], 389 const unsigned char arg_types[],
390 const unsigned long long arg_values[], 390 const unsigned long long arg_values[],
391 unsigned char flags); 391 unsigned char flags);
392 392
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 const unsigned char* arg_types, 432 const unsigned char* arg_types,
433 const unsigned long long* arg_values, 433 const unsigned long long* arg_values,
434 const scoped_refptr<ConvertableToTraceFormat>* convertable_values, 434 const scoped_refptr<ConvertableToTraceFormat>* convertable_values,
435 unsigned char flags); 435 unsigned char flags);
436 TraceEventHandle AddTraceEventWithThreadIdAndTimestamp( 436 TraceEventHandle AddTraceEventWithThreadIdAndTimestamp(
437 char phase, 437 char phase,
438 const unsigned char* category_group_enabled, 438 const unsigned char* category_group_enabled,
439 const char* name, 439 const char* name,
440 unsigned long long id, 440 unsigned long long id,
441 int thread_id, 441 int thread_id,
442 const TimeTicks& timestamp, 442 const TraceTicks& timestamp,
443 int num_args, 443 int num_args,
444 const char** arg_names, 444 const char** arg_names,
445 const unsigned char* arg_types, 445 const unsigned char* arg_types,
446 const unsigned long long* arg_values, 446 const unsigned long long* arg_values,
447 const scoped_refptr<ConvertableToTraceFormat>* convertable_values, 447 const scoped_refptr<ConvertableToTraceFormat>* convertable_values,
448 unsigned char flags); 448 unsigned char flags);
449 static void AddTraceEventEtw(char phase, 449 static void AddTraceEventEtw(char phase,
450 const char* category_group, 450 const char* category_group,
451 const void* id, 451 const void* id,
452 const char* extra); 452 const char* extra);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 // Processes can have labels in addition to their names. Use labels, for 495 // Processes can have labels in addition to their names. Use labels, for
496 // instance, to list out the web page titles that a process is handling. 496 // instance, to list out the web page titles that a process is handling.
497 void UpdateProcessLabel(int label_id, const std::string& current_label); 497 void UpdateProcessLabel(int label_id, const std::string& current_label);
498 void RemoveProcessLabel(int label_id); 498 void RemoveProcessLabel(int label_id);
499 499
500 // Thread sort indices, if set, override the order of a thread will appear 500 // Thread sort indices, if set, override the order of a thread will appear
501 // within its process in the trace viewer. Threads are sorted first on their 501 // within its process in the trace viewer. Threads are sorted first on their
502 // sort index, ascending, then by their name, and then tid. 502 // sort index, ascending, then by their name, and then tid.
503 void SetThreadSortIndex(PlatformThreadId , int sort_index); 503 void SetThreadSortIndex(PlatformThreadId , int sort_index);
504 504
505 // Allow setting an offset between the current TimeTicks time and the time 505 // Allow setting an offset between the current TraceTicks time and the time
506 // that should be reported. 506 // that should be reported.
507 void SetTimeOffset(TimeDelta offset); 507 void SetTimeOffset(TimeDelta offset);
508 508
509 size_t GetObserverCountForTest() const; 509 size_t GetObserverCountForTest() const;
510 510
511 // Call this method if the current thread may block the message loop to 511 // Call this method if the current thread may block the message loop to
512 // prevent the thread from using the thread-local buffer because the thread 512 // prevent the thread from using the thread-local buffer because the thread
513 // may not handle the flush request in time causing lost of unflushed events. 513 // may not handle the flush request in time causing lost of unflushed events.
514 void SetCurrentThreadBlocksMessageLoop(); 514 void SetCurrentThreadBlocksMessageLoop();
515 515
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 InternalTraceOptions trace_options() const { 559 InternalTraceOptions trace_options() const {
560 return static_cast<InternalTraceOptions>( 560 return static_cast<InternalTraceOptions>(
561 subtle::NoBarrier_Load(&trace_options_)); 561 subtle::NoBarrier_Load(&trace_options_));
562 } 562 }
563 563
564 TraceBuffer* trace_buffer() const { return logged_events_.get(); } 564 TraceBuffer* trace_buffer() const { return logged_events_.get(); }
565 TraceBuffer* CreateTraceBuffer(); 565 TraceBuffer* CreateTraceBuffer();
566 TraceBuffer* CreateTraceBufferVectorOfSize(size_t max_chunks); 566 TraceBuffer* CreateTraceBufferVectorOfSize(size_t max_chunks);
567 567
568 std::string EventToConsoleMessage(unsigned char phase, 568 std::string EventToConsoleMessage(unsigned char phase,
569 const TimeTicks& timestamp, 569 const TraceTicks& timestamp,
570 TraceEvent* trace_event); 570 TraceEvent* trace_event);
571 571
572 TraceEvent* AddEventToThreadSharedChunkWhileLocked(TraceEventHandle* handle, 572 TraceEvent* AddEventToThreadSharedChunkWhileLocked(TraceEventHandle* handle,
573 bool check_buffer_is_full); 573 bool check_buffer_is_full);
574 void CheckIfBufferIsFullWhileLocked(); 574 void CheckIfBufferIsFullWhileLocked();
575 void SetDisabledWhileLocked(); 575 void SetDisabledWhileLocked();
576 576
577 TraceEvent* GetEventByHandleInternal(TraceEventHandle handle, 577 TraceEvent* GetEventByHandleInternal(TraceEventHandle handle,
578 OptionalAutoLock* lock); 578 OptionalAutoLock* lock);
579 579
580 // |generation| is used in the following callbacks to check if the callback 580 // |generation| is used in the following callbacks to check if the callback
581 // is called for the flush of the current |logged_events_|. 581 // is called for the flush of the current |logged_events_|.
582 void FlushCurrentThread(int generation); 582 void FlushCurrentThread(int generation);
583 // Usually it runs on a different thread. 583 // Usually it runs on a different thread.
584 static void ConvertTraceEventsToTraceFormat( 584 static void ConvertTraceEventsToTraceFormat(
585 scoped_ptr<TraceBuffer> logged_events, 585 scoped_ptr<TraceBuffer> logged_events,
586 const TraceLog::OutputCallback& flush_output_callback, 586 const TraceLog::OutputCallback& flush_output_callback,
587 const TraceEvent::ArgumentFilterPredicate& argument_filter_predicate); 587 const TraceEvent::ArgumentFilterPredicate& argument_filter_predicate);
588 void FinishFlush(int generation); 588 void FinishFlush(int generation);
589 void OnFlushTimeout(int generation); 589 void OnFlushTimeout(int generation);
590 590
591 int generation() const { 591 int generation() const {
592 return static_cast<int>(subtle::NoBarrier_Load(&generation_)); 592 return static_cast<int>(subtle::NoBarrier_Load(&generation_));
593 } 593 }
594 bool CheckGeneration(int generation) const { 594 bool CheckGeneration(int generation) const {
595 return generation == this->generation(); 595 return generation == this->generation();
596 } 596 }
597 void UseNextTraceBuffer(); 597 void UseNextTraceBuffer();
598 598
599 TimeTicks OffsetNow() const { 599 TraceTicks OffsetNow() const {
600 return OffsetTimestamp(TimeTicks::NowFromSystemTraceTime()); 600 return OffsetTimestamp(TraceTicks::Now());
601 } 601 }
602 TimeTicks OffsetTimestamp(const TimeTicks& timestamp) const { 602 TraceTicks OffsetTimestamp(const TraceTicks& timestamp) const {
603 return timestamp - time_offset_; 603 return timestamp - time_offset_;
604 } 604 }
605 605
606 // Internal representation of trace options since we store the currently used 606 // Internal representation of trace options since we store the currently used
607 // trace option as an AtomicWord. 607 // trace option as an AtomicWord.
608 static const InternalTraceOptions kInternalNone; 608 static const InternalTraceOptions kInternalNone;
609 static const InternalTraceOptions kInternalRecordUntilFull; 609 static const InternalTraceOptions kInternalRecordUntilFull;
610 static const InternalTraceOptions kInternalRecordContinuously; 610 static const InternalTraceOptions kInternalRecordContinuously;
611 static const InternalTraceOptions kInternalEchoToConsole; 611 static const InternalTraceOptions kInternalEchoToConsole;
612 static const InternalTraceOptions kInternalEnableSampling; 612 static const InternalTraceOptions kInternalEnableSampling;
(...skipping 13 matching lines...) Expand all
626 bool dispatching_to_observer_list_; 626 bool dispatching_to_observer_list_;
627 std::vector<EnabledStateObserver*> enabled_state_observer_list_; 627 std::vector<EnabledStateObserver*> enabled_state_observer_list_;
628 628
629 std::string process_name_; 629 std::string process_name_;
630 base::hash_map<int, std::string> process_labels_; 630 base::hash_map<int, std::string> process_labels_;
631 int process_sort_index_; 631 int process_sort_index_;
632 base::hash_map<int, int> thread_sort_indices_; 632 base::hash_map<int, int> thread_sort_indices_;
633 base::hash_map<int, std::string> thread_names_; 633 base::hash_map<int, std::string> thread_names_;
634 634
635 // The following two maps are used only when ECHO_TO_CONSOLE. 635 // The following two maps are used only when ECHO_TO_CONSOLE.
636 base::hash_map<int, std::stack<TimeTicks> > thread_event_start_times_; 636 base::hash_map<int, std::stack<TraceTicks> > thread_event_start_times_;
637 base::hash_map<std::string, int> thread_colors_; 637 base::hash_map<std::string, int> thread_colors_;
638 638
639 TimeTicks buffer_limit_reached_timestamp_; 639 TraceTicks buffer_limit_reached_timestamp_;
640 640
641 // XORed with TraceID to make it unlikely to collide with other processes. 641 // XORed with TraceID to make it unlikely to collide with other processes.
642 unsigned long long process_id_hash_; 642 unsigned long long process_id_hash_;
643 643
644 int process_id_; 644 int process_id_;
645 645
646 TimeDelta time_offset_; 646 TimeDelta time_offset_;
647 647
648 // Allow tests to wake up when certain events occur. 648 // Allow tests to wake up when certain events occur.
649 WatchEventCallback watch_event_callback_; 649 WatchEventCallback watch_event_callback_;
(...skipping 30 matching lines...) Expand all
680 subtle::AtomicWord generation_; 680 subtle::AtomicWord generation_;
681 bool use_worker_thread_; 681 bool use_worker_thread_;
682 682
683 DISALLOW_COPY_AND_ASSIGN(TraceLog); 683 DISALLOW_COPY_AND_ASSIGN(TraceLog);
684 }; 684 };
685 685
686 } // namespace trace_event 686 } // namespace trace_event
687 } // namespace base 687 } // namespace base
688 688
689 #endif // BASE_TRACE_EVENT_TRACE_EVENT_IMPL_H_ 689 #endif // BASE_TRACE_EVENT_TRACE_EVENT_IMPL_H_
OLDNEW
« no previous file with comments | « base/trace_event/trace_event_android.cc ('k') | base/trace_event/trace_event_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698