| 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 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. |
| (...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 590 // int num_args, | 590 // int num_args, |
| 591 // const char** arg_names, | 591 // const char** arg_names, |
| 592 // const unsigned char* arg_types, | 592 // const unsigned char* arg_types, |
| 593 // const unsigned long long* arg_values, | 593 // const unsigned long long* arg_values, |
| 594 // int threshold_begin_id, | 594 // int threshold_begin_id, |
| 595 // long long threshold, | 595 // long long threshold, |
| 596 // unsigned char flags) | 596 // unsigned char flags) |
| 597 #define TRACE_EVENT_API_ADD_TRACE_EVENT \ | 597 #define TRACE_EVENT_API_ADD_TRACE_EVENT \ |
| 598 base::debug::TraceLog::GetInstance()->AddTraceEvent | 598 base::debug::TraceLog::GetInstance()->AddTraceEvent |
| 599 | 599 |
| 600 // Checks if Android ATrace is enabled. |
| 601 #if defined(OS_ANDROID) |
| 602 #define TRACE_EVENT_API_IS_ATRACE_ENABLED() \ |
| 603 base::debug::TraceLog::IsATraceEnabled() |
| 604 #else |
| 605 #define TRACE_EVENT_API_IS_ATRACE_ENABLED() false |
| 606 #endif |
| 607 |
| 600 //////////////////////////////////////////////////////////////////////////////// | 608 //////////////////////////////////////////////////////////////////////////////// |
| 601 | 609 |
| 602 // Implementation detail: trace event macros create temporary variables | 610 // Implementation detail: trace event macros create temporary variables |
| 603 // to keep instrumentation overhead low. These macros give each temporary | 611 // to keep instrumentation overhead low. These macros give each temporary |
| 604 // variable a unique name based on the line number to prevent name collissions. | 612 // variable a unique name based on the line number to prevent name collissions. |
| 605 #define INTERNAL_TRACE_EVENT_UID3(a,b) \ | 613 #define INTERNAL_TRACE_EVENT_UID3(a,b) \ |
| 606 trace_event_unique_##a##b | 614 trace_event_unique_##a##b |
| 607 #define INTERNAL_TRACE_EVENT_UID2(a,b) \ | 615 #define INTERNAL_TRACE_EVENT_UID2(a,b) \ |
| 608 INTERNAL_TRACE_EVENT_UID3(a,b) | 616 INTERNAL_TRACE_EVENT_UID3(a,b) |
| 609 #define INTERNAL_TRACE_EVENT_UID(name_prefix) \ | 617 #define INTERNAL_TRACE_EVENT_UID(name_prefix) \ |
| 610 INTERNAL_TRACE_EVENT_UID2(name_prefix, __LINE__) | 618 INTERNAL_TRACE_EVENT_UID2(name_prefix, __LINE__) |
| 611 | 619 |
| 612 // Implementation detail: internal macro to create static category. | 620 // Implementation detail: internal macro to create static category. |
| 613 // No barriers are needed, because this code is designed to operate safely | 621 // No barriers are needed, because this code is designed to operate safely |
| 614 // even when the unsigned char* points to garbage data (which may be the case | 622 // even when the unsigned char* points to garbage data (which may be the case |
| 615 // on processors without cache coherency). | 623 // on processors without cache coherency). |
| 616 #define INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category) \ | 624 #define INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category) \ |
| 617 static base::subtle::AtomicWord INTERNAL_TRACE_EVENT_UID(atomic) = 0; \ | 625 static base::subtle::AtomicWord INTERNAL_TRACE_EVENT_UID(atomic) = 0; \ |
| 618 const uint8* INTERNAL_TRACE_EVENT_UID(catstatic) = \ | 626 const uint8* INTERNAL_TRACE_EVENT_UID(catstatic) = \ |
| 619 reinterpret_cast<const uint8*>( \ | 627 reinterpret_cast<const uint8*>( \ |
| 620 base::subtle::NoBarrier_Load(&INTERNAL_TRACE_EVENT_UID(atomic))); \ | 628 base::subtle::NoBarrier_Load(&INTERNAL_TRACE_EVENT_UID(atomic))); \ |
| 621 if (!INTERNAL_TRACE_EVENT_UID(catstatic)) { \ | 629 if (!INTERNAL_TRACE_EVENT_UID(catstatic)) { \ |
| 622 INTERNAL_TRACE_EVENT_UID(catstatic) = \ | 630 INTERNAL_TRACE_EVENT_UID(catstatic) = \ |
| 623 TRACE_EVENT_API_GET_CATEGORY_ENABLED(category); \ | 631 TRACE_EVENT_API_GET_CATEGORY_ENABLED(category); \ |
| 624 base::subtle::NoBarrier_Store(&INTERNAL_TRACE_EVENT_UID(atomic), \ | 632 base::subtle::NoBarrier_Store(&INTERNAL_TRACE_EVENT_UID(atomic), \ |
| 625 reinterpret_cast<base::subtle::AtomicWord>( \ | 633 reinterpret_cast<base::subtle::AtomicWord>( \ |
| 626 INTERNAL_TRACE_EVENT_UID(catstatic))); \ | 634 INTERNAL_TRACE_EVENT_UID(catstatic))); \ |
| 627 } | 635 } |
| 628 | 636 |
| 637 // Implementation detail: internal macro to check if Android ATrace or the |
| 638 // current category (using the current static category variable) is enabled. |
| 639 #define INTERNAL_TRACE_EVENT_IS_ATRACE_OR_CATEGORY_ENABLED() \ |
| 640 TRACE_EVENT_API_IS_ATRACE_ENABLED() || *INTERNAL_TRACE_EVENT_UID(catstatic) |
| 641 |
| 629 // Implementation detail: internal macro to create static category and add | 642 // Implementation detail: internal macro to create static category and add |
| 630 // event if the category is enabled. | 643 // event if the category is enabled. |
| 631 #define INTERNAL_TRACE_EVENT_ADD(phase, category, name, flags, ...) \ | 644 #define INTERNAL_TRACE_EVENT_ADD(phase, category, name, flags, ...) \ |
| 632 do { \ | 645 do { \ |
| 633 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ | 646 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ |
| 634 if (*INTERNAL_TRACE_EVENT_UID(catstatic)) { \ | 647 if (INTERNAL_TRACE_EVENT_IS_ATRACE_OR_CATEGORY_ENABLED()) { \ |
| 635 trace_event_internal::AddTraceEvent( \ | 648 trace_event_internal::AddTraceEvent( \ |
| 636 phase, INTERNAL_TRACE_EVENT_UID(catstatic), name, \ | 649 phase, INTERNAL_TRACE_EVENT_UID(catstatic), name, \ |
| 637 trace_event_internal::kNoEventId, flags, ##__VA_ARGS__); \ | 650 trace_event_internal::kNoEventId, flags, ##__VA_ARGS__); \ |
| 638 } \ | 651 } \ |
| 639 } while (0) | 652 } while (0) |
| 640 | 653 |
| 641 // Implementation detail: internal macro to create static category and add begin | 654 // Implementation detail: internal macro to create static category and add begin |
| 642 // event if the category is enabled. Also adds the end event when the scope | 655 // event if the category is enabled. Also adds the end event when the scope |
| 643 // ends. | 656 // ends. |
| 644 #define INTERNAL_TRACE_EVENT_ADD_SCOPED(category, name, ...) \ | 657 #define INTERNAL_TRACE_EVENT_ADD_SCOPED(category, name, ...) \ |
| 645 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ | 658 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ |
| 646 trace_event_internal::TraceEndOnScopeClose \ | 659 trace_event_internal::TraceEndOnScopeClose \ |
| 647 INTERNAL_TRACE_EVENT_UID(profileScope); \ | 660 INTERNAL_TRACE_EVENT_UID(profileScope); \ |
| 648 if (*INTERNAL_TRACE_EVENT_UID(catstatic)) { \ | 661 if (INTERNAL_TRACE_EVENT_IS_ATRACE_OR_CATEGORY_ENABLED()) { \ |
| 649 trace_event_internal::AddTraceEvent( \ | 662 trace_event_internal::AddTraceEvent( \ |
| 650 TRACE_EVENT_PHASE_BEGIN, \ | 663 TRACE_EVENT_PHASE_BEGIN, \ |
| 651 INTERNAL_TRACE_EVENT_UID(catstatic), \ | 664 INTERNAL_TRACE_EVENT_UID(catstatic), \ |
| 652 name, trace_event_internal::kNoEventId, \ | 665 name, trace_event_internal::kNoEventId, \ |
| 653 TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__); \ | 666 TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__); \ |
| 654 INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \ | 667 INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \ |
| 655 INTERNAL_TRACE_EVENT_UID(catstatic), name); \ | 668 INTERNAL_TRACE_EVENT_UID(catstatic), name); \ |
| 656 } | 669 } |
| 657 | 670 |
| 658 // Implementation detail: internal macro to create static category and add begin | 671 // Implementation detail: internal macro to create static category and add begin |
| 659 // event if the category is enabled. Also adds the end event when the scope | 672 // event if the category is enabled. Also adds the end event when the scope |
| 660 // ends. If the elapsed time is < threshold time, the begin/end pair is erased. | 673 // ends. If the elapsed time is < threshold time, the begin/end pair is erased. |
| 661 #define INTERNAL_TRACE_EVENT_ADD_SCOPED_IF_LONGER_THAN(threshold, \ | 674 #define INTERNAL_TRACE_EVENT_ADD_SCOPED_IF_LONGER_THAN(threshold, \ |
| 662 category, name, ...) \ | 675 category, name, ...) \ |
| 663 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ | 676 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ |
| 664 trace_event_internal::TraceEndOnScopeCloseThreshold \ | 677 trace_event_internal::TraceEndOnScopeCloseThreshold \ |
| 665 INTERNAL_TRACE_EVENT_UID(profileScope); \ | 678 INTERNAL_TRACE_EVENT_UID(profileScope); \ |
| 666 if (*INTERNAL_TRACE_EVENT_UID(catstatic)) { \ | 679 if (INTERNAL_TRACE_EVENT_IS_ATRACE_OR_CATEGORY_ENABLED()) { \ |
| 667 int INTERNAL_TRACE_EVENT_UID(begin_event_id) = \ | 680 int INTERNAL_TRACE_EVENT_UID(begin_event_id) = \ |
| 668 trace_event_internal::AddTraceEvent( \ | 681 trace_event_internal::AddTraceEvent( \ |
| 669 TRACE_EVENT_PHASE_BEGIN, \ | 682 TRACE_EVENT_PHASE_BEGIN, \ |
| 670 INTERNAL_TRACE_EVENT_UID(catstatic), \ | 683 INTERNAL_TRACE_EVENT_UID(catstatic), \ |
| 671 name, trace_event_internal::kNoEventId, \ | 684 name, trace_event_internal::kNoEventId, \ |
| 672 TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__); \ | 685 TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__); \ |
| 673 INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \ | 686 INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \ |
| 674 INTERNAL_TRACE_EVENT_UID(catstatic), name, \ | 687 INTERNAL_TRACE_EVENT_UID(catstatic), name, \ |
| 675 INTERNAL_TRACE_EVENT_UID(begin_event_id), threshold); \ | 688 INTERNAL_TRACE_EVENT_UID(begin_event_id), threshold); \ |
| 676 } | 689 } |
| 677 | 690 |
| 678 // Implementation detail: internal macro to create static category and add | 691 // Implementation detail: internal macro to create static category and add |
| 679 // event if the category is enabled. | 692 // event if the category is enabled. |
| 680 #define INTERNAL_TRACE_EVENT_ADD_WITH_ID(phase, category, name, id, flags, \ | 693 #define INTERNAL_TRACE_EVENT_ADD_WITH_ID(phase, category, name, id, flags, \ |
| 681 ...) \ | 694 ...) \ |
| 682 do { \ | 695 do { \ |
| 683 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ | 696 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ |
| 684 if (*INTERNAL_TRACE_EVENT_UID(catstatic)) { \ | 697 if (INTERNAL_TRACE_EVENT_IS_ATRACE_OR_CATEGORY_ENABLED()) { \ |
| 685 unsigned char trace_event_flags = flags | TRACE_EVENT_FLAG_HAS_ID; \ | 698 unsigned char trace_event_flags = flags | TRACE_EVENT_FLAG_HAS_ID; \ |
| 686 trace_event_internal::TraceID trace_event_trace_id( \ | 699 trace_event_internal::TraceID trace_event_trace_id( \ |
| 687 id, &trace_event_flags); \ | 700 id, &trace_event_flags); \ |
| 688 trace_event_internal::AddTraceEvent( \ | 701 trace_event_internal::AddTraceEvent( \ |
| 689 phase, INTERNAL_TRACE_EVENT_UID(catstatic), \ | 702 phase, INTERNAL_TRACE_EVENT_UID(catstatic), \ |
| 690 name, trace_event_trace_id.data(), trace_event_flags, \ | 703 name, trace_event_trace_id.data(), trace_event_flags, \ |
| 691 ##__VA_ARGS__); \ | 704 ##__VA_ARGS__); \ |
| 692 } \ | 705 } \ |
| 693 } while (0) | 706 } while (0) |
| 694 | 707 |
| (...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 992 const char* name; | 1005 const char* name; |
| 993 int threshold_begin_id; | 1006 int threshold_begin_id; |
| 994 }; | 1007 }; |
| 995 Data* p_data_; | 1008 Data* p_data_; |
| 996 Data data_; | 1009 Data data_; |
| 997 }; | 1010 }; |
| 998 | 1011 |
| 999 } // namespace trace_event_internal | 1012 } // namespace trace_event_internal |
| 1000 | 1013 |
| 1001 #endif // BASE_DEBUG_TRACE_EVENT_H_ | 1014 #endif // BASE_DEBUG_TRACE_EVENT_H_ |
| OLD | NEW |