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

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

Issue 11557009: Remove support for TRACE_EVENT_IF_LONGER_THANx macros (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years 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 | Annotate | Revision Log
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.
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 category, name, TRACE_EVENT_FLAG_COPY) 285 category, name, TRACE_EVENT_FLAG_COPY)
286 #define TRACE_EVENT_COPY_END1(category, name, arg1_name, arg1_val) \ 286 #define TRACE_EVENT_COPY_END1(category, name, arg1_name, arg1_val) \
287 INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, \ 287 INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, \
288 category, name, TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val) 288 category, name, TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val)
289 #define TRACE_EVENT_COPY_END2(category, name, arg1_name, arg1_val, \ 289 #define TRACE_EVENT_COPY_END2(category, name, arg1_name, arg1_val, \
290 arg2_name, arg2_val) \ 290 arg2_name, arg2_val) \
291 INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, \ 291 INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, \
292 category, name, TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val, \ 292 category, name, TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val, \
293 arg2_name, arg2_val) 293 arg2_name, arg2_val)
294 294
295 // Time threshold event:
296 // Only record the event if the duration is greater than the specified
297 // threshold_us (time in microseconds).
298 // Records a pair of begin and end events called "name" for the current
299 // scope, with 0, 1 or 2 associated arguments. If the category is not
300 // enabled, then this does nothing.
301 // - category and name strings must have application lifetime (statics or
302 // literals). They may not include " chars.
303 #define TRACE_EVENT_IF_LONGER_THAN0(threshold_us, category, name) \
304 INTERNAL_TRACE_EVENT_ADD_SCOPED_IF_LONGER_THAN(threshold_us, category, name)
305 #define TRACE_EVENT_IF_LONGER_THAN1( \
306 threshold_us, category, name, arg1_name, arg1_val) \
307 INTERNAL_TRACE_EVENT_ADD_SCOPED_IF_LONGER_THAN( \
308 threshold_us, category, name, arg1_name, arg1_val)
309 #define TRACE_EVENT_IF_LONGER_THAN2( \
310 threshold_us, category, name, arg1_name, arg1_val, arg2_name, arg2_val) \
311 INTERNAL_TRACE_EVENT_ADD_SCOPED_IF_LONGER_THAN( \
312 threshold_us, category, name, arg1_name, arg1_val, arg2_name, arg2_val)
313
314 // Records the value of a counter called "name" immediately. Value 295 // Records the value of a counter called "name" immediately. Value
315 // must be representable as a 32 bit integer. 296 // must be representable as a 32 bit integer.
316 // - category and name strings must have application lifetime (statics or 297 // - category and name strings must have application lifetime (statics or
317 // literals). They may not include " chars. 298 // literals). They may not include " chars.
318 #define TRACE_COUNTER1(category, name, value) \ 299 #define TRACE_COUNTER1(category, name, value) \
319 INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_COUNTER, \ 300 INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_COUNTER, \
320 category, name, TRACE_EVENT_FLAG_NONE, \ 301 category, name, TRACE_EVENT_FLAG_NONE, \
321 "value", static_cast<int>(value)) 302 "value", static_cast<int>(value))
322 #define TRACE_COPY_COUNTER1(category, name, value) \ 303 #define TRACE_COPY_COUNTER1(category, name, value) \
323 INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_COUNTER, \ 304 INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_COUNTER, \
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 // unsigned char is non-zero, tracing is enabled. If tracing is enabled, 554 // unsigned char is non-zero, tracing is enabled. If tracing is enabled,
574 // TRACE_EVENT_API_ADD_TRACE_EVENT can be called. It's OK if tracing is disabled 555 // TRACE_EVENT_API_ADD_TRACE_EVENT can be called. It's OK if tracing is disabled
575 // between the load of the tracing state and the call to 556 // between the load of the tracing state and the call to
576 // TRACE_EVENT_API_ADD_TRACE_EVENT, because this flag only provides an early out 557 // TRACE_EVENT_API_ADD_TRACE_EVENT, because this flag only provides an early out
577 // for best performance when tracing is disabled. 558 // for best performance when tracing is disabled.
578 // const unsigned char* 559 // const unsigned char*
579 // TRACE_EVENT_API_GET_CATEGORY_ENABLED(const char* category_name) 560 // TRACE_EVENT_API_GET_CATEGORY_ENABLED(const char* category_name)
580 #define TRACE_EVENT_API_GET_CATEGORY_ENABLED \ 561 #define TRACE_EVENT_API_GET_CATEGORY_ENABLED \
581 base::debug::TraceLog::GetCategoryEnabled 562 base::debug::TraceLog::GetCategoryEnabled
582 563
583 // Add a trace event to the platform tracing system. Returns thresholdBeginId 564 // Add a trace event to the platform tracing system.
584 // for use in a corresponding end TRACE_EVENT_API_ADD_TRACE_EVENT call. 565 // void TRACE_EVENT_API_ADD_TRACE_EVENT(
585 // int TRACE_EVENT_API_ADD_TRACE_EVENT(
586 // char phase, 566 // char phase,
587 // const unsigned char* category_enabled, 567 // const unsigned char* category_enabled,
588 // const char* name, 568 // const char* name,
589 // unsigned long long id, 569 // unsigned long long id,
590 // int num_args, 570 // int num_args,
591 // const char** arg_names, 571 // const char** arg_names,
592 // const unsigned char* arg_types, 572 // const unsigned char* arg_types,
593 // const unsigned long long* arg_values, 573 // const unsigned long long* arg_values,
594 // int threshold_begin_id,
595 // long long threshold,
596 // unsigned char flags) 574 // unsigned char flags)
597 #define TRACE_EVENT_API_ADD_TRACE_EVENT \ 575 #define TRACE_EVENT_API_ADD_TRACE_EVENT \
598 base::debug::TraceLog::GetInstance()->AddTraceEvent 576 base::debug::TraceLog::GetInstance()->AddTraceEvent
599 577
600 //////////////////////////////////////////////////////////////////////////////// 578 ////////////////////////////////////////////////////////////////////////////////
601 579
602 // Implementation detail: trace event macros create temporary variables 580 // Implementation detail: trace event macros create temporary variables
603 // to keep instrumentation overhead low. These macros give each temporary 581 // to keep instrumentation overhead low. These macros give each temporary
604 // variable a unique name based on the line number to prevent name collissions. 582 // variable a unique name based on the line number to prevent name collissions.
605 #define INTERNAL_TRACE_EVENT_UID3(a,b) \ 583 #define INTERNAL_TRACE_EVENT_UID3(a,b) \
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 if (*INTERNAL_TRACE_EVENT_UID(catstatic)) { \ 626 if (*INTERNAL_TRACE_EVENT_UID(catstatic)) { \
649 trace_event_internal::AddTraceEvent( \ 627 trace_event_internal::AddTraceEvent( \
650 TRACE_EVENT_PHASE_BEGIN, \ 628 TRACE_EVENT_PHASE_BEGIN, \
651 INTERNAL_TRACE_EVENT_UID(catstatic), \ 629 INTERNAL_TRACE_EVENT_UID(catstatic), \
652 name, trace_event_internal::kNoEventId, \ 630 name, trace_event_internal::kNoEventId, \
653 TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__); \ 631 TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__); \
654 INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \ 632 INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \
655 INTERNAL_TRACE_EVENT_UID(catstatic), name); \ 633 INTERNAL_TRACE_EVENT_UID(catstatic), name); \
656 } 634 }
657 635
658 // 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
660 // 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, \
662 category, name, ...) \
663 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \
664 trace_event_internal::TraceEndOnScopeCloseThreshold \
665 INTERNAL_TRACE_EVENT_UID(profileScope); \
666 if (*INTERNAL_TRACE_EVENT_UID(catstatic)) { \
667 int INTERNAL_TRACE_EVENT_UID(begin_event_id) = \
668 trace_event_internal::AddTraceEvent( \
669 TRACE_EVENT_PHASE_BEGIN, \
670 INTERNAL_TRACE_EVENT_UID(catstatic), \
671 name, trace_event_internal::kNoEventId, \
672 TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__); \
673 INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \
674 INTERNAL_TRACE_EVENT_UID(catstatic), name, \
675 INTERNAL_TRACE_EVENT_UID(begin_event_id), threshold); \
676 }
677
678 // Implementation detail: internal macro to create static category and add 636 // Implementation detail: internal macro to create static category and add
679 // event if the category is enabled. 637 // event if the category is enabled.
680 #define INTERNAL_TRACE_EVENT_ADD_WITH_ID(phase, category, name, id, flags, \ 638 #define INTERNAL_TRACE_EVENT_ADD_WITH_ID(phase, category, name, id, flags, \
681 ...) \ 639 ...) \
682 do { \ 640 do { \
683 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ 641 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \
684 if (*INTERNAL_TRACE_EVENT_UID(catstatic)) { \ 642 if (*INTERNAL_TRACE_EVENT_UID(catstatic)) { \
685 unsigned char trace_event_flags = flags | TRACE_EVENT_FLAG_HAS_ID; \ 643 unsigned char trace_event_flags = flags | TRACE_EVENT_FLAG_HAS_ID; \
686 trace_event_internal::TraceID trace_event_trace_id( \ 644 trace_event_internal::TraceID trace_event_trace_id( \
687 id, &trace_event_flags); \ 645 id, &trace_event_flags); \
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 #define TRACE_VALUE_TYPE_DOUBLE (static_cast<unsigned char>(4)) 681 #define TRACE_VALUE_TYPE_DOUBLE (static_cast<unsigned char>(4))
724 #define TRACE_VALUE_TYPE_POINTER (static_cast<unsigned char>(5)) 682 #define TRACE_VALUE_TYPE_POINTER (static_cast<unsigned char>(5))
725 #define TRACE_VALUE_TYPE_STRING (static_cast<unsigned char>(6)) 683 #define TRACE_VALUE_TYPE_STRING (static_cast<unsigned char>(6))
726 #define TRACE_VALUE_TYPE_COPY_STRING (static_cast<unsigned char>(7)) 684 #define TRACE_VALUE_TYPE_COPY_STRING (static_cast<unsigned char>(7))
727 685
728 namespace trace_event_internal { 686 namespace trace_event_internal {
729 687
730 // Specify these values when the corresponding argument of AddTraceEvent is not 688 // Specify these values when the corresponding argument of AddTraceEvent is not
731 // used. 689 // used.
732 const int kZeroNumArgs = 0; 690 const int kZeroNumArgs = 0;
733 const int kNoThreshholdBeginId = -1;
734 const long long kNoThresholdValue = 0;
735 const unsigned long long kNoEventId = 0; 691 const unsigned long long kNoEventId = 0;
736 692
737 // TraceID encapsulates an ID that can either be an integer or pointer. Pointers 693 // TraceID encapsulates an ID that can either be an integer or pointer. Pointers
738 // are mangled with the Process ID so that they are unlikely to collide when the 694 // are mangled with the Process ID so that they are unlikely to collide when the
739 // same pointer is used on different processes. 695 // same pointer is used on different processes.
740 class TraceID { 696 class TraceID {
741 public: 697 public:
742 class ForceMangle { 698 class ForceMangle {
743 public: 699 public:
744 explicit ForceMangle(unsigned long long id) : data_(id) {} 700 explicit ForceMangle(unsigned long long id) : data_(id) {}
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
872 *type = TRACE_VALUE_TYPE_COPY_STRING; 828 *type = TRACE_VALUE_TYPE_COPY_STRING;
873 *value = type_value.as_uint; 829 *value = type_value.as_uint;
874 } 830 }
875 831
876 // These AddTraceEvent template functions are defined here instead of in the 832 // These AddTraceEvent template functions are defined here instead of in the
877 // macro, because the arg_values could be temporary objects, such as 833 // macro, because the arg_values could be temporary objects, such as
878 // std::string. In order to store pointers to the internal c_str and pass 834 // std::string. In order to store pointers to the internal c_str and pass
879 // through to the tracing API, the arg_values must live throughout 835 // through to the tracing API, the arg_values must live throughout
880 // these procedures. 836 // these procedures.
881 837
882 static inline int AddTraceEvent(char phase, 838 static inline void AddTraceEvent(char phase,
883 const unsigned char* category_enabled, 839 const unsigned char* category_enabled,
884 const char* name, 840 const char* name,
885 unsigned long long id, 841 unsigned long long id,
886 unsigned char flags) { 842 unsigned char flags) {
887 return TRACE_EVENT_API_ADD_TRACE_EVENT( 843 TRACE_EVENT_API_ADD_TRACE_EVENT(
888 phase, category_enabled, name, id, 844 phase, category_enabled, name, id,
889 kZeroNumArgs, NULL, NULL, NULL, 845 kZeroNumArgs, NULL, NULL, NULL,
890 kNoThreshholdBeginId, kNoThresholdValue, flags); 846 flags);
891 } 847 }
892 848
893 template<class ARG1_TYPE> 849 template<class ARG1_TYPE>
894 static inline int AddTraceEvent(char phase, 850 static inline void AddTraceEvent(char phase,
895 const unsigned char* category_enabled, 851 const unsigned char* category_enabled,
896 const char* name, 852 const char* name,
897 unsigned long long id, 853 unsigned long long id,
898 unsigned char flags, 854 unsigned char flags,
899 const char* arg1_name, 855 const char* arg1_name,
900 const ARG1_TYPE& arg1_val) { 856 const ARG1_TYPE& arg1_val) {
901 const int num_args = 1; 857 const int num_args = 1;
902 unsigned char arg_types[1]; 858 unsigned char arg_types[1];
903 unsigned long long arg_values[1]; 859 unsigned long long arg_values[1];
904 SetTraceValue(arg1_val, &arg_types[0], &arg_values[0]); 860 SetTraceValue(arg1_val, &arg_types[0], &arg_values[0]);
905 return TRACE_EVENT_API_ADD_TRACE_EVENT( 861 TRACE_EVENT_API_ADD_TRACE_EVENT(
906 phase, category_enabled, name, id, 862 phase, category_enabled, name, id,
907 num_args, &arg1_name, arg_types, arg_values, 863 num_args, &arg1_name, arg_types, arg_values,
908 kNoThreshholdBeginId, kNoThresholdValue, flags); 864 flags);
909 } 865 }
910 866
911 template<class ARG1_TYPE, class ARG2_TYPE> 867 template<class ARG1_TYPE, class ARG2_TYPE>
912 static inline int AddTraceEvent(char phase, 868 static inline void AddTraceEvent(char phase,
913 const unsigned char* category_enabled, 869 const unsigned char* category_enabled,
914 const char* name, 870 const char* name,
915 unsigned long long id, 871 unsigned long long id,
916 unsigned char flags, 872 unsigned char flags,
917 const char* arg1_name, 873 const char* arg1_name,
918 const ARG1_TYPE& arg1_val, 874 const ARG1_TYPE& arg1_val,
919 const char* arg2_name, 875 const char* arg2_name,
920 const ARG2_TYPE& arg2_val) { 876 const ARG2_TYPE& arg2_val) {
921 const int num_args = 2; 877 const int num_args = 2;
922 const char* arg_names[2] = { arg1_name, arg2_name }; 878 const char* arg_names[2] = { arg1_name, arg2_name };
923 unsigned char arg_types[2]; 879 unsigned char arg_types[2];
924 unsigned long long arg_values[2]; 880 unsigned long long arg_values[2];
925 SetTraceValue(arg1_val, &arg_types[0], &arg_values[0]); 881 SetTraceValue(arg1_val, &arg_types[0], &arg_values[0]);
926 SetTraceValue(arg2_val, &arg_types[1], &arg_values[1]); 882 SetTraceValue(arg2_val, &arg_types[1], &arg_values[1]);
927 return TRACE_EVENT_API_ADD_TRACE_EVENT( 883 TRACE_EVENT_API_ADD_TRACE_EVENT(
928 phase, category_enabled, name, id, 884 phase, category_enabled, name, id,
929 num_args, arg_names, arg_types, arg_values, 885 num_args, arg_names, arg_types, arg_values,
930 kNoThreshholdBeginId, kNoThresholdValue, flags); 886 flags);
931 } 887 }
932 888
933 // Used by TRACE_EVENTx macro. Do not use directly. 889 // Used by TRACE_EVENTx macro. Do not use directly.
934 class BASE_EXPORT TraceEndOnScopeClose { 890 class BASE_EXPORT TraceEndOnScopeClose {
935 public: 891 public:
936 // Note: members of data_ intentionally left uninitialized. See Initialize. 892 // Note: members of data_ intentionally left uninitialized. See Initialize.
937 TraceEndOnScopeClose() : p_data_(NULL) {} 893 TraceEndOnScopeClose() : p_data_(NULL) {}
938 ~TraceEndOnScopeClose() { 894 ~TraceEndOnScopeClose() {
939 if (p_data_) 895 if (p_data_)
940 AddEventIfEnabled(); 896 AddEventIfEnabled();
(...skipping 12 matching lines...) Expand all
953 // members of this class instead, compiler warnings occur about potential 909 // members of this class instead, compiler warnings occur about potential
954 // uninitialized accesses. 910 // uninitialized accesses.
955 struct Data { 911 struct Data {
956 const unsigned char* category_enabled; 912 const unsigned char* category_enabled;
957 const char* name; 913 const char* name;
958 }; 914 };
959 Data* p_data_; 915 Data* p_data_;
960 Data data_; 916 Data data_;
961 }; 917 };
962 918
963 // Used by TRACE_EVENTx macro. Do not use directly.
964 class BASE_EXPORT TraceEndOnScopeCloseThreshold {
965 public:
966 // Note: members of data_ intentionally left uninitialized. See Initialize.
967 TraceEndOnScopeCloseThreshold() : p_data_(NULL) {}
968 ~TraceEndOnScopeCloseThreshold() {
969 if (p_data_)
970 AddEventIfEnabled();
971 }
972
973 // Called by macros only when tracing is enabled at the point when the begin
974 // event is added.
975 void Initialize(const unsigned char* category_enabled,
976 const char* name,
977 int threshold_begin_id,
978 long long threshold);
979
980 private:
981 // Add the end event if the category is still enabled.
982 void AddEventIfEnabled();
983
984 // This Data struct workaround is to avoid initializing all the members
985 // in Data during construction of this object, since this object is always
986 // constructed, even when tracing is disabled. If the members of Data were
987 // members of this class instead, compiler warnings occur about potential
988 // uninitialized accesses.
989 struct Data {
990 long long threshold;
991 const unsigned char* category_enabled;
992 const char* name;
993 int threshold_begin_id;
994 };
995 Data* p_data_;
996 Data data_;
997 };
998 919
999 } // namespace trace_event_internal 920 } // namespace trace_event_internal
1000 921
1001 #endif // BASE_DEBUG_TRACE_EVENT_H_ 922 #endif // BASE_DEBUG_TRACE_EVENT_H_
OLDNEW
« no previous file with comments | « no previous file | base/debug/trace_event.cc » ('j') | gpu/command_buffer/client/cmd_buffer_helper.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698