OLD | NEW |
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 file defines the set of trace_event macros without specifying | 5 // This header file defines the set of 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 // events to some other universe, you can copy-and-paste this file as well as | 7 // events to some other universe, you can copy-and-paste this file as well as |
8 // trace_event.h, modifying the macros contained there as necessary for the | 8 // trace_event.h, modifying the macros contained there as necessary for the |
9 // target platform. The end result is that multiple libraries can funnel events | 9 // target platform. The end result is that multiple libraries can funnel events |
10 // through to a shared trace event collector. | 10 // through to a shared trace event collector. |
(...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
800 // int num_args, | 800 // int num_args, |
801 // const char** arg_names, | 801 // const char** arg_names, |
802 // const unsigned char* arg_types, | 802 // const unsigned char* arg_types, |
803 // const unsigned long long* arg_values, | 803 // const unsigned long long* arg_values, |
804 // unsigned char flags) | 804 // unsigned char flags) |
805 #define TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_THREAD_ID_AND_TIMESTAMP \ | 805 #define TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_THREAD_ID_AND_TIMESTAMP \ |
806 base::debug::TraceLog::GetInstance()->AddTraceEventWithThreadIdAndTimestamp | 806 base::debug::TraceLog::GetInstance()->AddTraceEventWithThreadIdAndTimestamp |
807 | 807 |
808 // Set the duration field of a COMPLETE trace event. | 808 // Set the duration field of a COMPLETE trace event. |
809 // void TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION( | 809 // void TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION( |
| 810 // const unsigned char* category_group_enabled, |
| 811 // const char* name, |
810 // base::debug::TraceEventHandle id) | 812 // base::debug::TraceEventHandle id) |
811 #define TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION \ | 813 #define TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION \ |
812 base::debug::TraceLog::GetInstance()->UpdateTraceEventDuration | 814 base::debug::TraceLog::GetInstance()->UpdateTraceEventDuration |
813 | 815 |
814 // Defines atomic operations used internally by the tracing system. | 816 // Defines atomic operations used internally by the tracing system. |
815 #define TRACE_EVENT_API_ATOMIC_WORD base::subtle::AtomicWord | 817 #define TRACE_EVENT_API_ATOMIC_WORD base::subtle::AtomicWord |
816 #define TRACE_EVENT_API_ATOMIC_LOAD(var) base::subtle::NoBarrier_Load(&(var)) | 818 #define TRACE_EVENT_API_ATOMIC_LOAD(var) base::subtle::NoBarrier_Load(&(var)) |
817 #define TRACE_EVENT_API_ATOMIC_STORE(var, value) \ | 819 #define TRACE_EVENT_API_ATOMIC_STORE(var, value) \ |
818 base::subtle::NoBarrier_Store(&(var), (value)) | 820 base::subtle::NoBarrier_Store(&(var), (value)) |
819 | 821 |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
881 #define INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name, ...) \ | 883 #define INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name, ...) \ |
882 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \ | 884 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \ |
883 trace_event_internal::ScopedTracer INTERNAL_TRACE_EVENT_UID(tracer); \ | 885 trace_event_internal::ScopedTracer INTERNAL_TRACE_EVENT_UID(tracer); \ |
884 if (*INTERNAL_TRACE_EVENT_UID(category_group_enabled)) { \ | 886 if (*INTERNAL_TRACE_EVENT_UID(category_group_enabled)) { \ |
885 base::debug::TraceEventHandle h = trace_event_internal::AddTraceEvent( \ | 887 base::debug::TraceEventHandle h = trace_event_internal::AddTraceEvent( \ |
886 TRACE_EVENT_PHASE_COMPLETE, \ | 888 TRACE_EVENT_PHASE_COMPLETE, \ |
887 INTERNAL_TRACE_EVENT_UID(category_group_enabled), \ | 889 INTERNAL_TRACE_EVENT_UID(category_group_enabled), \ |
888 name, trace_event_internal::kNoEventId, \ | 890 name, trace_event_internal::kNoEventId, \ |
889 TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__); \ | 891 TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__); \ |
890 INTERNAL_TRACE_EVENT_UID(tracer).Initialize( \ | 892 INTERNAL_TRACE_EVENT_UID(tracer).Initialize( \ |
891 INTERNAL_TRACE_EVENT_UID(category_group_enabled), h); \ | 893 INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, h); \ |
892 } | 894 } |
893 | 895 |
894 // Implementation detail: internal macro to create static category and add | 896 // Implementation detail: internal macro to create static category and add |
895 // event if the category is enabled. | 897 // event if the category is enabled. |
896 #define INTERNAL_TRACE_EVENT_ADD_WITH_ID(phase, category_group, name, id, \ | 898 #define INTERNAL_TRACE_EVENT_ADD_WITH_ID(phase, category_group, name, id, \ |
897 flags, ...) \ | 899 flags, ...) \ |
898 do { \ | 900 do { \ |
899 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \ | 901 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \ |
900 if (*INTERNAL_TRACE_EVENT_UID(category_group_enabled)) { \ | 902 if (*INTERNAL_TRACE_EVENT_UID(category_group_enabled)) { \ |
901 unsigned char trace_event_flags = flags | TRACE_EVENT_FLAG_HAS_ID; \ | 903 unsigned char trace_event_flags = flags | TRACE_EVENT_FLAG_HAS_ID; \ |
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1371 } | 1373 } |
1372 | 1374 |
1373 // Used by TRACE_EVENTx macros. Do not use directly. | 1375 // Used by TRACE_EVENTx macros. Do not use directly. |
1374 class TRACE_EVENT_API_CLASS_EXPORT ScopedTracer { | 1376 class TRACE_EVENT_API_CLASS_EXPORT ScopedTracer { |
1375 public: | 1377 public: |
1376 // Note: members of data_ intentionally left uninitialized. See Initialize. | 1378 // Note: members of data_ intentionally left uninitialized. See Initialize. |
1377 ScopedTracer() : p_data_(NULL) {} | 1379 ScopedTracer() : p_data_(NULL) {} |
1378 | 1380 |
1379 ~ScopedTracer() { | 1381 ~ScopedTracer() { |
1380 if (p_data_ && *data_.category_group_enabled) | 1382 if (p_data_ && *data_.category_group_enabled) |
1381 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(data_.event_handle); | 1383 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION( |
| 1384 data_.category_group_enabled, data_.name, data_.event_handle); |
1382 } | 1385 } |
1383 | 1386 |
1384 void Initialize(const unsigned char* category_group_enabled, | 1387 void Initialize(const unsigned char* category_group_enabled, |
| 1388 const char* name, |
1385 base::debug::TraceEventHandle event_handle) { | 1389 base::debug::TraceEventHandle event_handle) { |
1386 data_.category_group_enabled = category_group_enabled; | 1390 data_.category_group_enabled = category_group_enabled; |
| 1391 data_.name = name; |
1387 data_.event_handle = event_handle; | 1392 data_.event_handle = event_handle; |
1388 p_data_ = &data_; | 1393 p_data_ = &data_; |
1389 } | 1394 } |
1390 | 1395 |
1391 private: | 1396 private: |
1392 // This Data struct workaround is to avoid initializing all the members | 1397 // This Data struct workaround is to avoid initializing all the members |
1393 // in Data during construction of this object, since this object is always | 1398 // in Data during construction of this object, since this object is always |
1394 // constructed, even when tracing is disabled. If the members of Data were | 1399 // constructed, even when tracing is disabled. If the members of Data were |
1395 // members of this class instead, compiler warnings occur about potential | 1400 // members of this class instead, compiler warnings occur about potential |
1396 // uninitialized accesses. | 1401 // uninitialized accesses. |
1397 struct Data { | 1402 struct Data { |
1398 const unsigned char* category_group_enabled; | 1403 const unsigned char* category_group_enabled; |
| 1404 const char* name; |
1399 base::debug::TraceEventHandle event_handle; | 1405 base::debug::TraceEventHandle event_handle; |
1400 }; | 1406 }; |
1401 Data* p_data_; | 1407 Data* p_data_; |
1402 Data data_; | 1408 Data data_; |
1403 }; | 1409 }; |
1404 | 1410 |
1405 // Used by TRACE_EVENT_BINARY_EFFICIENTx macro. Do not use directly. | 1411 // Used by TRACE_EVENT_BINARY_EFFICIENTx macro. Do not use directly. |
1406 class TRACE_EVENT_API_CLASS_EXPORT ScopedTraceBinaryEfficient { | 1412 class TRACE_EVENT_API_CLASS_EXPORT ScopedTraceBinaryEfficient { |
1407 public: | 1413 public: |
1408 ScopedTraceBinaryEfficient(const char* category_group, const char* name); | 1414 ScopedTraceBinaryEfficient(const char* category_group, const char* name); |
1409 ~ScopedTraceBinaryEfficient(); | 1415 ~ScopedTraceBinaryEfficient(); |
1410 | 1416 |
1411 private: | 1417 private: |
1412 const unsigned char* category_group_enabled_; | 1418 const unsigned char* category_group_enabled_; |
| 1419 const char* name_; |
1413 base::debug::TraceEventHandle event_handle_; | 1420 base::debug::TraceEventHandle event_handle_; |
1414 }; | 1421 }; |
1415 | 1422 |
1416 // This macro generates less code then TRACE_EVENT0 but is also | 1423 // This macro generates less code then TRACE_EVENT0 but is also |
1417 // slower to execute when tracing is off. It should generally only be | 1424 // slower to execute when tracing is off. It should generally only be |
1418 // used with code that is seldom executed or conditionally executed | 1425 // used with code that is seldom executed or conditionally executed |
1419 // when debugging. | 1426 // when debugging. |
1420 // For now the category_group must be "gpu". | 1427 // For now the category_group must be "gpu". |
1421 #define TRACE_EVENT_BINARY_EFFICIENT0(category_group, name) \ | 1428 #define TRACE_EVENT_BINARY_EFFICIENT0(category_group, name) \ |
1422 trace_event_internal::ScopedTraceBinaryEfficient \ | 1429 trace_event_internal::ScopedTraceBinaryEfficient \ |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1481 const char* name_; | 1488 const char* name_; |
1482 IDType id_; | 1489 IDType id_; |
1483 | 1490 |
1484 DISALLOW_COPY_AND_ASSIGN(TraceScopedTrackableObject); | 1491 DISALLOW_COPY_AND_ASSIGN(TraceScopedTrackableObject); |
1485 }; | 1492 }; |
1486 | 1493 |
1487 } // namespace debug | 1494 } // namespace debug |
1488 } // namespace base | 1495 } // namespace base |
1489 | 1496 |
1490 #endif /* BASE_DEBUG_TRACE_EVENT_H_ */ | 1497 #endif /* BASE_DEBUG_TRACE_EVENT_H_ */ |
OLD | NEW |