trace_event_stub.h (8102B)
1 // Copyright 2020 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef BASE_TRACE_EVENT_TRACE_EVENT_STUB_H_ 6 #define BASE_TRACE_EVENT_TRACE_EVENT_STUB_H_ 7 8 #include <stddef.h> 9 10 #include <cstdint> 11 #include <memory> 12 #include <string> 13 14 #include "base/base_export.h" 15 #include "base/strings/string_piece.h" 16 #include "base/trace_event/common/trace_event_common.h" 17 #include "base/trace_event/memory_allocator_dump_guid.h" 18 #if !defined(MOZ_SANDBOX) 19 #include "base/values.h" 20 #endif 21 22 #define TRACE_STR_COPY(str) str 23 #define TRACE_ID_WITH_SCOPE(scope, ...) 0 24 #define TRACE_ID_GLOBAL(id) 0 25 #define TRACE_ID_LOCAL(id) 0 26 27 namespace trace_event_internal { 28 29 const unsigned long long kNoId = 0; 30 31 template <typename... Args> 32 void Ignore(Args&&... args) {} 33 34 struct IgnoredValue { 35 template <typename... Args> 36 IgnoredValue(Args&&... args) {} 37 }; 38 39 } // namespace trace_event_internal 40 41 #define INTERNAL_TRACE_IGNORE(...) \ 42 (false ? trace_event_internal::Ignore(__VA_ARGS__) : (void)0) 43 44 #define INTERNAL_TRACE_EVENT_ADD(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__) 45 #define INTERNAL_TRACE_EVENT_ADD_SCOPED(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__) 46 #define INTERNAL_TRACE_EVENT_ADD_WITH_ID(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__) 47 #define INTERNAL_TRACE_EVENT_ADD_SCOPED_WITH_FLOW(...) \ 48 INTERNAL_TRACE_IGNORE(__VA_ARGS__) 49 #define INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMP(...) \ 50 INTERNAL_TRACE_IGNORE(__VA_ARGS__) 51 #define INTERNAL_TRACE_EVENT_ADD_WITH_ID_TID_AND_TIMESTAMPS(...) \ 52 INTERNAL_TRACE_IGNORE(__VA_ARGS__) 53 54 // Defined in application_state_proto_android.h 55 #define TRACE_APPLICATION_STATE(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__) 56 57 #define TRACE_HEAP_PROFILER_API_SCOPED_TASK_EXECUTION \ 58 trace_event_internal::IgnoredValue 59 60 #define TRACE_ID_MANGLE(val) (val) 61 62 #define INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(cat) INTERNAL_TRACE_IGNORE(cat); 63 #define INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE() false 64 65 #define TRACE_EVENT_API_CURRENT_THREAD_ID 0 66 67 // Typed macros. For these, we have to erase the extra args entirely, as they 68 // may include a lambda that refers to protozero message types (which aren't 69 // available in the stub). This may trigger "unused variable" errors at the 70 // callsite, which have to be addressed at the callsite (e.g. via 71 // [[maybe_unused]]). 72 #define TRACE_EVENT_BEGIN(category, name, ...) \ 73 INTERNAL_TRACE_IGNORE(category, name) 74 #define TRACE_EVENT_END(category, ...) INTERNAL_TRACE_IGNORE(category) 75 #define TRACE_EVENT(category, name, ...) INTERNAL_TRACE_IGNORE(category, name) 76 #define TRACE_EVENT_INSTANT(category, name, ...) \ 77 INTERNAL_TRACE_IGNORE(category, name) 78 #define PERFETTO_INTERNAL_ADD_EMPTY_EVENT() INTERNAL_TRACE_IGNORE() 79 80 namespace base { 81 namespace trace_event { 82 83 class BASE_EXPORT ConvertableToTraceFormat { 84 public: 85 ConvertableToTraceFormat() = default; 86 ConvertableToTraceFormat(const ConvertableToTraceFormat&) = delete; 87 ConvertableToTraceFormat& operator=(const ConvertableToTraceFormat&) = delete; 88 virtual ~ConvertableToTraceFormat(); 89 90 // Append the class info to the provided |out| string. The appended 91 // data must be a valid JSON object. Strings must be properly quoted, and 92 // escaped. There is no processing applied to the content after it is 93 // appended. 94 virtual void AppendAsTraceFormat(std::string* out) const = 0; 95 }; 96 97 class BASE_EXPORT TracedValue : public ConvertableToTraceFormat { 98 public: 99 explicit TracedValue(size_t capacity = 0) {} 100 101 void EndDictionary() {} 102 void EndArray() {} 103 104 void SetInteger(const char* name, int value) {} 105 void SetDouble(const char* name, double value) {} 106 void SetBoolean(const char* name, bool value) {} 107 void SetString(const char* name, base::StringPiece value) {} 108 void SetValue(const char* name, TracedValue* value) {} 109 void BeginDictionary(const char* name) {} 110 void BeginArray(const char* name) {} 111 112 void SetIntegerWithCopiedName(base::StringPiece name, int value) {} 113 void SetDoubleWithCopiedName(base::StringPiece name, double value) {} 114 void SetBooleanWithCopiedName(base::StringPiece name, bool value) {} 115 void SetStringWithCopiedName(base::StringPiece name, 116 base::StringPiece value) {} 117 void SetValueWithCopiedName(base::StringPiece name, TracedValue* value) {} 118 void BeginDictionaryWithCopiedName(base::StringPiece name) {} 119 void BeginArrayWithCopiedName(base::StringPiece name) {} 120 121 void AppendInteger(int) {} 122 void AppendDouble(double) {} 123 void AppendBoolean(bool) {} 124 void AppendString(base::StringPiece) {} 125 void BeginArray() {} 126 void BeginDictionary() {} 127 128 void AppendAsTraceFormat(std::string* out) const override; 129 }; 130 131 #if !defined(MOZ_SANDBOX) 132 class BASE_EXPORT TracedValueJSON : public TracedValue { 133 public: 134 explicit TracedValueJSON(size_t capacity = 0) : TracedValue(capacity) {} 135 136 std::unique_ptr<base::Value> ToBaseValue() const { return nullptr; } 137 std::string ToJSON() const { return ""; } 138 std::string ToFormattedJSON() const { return ""; } 139 }; 140 #endif 141 142 struct MemoryDumpArgs; 143 class ProcessMemoryDump; 144 145 class BASE_EXPORT MemoryDumpProvider { 146 public: 147 MemoryDumpProvider(const MemoryDumpProvider&) = delete; 148 MemoryDumpProvider& operator=(const MemoryDumpProvider&) = delete; 149 virtual ~MemoryDumpProvider(); 150 151 virtual bool OnMemoryDump(const MemoryDumpArgs& args, 152 ProcessMemoryDump* pmd) = 0; 153 154 protected: 155 MemoryDumpProvider() = default; 156 }; 157 158 class BASE_EXPORT MemoryDumpManager { 159 public: 160 static constexpr const char* const kTraceCategory = 161 TRACE_DISABLED_BY_DEFAULT("memory-infra"); 162 }; 163 164 inline uint64_t GetNextGlobalTraceId() { 165 return 0; 166 } 167 168 } // namespace trace_event 169 } // namespace base 170 171 // Stub implementation for 172 // perfetto::StaticString/ThreadTrack/TracedValue/TracedDictionary/TracedArray/ 173 // Track. 174 namespace perfetto { 175 176 class TracedArray; 177 class TracedDictionary; 178 class EventContext; 179 180 class StaticString { 181 public: 182 template <typename T> 183 StaticString(T) {} 184 }; 185 186 class DynamicString { 187 public: 188 template <typename T> 189 explicit DynamicString(T) {} 190 }; 191 192 class TracedValue { 193 public: 194 void WriteInt64(int64_t) && {} 195 void WriteUInt64(uint64_t) && {} 196 void WriteDouble(double) && {} 197 void WriteBoolean(bool) && {} 198 void WriteString(const char*) && {} 199 void WriteString(const char*, size_t) && {} 200 void WriteString(const std::string&) && {} 201 void WritePointer(const void*) && {} 202 203 TracedDictionary WriteDictionary() &&; 204 TracedArray WriteArray() &&; 205 }; 206 207 class TracedDictionary { 208 public: 209 TracedValue AddItem(StaticString) { return TracedValue(); } 210 TracedValue AddItem(DynamicString) { return TracedValue(); } 211 212 template <typename T> 213 void Add(StaticString, T&&) {} 214 template <typename T> 215 void Add(DynamicString, T&&) {} 216 217 TracedDictionary AddDictionary(StaticString); 218 TracedDictionary AddDictionary(DynamicString); 219 TracedArray AddArray(StaticString); 220 TracedArray AddArray(DynamicString); 221 }; 222 223 class TracedArray { 224 public: 225 TracedValue AppendItem() { return TracedValue(); } 226 227 template <typename T> 228 void Append(T&&) {} 229 230 TracedDictionary AppendDictionary(); 231 TracedArray AppendArray(); 232 }; 233 234 template <class T> 235 void WriteIntoTracedValue(TracedValue, T&&) {} 236 237 struct Track { 238 explicit Track(uint64_t id) {} 239 }; 240 241 namespace protos::pbzero { 242 namespace SequenceManagerTask { 243 244 enum class QueueName { 245 UNKNOWN_TQ = 0, 246 DEFAULT_TQ = 1, 247 TASK_ENVIRONMENT_DEFAULT_TQ = 2, 248 TEST2_TQ = 3, 249 TEST_TQ = 4, 250 }; 251 inline const char* QueueName_Name(QueueName value) { 252 switch (value) { 253 case QueueName::UNKNOWN_TQ: 254 return "UNKNOWN_TQ"; 255 case QueueName::DEFAULT_TQ: 256 return "DEFAULT_TQ"; 257 case QueueName::TASK_ENVIRONMENT_DEFAULT_TQ: 258 return "TASK_ENVIRONMENT_DEFAULT_TQ"; 259 case QueueName::TEST2_TQ: 260 return "TEST2_TQ"; 261 case QueueName::TEST_TQ: 262 return "TEST_TQ"; 263 } 264 } 265 266 } // namespace SequenceManagerTask 267 268 namespace ChromeProcessDescriptor { 269 270 enum ProcessType {}; 271 272 } // namespace ChromeProcessDescriptor 273 274 } // namespace protos::pbzero 275 } // namespace perfetto 276 277 #endif // BASE_TRACE_EVENT_TRACE_EVENT_STUB_H_