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

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

Issue 1121463005: Fixit: Split base::TimeTicks --> TimeTicks + ThreadTicks + TraceTicks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More Windows compile fixes. Created 5 years, 7 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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 98
99 TraceEvent(); 99 TraceEvent();
100 ~TraceEvent(); 100 ~TraceEvent();
101 101
102 // We don't need to copy TraceEvent except when TraceEventBuffer is cloned. 102 // We don't need to copy TraceEvent except when TraceEventBuffer is cloned.
103 // Use explicit copy method to avoid accidentally misuse of copy. 103 // Use explicit copy method to avoid accidentally misuse of copy.
104 void CopyFrom(const TraceEvent& other); 104 void CopyFrom(const TraceEvent& other);
105 105
106 void Initialize( 106 void Initialize(
107 int thread_id, 107 int thread_id,
108 TimeTicks timestamp, 108 TraceTicks timestamp,
109 TimeTicks thread_timestamp, 109 ThreadTicks thread_timestamp,
110 char phase, 110 char phase,
111 const unsigned char* category_group_enabled, 111 const unsigned char* category_group_enabled,
112 const char* name, 112 const char* name,
113 unsigned long long id, 113 unsigned long long id,
114 int num_args, 114 int num_args,
115 const char** arg_names, 115 const char** arg_names,
116 const unsigned char* arg_types, 116 const unsigned char* arg_types,
117 const unsigned long long* arg_values, 117 const unsigned long long* arg_values,
118 const scoped_refptr<ConvertableToTraceFormat>* convertable_values, 118 const scoped_refptr<ConvertableToTraceFormat>* convertable_values,
119 unsigned char flags); 119 unsigned char flags);
120 120
121 void Reset(); 121 void Reset();
122 122
123 void UpdateDuration(const TimeTicks& now, const TimeTicks& thread_now); 123 void UpdateDuration(const TraceTicks& now, const ThreadTicks& thread_now);
124 124
125 // Serialize event data to JSON 125 // Serialize event data to JSON
126 void AppendAsJSON(std::string* out) const; 126 void AppendAsJSON(std::string* out) const;
127 void AppendPrettyPrinted(std::ostringstream* out) const; 127 void AppendPrettyPrinted(std::ostringstream* out) const;
128 128
129 static void AppendValueAsJSON(unsigned char type, 129 static void AppendValueAsJSON(unsigned char type,
130 TraceValue value, 130 TraceValue value,
131 std::string* out); 131 std::string* out);
132 132
133 TimeTicks timestamp() const { return timestamp_; } 133 TraceTicks timestamp() const { return timestamp_; }
134 TimeTicks thread_timestamp() const { return thread_timestamp_; } 134 ThreadTicks thread_timestamp() const { return thread_timestamp_; }
135 char phase() const { return phase_; } 135 char phase() const { return phase_; }
136 int thread_id() const { return thread_id_; } 136 int thread_id() const { return thread_id_; }
137 TimeDelta duration() const { return duration_; } 137 TimeDelta duration() const { return duration_; }
138 TimeDelta thread_duration() const { return thread_duration_; } 138 TimeDelta thread_duration() const { return thread_duration_; }
139 unsigned long long id() const { return id_; } 139 unsigned long long id() const { return id_; }
140 unsigned char flags() const { return flags_; } 140 unsigned char flags() const { return flags_; }
141 141
142 // Exposed for unittesting: 142 // Exposed for unittesting:
143 143
144 const base::RefCountedString* parameter_copy_storage() const { 144 const base::RefCountedString* parameter_copy_storage() const {
145 return parameter_copy_storage_.get(); 145 return parameter_copy_storage_.get();
146 } 146 }
147 147
148 const unsigned char* category_group_enabled() const { 148 const unsigned char* category_group_enabled() const {
149 return category_group_enabled_; 149 return category_group_enabled_;
150 } 150 }
151 151
152 const char* name() const { return name_; } 152 const char* name() const { return name_; }
153 153
154 #if defined(OS_ANDROID) 154 #if defined(OS_ANDROID)
155 void SendToATrace(); 155 void SendToATrace();
156 #endif 156 #endif
157 157
158 private: 158 private:
159 // Note: these are ordered by size (largest first) for optimal packing. 159 // Note: these are ordered by size (largest first) for optimal packing.
160 TimeTicks timestamp_; 160 TraceTicks timestamp_;
161 TimeTicks thread_timestamp_; 161 ThreadTicks thread_timestamp_;
162 TimeDelta duration_; 162 TimeDelta duration_;
163 TimeDelta thread_duration_; 163 TimeDelta thread_duration_;
164 // id_ can be used to store phase-specific data. 164 // id_ can be used to store phase-specific data.
165 unsigned long long id_; 165 unsigned long long id_;
166 TraceValue arg_values_[kTraceMaxNumArgs]; 166 TraceValue arg_values_[kTraceMaxNumArgs];
167 const char* arg_names_[kTraceMaxNumArgs]; 167 const char* arg_names_[kTraceMaxNumArgs];
168 scoped_refptr<ConvertableToTraceFormat> convertable_values_[kTraceMaxNumArgs]; 168 scoped_refptr<ConvertableToTraceFormat> convertable_values_[kTraceMaxNumArgs];
169 const unsigned char* category_group_enabled_; 169 const unsigned char* category_group_enabled_;
170 const char* name_; 170 const char* name_;
171 scoped_refptr<base::RefCountedString> parameter_copy_storage_; 171 scoped_refptr<base::RefCountedString> parameter_copy_storage_;
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 511
512 // Not using base::Callback because of its limited by 7 parameters. 512 // Not using base::Callback because of its limited by 7 parameters.
513 // Also, using primitive type allows directly passing callback from WebCore. 513 // Also, using primitive type allows directly passing callback from WebCore.
514 // WARNING: It is possible for the previously set callback to be called 514 // WARNING: It is possible for the previously set callback to be called
515 // after a call to SetEventCallbackEnabled() that replaces or a call to 515 // after a call to SetEventCallbackEnabled() that replaces or a call to
516 // SetEventCallbackDisabled() that disables the callback. 516 // SetEventCallbackDisabled() that disables the callback.
517 // This callback may be invoked on any thread. 517 // This callback may be invoked on any thread.
518 // For TRACE_EVENT_PHASE_COMPLETE events, the client will still receive pairs 518 // For TRACE_EVENT_PHASE_COMPLETE events, the client will still receive pairs
519 // of TRACE_EVENT_PHASE_BEGIN and TRACE_EVENT_PHASE_END events to keep the 519 // of TRACE_EVENT_PHASE_BEGIN and TRACE_EVENT_PHASE_END events to keep the
520 // interface simple. 520 // interface simple.
521 typedef void (*EventCallback)(TimeTicks timestamp, 521 typedef void (*EventCallback)(TraceTicks timestamp,
522 char phase, 522 char phase,
523 const unsigned char* category_group_enabled, 523 const unsigned char* category_group_enabled,
524 const char* name, 524 const char* name,
525 unsigned long long id, 525 unsigned long long id,
526 int num_args, 526 int num_args,
527 const char* const arg_names[], 527 const char* const arg_names[],
528 const unsigned char arg_types[], 528 const unsigned char arg_types[],
529 const unsigned long long arg_values[], 529 const unsigned long long arg_values[],
530 unsigned char flags); 530 unsigned char flags);
531 531
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 const unsigned char* arg_types, 569 const unsigned char* arg_types,
570 const unsigned long long* arg_values, 570 const unsigned long long* arg_values,
571 const scoped_refptr<ConvertableToTraceFormat>* convertable_values, 571 const scoped_refptr<ConvertableToTraceFormat>* convertable_values,
572 unsigned char flags); 572 unsigned char flags);
573 TraceEventHandle AddTraceEventWithThreadIdAndTimestamp( 573 TraceEventHandle AddTraceEventWithThreadIdAndTimestamp(
574 char phase, 574 char phase,
575 const unsigned char* category_group_enabled, 575 const unsigned char* category_group_enabled,
576 const char* name, 576 const char* name,
577 unsigned long long id, 577 unsigned long long id,
578 int thread_id, 578 int thread_id,
579 const TimeTicks& timestamp, 579 const TraceTicks& timestamp,
580 int num_args, 580 int num_args,
581 const char** arg_names, 581 const char** arg_names,
582 const unsigned char* arg_types, 582 const unsigned char* arg_types,
583 const unsigned long long* arg_values, 583 const unsigned long long* arg_values,
584 const scoped_refptr<ConvertableToTraceFormat>* convertable_values, 584 const scoped_refptr<ConvertableToTraceFormat>* convertable_values,
585 unsigned char flags); 585 unsigned char flags);
586 static void AddTraceEventEtw(char phase, 586 static void AddTraceEventEtw(char phase,
587 const char* category_group, 587 const char* category_group,
588 const void* id, 588 const void* id,
589 const char* extra); 589 const char* extra);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 // Processes can have labels in addition to their names. Use labels, for 632 // Processes can have labels in addition to their names. Use labels, for
633 // instance, to list out the web page titles that a process is handling. 633 // instance, to list out the web page titles that a process is handling.
634 void UpdateProcessLabel(int label_id, const std::string& current_label); 634 void UpdateProcessLabel(int label_id, const std::string& current_label);
635 void RemoveProcessLabel(int label_id); 635 void RemoveProcessLabel(int label_id);
636 636
637 // Thread sort indices, if set, override the order of a thread will appear 637 // Thread sort indices, if set, override the order of a thread will appear
638 // within its process in the trace viewer. Threads are sorted first on their 638 // within its process in the trace viewer. Threads are sorted first on their
639 // sort index, ascending, then by their name, and then tid. 639 // sort index, ascending, then by their name, and then tid.
640 void SetThreadSortIndex(PlatformThreadId , int sort_index); 640 void SetThreadSortIndex(PlatformThreadId , int sort_index);
641 641
642 // Allow setting an offset between the current TimeTicks time and the time 642 // Allow setting an offset between the current TraceTicks time and the time
643 // that should be reported. 643 // that should be reported.
644 void SetTimeOffset(TimeDelta offset); 644 void SetTimeOffset(TimeDelta offset);
645 645
646 size_t GetObserverCountForTest() const; 646 size_t GetObserverCountForTest() const;
647 647
648 // Call this method if the current thread may block the message loop to 648 // Call this method if the current thread may block the message loop to
649 // prevent the thread from using the thread-local buffer because the thread 649 // prevent the thread from using the thread-local buffer because the thread
650 // may not handle the flush request in time causing lost of unflushed events. 650 // may not handle the flush request in time causing lost of unflushed events.
651 void SetCurrentThreadBlocksMessageLoop(); 651 void SetCurrentThreadBlocksMessageLoop();
652 652
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 InternalTraceOptions trace_options() const { 696 InternalTraceOptions trace_options() const {
697 return static_cast<InternalTraceOptions>( 697 return static_cast<InternalTraceOptions>(
698 subtle::NoBarrier_Load(&trace_options_)); 698 subtle::NoBarrier_Load(&trace_options_));
699 } 699 }
700 700
701 TraceBuffer* trace_buffer() const { return logged_events_.get(); } 701 TraceBuffer* trace_buffer() const { return logged_events_.get(); }
702 TraceBuffer* CreateTraceBuffer(); 702 TraceBuffer* CreateTraceBuffer();
703 TraceBuffer* CreateTraceBufferVectorOfSize(size_t max_chunks); 703 TraceBuffer* CreateTraceBufferVectorOfSize(size_t max_chunks);
704 704
705 std::string EventToConsoleMessage(unsigned char phase, 705 std::string EventToConsoleMessage(unsigned char phase,
706 const TimeTicks& timestamp, 706 const TraceTicks& timestamp,
707 TraceEvent* trace_event); 707 TraceEvent* trace_event);
708 708
709 TraceEvent* AddEventToThreadSharedChunkWhileLocked(TraceEventHandle* handle, 709 TraceEvent* AddEventToThreadSharedChunkWhileLocked(TraceEventHandle* handle,
710 bool check_buffer_is_full); 710 bool check_buffer_is_full);
711 void CheckIfBufferIsFullWhileLocked(); 711 void CheckIfBufferIsFullWhileLocked();
712 void SetDisabledWhileLocked(); 712 void SetDisabledWhileLocked();
713 713
714 TraceEvent* GetEventByHandleInternal(TraceEventHandle handle, 714 TraceEvent* GetEventByHandleInternal(TraceEventHandle handle,
715 OptionalAutoLock* lock); 715 OptionalAutoLock* lock);
716 716
717 // |generation| is used in the following callbacks to check if the callback 717 // |generation| is used in the following callbacks to check if the callback
718 // is called for the flush of the current |logged_events_|. 718 // is called for the flush of the current |logged_events_|.
719 void FlushCurrentThread(int generation); 719 void FlushCurrentThread(int generation);
720 // Usually it runs on a different thread. 720 // Usually it runs on a different thread.
721 static void ConvertTraceEventsToTraceFormat( 721 static void ConvertTraceEventsToTraceFormat(
722 scoped_ptr<TraceBuffer> logged_events, 722 scoped_ptr<TraceBuffer> logged_events,
723 const TraceLog::OutputCallback& flush_output_callback); 723 const TraceLog::OutputCallback& flush_output_callback);
724 void FinishFlush(int generation); 724 void FinishFlush(int generation);
725 void OnFlushTimeout(int generation); 725 void OnFlushTimeout(int generation);
726 726
727 int generation() const { 727 int generation() const {
728 return static_cast<int>(subtle::NoBarrier_Load(&generation_)); 728 return static_cast<int>(subtle::NoBarrier_Load(&generation_));
729 } 729 }
730 bool CheckGeneration(int generation) const { 730 bool CheckGeneration(int generation) const {
731 return generation == this->generation(); 731 return generation == this->generation();
732 } 732 }
733 void UseNextTraceBuffer(); 733 void UseNextTraceBuffer();
734 734
735 TimeTicks OffsetNow() const { 735 TraceTicks OffsetNow() const {
736 return OffsetTimestamp(TimeTicks::NowFromSystemTraceTime()); 736 return OffsetTimestamp(TraceTicks::Now());
737 } 737 }
738 TimeTicks OffsetTimestamp(const TimeTicks& timestamp) const { 738 TraceTicks OffsetTimestamp(const TraceTicks& timestamp) const {
739 return timestamp - time_offset_; 739 return timestamp - time_offset_;
740 } 740 }
741 741
742 // Internal representation of trace options since we store the currently used 742 // Internal representation of trace options since we store the currently used
743 // trace option as an AtomicWord. 743 // trace option as an AtomicWord.
744 static const InternalTraceOptions kInternalNone; 744 static const InternalTraceOptions kInternalNone;
745 static const InternalTraceOptions kInternalRecordUntilFull; 745 static const InternalTraceOptions kInternalRecordUntilFull;
746 static const InternalTraceOptions kInternalRecordContinuously; 746 static const InternalTraceOptions kInternalRecordContinuously;
747 static const InternalTraceOptions kInternalEchoToConsole; 747 static const InternalTraceOptions kInternalEchoToConsole;
748 static const InternalTraceOptions kInternalEnableSampling; 748 static const InternalTraceOptions kInternalEnableSampling;
(...skipping 12 matching lines...) Expand all
761 bool dispatching_to_observer_list_; 761 bool dispatching_to_observer_list_;
762 std::vector<EnabledStateObserver*> enabled_state_observer_list_; 762 std::vector<EnabledStateObserver*> enabled_state_observer_list_;
763 763
764 std::string process_name_; 764 std::string process_name_;
765 base::hash_map<int, std::string> process_labels_; 765 base::hash_map<int, std::string> process_labels_;
766 int process_sort_index_; 766 int process_sort_index_;
767 base::hash_map<int, int> thread_sort_indices_; 767 base::hash_map<int, int> thread_sort_indices_;
768 base::hash_map<int, std::string> thread_names_; 768 base::hash_map<int, std::string> thread_names_;
769 769
770 // The following two maps are used only when ECHO_TO_CONSOLE. 770 // The following two maps are used only when ECHO_TO_CONSOLE.
771 base::hash_map<int, std::stack<TimeTicks> > thread_event_start_times_; 771 base::hash_map<int, std::stack<TraceTicks> > thread_event_start_times_;
772 base::hash_map<std::string, int> thread_colors_; 772 base::hash_map<std::string, int> thread_colors_;
773 773
774 TimeTicks buffer_limit_reached_timestamp_; 774 TraceTicks buffer_limit_reached_timestamp_;
775 775
776 // XORed with TraceID to make it unlikely to collide with other processes. 776 // XORed with TraceID to make it unlikely to collide with other processes.
777 unsigned long long process_id_hash_; 777 unsigned long long process_id_hash_;
778 778
779 int process_id_; 779 int process_id_;
780 780
781 TimeDelta time_offset_; 781 TimeDelta time_offset_;
782 782
783 // Allow tests to wake up when certain events occur. 783 // Allow tests to wake up when certain events occur.
784 WatchEventCallback watch_event_callback_; 784 WatchEventCallback watch_event_callback_;
(...skipping 29 matching lines...) Expand all
814 subtle::AtomicWord generation_; 814 subtle::AtomicWord generation_;
815 bool use_worker_thread_; 815 bool use_worker_thread_;
816 816
817 DISALLOW_COPY_AND_ASSIGN(TraceLog); 817 DISALLOW_COPY_AND_ASSIGN(TraceLog);
818 }; 818 };
819 819
820 } // namespace trace_event 820 } // namespace trace_event
821 } // namespace base 821 } // namespace base
822 822
823 #endif // BASE_TRACE_EVENT_TRACE_EVENT_IMPL_H_ 823 #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