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

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

Issue 1067233002: Added a trace option for whitewashing trace args against a known-PII-less list. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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
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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 const unsigned char* arg_types, 114 const unsigned char* arg_types,
115 const unsigned long long* arg_values, 115 const unsigned long long* arg_values,
116 const scoped_refptr<ConvertableToTraceFormat>* convertable_values, 116 const scoped_refptr<ConvertableToTraceFormat>* convertable_values,
117 unsigned char flags); 117 unsigned char flags);
118 118
119 void Reset(); 119 void Reset();
120 120
121 void UpdateDuration(const TimeTicks& now, const TimeTicks& thread_now); 121 void UpdateDuration(const TimeTicks& now, const TimeTicks& thread_now);
122 122
123 // Serialize event data to JSON 123 // Serialize event data to JSON
124 void AppendAsJSON(std::string* out) const; 124 void AppendAsJSON(std::string* out, bool enable_args_whitelist) const;
125 void AppendPrettyPrinted(std::ostringstream* out) const; 125 void AppendPrettyPrinted(std::ostringstream* out) const;
126 126
127 static void AppendValueAsJSON(unsigned char type, 127 static void AppendValueAsJSON(unsigned char type,
128 TraceValue value, 128 TraceValue value,
129 std::string* out); 129 std::string* out);
130 130
131 TimeTicks timestamp() const { return timestamp_; } 131 TimeTicks timestamp() const { return timestamp_; }
132 TimeTicks thread_timestamp() const { return thread_timestamp_; } 132 TimeTicks thread_timestamp() const { return thread_timestamp_; }
133 char phase() const { return phase_; } 133 char phase() const { return phase_; }
134 int thread_id() const { return thread_id_; } 134 int thread_id() const { return thread_id_; }
(...skipping 12 matching lines...) Expand all
147 return category_group_enabled_; 147 return category_group_enabled_;
148 } 148 }
149 149
150 const char* name() const { return name_; } 150 const char* name() const { return name_; }
151 151
152 #if defined(OS_ANDROID) 152 #if defined(OS_ANDROID)
153 void SendToATrace(); 153 void SendToATrace();
154 #endif 154 #endif
155 155
156 private: 156 private:
157 bool IsPIIWhitelisted() const;
158
159 // List of events with args whitelisted for PII.
160 static const char* const kEventArgsWhitelist[][2];
161
157 // Note: these are ordered by size (largest first) for optimal packing. 162 // Note: these are ordered by size (largest first) for optimal packing.
158 TimeTicks timestamp_; 163 TimeTicks timestamp_;
159 TimeTicks thread_timestamp_; 164 TimeTicks thread_timestamp_;
160 TimeDelta duration_; 165 TimeDelta duration_;
161 TimeDelta thread_duration_; 166 TimeDelta thread_duration_;
162 // id_ can be used to store phase-specific data. 167 // id_ can be used to store phase-specific data.
163 unsigned long long id_; 168 unsigned long long id_;
164 TraceValue arg_values_[kTraceMaxNumArgs]; 169 TraceValue arg_values_[kTraceMaxNumArgs];
165 const char* arg_names_[kTraceMaxNumArgs]; 170 const char* arg_names_[kTraceMaxNumArgs];
166 scoped_refptr<ConvertableToTraceFormat> convertable_values_[kTraceMaxNumArgs]; 171 scoped_refptr<ConvertableToTraceFormat> convertable_values_[kTraceMaxNumArgs];
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 ECHO_TO_CONSOLE, 380 ECHO_TO_CONSOLE,
376 381
377 // Record until the trace buffer is full, but with a huge buffer size. 382 // Record until the trace buffer is full, but with a huge buffer size.
378 RECORD_AS_MUCH_AS_POSSIBLE 383 RECORD_AS_MUCH_AS_POSSIBLE
379 }; 384 };
380 385
381 struct BASE_EXPORT TraceOptions { 386 struct BASE_EXPORT TraceOptions {
382 TraceOptions() 387 TraceOptions()
383 : record_mode(RECORD_UNTIL_FULL), 388 : record_mode(RECORD_UNTIL_FULL),
384 enable_sampling(false), 389 enable_sampling(false),
385 enable_systrace(false) {} 390 enable_systrace(false),
391 enable_args_whitelist(false) {}
386 392
387 explicit TraceOptions(TraceRecordMode record_mode) 393 explicit TraceOptions(TraceRecordMode record_mode)
388 : record_mode(record_mode), 394 : record_mode(record_mode),
389 enable_sampling(false), 395 enable_sampling(false),
390 enable_systrace(false) {} 396 enable_systrace(false),
397 enable_args_whitelist(false) {}
391 398
392 // |options_string| is a comma-delimited list of trace options. 399 // |options_string| is a comma-delimited list of trace options.
393 // Possible options are: "record-until-full", "record-continuously", 400 // Possible options are: "record-until-full", "record-continuously",
394 // "trace-to-console", "enable-sampling" and "enable-systrace". 401 // "trace-to-console", "enable-sampling" and "enable-systrace".
395 // The first 3 options are trace recoding modes and hence 402 // The first 3 options are trace recoding modes and hence
396 // mutually exclusive. If more than one trace recording modes appear in the 403 // mutually exclusive. If more than one trace recording modes appear in the
397 // options_string, the last one takes precedence. If none of the trace 404 // options_string, the last one takes precedence. If none of the trace
398 // recording mode is specified, recording mode is RECORD_UNTIL_FULL. 405 // recording mode is specified, recording mode is RECORD_UNTIL_FULL.
399 // 406 //
400 // The trace option will first be reset to the default option 407 // The trace option will first be reset to the default option
(...skipping 10 matching lines...) Expand all
411 // will set ECHO_TO_CONSOLE as the recording mode. 418 // will set ECHO_TO_CONSOLE as the recording mode.
412 // 419 //
413 // Returns true on success. 420 // Returns true on success.
414 bool SetFromString(const std::string& options_string); 421 bool SetFromString(const std::string& options_string);
415 422
416 std::string ToString() const; 423 std::string ToString() const;
417 424
418 TraceRecordMode record_mode; 425 TraceRecordMode record_mode;
419 bool enable_sampling; 426 bool enable_sampling;
420 bool enable_systrace; 427 bool enable_systrace;
428 bool enable_args_whitelist;
421 }; 429 };
422 430
423 struct BASE_EXPORT TraceLogStatus { 431 struct BASE_EXPORT TraceLogStatus {
424 TraceLogStatus(); 432 TraceLogStatus();
425 ~TraceLogStatus(); 433 ~TraceLogStatus();
426 size_t event_capacity; 434 size_t event_capacity;
427 size_t event_count; 435 size_t event_count;
428 }; 436 };
429 437
430 class BASE_EXPORT TraceLog { 438 class BASE_EXPORT TraceLog {
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 void CheckIfBufferIsFullWhileLocked(); 713 void CheckIfBufferIsFullWhileLocked();
706 void SetDisabledWhileLocked(); 714 void SetDisabledWhileLocked();
707 715
708 TraceEvent* GetEventByHandleInternal(TraceEventHandle handle, 716 TraceEvent* GetEventByHandleInternal(TraceEventHandle handle,
709 OptionalAutoLock* lock); 717 OptionalAutoLock* lock);
710 718
711 // |generation| is used in the following callbacks to check if the callback 719 // |generation| is used in the following callbacks to check if the callback
712 // is called for the flush of the current |logged_events_|. 720 // is called for the flush of the current |logged_events_|.
713 void FlushCurrentThread(int generation); 721 void FlushCurrentThread(int generation);
714 // Usually it runs on a different thread. 722 // Usually it runs on a different thread.
715 static void ConvertTraceEventsToTraceFormat( 723 void ConvertTraceEventsToTraceFormat(
716 scoped_ptr<TraceBuffer> logged_events, 724 scoped_ptr<TraceBuffer> logged_events,
717 const TraceLog::OutputCallback& flush_output_callback); 725 const TraceLog::OutputCallback& flush_output_callback);
718 void FinishFlush(int generation); 726 void FinishFlush(int generation);
719 void OnFlushTimeout(int generation); 727 void OnFlushTimeout(int generation);
720 728
721 int generation() const { 729 int generation() const {
722 return static_cast<int>(subtle::NoBarrier_Load(&generation_)); 730 return static_cast<int>(subtle::NoBarrier_Load(&generation_));
723 } 731 }
724 bool CheckGeneration(int generation) const { 732 bool CheckGeneration(int generation) const {
725 return generation == this->generation(); 733 return generation == this->generation();
726 } 734 }
727 void UseNextTraceBuffer(); 735 void UseNextTraceBuffer();
728 736
729 TimeTicks OffsetNow() const { 737 TimeTicks OffsetNow() const {
730 return OffsetTimestamp(TimeTicks::NowFromSystemTraceTime()); 738 return OffsetTimestamp(TimeTicks::NowFromSystemTraceTime());
731 } 739 }
732 TimeTicks OffsetTimestamp(const TimeTicks& timestamp) const { 740 TimeTicks OffsetTimestamp(const TimeTicks& timestamp) const {
733 return timestamp - time_offset_; 741 return timestamp - time_offset_;
734 } 742 }
735 743
736 // Internal representation of trace options since we store the currently used 744 // Internal representation of trace options since we store the currently used
737 // trace option as an AtomicWord. 745 // trace option as an AtomicWord.
738 static const InternalTraceOptions kInternalNone; 746 static const InternalTraceOptions kInternalNone;
739 static const InternalTraceOptions kInternalRecordUntilFull; 747 static const InternalTraceOptions kInternalRecordUntilFull;
740 static const InternalTraceOptions kInternalRecordContinuously; 748 static const InternalTraceOptions kInternalRecordContinuously;
741 static const InternalTraceOptions kInternalEchoToConsole; 749 static const InternalTraceOptions kInternalEchoToConsole;
742 static const InternalTraceOptions kInternalEnableSampling; 750 static const InternalTraceOptions kInternalEnableSampling;
743 static const InternalTraceOptions kInternalRecordAsMuchAsPossible; 751 static const InternalTraceOptions kInternalRecordAsMuchAsPossible;
752 static const InternalTraceOptions kInternalEnableArgsWhitelist;
744 753
745 // This lock protects TraceLog member accesses (except for members protected 754 // This lock protects TraceLog member accesses (except for members protected
746 // by thread_info_lock_) from arbitrary threads. 755 // by thread_info_lock_) from arbitrary threads.
747 mutable Lock lock_; 756 mutable Lock lock_;
748 // This lock protects accesses to thread_names_, thread_event_start_times_ 757 // This lock protects accesses to thread_names_, thread_event_start_times_
749 // and thread_colors_. 758 // and thread_colors_.
750 Lock thread_info_lock_; 759 Lock thread_info_lock_;
751 Mode mode_; 760 Mode mode_;
752 int num_traces_recorded_; 761 int num_traces_recorded_;
753 scoped_ptr<TraceBuffer> logged_events_; 762 scoped_ptr<TraceBuffer> logged_events_;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 subtle::AtomicWord generation_; 817 subtle::AtomicWord generation_;
809 bool use_worker_thread_; 818 bool use_worker_thread_;
810 819
811 DISALLOW_COPY_AND_ASSIGN(TraceLog); 820 DISALLOW_COPY_AND_ASSIGN(TraceLog);
812 }; 821 };
813 822
814 } // namespace trace_event 823 } // namespace trace_event
815 } // namespace base 824 } // namespace base
816 825
817 #endif // BASE_TRACE_EVENT_TRACE_EVENT_IMPL_H_ 826 #endif // BASE_TRACE_EVENT_TRACE_EVENT_IMPL_H_
OLDNEW
« no previous file with comments | « no previous file | base/trace_event/trace_event_impl.cc » ('j') | base/trace_event/trace_event_impl_constants.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698