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

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

Issue 338653005: Don't allow direct const char* trace value (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Subset Created 6 years, 6 months 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 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 1079 matching lines...) Expand 10 before | Expand all | Expand 10 after
1090 long long as_int; 1090 long long as_int;
1091 double as_double; 1091 double as_double;
1092 const void* as_pointer; 1092 const void* as_pointer;
1093 const char* as_string; 1093 const char* as_string;
1094 }; 1094 };
1095 1095
1096 // Simple container for const char* that should be copied instead of retained. 1096 // Simple container for const char* that should be copied instead of retained.
1097 class TraceStringWithCopy { 1097 class TraceStringWithCopy {
1098 public: 1098 public:
1099 explicit TraceStringWithCopy(const char* str) : str_(str) {} 1099 explicit TraceStringWithCopy(const char* str) : str_(str) {}
1100 operator const char* () const { return str_; } 1100 const char* str() const { return str_; }
1101 private: 1101 private:
1102 const char* str_; 1102 const char* str_;
1103 }; 1103 };
1104 1104
1105 // Define SetTraceValue for each allowed type. It stores the type and 1105 // Define SetTraceValue for each allowed type. It stores the type and
1106 // value in the return arguments. This allows this API to avoid declaring any 1106 // value in the return arguments. This allows this API to avoid declaring any
1107 // structures so that it is portable to third_party libraries. 1107 // structures so that it is portable to third_party libraries.
1108 #define INTERNAL_DECLARE_SET_TRACE_VALUE(actual_type, \ 1108 #define INTERNAL_DECLARE_SET_TRACE_VALUE(actual_type, \
1109 arg_expression, \
1109 union_member, \ 1110 union_member, \
1110 value_type_id) \ 1111 value_type_id) \
1111 static inline void SetTraceValue( \ 1112 static inline void SetTraceValue( \
1112 actual_type arg, \ 1113 actual_type arg, \
1113 unsigned char* type, \ 1114 unsigned char* type, \
1114 unsigned long long* value) { \ 1115 unsigned long long* value) { \
1115 TraceValueUnion type_value; \ 1116 TraceValueUnion type_value; \
1116 type_value.union_member = arg; \ 1117 type_value.union_member = arg_expression; \
1117 *type = value_type_id; \ 1118 *type = value_type_id; \
1118 *value = type_value.as_uint; \ 1119 *value = type_value.as_uint; \
1119 } 1120 }
1120 // Simpler form for int types that can be safely casted. 1121 // Simpler form for int types that can be safely casted.
1121 #define INTERNAL_DECLARE_SET_TRACE_VALUE_INT(actual_type, \ 1122 #define INTERNAL_DECLARE_SET_TRACE_VALUE_INT(actual_type, \
1122 value_type_id) \ 1123 value_type_id) \
1123 static inline void SetTraceValue( \ 1124 static inline void SetTraceValue( \
1124 actual_type arg, \ 1125 actual_type arg, \
1125 unsigned char* type, \ 1126 unsigned char* type, \
1126 unsigned long long* value) { \ 1127 unsigned long long* value) { \
1127 *type = value_type_id; \ 1128 *type = value_type_id; \
1128 *value = static_cast<unsigned long long>(arg); \ 1129 *value = static_cast<unsigned long long>(arg); \
1129 } 1130 }
1130 1131
1131 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(unsigned long long, TRACE_VALUE_TYPE_UINT) 1132 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(unsigned long long, TRACE_VALUE_TYPE_UINT)
1132 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(unsigned long, TRACE_VALUE_TYPE_UINT) 1133 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(unsigned long, TRACE_VALUE_TYPE_UINT)
1133 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(unsigned int, TRACE_VALUE_TYPE_UINT) 1134 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(unsigned int, TRACE_VALUE_TYPE_UINT)
1134 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(unsigned short, TRACE_VALUE_TYPE_UINT) 1135 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(unsigned short, TRACE_VALUE_TYPE_UINT)
1135 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(unsigned char, TRACE_VALUE_TYPE_UINT) 1136 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(unsigned char, TRACE_VALUE_TYPE_UINT)
1136 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(long long, TRACE_VALUE_TYPE_INT) 1137 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(long long, TRACE_VALUE_TYPE_INT)
1137 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(long, TRACE_VALUE_TYPE_INT) 1138 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(long, TRACE_VALUE_TYPE_INT)
1138 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(int, TRACE_VALUE_TYPE_INT) 1139 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(int, TRACE_VALUE_TYPE_INT)
1139 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(short, TRACE_VALUE_TYPE_INT) 1140 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(short, TRACE_VALUE_TYPE_INT)
1140 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(signed char, TRACE_VALUE_TYPE_INT) 1141 INTERNAL_DECLARE_SET_TRACE_VALUE_INT(signed char, TRACE_VALUE_TYPE_INT)
1141 INTERNAL_DECLARE_SET_TRACE_VALUE(bool, as_bool, TRACE_VALUE_TYPE_BOOL) 1142 INTERNAL_DECLARE_SET_TRACE_VALUE(bool, arg, as_bool, TRACE_VALUE_TYPE_BOOL)
1142 INTERNAL_DECLARE_SET_TRACE_VALUE(double, as_double, TRACE_VALUE_TYPE_DOUBLE) 1143 INTERNAL_DECLARE_SET_TRACE_VALUE(double, arg, as_double,
1143 INTERNAL_DECLARE_SET_TRACE_VALUE(const void*, as_pointer, 1144 TRACE_VALUE_TYPE_DOUBLE)
1145 INTERNAL_DECLARE_SET_TRACE_VALUE(const void*, arg, as_pointer,
1144 TRACE_VALUE_TYPE_POINTER) 1146 TRACE_VALUE_TYPE_POINTER)
1145 INTERNAL_DECLARE_SET_TRACE_VALUE(const char*, as_string, 1147 INTERNAL_DECLARE_SET_TRACE_VALUE(const char*, arg, as_string,
1146 TRACE_VALUE_TYPE_STRING) 1148 TRACE_VALUE_TYPE_STRING)
1147 INTERNAL_DECLARE_SET_TRACE_VALUE(const TraceStringWithCopy&, as_string, 1149 INTERNAL_DECLARE_SET_TRACE_VALUE(const TraceStringWithCopy&, arg.str(),
1148 TRACE_VALUE_TYPE_COPY_STRING) 1150 as_string, TRACE_VALUE_TYPE_COPY_STRING)
1149 1151
1150 #undef INTERNAL_DECLARE_SET_TRACE_VALUE 1152 #undef INTERNAL_DECLARE_SET_TRACE_VALUE
1151 #undef INTERNAL_DECLARE_SET_TRACE_VALUE_INT 1153 #undef INTERNAL_DECLARE_SET_TRACE_VALUE_INT
1152 1154
1153 // std::string version of SetTraceValue so that trace arguments can be strings. 1155 // std::string version of SetTraceValue so that trace arguments can be strings.
1154 static inline void SetTraceValue(const std::string& arg, 1156 static inline void SetTraceValue(const std::string& arg,
1155 unsigned char* type, 1157 unsigned char* type,
1156 unsigned long long* value) { 1158 unsigned long long* value) {
1157 TraceValueUnion type_value; 1159 TraceValueUnion type_value;
1158 type_value.as_string = arg.c_str(); 1160 type_value.as_string = arg.c_str();
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
1509 const char* name_; 1511 const char* name_;
1510 IDType id_; 1512 IDType id_;
1511 1513
1512 DISALLOW_COPY_AND_ASSIGN(TraceScopedTrackableObject); 1514 DISALLOW_COPY_AND_ASSIGN(TraceScopedTrackableObject);
1513 }; 1515 };
1514 1516
1515 } // namespace debug 1517 } // namespace debug
1516 } // namespace base 1518 } // namespace base
1517 1519
1518 #endif /* BASE_DEBUG_TRACE_EVENT_H_ */ 1520 #endif /* BASE_DEBUG_TRACE_EVENT_H_ */
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698