| 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 | 4 |
| 5 #ifndef BASE_TRACE_EVENT_TRACE_LOG_H_ | 5 #ifndef BASE_TRACE_EVENT_TRACE_LOG_H_ |
| 6 #define BASE_TRACE_EVENT_TRACE_LOG_H_ | 6 #define BASE_TRACE_EVENT_TRACE_LOG_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| 11 #include <memory> |
| 11 #include <string> | 12 #include <string> |
| 12 #include <vector> | 13 #include <vector> |
| 13 | 14 |
| 14 #include "base/atomicops.h" | 15 #include "base/atomicops.h" |
| 15 #include "base/containers/hash_tables.h" | 16 #include "base/containers/hash_tables.h" |
| 16 #include "base/gtest_prod_util.h" | 17 #include "base/gtest_prod_util.h" |
| 17 #include "base/macros.h" | 18 #include "base/macros.h" |
| 18 #include "base/memory/scoped_ptr.h" | |
| 19 #include "base/memory/scoped_vector.h" | 19 #include "base/memory/scoped_vector.h" |
| 20 #include "base/trace_event/memory_dump_provider.h" | 20 #include "base/trace_event/memory_dump_provider.h" |
| 21 #include "base/trace_event/trace_config.h" | 21 #include "base/trace_event/trace_config.h" |
| 22 #include "base/trace_event/trace_event_impl.h" | 22 #include "base/trace_event/trace_event_impl.h" |
| 23 #include "build/build_config.h" | 23 #include "build/build_config.h" |
| 24 | 24 |
| 25 namespace base { | 25 namespace base { |
| 26 | 26 |
| 27 template <typename Type> | 27 template <typename Type> |
| 28 struct DefaultSingletonTraits; | 28 struct DefaultSingletonTraits; |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 TraceEventHandle AddTraceEvent( | 184 TraceEventHandle AddTraceEvent( |
| 185 char phase, | 185 char phase, |
| 186 const unsigned char* category_group_enabled, | 186 const unsigned char* category_group_enabled, |
| 187 const char* name, | 187 const char* name, |
| 188 const char* scope, | 188 const char* scope, |
| 189 unsigned long long id, | 189 unsigned long long id, |
| 190 int num_args, | 190 int num_args, |
| 191 const char** arg_names, | 191 const char** arg_names, |
| 192 const unsigned char* arg_types, | 192 const unsigned char* arg_types, |
| 193 const unsigned long long* arg_values, | 193 const unsigned long long* arg_values, |
| 194 scoped_ptr<ConvertableToTraceFormat>* convertable_values, | 194 std::unique_ptr<ConvertableToTraceFormat>* convertable_values, |
| 195 unsigned int flags); | 195 unsigned int flags); |
| 196 TraceEventHandle AddTraceEventWithBindId( | 196 TraceEventHandle AddTraceEventWithBindId( |
| 197 char phase, | 197 char phase, |
| 198 const unsigned char* category_group_enabled, | 198 const unsigned char* category_group_enabled, |
| 199 const char* name, | 199 const char* name, |
| 200 const char* scope, | 200 const char* scope, |
| 201 unsigned long long id, | 201 unsigned long long id, |
| 202 unsigned long long bind_id, | 202 unsigned long long bind_id, |
| 203 int num_args, | 203 int num_args, |
| 204 const char** arg_names, | 204 const char** arg_names, |
| 205 const unsigned char* arg_types, | 205 const unsigned char* arg_types, |
| 206 const unsigned long long* arg_values, | 206 const unsigned long long* arg_values, |
| 207 scoped_ptr<ConvertableToTraceFormat>* convertable_values, | 207 std::unique_ptr<ConvertableToTraceFormat>* convertable_values, |
| 208 unsigned int flags); | 208 unsigned int flags); |
| 209 TraceEventHandle AddTraceEventWithProcessId( | 209 TraceEventHandle AddTraceEventWithProcessId( |
| 210 char phase, | 210 char phase, |
| 211 const unsigned char* category_group_enabled, | 211 const unsigned char* category_group_enabled, |
| 212 const char* name, | 212 const char* name, |
| 213 const char* scope, | 213 const char* scope, |
| 214 unsigned long long id, | 214 unsigned long long id, |
| 215 int process_id, | 215 int process_id, |
| 216 int num_args, | 216 int num_args, |
| 217 const char** arg_names, | 217 const char** arg_names, |
| 218 const unsigned char* arg_types, | 218 const unsigned char* arg_types, |
| 219 const unsigned long long* arg_values, | 219 const unsigned long long* arg_values, |
| 220 scoped_ptr<ConvertableToTraceFormat>* convertable_values, | 220 std::unique_ptr<ConvertableToTraceFormat>* convertable_values, |
| 221 unsigned int flags); | 221 unsigned int flags); |
| 222 TraceEventHandle AddTraceEventWithThreadIdAndTimestamp( | 222 TraceEventHandle AddTraceEventWithThreadIdAndTimestamp( |
| 223 char phase, | 223 char phase, |
| 224 const unsigned char* category_group_enabled, | 224 const unsigned char* category_group_enabled, |
| 225 const char* name, | 225 const char* name, |
| 226 const char* scope, | 226 const char* scope, |
| 227 unsigned long long id, | 227 unsigned long long id, |
| 228 int thread_id, | 228 int thread_id, |
| 229 const TimeTicks& timestamp, | 229 const TimeTicks& timestamp, |
| 230 int num_args, | 230 int num_args, |
| 231 const char** arg_names, | 231 const char** arg_names, |
| 232 const unsigned char* arg_types, | 232 const unsigned char* arg_types, |
| 233 const unsigned long long* arg_values, | 233 const unsigned long long* arg_values, |
| 234 scoped_ptr<ConvertableToTraceFormat>* convertable_values, | 234 std::unique_ptr<ConvertableToTraceFormat>* convertable_values, |
| 235 unsigned int flags); | 235 unsigned int flags); |
| 236 TraceEventHandle AddTraceEventWithThreadIdAndTimestamp( | 236 TraceEventHandle AddTraceEventWithThreadIdAndTimestamp( |
| 237 char phase, | 237 char phase, |
| 238 const unsigned char* category_group_enabled, | 238 const unsigned char* category_group_enabled, |
| 239 const char* name, | 239 const char* name, |
| 240 const char* scope, | 240 const char* scope, |
| 241 unsigned long long id, | 241 unsigned long long id, |
| 242 unsigned long long bind_id, | 242 unsigned long long bind_id, |
| 243 int thread_id, | 243 int thread_id, |
| 244 const TimeTicks& timestamp, | 244 const TimeTicks& timestamp, |
| 245 int num_args, | 245 int num_args, |
| 246 const char** arg_names, | 246 const char** arg_names, |
| 247 const unsigned char* arg_types, | 247 const unsigned char* arg_types, |
| 248 const unsigned long long* arg_values, | 248 const unsigned long long* arg_values, |
| 249 scoped_ptr<ConvertableToTraceFormat>* convertable_values, | 249 std::unique_ptr<ConvertableToTraceFormat>* convertable_values, |
| 250 unsigned int flags); | 250 unsigned int flags); |
| 251 | 251 |
| 252 // Adds a metadata event that will be written when the trace log is flushed. | 252 // Adds a metadata event that will be written when the trace log is flushed. |
| 253 void AddMetadataEvent( | 253 void AddMetadataEvent( |
| 254 const unsigned char* category_group_enabled, | 254 const unsigned char* category_group_enabled, |
| 255 const char* name, | 255 const char* name, |
| 256 int num_args, | 256 int num_args, |
| 257 const char** arg_names, | 257 const char** arg_names, |
| 258 const unsigned char* arg_types, | 258 const unsigned char* arg_types, |
| 259 const unsigned long long* arg_values, | 259 const unsigned long long* arg_values, |
| 260 scoped_ptr<ConvertableToTraceFormat>* convertable_values, | 260 std::unique_ptr<ConvertableToTraceFormat>* convertable_values, |
| 261 unsigned int flags); | 261 unsigned int flags); |
| 262 | 262 |
| 263 void UpdateTraceEventDuration(const unsigned char* category_group_enabled, | 263 void UpdateTraceEventDuration(const unsigned char* category_group_enabled, |
| 264 const char* name, | 264 const char* name, |
| 265 TraceEventHandle handle); | 265 TraceEventHandle handle); |
| 266 | 266 |
| 267 // For every matching event, the callback will be called. | 267 // For every matching event, the callback will be called. |
| 268 typedef base::Callback<void()> WatchEventCallback; | 268 typedef base::Callback<void()> WatchEventCallback; |
| 269 void SetWatchEvent(const std::string& category_name, | 269 void SetWatchEvent(const std::string& category_name, |
| 270 const std::string& event_name, | 270 const std::string& event_name, |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 393 | 393 |
| 394 void FlushInternal(const OutputCallback& cb, | 394 void FlushInternal(const OutputCallback& cb, |
| 395 bool use_worker_thread, | 395 bool use_worker_thread, |
| 396 bool discard_events); | 396 bool discard_events); |
| 397 | 397 |
| 398 // |generation| is used in the following callbacks to check if the callback | 398 // |generation| is used in the following callbacks to check if the callback |
| 399 // is called for the flush of the current |logged_events_|. | 399 // is called for the flush of the current |logged_events_|. |
| 400 void FlushCurrentThread(int generation, bool discard_events); | 400 void FlushCurrentThread(int generation, bool discard_events); |
| 401 // Usually it runs on a different thread. | 401 // Usually it runs on a different thread. |
| 402 static void ConvertTraceEventsToTraceFormat( | 402 static void ConvertTraceEventsToTraceFormat( |
| 403 scoped_ptr<TraceBuffer> logged_events, | 403 std::unique_ptr<TraceBuffer> logged_events, |
| 404 const TraceLog::OutputCallback& flush_output_callback, | 404 const TraceLog::OutputCallback& flush_output_callback, |
| 405 const ArgumentFilterPredicate& argument_filter_predicate); | 405 const ArgumentFilterPredicate& argument_filter_predicate); |
| 406 void FinishFlush(int generation, bool discard_events); | 406 void FinishFlush(int generation, bool discard_events); |
| 407 void OnFlushTimeout(int generation, bool discard_events); | 407 void OnFlushTimeout(int generation, bool discard_events); |
| 408 | 408 |
| 409 int generation() const { | 409 int generation() const { |
| 410 return static_cast<int>(subtle::NoBarrier_Load(&generation_)); | 410 return static_cast<int>(subtle::NoBarrier_Load(&generation_)); |
| 411 } | 411 } |
| 412 bool CheckGeneration(int generation) const { | 412 bool CheckGeneration(int generation) const { |
| 413 return generation == this->generation(); | 413 return generation == this->generation(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 430 static const InternalTraceOptions kInternalEnableArgumentFilter; | 430 static const InternalTraceOptions kInternalEnableArgumentFilter; |
| 431 | 431 |
| 432 // This lock protects TraceLog member accesses (except for members protected | 432 // This lock protects TraceLog member accesses (except for members protected |
| 433 // by thread_info_lock_) from arbitrary threads. | 433 // by thread_info_lock_) from arbitrary threads. |
| 434 mutable Lock lock_; | 434 mutable Lock lock_; |
| 435 // This lock protects accesses to thread_names_, thread_event_start_times_ | 435 // This lock protects accesses to thread_names_, thread_event_start_times_ |
| 436 // and thread_colors_. | 436 // and thread_colors_. |
| 437 Lock thread_info_lock_; | 437 Lock thread_info_lock_; |
| 438 Mode mode_; | 438 Mode mode_; |
| 439 int num_traces_recorded_; | 439 int num_traces_recorded_; |
| 440 scoped_ptr<TraceBuffer> logged_events_; | 440 std::unique_ptr<TraceBuffer> logged_events_; |
| 441 std::vector<scoped_ptr<TraceEvent>> metadata_events_; | 441 std::vector<std::unique_ptr<TraceEvent>> metadata_events_; |
| 442 subtle::AtomicWord /* EventCallback */ event_callback_; | 442 subtle::AtomicWord /* EventCallback */ event_callback_; |
| 443 bool dispatching_to_observer_list_; | 443 bool dispatching_to_observer_list_; |
| 444 std::vector<EnabledStateObserver*> enabled_state_observer_list_; | 444 std::vector<EnabledStateObserver*> enabled_state_observer_list_; |
| 445 | 445 |
| 446 std::string process_name_; | 446 std::string process_name_; |
| 447 base::hash_map<int, std::string> process_labels_; | 447 base::hash_map<int, std::string> process_labels_; |
| 448 int process_sort_index_; | 448 int process_sort_index_; |
| 449 base::hash_map<int, int> thread_sort_indices_; | 449 base::hash_map<int, int> thread_sort_indices_; |
| 450 base::hash_map<int, std::string> thread_names_; | 450 base::hash_map<int, std::string> thread_names_; |
| 451 | 451 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 463 TimeDelta time_offset_; | 463 TimeDelta time_offset_; |
| 464 | 464 |
| 465 // Allow tests to wake up when certain events occur. | 465 // Allow tests to wake up when certain events occur. |
| 466 WatchEventCallback watch_event_callback_; | 466 WatchEventCallback watch_event_callback_; |
| 467 subtle::AtomicWord /* const unsigned char* */ watch_category_; | 467 subtle::AtomicWord /* const unsigned char* */ watch_category_; |
| 468 std::string watch_event_name_; | 468 std::string watch_event_name_; |
| 469 | 469 |
| 470 subtle::AtomicWord /* Options */ trace_options_; | 470 subtle::AtomicWord /* Options */ trace_options_; |
| 471 | 471 |
| 472 // Sampling thread handles. | 472 // Sampling thread handles. |
| 473 scoped_ptr<TraceSamplingThread> sampling_thread_; | 473 std::unique_ptr<TraceSamplingThread> sampling_thread_; |
| 474 PlatformThreadHandle sampling_thread_handle_; | 474 PlatformThreadHandle sampling_thread_handle_; |
| 475 | 475 |
| 476 TraceConfig trace_config_; | 476 TraceConfig trace_config_; |
| 477 TraceConfig event_callback_trace_config_; | 477 TraceConfig event_callback_trace_config_; |
| 478 | 478 |
| 479 ThreadLocalPointer<ThreadLocalEventBuffer> thread_local_event_buffer_; | 479 ThreadLocalPointer<ThreadLocalEventBuffer> thread_local_event_buffer_; |
| 480 ThreadLocalBoolean thread_blocks_message_loop_; | 480 ThreadLocalBoolean thread_blocks_message_loop_; |
| 481 ThreadLocalBoolean thread_is_in_trace_event_; | 481 ThreadLocalBoolean thread_is_in_trace_event_; |
| 482 | 482 |
| 483 // Contains the message loops of threads that have had at least one event | 483 // Contains the message loops of threads that have had at least one event |
| 484 // added into the local event buffer. Not using SingleThreadTaskRunner | 484 // added into the local event buffer. Not using SingleThreadTaskRunner |
| 485 // because we need to know the life time of the message loops. | 485 // because we need to know the life time of the message loops. |
| 486 hash_set<MessageLoop*> thread_message_loops_; | 486 hash_set<MessageLoop*> thread_message_loops_; |
| 487 | 487 |
| 488 // For events which can't be added into the thread local buffer, e.g. events | 488 // For events which can't be added into the thread local buffer, e.g. events |
| 489 // from threads without a message loop. | 489 // from threads without a message loop. |
| 490 scoped_ptr<TraceBufferChunk> thread_shared_chunk_; | 490 std::unique_ptr<TraceBufferChunk> thread_shared_chunk_; |
| 491 size_t thread_shared_chunk_index_; | 491 size_t thread_shared_chunk_index_; |
| 492 | 492 |
| 493 // Set when asynchronous Flush is in progress. | 493 // Set when asynchronous Flush is in progress. |
| 494 OutputCallback flush_output_callback_; | 494 OutputCallback flush_output_callback_; |
| 495 scoped_refptr<SingleThreadTaskRunner> flush_task_runner_; | 495 scoped_refptr<SingleThreadTaskRunner> flush_task_runner_; |
| 496 ArgumentFilterPredicate argument_filter_predicate_; | 496 ArgumentFilterPredicate argument_filter_predicate_; |
| 497 subtle::AtomicWord generation_; | 497 subtle::AtomicWord generation_; |
| 498 bool use_worker_thread_; | 498 bool use_worker_thread_; |
| 499 | 499 |
| 500 DISALLOW_COPY_AND_ASSIGN(TraceLog); | 500 DISALLOW_COPY_AND_ASSIGN(TraceLog); |
| 501 }; | 501 }; |
| 502 | 502 |
| 503 } // namespace trace_event | 503 } // namespace trace_event |
| 504 } // namespace base | 504 } // namespace base |
| 505 | 505 |
| 506 #endif // BASE_TRACE_EVENT_TRACE_LOG_H_ | 506 #endif // BASE_TRACE_EVENT_TRACE_LOG_H_ |
| OLD | NEW |