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

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

Issue 11823016: Trace category groups and category filter. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Minor edits from previous changeset, mainly fixing line exceeding 80 chars. Created 7 years, 11 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 | « no previous file | base/debug/trace_event_impl.h » ('j') | base/debug/trace_event_impl.cc » ('J')
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 // This header is designed to give you trace_event macros without specifying 5 // This header is designed to give you trace_event macros without specifying
6 // how the events actually get collected and stored. If you need to expose trace 6 // how the events actually get collected and stored. If you need to expose trace
7 // event to some other universe, you can copy-and-paste this file, 7 // event to some other universe, you can copy-and-paste this file,
8 // implement the TRACE_EVENT_API macros, and do any other necessary fixup for 8 // implement the TRACE_EVENT_API macros, and do any other necessary fixup for
9 // the target platform. The end result is that multiple libraries can funnel 9 // the target platform. The end result is that multiple libraries can funnel
10 // events through to a shared trace event collector. 10 // events through to a shared trace event collector.
11 11
12 // Trace events are for tracking application performance and resource usage. 12 // Trace events are for tracking application performance and resource usage.
13 // Macros are provided to track: 13 // Macros are provided to track:
14 // Begin and end of function calls 14 // Begin and end of function calls
15 // Counters 15 // Counters
16 // 16 //
17 // Events are issued against categories. Whereas LOG's 17 // Events are issued against categories. Whereas LOG's
18 // categories are statically defined, TRACE categories are created 18 // categories are statically defined, TRACE categories are created
19 // implicitly with a string. For example: 19 // implicitly with a string. For example:
20 // TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent") 20 // TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent")
21 // 21 //
22 // A category can be made up of several tags, for example:
nduca 2013/01/28 08:15:28 The first argument to traces is a comma-separated
23 //
24 // TRACE_EVENT_INSTANT0("MY_SUBSYSTEM_1, MY_SUB_SYSTEM_2", "ImportantEvent")
nduca 2013/01/28 08:15:28 Lets give a concerete example here so its less abs
25 //
26 // We can enable/disable tracing of ImportantEvent by enabling/disabling either
27 // tag.
28 //
22 // Events can be INSTANT, or can be pairs of BEGIN and END in the same scope: 29 // Events can be INSTANT, or can be pairs of BEGIN and END in the same scope:
23 // TRACE_EVENT_BEGIN0("MY_SUBSYSTEM", "SomethingCostly") 30 // TRACE_EVENT_BEGIN0("MY_SUBSYSTEM", "SomethingCostly")
24 // doSomethingCostly() 31 // doSomethingCostly()
25 // TRACE_EVENT_END0("MY_SUBSYSTEM", "SomethingCostly") 32 // TRACE_EVENT_END0("MY_SUBSYSTEM", "SomethingCostly")
26 // Note: our tools can't always determine the correct BEGIN/END pairs unless 33 // Note: our tools can't always determine the correct BEGIN/END pairs unless
27 // these are used in the same scope. Use ASYNC_BEGIN/ASYNC_END macros if you 34 // these are used in the same scope. Use ASYNC_BEGIN/ASYNC_END macros if you
28 // need them to be in separate scopes. 35 // need them to be in separate scopes.
29 // 36 //
30 // A common use case is to trace entire function scopes. This 37 // A common use case is to trace entire function scopes. This
31 // issues a trace BEGIN and END automatically: 38 // issues a trace BEGIN and END automatically:
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 // By default, trace collection is compiled in, but turned off at runtime. 101 // By default, trace collection is compiled in, but turned off at runtime.
95 // Collecting trace data is the responsibility of the embedding 102 // Collecting trace data is the responsibility of the embedding
96 // application. In Chrome's case, navigating to about:tracing will turn on 103 // application. In Chrome's case, navigating to about:tracing will turn on
97 // tracing and display data collected across all active processes. 104 // tracing and display data collected across all active processes.
98 // 105 //
99 // 106 //
100 // Memory scoping note: 107 // Memory scoping note:
101 // Tracing copies the pointers, not the string content, of the strings passed 108 // Tracing copies the pointers, not the string content, of the strings passed
102 // in for category, name, and arg_names. Thus, the following code will 109 // in for category, name, and arg_names. Thus, the following code will
103 // cause problems: 110 // cause problems:
104 // char* str = strdup("impprtantName"); 111 // char* str = strdup("importantName");
105 // TRACE_EVENT_INSTANT0("SUBSYSTEM", str); // BAD! 112 // TRACE_EVENT_INSTANT0("SUBSYSTEM", str); // BAD!
106 // free(str); // Trace system now has dangling pointer 113 // free(str); // Trace system now has dangling pointer
107 // 114 //
108 // To avoid this issue with the |name| and |arg_name| parameters, use the 115 // To avoid this issue with the |name| and |arg_name| parameters, use the
109 // TRACE_EVENT_COPY_XXX overloads of the macros at additional runtime overhead. 116 // TRACE_EVENT_COPY_XXX overloads of the macros at additional runtime overhead.
110 // Notes: The category must always be in a long-lived char* (i.e. static const). 117 // Notes: The category must always be in a long-lived char* (i.e. static const).
111 // The |arg_values|, when used, are always deep copied with the _COPY 118 // The |arg_values|, when used, are always deep copied with the _COPY
112 // macros. 119 // macros.
113 // 120 //
114 // When are string argument values copied: 121 // When are string argument values copied:
115 // const char* arg_values are only referenced by default: 122 // const char* arg_values are only referenced by default:
116 // TRACE_EVENT1("category", "name", 123 // TRACE_EVENT1("category_tag1", "name",
nduca 2013/01/28 08:15:28 i think its safe to say category once we make the
117 // "arg1", "literal string is only referenced"); 124 // "arg1", "literal string is only referenced");
118 // Use TRACE_STR_COPY to force copying of a const char*: 125 // Use TRACE_STR_COPY to force copying of a const char*:
119 // TRACE_EVENT1("category", "name", 126 // TRACE_EVENT1("category_tag1", "name",
120 // "arg1", TRACE_STR_COPY("string will be copied")); 127 // "arg1", TRACE_STR_COPY("string will be copied"));
121 // std::string arg_values are always copied: 128 // std::string arg_values are always copied:
122 // TRACE_EVENT1("category", "name", 129 // TRACE_EVENT1("category_tag1", "name",
123 // "arg1", std::string("string will be copied")); 130 // "arg1", std::string("string will be copied"));
124 // 131 //
125 // 132 //
126 // Thread Safety: 133 // Thread Safety:
127 // A thread safe singleton and mutex are used for thread safety. Category 134 // A thread safe singleton and mutex are used for thread safety. Category
128 // enabled flags are used to limit the performance impact when the system 135 // enabled flags are used to limit the performance impact when the system
129 // is not enabled. 136 // is not enabled.
130 // 137 //
131 // TRACE_EVENT macros first cache a pointer to a category. The categories are 138 // TRACE_EVENT macros first cache a pointer to a category. The categories are
132 // statically allocated and safe at all times, even after exit. Fetching a 139 // statically allocated and safe at all times, even after exit. Fetching a
(...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after
913 const char* name; 920 const char* name;
914 }; 921 };
915 Data* p_data_; 922 Data* p_data_;
916 Data data_; 923 Data data_;
917 }; 924 };
918 925
919 926
920 } // namespace trace_event_internal 927 } // namespace trace_event_internal
921 928
922 #endif // BASE_DEBUG_TRACE_EVENT_H_ 929 #endif // BASE_DEBUG_TRACE_EVENT_H_
OLDNEW
« no previous file with comments | « no previous file | base/debug/trace_event_impl.h » ('j') | base/debug/trace_event_impl.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698