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

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

Issue 1165673002: [Startup Tracing] Hook up TraceConfig and remove CategoryFilter & TraceOptions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase 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>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/atomicops.h" 13 #include "base/atomicops.h"
14 #include "base/base_export.h" 14 #include "base/base_export.h"
15 #include "base/callback.h" 15 #include "base/callback.h"
16 #include "base/containers/hash_tables.h" 16 #include "base/containers/hash_tables.h"
17 #include "base/gtest_prod_util.h" 17 #include "base/gtest_prod_util.h"
18 #include "base/memory/ref_counted_memory.h" 18 #include "base/memory/ref_counted_memory.h"
19 #include "base/memory/scoped_vector.h" 19 #include "base/memory/scoped_vector.h"
20 #include "base/observer_list.h" 20 #include "base/observer_list.h"
21 #include "base/single_thread_task_runner.h" 21 #include "base/single_thread_task_runner.h"
22 #include "base/strings/string_util.h" 22 #include "base/strings/string_util.h"
23 #include "base/synchronization/condition_variable.h" 23 #include "base/synchronization/condition_variable.h"
24 #include "base/synchronization/lock.h" 24 #include "base/synchronization/lock.h"
25 #include "base/threading/thread.h" 25 #include "base/threading/thread.h"
26 #include "base/threading/thread_local.h" 26 #include "base/threading/thread_local.h"
27 #include "base/trace_event/category_filter.h" 27 #include "base/trace_event/trace_config.h"
28 #include "base/trace_event/trace_options.h"
29 28
30 // Older style trace macros with explicit id and extra data 29 // Older style trace macros with explicit id and extra data
31 // Only these macros result in publishing data to ETW as currently implemented. 30 // Only these macros result in publishing data to ETW as currently implemented.
32 // TODO(georgesak): Update/replace these with new ETW macros. 31 // TODO(georgesak): Update/replace these with new ETW macros.
33 #define TRACE_EVENT_BEGIN_ETW(name, id, extra) \ 32 #define TRACE_EVENT_BEGIN_ETW(name, id, extra) \
34 base::trace_event::TraceLog::AddTraceEventEtw( \ 33 base::trace_event::TraceLog::AddTraceEventEtw( \
35 TRACE_EVENT_PHASE_BEGIN, \ 34 TRACE_EVENT_PHASE_BEGIN, \
36 name, reinterpret_cast<const void*>(id), extra) 35 name, reinterpret_cast<const void*>(id), extra)
37 36
38 #define TRACE_EVENT_END_ETW(name, id, extra) \ 37 #define TRACE_EVENT_END_ETW(name, id, extra) \
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 // Category group enabled to export events to ETW. 311 // Category group enabled to export events to ETW.
313 ENABLED_FOR_ETW_EXPORT = 1 << 3 312 ENABLED_FOR_ETW_EXPORT = 1 << 3
314 }; 313 };
315 314
316 static TraceLog* GetInstance(); 315 static TraceLog* GetInstance();
317 316
318 // Get set of known category groups. This can change as new code paths are 317 // Get set of known category groups. This can change as new code paths are
319 // reached. The known category groups are inserted into |category_groups|. 318 // reached. The known category groups are inserted into |category_groups|.
320 void GetKnownCategoryGroups(std::vector<std::string>* category_groups); 319 void GetKnownCategoryGroups(std::vector<std::string>* category_groups);
321 320
322 // Retrieves a copy (for thread-safety) of the current CategoryFilter. 321 // Retrieves a copy (for thread-safety) of the current TraceConfig.
323 CategoryFilter GetCurrentCategoryFilter(); 322 TraceConfig GetCurrentTraceConfig() const;
324
325 // Retrieves a copy (for thread-safety) of the current TraceOptions.
326 TraceOptions GetCurrentTraceOptions() const;
327 323
328 // Enables normal tracing (recording trace events in the trace buffer). 324 // Enables normal tracing (recording trace events in the trace buffer).
329 // See CategoryFilter comments for details on how to control what categories 325 // See TraceConfig comments for details on how to control what categories
330 // will be traced. If tracing has already been enabled, |category_filter| will 326 // will be traced. If tracing has already been enabled, |category_filter| will
331 // be merged into the current category filter. 327 // be merged into the current category filter.
332 void SetEnabled(const CategoryFilter& category_filter, 328 void SetEnabled(const TraceConfig& trace_config, Mode mode);
333 Mode mode, const TraceOptions& options);
334 329
335 // Disables normal tracing for all categories. 330 // Disables normal tracing for all categories.
336 void SetDisabled(); 331 void SetDisabled();
337 332
338 bool IsEnabled() { return mode_ != DISABLED; } 333 bool IsEnabled() { return mode_ != DISABLED; }
339 334
340 // The number of times we have begun recording traces. If tracing is off, 335 // The number of times we have begun recording traces. If tracing is off,
341 // returns -1. If tracing is on, then it returns the number of times we have 336 // returns -1. If tracing is on, then it returns the number of times we have
342 // recorded a trace. By watching for this number to increment, you can 337 // recorded a trace. By watching for this number to increment, you can
343 // passively discover when a new trace has begun. This is then used to 338 // passively discover when a new trace has begun. This is then used to
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 const unsigned char* category_group_enabled, 379 const unsigned char* category_group_enabled,
385 const char* name, 380 const char* name,
386 unsigned long long id, 381 unsigned long long id,
387 int num_args, 382 int num_args,
388 const char* const arg_names[], 383 const char* const arg_names[],
389 const unsigned char arg_types[], 384 const unsigned char arg_types[],
390 const unsigned long long arg_values[], 385 const unsigned long long arg_values[],
391 unsigned char flags); 386 unsigned char flags);
392 387
393 // Enable tracing for EventCallback. 388 // Enable tracing for EventCallback.
394 void SetEventCallbackEnabled(const CategoryFilter& category_filter, 389 void SetEventCallbackEnabled(const TraceConfig& trace_config,
395 EventCallback cb); 390 EventCallback cb);
396 void SetEventCallbackDisabled(); 391 void SetEventCallbackDisabled();
397 void SetArgumentFilterPredicate( 392 void SetArgumentFilterPredicate(
398 const TraceEvent::ArgumentFilterPredicate& argument_filter_predicate); 393 const TraceEvent::ArgumentFilterPredicate& argument_filter_predicate);
399 394
400 // Flush all collected events to the given output callback. The callback will 395 // Flush all collected events to the given output callback. The callback will
401 // be called one or more times either synchronously or asynchronously from 396 // be called one or more times either synchronously or asynchronously from
402 // the current thread with IPC-bite-size chunks. The string format is 397 // the current thread with IPC-bite-size chunks. The string format is
403 // undefined. Use TraceResultBuffer to convert one or more trace strings to 398 // undefined. Use TraceResultBuffer to convert one or more trace strings to
404 // JSON. The callback can be null if the caller doesn't want any data. 399 // JSON. The callback can be null if the caller doesn't want any data.
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 513
519 FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture, 514 FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture,
520 TraceBufferRingBufferGetReturnChunk); 515 TraceBufferRingBufferGetReturnChunk);
521 FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture, 516 FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture,
522 TraceBufferRingBufferHalfIteration); 517 TraceBufferRingBufferHalfIteration);
523 FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture, 518 FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture,
524 TraceBufferRingBufferFullIteration); 519 TraceBufferRingBufferFullIteration);
525 FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture, 520 FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture,
526 TraceBufferVectorReportFull); 521 TraceBufferVectorReportFull);
527 FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture, 522 FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture,
528 ConvertTraceOptionsToInternalOptions); 523 ConvertTraceConfigToInternalOptions);
529 FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture, 524 FRIEND_TEST_ALL_PREFIXES(TraceEventTestFixture,
530 TraceRecordAsMuchAsPossibleMode); 525 TraceRecordAsMuchAsPossibleMode);
531 526
532 // This allows constructor and destructor to be private and usable only 527 // This allows constructor and destructor to be private and usable only
533 // by the Singleton class. 528 // by the Singleton class.
534 friend struct DefaultSingletonTraits<TraceLog>; 529 friend struct DefaultSingletonTraits<TraceLog>;
535 530
536 // Enable/disable each category group based on the current mode_, 531 // Enable/disable each category group based on the current mode_,
537 // category_filter_, event_callback_ and event_callback_category_filter_. 532 // category_filter_, event_callback_ and event_callback_category_filter_.
538 // Enable the category group in the enabled mode if category_filter_ matches 533 // Enable the category group in the enabled mode if category_filter_ matches
539 // the category group, or event_callback_ is not null and 534 // the category group, or event_callback_ is not null and
540 // event_callback_category_filter_ matches the category group. 535 // event_callback_category_filter_ matches the category group.
541 void UpdateCategoryGroupEnabledFlags(); 536 void UpdateCategoryGroupEnabledFlags();
542 void UpdateCategoryGroupEnabledFlag(size_t category_index); 537 void UpdateCategoryGroupEnabledFlag(size_t category_index);
543 538
544 // Configure synthetic delays based on the values set in the current 539 // Configure synthetic delays based on the values set in the current
545 // category filter. 540 // trace config.
546 void UpdateSyntheticDelaysFromCategoryFilter(); 541 void UpdateSyntheticDelaysFromTraceConfig();
547 542
548 InternalTraceOptions GetInternalOptionsFromTraceOptions( 543 InternalTraceOptions GetInternalOptionsFromTraceConfig(
549 const TraceOptions& options); 544 const TraceConfig& config);
550 545
551 class ThreadLocalEventBuffer; 546 class ThreadLocalEventBuffer;
552 class OptionalAutoLock; 547 class OptionalAutoLock;
553 548
554 TraceLog(); 549 TraceLog();
555 ~TraceLog(); 550 ~TraceLog();
556 const unsigned char* GetCategoryGroupEnabledInternal(const char* name); 551 const unsigned char* GetCategoryGroupEnabledInternal(const char* name);
557 void AddMetadataEventsWhileLocked(); 552 void AddMetadataEventsWhileLocked();
558 553
559 InternalTraceOptions trace_options() const { 554 InternalTraceOptions trace_options() const {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 WatchEventCallback watch_event_callback_; 644 WatchEventCallback watch_event_callback_;
650 subtle::AtomicWord /* const unsigned char* */ watch_category_; 645 subtle::AtomicWord /* const unsigned char* */ watch_category_;
651 std::string watch_event_name_; 646 std::string watch_event_name_;
652 647
653 subtle::AtomicWord /* Options */ trace_options_; 648 subtle::AtomicWord /* Options */ trace_options_;
654 649
655 // Sampling thread handles. 650 // Sampling thread handles.
656 scoped_ptr<TraceSamplingThread> sampling_thread_; 651 scoped_ptr<TraceSamplingThread> sampling_thread_;
657 PlatformThreadHandle sampling_thread_handle_; 652 PlatformThreadHandle sampling_thread_handle_;
658 653
659 CategoryFilter category_filter_; 654 TraceConfig trace_config_;
660 CategoryFilter event_callback_category_filter_; 655 TraceConfig event_callback_trace_config_;
661 656
662 ThreadLocalPointer<ThreadLocalEventBuffer> thread_local_event_buffer_; 657 ThreadLocalPointer<ThreadLocalEventBuffer> thread_local_event_buffer_;
663 ThreadLocalBoolean thread_blocks_message_loop_; 658 ThreadLocalBoolean thread_blocks_message_loop_;
664 ThreadLocalBoolean thread_is_in_trace_event_; 659 ThreadLocalBoolean thread_is_in_trace_event_;
665 660
666 // Contains the message loops of threads that have had at least one event 661 // Contains the message loops of threads that have had at least one event
667 // added into the local event buffer. Not using SingleThreadTaskRunner 662 // added into the local event buffer. Not using SingleThreadTaskRunner
668 // because we need to know the life time of the message loops. 663 // because we need to know the life time of the message loops.
669 hash_set<MessageLoop*> thread_message_loops_; 664 hash_set<MessageLoop*> thread_message_loops_;
670 665
671 // For events which can't be added into the thread local buffer, e.g. events 666 // For events which can't be added into the thread local buffer, e.g. events
672 // from threads without a message loop. 667 // from threads without a message loop.
673 scoped_ptr<TraceBufferChunk> thread_shared_chunk_; 668 scoped_ptr<TraceBufferChunk> thread_shared_chunk_;
674 size_t thread_shared_chunk_index_; 669 size_t thread_shared_chunk_index_;
675 670
676 // Set when asynchronous Flush is in progress. 671 // Set when asynchronous Flush is in progress.
677 OutputCallback flush_output_callback_; 672 OutputCallback flush_output_callback_;
678 scoped_refptr<SingleThreadTaskRunner> flush_task_runner_; 673 scoped_refptr<SingleThreadTaskRunner> flush_task_runner_;
679 TraceEvent::ArgumentFilterPredicate argument_filter_predicate_; 674 TraceEvent::ArgumentFilterPredicate argument_filter_predicate_;
680 subtle::AtomicWord generation_; 675 subtle::AtomicWord generation_;
681 bool use_worker_thread_; 676 bool use_worker_thread_;
682 677
683 DISALLOW_COPY_AND_ASSIGN(TraceLog); 678 DISALLOW_COPY_AND_ASSIGN(TraceLog);
684 }; 679 };
685 680
686 } // namespace trace_event 681 } // namespace trace_event
687 } // namespace base 682 } // namespace base
688 683
689 #endif // BASE_TRACE_EVENT_TRACE_EVENT_IMPL_H_ 684 #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