| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 // Trace events are for tracking application performance. | 5 // Trace events are for tracking application performance. |
| 6 // | 6 // |
| 7 // Events are issued against categories. Whereas LOG's | 7 // Events are issued against categories. Whereas LOG's |
| 8 // categories are statically defined, TRACE categories are created | 8 // categories are statically defined, TRACE categories are created |
| 9 // implicitly with a string. For example: | 9 // implicitly with a string. For example: |
| 10 // TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent") | 10 // TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent") |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" | 107 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" |
| 108 #include "base/timer.h" | 108 #include "base/timer.h" |
| 109 | 109 |
| 110 // By default, const char* argument values are assumed to have long-lived scope | 110 // By default, const char* argument values are assumed to have long-lived scope |
| 111 // and will not be copied. Use this macro to force a const char* to be copied. | 111 // and will not be copied. Use this macro to force a const char* to be copied. |
| 112 #define TRACE_STR_COPY(str) base::debug::TraceValue::StringWithCopy(str) | 112 #define TRACE_STR_COPY(str) base::debug::TraceValue::StringWithCopy(str) |
| 113 | 113 |
| 114 // Older style trace macros with explicit id and extra data | 114 // Older style trace macros with explicit id and extra data |
| 115 // Only these macros result in publishing data to ETW as currently implemented. | 115 // Only these macros result in publishing data to ETW as currently implemented. |
| 116 #define TRACE_EVENT_BEGIN_ETW(name, id, extra) \ | 116 #define TRACE_EVENT_BEGIN_ETW(name, id, extra) \ |
| 117 base::debug::TraceLog::AddTraceEventEtw( \ | 117 base::debug::TraceLog::AddTraceEventEtw( \ |
| 118 base::debug::TRACE_EVENT_PHASE_BEGIN, \ | 118 base::debug::TRACE_EVENT_PHASE_BEGIN, \ |
| 119 name, reinterpret_cast<const void*>(id), extra) | 119 name, reinterpret_cast<const void*>(id), extra) |
| 120 | 120 |
| 121 #define TRACE_EVENT_END_ETW(name, id, extra) \ | 121 #define TRACE_EVENT_END_ETW(name, id, extra) \ |
| 122 base::debug::TraceLog::AddTraceEventEtw( \ | 122 base::debug::TraceLog::AddTraceEventEtw( \ |
| 123 base::debug::TRACE_EVENT_PHASE_END, \ | 123 base::debug::TRACE_EVENT_PHASE_END, \ |
| 124 name, reinterpret_cast<const void*>(id), extra) | 124 name, reinterpret_cast<const void*>(id), extra) |
| 125 | 125 |
| 126 #define TRACE_EVENT_INSTANT_ETW(name, id, extra) \ | 126 #define TRACE_EVENT_INSTANT_ETW(name, id, extra) \ |
| 127 base::debug::TraceLog::AddTraceEventEtw( \ | 127 base::debug::TraceLog::AddTraceEventEtw( \ |
| 128 base::debug::TRACE_EVENT_PHASE_INSTANT, \ | 128 base::debug::TRACE_EVENT_PHASE_INSTANT, \ |
| 129 name, reinterpret_cast<const void*>(id), extra) | 129 name, reinterpret_cast<const void*>(id), extra) |
| 130 | 130 |
| 131 // Records a pair of begin and end events called "name" for the current | 131 // Records a pair of begin and end events called "name" for the current |
| 132 // scope, with 0, 1 or 2 associated arguments. If the category is not | 132 // scope, with 0, 1 or 2 associated arguments. If the category is not |
| 133 // enabled, then this does nothing. | 133 // enabled, then this does nothing. |
| 134 // - category and name strings must have application lifetime (statics or | 134 // - category and name strings must have application lifetime (statics or |
| 135 // literals). They may not include " chars. | 135 // literals). They may not include " chars. |
| 136 #define TRACE_EVENT0(category, name) \ | 136 #define TRACE_EVENT0(category, name) \ |
| 137 TRACE_EVENT1(category, name, NULL, 0) | 137 TRACE_EVENT1(category, name, NULL, 0) |
| 138 #define TRACE_EVENT1(category, name, arg1_name, arg1_val) \ | 138 #define TRACE_EVENT1(category, name, arg1_name, arg1_val) \ |
| 139 TRACE_EVENT2(category, name, arg1_name, arg1_val, NULL, 0) | 139 TRACE_EVENT2(category, name, arg1_name, arg1_val, NULL, 0) |
| 140 #define TRACE_EVENT2(category, name, arg1_name, arg1_val, arg2_name, arg2_val) \ | 140 #define TRACE_EVENT2(category, name, arg1_name, arg1_val, arg2_name, arg2_val) \ |
| 141 INTERNAL_TRACE_EVENT_ADD_SCOPED( \ | 141 INTERNAL_TRACE_EVENT_ADD_SCOPED( \ |
| 142 category, name, arg1_name, arg1_val, arg2_name, arg2_val) | 142 category, name, arg1_name, arg1_val, arg2_name, arg2_val) |
| 143 |
| 144 // Same as TRACE_EVENT except that they are not included in official builds. |
| 145 #ifdef OFFICIAL_BUILD |
| 146 #define UNSHIPPED_TRACE_EVENT0(category, name) (void)0 |
| 147 #define UNSHIPPED_TRACE_EVENT1(category, name, arg1_name, arg1_val) (void)0 |
| 148 #define UNSHIPPED_TRACE_EVENT2(category, name, arg1_name, arg1_val, \ |
| 149 arg2_name, arg2_val) (void)0 |
| 150 #else |
| 151 #define UNSHIPPED_TRACE_EVENT0(category, name) \ |
| 152 TRACE_EVENT0(category, name) |
| 153 #define UNSHIPPED_TRACE_EVENT1(category, name, arg1_name, arg1_val) \ |
| 154 TRACE_EVENT1(category, name, arg1_name, arg1_val) |
| 155 #define UNSHIPPED_TRACE_EVENT2(category, name, arg1_name, arg1_val, \ |
| 156 arg2_name, arg2_val) \ |
| 157 TRACE_EVENT2(category, name, arg1_name, arg1_val, arg2_name, arg2_val) |
| 158 #endif |
| 143 | 159 |
| 144 // Records a single event called "name" immediately, with 0, 1 or 2 | 160 // Records a single event called "name" immediately, with 0, 1 or 2 |
| 145 // associated arguments. If the category is not enabled, then this | 161 // associated arguments. If the category is not enabled, then this |
| 146 // does nothing. | 162 // does nothing. |
| 147 // - category and name strings must have application lifetime (statics or | 163 // - category and name strings must have application lifetime (statics or |
| 148 // literals). They may not include " chars. | 164 // literals). They may not include " chars. |
| 149 #define TRACE_EVENT_INSTANT0(category, name) \ | 165 #define TRACE_EVENT_INSTANT0(category, name) \ |
| 150 TRACE_EVENT_INSTANT1(category, name, NULL, 0) | 166 TRACE_EVENT_INSTANT1(category, name, NULL, 0) |
| 151 #define TRACE_EVENT_INSTANT1(category, name, arg1_name, arg1_val) \ | 167 #define TRACE_EVENT_INSTANT1(category, name, arg1_name, arg1_val) \ |
| 152 TRACE_EVENT_INSTANT2(category, name, arg1_name, arg1_val, NULL, 0) | 168 TRACE_EVENT_INSTANT2(category, name, arg1_name, arg1_val, NULL, 0) |
| 153 #define TRACE_EVENT_INSTANT2(category, name, arg1_name, arg1_val, \ | 169 #define TRACE_EVENT_INSTANT2(category, name, arg1_name, arg1_val, \ |
| 154 arg2_name, arg2_val) \ | 170 arg2_name, arg2_val) \ |
| 155 INTERNAL_TRACE_EVENT_ADD(base::debug::TRACE_EVENT_PHASE_INSTANT, \ | 171 INTERNAL_TRACE_EVENT_ADD(base::debug::TRACE_EVENT_PHASE_INSTANT, \ |
| 156 category, name, arg1_name, arg1_val, arg2_name, arg2_val, \ | 172 category, name, arg1_name, arg1_val, arg2_name, arg2_val, \ |
| 157 base::debug::TraceLog::EVENT_FLAG_NONE) | 173 base::debug::TraceLog::EVENT_FLAG_NONE) |
| 158 #define TRACE_EVENT_COPY_INSTANT0(category, name) \ | 174 #define TRACE_EVENT_COPY_INSTANT0(category, name) \ |
| 159 TRACE_EVENT_COPY_INSTANT1(category, name, NULL, 0) | 175 TRACE_EVENT_COPY_INSTANT1(category, name, NULL, 0) |
| 160 #define TRACE_EVENT_COPY_INSTANT1(category, name, arg1_name, arg1_val) \ | 176 #define TRACE_EVENT_COPY_INSTANT1(category, name, arg1_name, arg1_val) \ |
| 161 TRACE_EVENT_COPY_INSTANT2(category, name, arg1_name, arg1_val, NULL, 0) | 177 TRACE_EVENT_COPY_INSTANT2(category, name, arg1_name, arg1_val, NULL, 0) |
| 162 #define TRACE_EVENT_COPY_INSTANT2(category, name, arg1_name, arg1_val, \ | 178 #define TRACE_EVENT_COPY_INSTANT2(category, name, arg1_name, arg1_val, \ |
| 163 arg2_name, arg2_val) \ | 179 arg2_name, arg2_val) \ |
| 164 INTERNAL_TRACE_EVENT_ADD(base::debug::TRACE_EVENT_PHASE_INSTANT, \ | 180 INTERNAL_TRACE_EVENT_ADD(base::debug::TRACE_EVENT_PHASE_INSTANT, \ |
| 165 category, name, \ | 181 category, name, \ |
| 166 arg1_name, base::debug::TraceValue::ForceCopy(arg1_val), \ | 182 arg1_name, base::debug::TraceValue::ForceCopy(arg1_val), \ |
| 167 arg2_name, base::debug::TraceValue::ForceCopy(arg2_val), \ | 183 arg2_name, base::debug::TraceValue::ForceCopy(arg2_val), \ |
| 168 base::debug::TraceLog::EVENT_FLAG_COPY) | 184 base::debug::TraceLog::EVENT_FLAG_COPY) |
| 169 | 185 |
| 170 // Records a single BEGIN event called "name" immediately, with 0, 1 or 2 | 186 // Records a single BEGIN event called "name" immediately, with 0, 1 or 2 |
| 171 // associated arguments. If the category is not enabled, then this | 187 // associated arguments. If the category is not enabled, then this |
| 172 // does nothing. | 188 // does nothing. |
| 173 // - category and name strings must have application lifetime (statics or | 189 // - category and name strings must have application lifetime (statics or |
| 174 // literals). They may not include " chars. | 190 // literals). They may not include " chars. |
| 175 #define TRACE_EVENT_BEGIN0(category, name) \ | 191 #define TRACE_EVENT_BEGIN0(category, name) \ |
| 176 TRACE_EVENT_BEGIN1(category, name, NULL, 0) | 192 TRACE_EVENT_BEGIN1(category, name, NULL, 0) |
| 177 #define TRACE_EVENT_BEGIN1(category, name, arg1_name, arg1_val) \ | 193 #define TRACE_EVENT_BEGIN1(category, name, arg1_name, arg1_val) \ |
| 178 TRACE_EVENT_BEGIN2(category, name, arg1_name, arg1_val, NULL, 0) | 194 TRACE_EVENT_BEGIN2(category, name, arg1_name, arg1_val, NULL, 0) |
| 179 #define TRACE_EVENT_BEGIN2(category, name, arg1_name, arg1_val, \ | 195 #define TRACE_EVENT_BEGIN2(category, name, arg1_name, arg1_val, \ |
| 180 arg2_name, arg2_val) \ | 196 arg2_name, arg2_val) \ |
| 181 INTERNAL_TRACE_EVENT_ADD(base::debug::TRACE_EVENT_PHASE_BEGIN, \ | 197 INTERNAL_TRACE_EVENT_ADD(base::debug::TRACE_EVENT_PHASE_BEGIN, \ |
| 182 category, name, arg1_name, arg1_val, arg2_name, arg2_val, \ | 198 category, name, arg1_name, arg1_val, arg2_name, arg2_val, \ |
| 183 base::debug::TraceLog::EVENT_FLAG_NONE) | 199 base::debug::TraceLog::EVENT_FLAG_NONE) |
| 184 #define TRACE_EVENT_COPY_BEGIN0(category, name) \ | 200 #define TRACE_EVENT_COPY_BEGIN0(category, name) \ |
| 185 TRACE_EVENT_COPY_BEGIN1(category, name, NULL, 0) | 201 TRACE_EVENT_COPY_BEGIN1(category, name, NULL, 0) |
| 186 #define TRACE_EVENT_COPY_BEGIN1(category, name, arg1_name, arg1_val) \ | 202 #define TRACE_EVENT_COPY_BEGIN1(category, name, arg1_name, arg1_val) \ |
| 187 TRACE_EVENT_COPY_BEGIN2(category, name, arg1_name, arg1_val, NULL, 0) | 203 TRACE_EVENT_COPY_BEGIN2(category, name, arg1_name, arg1_val, NULL, 0) |
| 188 #define TRACE_EVENT_COPY_BEGIN2(category, name, arg1_name, arg1_val, \ | 204 #define TRACE_EVENT_COPY_BEGIN2(category, name, arg1_name, arg1_val, \ |
| 189 arg2_name, arg2_val) \ | 205 arg2_name, arg2_val) \ |
| 190 INTERNAL_TRACE_EVENT_ADD(base::debug::TRACE_EVENT_PHASE_BEGIN, \ | 206 INTERNAL_TRACE_EVENT_ADD(base::debug::TRACE_EVENT_PHASE_BEGIN, \ |
| 191 category, name, \ | 207 category, name, \ |
| 192 arg1_name, base::debug::TraceValue::ForceCopy(arg1_val), \ | 208 arg1_name, base::debug::TraceValue::ForceCopy(arg1_val), \ |
| 193 arg2_name, base::debug::TraceValue::ForceCopy(arg2_val), \ | 209 arg2_name, base::debug::TraceValue::ForceCopy(arg2_val), \ |
| 194 base::debug::TraceLog::EVENT_FLAG_COPY) | 210 base::debug::TraceLog::EVENT_FLAG_COPY) |
| 195 | 211 |
| 196 // Records a single END event for "name" immediately. If the category | 212 // Records a single END event for "name" immediately. If the category |
| 197 // is not enabled, then this does nothing. | 213 // is not enabled, then this does nothing. |
| 198 // - category and name strings must have application lifetime (statics or | 214 // - category and name strings must have application lifetime (statics or |
| 199 // literals). They may not include " chars. | 215 // literals). They may not include " chars. |
| 200 #define TRACE_EVENT_END0(category, name) \ | 216 #define TRACE_EVENT_END0(category, name) \ |
| 201 TRACE_EVENT_END1(category, name, NULL, 0) | 217 TRACE_EVENT_END1(category, name, NULL, 0) |
| 202 #define TRACE_EVENT_END1(category, name, arg1_name, arg1_val) \ | 218 #define TRACE_EVENT_END1(category, name, arg1_name, arg1_val) \ |
| 203 TRACE_EVENT_END2(category, name, arg1_name, arg1_val, NULL, 0) | 219 TRACE_EVENT_END2(category, name, arg1_name, arg1_val, NULL, 0) |
| 204 #define TRACE_EVENT_END2(category, name, arg1_name, arg1_val, \ | 220 #define TRACE_EVENT_END2(category, name, arg1_name, arg1_val, \ |
| 205 arg2_name, arg2_val) \ | 221 arg2_name, arg2_val) \ |
| 206 INTERNAL_TRACE_EVENT_ADD(base::debug::TRACE_EVENT_PHASE_END, \ | 222 INTERNAL_TRACE_EVENT_ADD(base::debug::TRACE_EVENT_PHASE_END, \ |
| 207 category, name, arg1_name, arg1_val, arg2_name, arg2_val, \ | 223 category, name, arg1_name, arg1_val, arg2_name, arg2_val, \ |
| 208 base::debug::TraceLog::EVENT_FLAG_NONE) | 224 base::debug::TraceLog::EVENT_FLAG_NONE) |
| 209 #define TRACE_EVENT_COPY_END0(category, name) \ | 225 #define TRACE_EVENT_COPY_END0(category, name) \ |
| 210 TRACE_EVENT_COPY_END1(category, name, NULL, 0) | 226 TRACE_EVENT_COPY_END1(category, name, NULL, 0) |
| 211 #define TRACE_EVENT_COPY_END1(category, name, arg1_name, arg1_val) \ | 227 #define TRACE_EVENT_COPY_END1(category, name, arg1_name, arg1_val) \ |
| 212 TRACE_EVENT_COPY_END2(category, name, arg1_name, arg1_val, NULL, 0) | 228 TRACE_EVENT_COPY_END2(category, name, arg1_name, arg1_val, NULL, 0) |
| 213 #define TRACE_EVENT_COPY_END2(category, name, arg1_name, arg1_val, \ | 229 #define TRACE_EVENT_COPY_END2(category, name, arg1_name, arg1_val, \ |
| 214 arg2_name, arg2_val) \ | 230 arg2_name, arg2_val) \ |
| 215 INTERNAL_TRACE_EVENT_ADD(base::debug::TRACE_EVENT_PHASE_END, \ | 231 INTERNAL_TRACE_EVENT_ADD(base::debug::TRACE_EVENT_PHASE_END, \ |
| 216 category, name, \ | 232 category, name, \ |
| 217 arg1_name, base::debug::TraceValue::ForceCopy(arg1_val), \ | 233 arg1_name, base::debug::TraceValue::ForceCopy(arg1_val), \ |
| 218 arg2_name, base::debug::TraceValue::ForceCopy(arg2_val), \ | 234 arg2_name, base::debug::TraceValue::ForceCopy(arg2_val), \ |
| 219 base::debug::TraceLog::EVENT_FLAG_COPY) | 235 base::debug::TraceLog::EVENT_FLAG_COPY) |
| 220 | 236 |
| 221 // Time threshold event: | 237 // Time threshold event: |
| 222 // Only record the event if the duration is greater than the specified | 238 // Only record the event if the duration is greater than the specified |
| 223 // threshold_us (time in microseconds). | 239 // threshold_us (time in microseconds). |
| 224 // Records a pair of begin and end events called "name" for the current | 240 // Records a pair of begin and end events called "name" for the current |
| 225 // scope, with 0, 1 or 2 associated arguments. If the category is not | 241 // scope, with 0, 1 or 2 associated arguments. If the category is not |
| 226 // enabled, then this does nothing. | 242 // enabled, then this does nothing. |
| 227 // - category and name strings must have application lifetime (statics or | 243 // - category and name strings must have application lifetime (statics or |
| 228 // literals). They may not include " chars. | 244 // literals). They may not include " chars. |
| 229 #define TRACE_EVENT_IF_LONGER_THAN0(threshold_us, category, name) \ | 245 #define TRACE_EVENT_IF_LONGER_THAN0(threshold_us, category, name) \ |
| 230 TRACE_EVENT_IF_LONGER_THAN1(threshold_us, category, name, NULL, 0) | 246 TRACE_EVENT_IF_LONGER_THAN1(threshold_us, category, name, NULL, 0) |
| 231 #define TRACE_EVENT_IF_LONGER_THAN1( \ | 247 #define TRACE_EVENT_IF_LONGER_THAN1( \ |
| 232 threshold_us, category, name, arg1_name, arg1_val) \ | 248 threshold_us, category, name, arg1_name, arg1_val) \ |
| 233 TRACE_EVENT_IF_LONGER_THAN2(threshold_us, category, name, \ | 249 TRACE_EVENT_IF_LONGER_THAN2(threshold_us, category, name, \ |
| 234 arg1_name, arg1_val, NULL, 0) | 250 arg1_name, arg1_val, NULL, 0) |
| 235 #define TRACE_EVENT_IF_LONGER_THAN2( \ | 251 #define TRACE_EVENT_IF_LONGER_THAN2( \ |
| 236 threshold_us, category, name, arg1_name, arg1_val, arg2_name, arg2_val) \ | 252 threshold_us, category, name, arg1_name, arg1_val, arg2_name, arg2_val) \ |
| 237 INTERNAL_TRACE_EVENT_ADD_SCOPED_IF_LONGER_THAN(threshold_us, \ | 253 INTERNAL_TRACE_EVENT_ADD_SCOPED_IF_LONGER_THAN(threshold_us, \ |
| 238 category, name, arg1_name, arg1_val, arg2_name, arg2_val) | 254 category, name, arg1_name, arg1_val, arg2_name, arg2_val) |
| 239 | 255 |
| 240 | 256 |
| 241 // Implementation detail: trace event macros create temporary variables | 257 // Implementation detail: trace event macros create temporary variables |
| 242 // to keep instrumentation overhead low. These macros give each temporary | 258 // to keep instrumentation overhead low. These macros give each temporary |
| 243 // variable a unique name based on the line number to prevent name collissions. | 259 // variable a unique name based on the line number to prevent name collissions. |
| 244 #define INTERNAL_TRACE_EVENT_UID3(a,b) \ | 260 #define INTERNAL_TRACE_EVENT_UID3(a,b) \ |
| 245 trace_event_unique_##a##b | 261 trace_event_unique_##a##b |
| 246 #define INTERNAL_TRACE_EVENT_UID2(a,b) \ | 262 #define INTERNAL_TRACE_EVENT_UID2(a,b) \ |
| 247 INTERNAL_TRACE_EVENT_UID3(a,b) | 263 INTERNAL_TRACE_EVENT_UID3(a,b) |
| 248 #define INTERNAL_TRACE_EVENT_UID(name_prefix) \ | 264 #define INTERNAL_TRACE_EVENT_UID(name_prefix) \ |
| 249 INTERNAL_TRACE_EVENT_UID2(name_prefix, __LINE__) | 265 INTERNAL_TRACE_EVENT_UID2(name_prefix, __LINE__) |
| 250 | 266 |
| 251 // Implementation detail: internal macro to create static category. | 267 // Implementation detail: internal macro to create static category. |
| 252 // - ANNOTATE_BENIGN_RACE, see Thread Safety above. | 268 // - ANNOTATE_BENIGN_RACE, see Thread Safety above. |
| 253 #define INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category) \ | 269 #define INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category) \ |
| 254 static const base::debug::TraceCategory* \ | 270 static const base::debug::TraceCategory* \ |
| 255 INTERNAL_TRACE_EVENT_UID(catstatic) = NULL; \ | 271 INTERNAL_TRACE_EVENT_UID(catstatic) = NULL; \ |
| 256 ANNOTATE_BENIGN_RACE(&INTERNAL_TRACE_EVENT_UID(catstatic), \ | 272 ANNOTATE_BENIGN_RACE(&INTERNAL_TRACE_EVENT_UID(catstatic), \ |
| 257 "trace_event category"); \ | 273 "trace_event category"); \ |
| 258 if (!INTERNAL_TRACE_EVENT_UID(catstatic)) \ | 274 if (!INTERNAL_TRACE_EVENT_UID(catstatic)) \ |
| 259 INTERNAL_TRACE_EVENT_UID(catstatic) = \ | 275 INTERNAL_TRACE_EVENT_UID(catstatic) = \ |
| 260 base::debug::TraceLog::GetCategory(category); | 276 base::debug::TraceLog::GetCategory(category); |
| 261 | 277 |
| 262 // Implementation detail: internal macro to create static category and add begin | 278 // Implementation detail: internal macro to create static category and add begin |
| 263 // event if the category is enabled. | 279 // event if the category is enabled. |
| 264 #define INTERNAL_TRACE_EVENT_ADD( \ | 280 #define INTERNAL_TRACE_EVENT_ADD( \ |
| 265 phase, category, name, arg1_name, arg1_val, arg2_name, arg2_val, flags) \ | 281 phase, category, name, arg1_name, arg1_val, arg2_name, arg2_val, flags) \ |
| 266 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ | 282 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ |
| 267 if (INTERNAL_TRACE_EVENT_UID(catstatic)->enabled) { \ | 283 if (INTERNAL_TRACE_EVENT_UID(catstatic)->enabled) { \ |
| 268 base::debug::TraceLog::GetInstance()->AddTraceEvent( \ | 284 base::debug::TraceLog::GetInstance()->AddTraceEvent( \ |
| 269 phase, INTERNAL_TRACE_EVENT_UID(catstatic), \ | 285 phase, INTERNAL_TRACE_EVENT_UID(catstatic), \ |
| 270 name, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, flags); \ | 286 name, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, flags); \ |
| 271 } | 287 } |
| 272 | 288 |
| 273 // Implementation detail: internal macro to create static category and add begin | 289 // Implementation detail: internal macro to create static category and add begin |
| 274 // event if the category is enabled. Also adds the end event when the scope | 290 // event if the category is enabled. Also adds the end event when the scope |
| 275 // ends. | 291 // ends. |
| 276 #define INTERNAL_TRACE_EVENT_ADD_SCOPED( \ | 292 #define INTERNAL_TRACE_EVENT_ADD_SCOPED( \ |
| 277 category, name, arg1_name, arg1_val, arg2_name, arg2_val) \ | 293 category, name, arg1_name, arg1_val, arg2_name, arg2_val) \ |
| 278 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ | 294 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ |
| 279 base::debug::internal::TraceEndOnScopeClose \ | 295 base::debug::internal::TraceEndOnScopeClose \ |
| 280 INTERNAL_TRACE_EVENT_UID(profileScope); \ | 296 INTERNAL_TRACE_EVENT_UID(profileScope); \ |
| 281 if (INTERNAL_TRACE_EVENT_UID(catstatic)->enabled) { \ | 297 if (INTERNAL_TRACE_EVENT_UID(catstatic)->enabled) { \ |
| 282 base::debug::TraceLog::GetInstance()->AddTraceEvent( \ | 298 base::debug::TraceLog::GetInstance()->AddTraceEvent( \ |
| 283 base::debug::TRACE_EVENT_PHASE_BEGIN, \ | 299 base::debug::TRACE_EVENT_PHASE_BEGIN, \ |
| 284 INTERNAL_TRACE_EVENT_UID(catstatic), \ | 300 INTERNAL_TRACE_EVENT_UID(catstatic), \ |
| 285 name, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, \ | 301 name, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, \ |
| 286 base::debug::TraceLog::EVENT_FLAG_NONE); \ | 302 base::debug::TraceLog::EVENT_FLAG_NONE); \ |
| 287 INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \ | 303 INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \ |
| 288 INTERNAL_TRACE_EVENT_UID(catstatic), name); \ | 304 INTERNAL_TRACE_EVENT_UID(catstatic), name); \ |
| 289 } | 305 } |
| 290 | 306 |
| 291 // Implementation detail: internal macro to create static category and add begin | 307 // Implementation detail: internal macro to create static category and add begin |
| 292 // event if the category is enabled. Also adds the end event when the scope | 308 // event if the category is enabled. Also adds the end event when the scope |
| 293 // ends. If the elapsed time is < threshold time, the begin/end pair is erased. | 309 // ends. If the elapsed time is < threshold time, the begin/end pair is erased. |
| 294 #define INTERNAL_TRACE_EVENT_ADD_SCOPED_IF_LONGER_THAN(threshold, \ | 310 #define INTERNAL_TRACE_EVENT_ADD_SCOPED_IF_LONGER_THAN(threshold, \ |
| 295 category, name, arg1_name, arg1_val, arg2_name, arg2_val) \ | 311 category, name, arg1_name, arg1_val, arg2_name, arg2_val) \ |
| 296 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ | 312 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ |
| 297 base::debug::internal::TraceEndOnScopeCloseThreshold \ | 313 base::debug::internal::TraceEndOnScopeCloseThreshold \ |
| 298 INTERNAL_TRACE_EVENT_UID(profileScope); \ | 314 INTERNAL_TRACE_EVENT_UID(profileScope); \ |
| 299 if (INTERNAL_TRACE_EVENT_UID(catstatic)->enabled) { \ | 315 if (INTERNAL_TRACE_EVENT_UID(catstatic)->enabled) { \ |
| 300 int INTERNAL_TRACE_EVENT_UID(begin_event_id) = \ | 316 int INTERNAL_TRACE_EVENT_UID(begin_event_id) = \ |
| 301 base::debug::TraceLog::GetInstance()->AddTraceEvent( \ | 317 base::debug::TraceLog::GetInstance()->AddTraceEvent( \ |
| 302 base::debug::TRACE_EVENT_PHASE_BEGIN, \ | 318 base::debug::TRACE_EVENT_PHASE_BEGIN, \ |
| 303 INTERNAL_TRACE_EVENT_UID(catstatic), \ | 319 INTERNAL_TRACE_EVENT_UID(catstatic), \ |
| 304 name, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, \ | 320 name, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, \ |
| 305 base::debug::TraceLog::EVENT_FLAG_NONE); \ | 321 base::debug::TraceLog::EVENT_FLAG_NONE); \ |
| 306 INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \ | 322 INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \ |
| 307 INTERNAL_TRACE_EVENT_UID(catstatic), name, \ | 323 INTERNAL_TRACE_EVENT_UID(catstatic), name, \ |
| 308 INTERNAL_TRACE_EVENT_UID(begin_event_id), threshold); \ | 324 INTERNAL_TRACE_EVENT_UID(begin_event_id), threshold); \ |
| 309 } | 325 } |
| 310 | 326 |
| 311 namespace base { | 327 namespace base { |
| 312 | 328 |
| 313 class RefCountedString; | 329 class RefCountedString; |
| 314 | 330 |
| 315 namespace debug { | 331 namespace debug { |
| 316 | 332 |
| 317 // Categories allow enabling/disabling of streams of trace events | 333 // Categories allow enabling/disabling of streams of trace events |
| 318 struct TraceCategory { | 334 struct TraceCategory { |
| 319 const char* name; | 335 const char* name; |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 570 const char* name, | 586 const char* name, |
| 571 const void* id, | 587 const void* id, |
| 572 const char* extra); | 588 const char* extra); |
| 573 static void AddTraceEventEtw(TraceEventPhase phase, | 589 static void AddTraceEventEtw(TraceEventPhase phase, |
| 574 const char* name, | 590 const char* name, |
| 575 const void* id, | 591 const void* id, |
| 576 const std::string& extra); | 592 const std::string& extra); |
| 577 | 593 |
| 578 // Exposed for unittesting: | 594 // Exposed for unittesting: |
| 579 | 595 |
| 596 // Allows deleting our singleton instance. |
| 597 static void DeleteForTesting(); |
| 598 |
| 580 // Allows resurrecting our singleton instance post-AtExit processing. | 599 // Allows resurrecting our singleton instance post-AtExit processing. |
| 581 static void Resurrect(); | 600 static void Resurrect(); |
| 582 | 601 |
| 583 // Allow tests to inspect TraceEvents. | 602 // Allow tests to inspect TraceEvents. |
| 584 size_t GetEventsSize() const { return logged_events_.size(); } | 603 size_t GetEventsSize() const { return logged_events_.size(); } |
| 585 const TraceEvent& GetEventAt(size_t index) const { | 604 const TraceEvent& GetEventAt(size_t index) const { |
| 586 DCHECK(index < logged_events_.size()); | 605 DCHECK(index < logged_events_.size()); |
| 587 return logged_events_[index]; | 606 return logged_events_[index]; |
| 588 } | 607 } |
| 589 | 608 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 679 Data* p_data_; | 698 Data* p_data_; |
| 680 Data data_; | 699 Data data_; |
| 681 }; | 700 }; |
| 682 | 701 |
| 683 } // namespace internal | 702 } // namespace internal |
| 684 | 703 |
| 685 } // namespace debug | 704 } // namespace debug |
| 686 } // namespace base | 705 } // namespace base |
| 687 | 706 |
| 688 #endif // BASE_DEBUG_TRACE_EVENT_H_ | 707 #endif // BASE_DEBUG_TRACE_EVENT_H_ |
| OLD | NEW |