Chromium Code Reviews| 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 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 523 // that the same pointer on two different processes will not collide. | 523 // that the same pointer on two different processes will not collide. |
| 524 // | 524 // |
| 525 // An asynchronous operation can consist of multiple phases. The first phase is | 525 // An asynchronous operation can consist of multiple phases. The first phase is |
| 526 // defined by the ASYNC_BEGIN calls. Additional phases can be defined using the | 526 // defined by the ASYNC_BEGIN calls. Additional phases can be defined using the |
| 527 // ASYNC_STEP_INTO or ASYNC_STEP_PAST macros. The ASYNC_STEP_INTO macro will | 527 // ASYNC_STEP_INTO or ASYNC_STEP_PAST macros. The ASYNC_STEP_INTO macro will |
| 528 // annotate the block following the call. The ASYNC_STEP_PAST macro will | 528 // annotate the block following the call. The ASYNC_STEP_PAST macro will |
| 529 // annotate the block prior to the call. Note that any particular event must use | 529 // annotate the block prior to the call. Note that any particular event must use |
| 530 // only STEP_INTO or STEP_PAST macros; they can not mix and match. When the | 530 // only STEP_INTO or STEP_PAST macros; they can not mix and match. When the |
| 531 // operation completes, call ASYNC_END. | 531 // operation completes, call ASYNC_END. |
| 532 // | 532 // |
| 533 // ASYNC_STEP_INTO and ASYNC_STEP_PAST can only represent one level of phases, | |
| 534 // between a pair of ASYNC_BEGIN and ASYNC_END. If an asynchronous operation | |
| 535 // has multiple levels of nesting phases/events, NESTABLE_ASYNC_* APIs can be | |
| 536 // used. | |
| 537 // | |
| 533 // An ASYNC trace typically occurs on a single thread (if not, they will only be | 538 // An ASYNC trace typically occurs on a single thread (if not, they will only be |
| 534 // drawn on the thread defined in the ASYNC_BEGIN event), but all events in that | 539 // drawn on the thread defined in the ASYNC_BEGIN event), but all events in that |
| 535 // operation must use the same |name| and |id|. Each step can have its own | 540 // operation must use the same |name| and |id|. Each step can have its own |
| 536 // args. | 541 // args. |
| 537 #define TRACE_EVENT_ASYNC_BEGIN0(category_group, name, id) \ | 542 #define TRACE_EVENT_ASYNC_BEGIN0(category_group, name, id) \ |
| 538 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \ | 543 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \ |
| 539 category_group, name, id, TRACE_EVENT_FLAG_NONE) | 544 category_group, name, id, TRACE_EVENT_FLAG_NONE) |
| 540 #define TRACE_EVENT_ASYNC_BEGIN1(category_group, name, id, arg1_name, \ | 545 #define TRACE_EVENT_ASYNC_BEGIN1(category_group, name, id, arg1_name, \ |
| 541 arg1_val) \ | 546 arg1_val) \ |
| 542 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \ | 547 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \ |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 627 arg1_name, arg1_val, arg2_name, arg2_val) | 632 arg1_name, arg1_val, arg2_name, arg2_val) |
| 628 | 633 |
| 629 // Similar to TRACE_EVENT_ASYNC_ENDx but with a custom |at| timestamp provided. | 634 // Similar to TRACE_EVENT_ASYNC_ENDx but with a custom |at| timestamp provided. |
| 630 #define TRACE_EVENT_ASYNC_END_WITH_TIMESTAMP0(category_group, \ | 635 #define TRACE_EVENT_ASYNC_END_WITH_TIMESTAMP0(category_group, \ |
| 631 name, id, timestamp) \ | 636 name, id, timestamp) \ |
| 632 INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ | 637 INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP( \ |
| 633 TRACE_EVENT_PHASE_ASYNC_END, category_group, name, id, \ | 638 TRACE_EVENT_PHASE_ASYNC_END, category_group, name, id, \ |
| 634 static_cast<int>(base::PlatformThread::CurrentId()), \ | 639 static_cast<int>(base::PlatformThread::CurrentId()), \ |
| 635 timestamp, TRACE_EVENT_FLAG_NONE) | 640 timestamp, TRACE_EVENT_FLAG_NONE) |
| 636 | 641 |
| 642 | |
| 643 // Records a single NESTABLE_ASYNC_BEGIN event called "name" immediately, with 2 | |
| 644 // associated arguments. If the category is not enabled, then this | |
| 645 // does nothing. | |
| 646 // - category and name strings must have application lifetime (statics or | |
| 647 // literals). They may not include " chars. | |
| 648 // - |id| is used to match the NESTABLE_ASYNC_BEGIN event with the | |
| 649 // NESTABLE_ASYNC_END event. Events are considered to match if their | |
| 650 // category_group, name and id values all match. |id| must either be a | |
| 651 // pointer or an integer value up to 64 bits. If it's a pointer, the bits | |
| 652 // will be xored with a hash of the process ID so that the same pointer on two | |
| 653 // different processes will not collide. | |
| 654 // - Unmatched NESTABLE_ASYNC_END event will be parsed as an instant event, | |
| 655 // and unmatched NESTABLE_ASYNC_BEGIN event will be parsed as an event, which | |
| 656 // starts at the time of the NESTABLE_ASYNC_BEGIN event and ends at the last | |
| 657 // NESTABLE_ASYNC_END event of that |id|. | |
| 658 // | |
| 659 // NESTABLE_ASYNC_* APIs are used to capture asynchronous operations which can | |
| 660 // have multiple levels of nested events/phases. If an asynchronous operation | |
| 661 // only has one level of sub-events, one should consider using ASYNC_STEP_*. | |
| 662 | |
| 663 #define TRACE_EVENT_NESTABLE_ASYNC_BEGIN2(category_group, name, id, arg1_name, \ | |
| 664 arg1_val, arg2_name, arg2_val) \ | |
| 665 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN, \ | |
| 666 category_group, name, id, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, \ | |
| 667 arg2_name, arg2_val) | |
| 668 // Records a single NESTABLE_ASYNC_END event for "name" immediately. | |
| 669 // If the category is not enabled, then this does nothing. | |
| 670 #define TRACE_EVENT_NESTABLE_ASYNC_END2(category_group, name, id, arg1_name, \ | |
| 671 arg1_val, arg2_name, arg2_val) \ | |
| 672 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_NESTABLE_ASYNC_END, \ | |
| 673 category_group, name, id, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, \ | |
| 674 arg2_name, arg2_val) | |
| 675 // Records a single NESTABLE_ASYNC_INSTANT event for "name" immediately. | |
| 676 // If the category is not enabled, then this does nothing. | |
| 677 #define TRACE_EVENT_NESTABLE_ASYNC_INSTANT2(category_group, name, id, \ | |
| 678 arg1_name, arg1_val, arg2_name, arg2_val) \ | |
| 679 INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_NESTABLE_ASYNC_INSTANT, \ | |
| 680 category_group, name, id, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, \ | |
| 681 arg2_name, arg2_val) | |
| 682 | |
| 637 // Records a single FLOW_BEGIN event called "name" immediately, with 0, 1 or 2 | 683 // Records a single FLOW_BEGIN event called "name" immediately, with 0, 1 or 2 |
| 638 // associated arguments. If the category is not enabled, then this | 684 // associated arguments. If the category is not enabled, then this |
| 639 // does nothing. | 685 // does nothing. |
| 640 // - category and name strings must have application lifetime (statics or | 686 // - category and name strings must have application lifetime (statics or |
| 641 // literals). They may not include " chars. | 687 // literals). They may not include " chars. |
| 642 // - |id| is used to match the FLOW_BEGIN event with the FLOW_END event. FLOW | 688 // - |id| is used to match the FLOW_BEGIN event with the FLOW_END event. FLOW |
| 643 // events are considered to match if their category_group, name and id values | 689 // events are considered to match if their category_group, name and id values |
| 644 // all match. |id| must either be a pointer or an integer value up to 64 bits. | 690 // all match. |id| must either be a pointer or an integer value up to 64 bits. |
| 645 // If it's a pointer, the bits will be xored with a hash of the process ID so | 691 // If it's a pointer, the bits will be xored with a hash of the process ID so |
| 646 // that the same pointer on two different processes will not collide. | 692 // that the same pointer on two different processes will not collide. |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 965 #define TRACE_EVENT_PHASE_ASYNC_END ('F') | 1011 #define TRACE_EVENT_PHASE_ASYNC_END ('F') |
| 966 #define TRACE_EVENT_PHASE_FLOW_BEGIN ('s') | 1012 #define TRACE_EVENT_PHASE_FLOW_BEGIN ('s') |
| 967 #define TRACE_EVENT_PHASE_FLOW_STEP ('t') | 1013 #define TRACE_EVENT_PHASE_FLOW_STEP ('t') |
| 968 #define TRACE_EVENT_PHASE_FLOW_END ('f') | 1014 #define TRACE_EVENT_PHASE_FLOW_END ('f') |
| 969 #define TRACE_EVENT_PHASE_METADATA ('M') | 1015 #define TRACE_EVENT_PHASE_METADATA ('M') |
| 970 #define TRACE_EVENT_PHASE_COUNTER ('C') | 1016 #define TRACE_EVENT_PHASE_COUNTER ('C') |
| 971 #define TRACE_EVENT_PHASE_SAMPLE ('P') | 1017 #define TRACE_EVENT_PHASE_SAMPLE ('P') |
| 972 #define TRACE_EVENT_PHASE_CREATE_OBJECT ('N') | 1018 #define TRACE_EVENT_PHASE_CREATE_OBJECT ('N') |
| 973 #define TRACE_EVENT_PHASE_SNAPSHOT_OBJECT ('O') | 1019 #define TRACE_EVENT_PHASE_SNAPSHOT_OBJECT ('O') |
| 974 #define TRACE_EVENT_PHASE_DELETE_OBJECT ('D') | 1020 #define TRACE_EVENT_PHASE_DELETE_OBJECT ('D') |
| 1021 #define TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN ('b') | |
| 1022 #define TRACE_EVENT_PHASE_NESTABLE_ASYNC_END ('e') | |
| 1023 #define TRACE_EVENT_PHASE_NESTABLE_ASYNC_INSTANT ('n') | |
|
dsinclair
2014/09/03 15:02:47
bikeshed: should these be ASYNC_NESTABLE (and the
xunjieli
2014/09/03 15:09:15
Done. ASYNC_NESTABLE does sound better. Thanks!
| |
| 975 | 1024 |
| 976 // Flags for changing the behavior of TRACE_EVENT_API_ADD_TRACE_EVENT. | 1025 // Flags for changing the behavior of TRACE_EVENT_API_ADD_TRACE_EVENT. |
| 977 #define TRACE_EVENT_FLAG_NONE (static_cast<unsigned char>(0)) | 1026 #define TRACE_EVENT_FLAG_NONE (static_cast<unsigned char>(0)) |
| 978 #define TRACE_EVENT_FLAG_COPY (static_cast<unsigned char>(1 << 0)) | 1027 #define TRACE_EVENT_FLAG_COPY (static_cast<unsigned char>(1 << 0)) |
| 979 #define TRACE_EVENT_FLAG_HAS_ID (static_cast<unsigned char>(1 << 1)) | 1028 #define TRACE_EVENT_FLAG_HAS_ID (static_cast<unsigned char>(1 << 1)) |
| 980 #define TRACE_EVENT_FLAG_MANGLE_ID (static_cast<unsigned char>(1 << 2)) | 1029 #define TRACE_EVENT_FLAG_MANGLE_ID (static_cast<unsigned char>(1 << 2)) |
| 981 #define TRACE_EVENT_FLAG_SCOPE_OFFSET (static_cast<unsigned char>(1 << 3)) | 1030 #define TRACE_EVENT_FLAG_SCOPE_OFFSET (static_cast<unsigned char>(1 << 3)) |
| 982 | 1031 |
| 983 #define TRACE_EVENT_FLAG_SCOPE_MASK (static_cast<unsigned char>( \ | 1032 #define TRACE_EVENT_FLAG_SCOPE_MASK (static_cast<unsigned char>( \ |
| 984 TRACE_EVENT_FLAG_SCOPE_OFFSET | (TRACE_EVENT_FLAG_SCOPE_OFFSET << 1))) | 1033 TRACE_EVENT_FLAG_SCOPE_OFFSET | (TRACE_EVENT_FLAG_SCOPE_OFFSET << 1))) |
| (...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1526 const char* name_; | 1575 const char* name_; |
| 1527 IDType id_; | 1576 IDType id_; |
| 1528 | 1577 |
| 1529 DISALLOW_COPY_AND_ASSIGN(TraceScopedTrackableObject); | 1578 DISALLOW_COPY_AND_ASSIGN(TraceScopedTrackableObject); |
| 1530 }; | 1579 }; |
| 1531 | 1580 |
| 1532 } // namespace debug | 1581 } // namespace debug |
| 1533 } // namespace base | 1582 } // namespace base |
| 1534 | 1583 |
| 1535 #endif /* BASE_DEBUG_TRACE_EVENT_H_ */ | 1584 #endif /* BASE_DEBUG_TRACE_EVENT_H_ */ |
| OLD | NEW |