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 #include <string_view>
14
15 #include "base/base_export.h"
16 #include "base/trace_event/common/trace_event_common.h"
17 #include "base/trace_event/memory_allocator_dump_guid.h"
18 #include "base/values.h"
19
20 #define TRACE_STR_COPY(str) str
21 #define TRACE_ID_WITH_SCOPE(scope, ...) 0
22 #define TRACE_ID_GLOBAL(id) 0
23 #define TRACE_ID_LOCAL(id) 0
24
25 namespace trace_event_internal {
26
27 const unsigned long long kNoId = 0;
28
29 template <typename... Args>
Ignore(Args &&...args)30 void Ignore(Args&&... args) {}
31
32 struct IgnoredValue {
33 template <typename... Args>
IgnoredValueIgnoredValue34 IgnoredValue(Args&&... args) {}
35 };
36
37 } // namespace trace_event_internal
38
39 #define INTERNAL_TRACE_IGNORE(...) \
40 (false ? trace_event_internal::Ignore(__VA_ARGS__) : (void)0)
41
42 // Defined in application_state_proto_android.h
43 #define TRACE_APPLICATION_STATE(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
44
45 #define TRACE_HEAP_PROFILER_API_SCOPED_TASK_EXECUTION \
46 trace_event_internal::IgnoredValue
47
48 #define TRACE_ID_MANGLE(val) (val)
49
50 #define TRACE_EVENT_API_CURRENT_THREAD_ID 0
51
52 // Legacy trace macros
53 #define TRACE_EVENT0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
54 #define TRACE_EVENT_WITH_FLOW0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
55 #define TRACE_EVENT1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
56 #define TRACE_EVENT_WITH_FLOW1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
57 #define TRACE_EVENT2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
58 #define TRACE_EVENT_WITH_FLOW2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
59 #define TRACE_EVENT_INSTANT0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
60 #define TRACE_EVENT_INSTANT1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
61 #define TRACE_EVENT_INSTANT2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
62 #define TRACE_EVENT_COPY_INSTANT0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
63 #define TRACE_EVENT_COPY_INSTANT1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
64 #define TRACE_EVENT_COPY_INSTANT2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
65 #define TRACE_EVENT_INSTANT_WITH_FLAGS0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
66 #define TRACE_EVENT_INSTANT_WITH_FLAGS1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
67 #define TRACE_EVENT_INSTANT_WITH_TIMESTAMP0(...) \
68 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
69 #define TRACE_EVENT_INSTANT_WITH_TIMESTAMP1(...) \
70 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
71 #define TRACE_EVENT_BEGIN0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
72 #define TRACE_EVENT_BEGIN1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
73 #define TRACE_EVENT_BEGIN2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
74 #define TRACE_EVENT_BEGIN_WITH_FLAGS0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
75 #define TRACE_EVENT_BEGIN_WITH_FLAGS1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
76 #define TRACE_EVENT_COPY_BEGIN2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
77 #define TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0(...) \
78 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
79 #define TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP0(...) \
80 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
81 #define TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP1(...) \
82 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
83 #define TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP2(...) \
84 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
85 #define TRACE_EVENT_END0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
86 #define TRACE_EVENT_END1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
87 #define TRACE_EVENT_END2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
88 #define TRACE_EVENT_END_WITH_FLAGS0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
89 #define TRACE_EVENT_END_WITH_FLAGS1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
90 #define TRACE_EVENT_COPY_END2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
91 #define TRACE_EVENT_MARK_WITH_TIMESTAMP0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
92 #define TRACE_EVENT_MARK_WITH_TIMESTAMP1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
93 #define TRACE_EVENT_MARK_WITH_TIMESTAMP2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
94 #define TRACE_EVENT_COPY_MARK(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
95 #define TRACE_EVENT_COPY_MARK1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
96 #define TRACE_EVENT_COPY_MARK_WITH_TIMESTAMP(...) \
97 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
98 #define TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0(...) \
99 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
100 #define TRACE_EVENT_COPY_END_WITH_ID_TID_AND_TIMESTAMP0(...) \
101 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
102 #define TRACE_EVENT_COPY_END_WITH_ID_TID_AND_TIMESTAMP1(...) \
103 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
104 #define TRACE_EVENT_COPY_END_WITH_ID_TID_AND_TIMESTAMP2(...) \
105 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
106 #define TRACE_COUNTER1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
107 #define TRACE_COUNTER_WITH_FLAG1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
108 #define TRACE_COPY_COUNTER1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
109 #define TRACE_COUNTER2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
110 #define TRACE_COPY_COUNTER2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
111 #define TRACE_COUNTER_WITH_TIMESTAMP1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
112 #define TRACE_COUNTER_WITH_TIMESTAMP2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
113 #define TRACE_COUNTER_ID1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
114 #define TRACE_COPY_COUNTER_ID1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
115 #define TRACE_COUNTER_ID2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
116 #define TRACE_COPY_COUNTER_ID2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
117 #define TRACE_EVENT_SAMPLE_WITH_ID1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
118 #define TRACE_EVENT_ASYNC_BEGIN0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
119 #define TRACE_EVENT_ASYNC_BEGIN1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
120 #define TRACE_EVENT_ASYNC_BEGIN2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
121 #define TRACE_EVENT_COPY_ASYNC_BEGIN0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
122 #define TRACE_EVENT_COPY_ASYNC_BEGIN1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
123 #define TRACE_EVENT_COPY_ASYNC_BEGIN2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
124 #define TRACE_EVENT_ASYNC_BEGIN_WITH_TIMESTAMP0(...) \
125 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
126 #define TRACE_EVENT_ASYNC_BEGIN_WITH_TIMESTAMP1(...) \
127 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
128 #define TRACE_EVENT_ASYNC_BEGIN_WITH_TIMESTAMP2(...) \
129 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
130 #define TRACE_EVENT_COPY_ASYNC_BEGIN_WITH_TIMESTAMP0(...) \
131 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
132 #define TRACE_EVENT_ASYNC_STEP_INTO0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
133 #define TRACE_EVENT_ASYNC_STEP_INTO1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
134 #define TRACE_EVENT_ASYNC_STEP_INTO_WITH_TIMESTAMP0(...) \
135 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
136 #define TRACE_EVENT_ASYNC_STEP_PAST0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
137 #define TRACE_EVENT_ASYNC_STEP_PAST1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
138 #define TRACE_EVENT_ASYNC_END0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
139 #define TRACE_EVENT_ASYNC_END1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
140 #define TRACE_EVENT_ASYNC_END2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
141 #define TRACE_EVENT_COPY_ASYNC_END0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
142 #define TRACE_EVENT_COPY_ASYNC_END1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
143 #define TRACE_EVENT_COPY_ASYNC_END2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
144 #define TRACE_EVENT_ASYNC_END_WITH_TIMESTAMP0(...) \
145 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
146 #define TRACE_EVENT_ASYNC_END_WITH_TIMESTAMP1(...) \
147 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
148 #define TRACE_EVENT_ASYNC_END_WITH_TIMESTAMP2(...) \
149 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
150 #define TRACE_EVENT_COPY_ASYNC_END_WITH_TIMESTAMP0(...) \
151 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
152 #define TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(...) \
153 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
154 #define TRACE_EVENT_NESTABLE_ASYNC_BEGIN1(...) \
155 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
156 #define TRACE_EVENT_NESTABLE_ASYNC_BEGIN2(...) \
157 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
158 #define TRACE_EVENT_NESTABLE_ASYNC_BEGIN_WITH_FLAGS0(...) \
159 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
160 #define TRACE_EVENT_NESTABLE_ASYNC_END0(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
161 #define TRACE_EVENT_NESTABLE_ASYNC_END1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
162 #define TRACE_EVENT_NESTABLE_ASYNC_END2(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
163 #define TRACE_EVENT_NESTABLE_ASYNC_END_WITH_FLAGS0(...) \
164 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
165 #define TRACE_EVENT_NESTABLE_ASYNC_INSTANT0(...) \
166 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
167 #define TRACE_EVENT_NESTABLE_ASYNC_INSTANT1(...) \
168 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
169 #define TRACE_EVENT_NESTABLE_ASYNC_INSTANT2(...) \
170 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
171 #define TRACE_EVENT_COPY_NESTABLE_ASYNC_BEGIN_WITH_TTS2(...) \
172 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
173 #define TRACE_EVENT_COPY_NESTABLE_ASYNC_END_WITH_TTS2(...) \
174 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
175 #define TRACE_EVENT_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP0(...) \
176 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
177 #define TRACE_EVENT_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP1(...) \
178 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
179 #define TRACE_EVENT_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP_AND_FLAGS0(...) \
180 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
181 #define TRACE_EVENT_NESTABLE_ASYNC_END_WITH_TIMESTAMP0(...) \
182 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
183 #define TRACE_EVENT_NESTABLE_ASYNC_END_WITH_TIMESTAMP1(...) \
184 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
185 #define TRACE_EVENT_NESTABLE_ASYNC_END_WITH_TIMESTAMP2(...) \
186 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
187 #define TRACE_EVENT_NESTABLE_ASYNC_END_WITH_TIMESTAMP_AND_FLAGS0(...) \
188 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
189 #define TRACE_EVENT_NESTABLE_ASYNC_INSTANT_WITH_TIMESTAMP0(...) \
190 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
191 #define TRACE_EVENT_COPY_NESTABLE_ASYNC_BEGIN0(...) \
192 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
193 #define TRACE_EVENT_COPY_NESTABLE_ASYNC_BEGIN1(...) \
194 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
195 #define TRACE_EVENT_COPY_NESTABLE_ASYNC_BEGIN2(...) \
196 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
197 #define TRACE_EVENT_COPY_NESTABLE_ASYNC_END0(...) \
198 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
199 #define TRACE_EVENT_COPY_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP0(...) \
200 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
201 #define TRACE_EVENT_COPY_NESTABLE_ASYNC_BEGIN_WITH_TIMESTAMP1(...) \
202 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
203 #define TRACE_EVENT_COPY_NESTABLE_ASYNC_END_WITH_TIMESTAMP0(...) \
204 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
205 #define TRACE_EVENT_COPY_NESTABLE_ASYNC_END1(...) \
206 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
207 #define TRACE_EVENT_METADATA1(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
208 #define TRACE_EVENT_CLOCK_SYNC_RECEIVER(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
209 #define TRACE_EVENT_CLOCK_SYNC_ISSUER(...) INTERNAL_TRACE_IGNORE(__VA_ARGS__)
210 #define TRACE_EVENT_OBJECT_CREATED_WITH_ID(...) \
211 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
212 #define TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID(...) \
213 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
214 #define TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID_AND_TIMESTAMP(...) \
215 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
216 #define TRACE_EVENT_OBJECT_DELETED_WITH_ID(...) \
217 INTERNAL_TRACE_IGNORE(__VA_ARGS__)
218 #define TRACE_EVENT_CATEGORY_GROUP_ENABLED(category_group, ret) \
219 do { \
220 *ret = false; \
221 } while (0)
222 #define TRACE_EVENT_IS_NEW_TRACE(ret) \
223 do { \
224 *ret = false; \
225 } while (0)
226
227 #define TRACE_EVENT_PHASE_BEGIN ('B')
228 #define TRACE_EVENT_PHASE_END ('E')
229 #define TRACE_EVENT_PHASE_COMPLETE ('X')
230 #define TRACE_EVENT_PHASE_INSTANT ('I')
231 #define TRACE_EVENT_PHASE_ASYNC_BEGIN ('S')
232 #define TRACE_EVENT_PHASE_ASYNC_STEP_INTO ('T')
233 #define TRACE_EVENT_PHASE_ASYNC_STEP_PAST ('p')
234 #define TRACE_EVENT_PHASE_ASYNC_END ('F')
235 #define TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN ('b')
236 #define TRACE_EVENT_PHASE_NESTABLE_ASYNC_END ('e')
237 #define TRACE_EVENT_PHASE_NESTABLE_ASYNC_INSTANT ('n')
238 #define TRACE_EVENT_PHASE_FLOW_BEGIN ('s')
239 #define TRACE_EVENT_PHASE_FLOW_STEP ('t')
240 #define TRACE_EVENT_PHASE_FLOW_END ('f')
241 #define TRACE_EVENT_PHASE_METADATA ('M')
242 #define TRACE_EVENT_PHASE_COUNTER ('C')
243 #define TRACE_EVENT_PHASE_SAMPLE ('P')
244 #define TRACE_EVENT_PHASE_CREATE_OBJECT ('N')
245 #define TRACE_EVENT_PHASE_SNAPSHOT_OBJECT ('O')
246 #define TRACE_EVENT_PHASE_DELETE_OBJECT ('D')
247 #define TRACE_EVENT_PHASE_MEMORY_DUMP ('v')
248 #define TRACE_EVENT_PHASE_MARK ('R')
249 #define TRACE_EVENT_PHASE_CLOCK_SYNC ('c')
250
251 #define TRACE_EVENT_FLAG_NONE (static_cast<unsigned int>(0))
252 #define TRACE_EVENT_FLAG_COPY (static_cast<unsigned int>(1 << 0))
253 #define TRACE_EVENT_FLAG_HAS_ID (static_cast<unsigned int>(1 << 1))
254 #define TRACE_EVENT_FLAG_SCOPE_OFFSET (static_cast<unsigned int>(1 << 2))
255 #define TRACE_EVENT_FLAG_SCOPE_EXTRA (static_cast<unsigned int>(1 << 3))
256 #define TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP (static_cast<unsigned int>(1 << 4))
257 #define TRACE_EVENT_FLAG_ASYNC_TTS (static_cast<unsigned int>(1 << 5))
258 #define TRACE_EVENT_FLAG_BIND_TO_ENCLOSING (static_cast<unsigned int>(1 << 6))
259 #define TRACE_EVENT_FLAG_FLOW_IN (static_cast<unsigned int>(1 << 7))
260 #define TRACE_EVENT_FLAG_FLOW_OUT (static_cast<unsigned int>(1 << 8))
261 #define TRACE_EVENT_FLAG_HAS_CONTEXT_ID (static_cast<unsigned int>(1 << 9))
262 #define TRACE_EVENT_FLAG_HAS_PROCESS_ID (static_cast<unsigned int>(1 << 10))
263 #define TRACE_EVENT_FLAG_HAS_LOCAL_ID (static_cast<unsigned int>(1 << 11))
264 #define TRACE_EVENT_FLAG_HAS_GLOBAL_ID (static_cast<unsigned int>(1 << 12))
265 #define TRACE_EVENT_FLAG_JAVA_STRING_LITERALS \
266 (static_cast<unsigned int>(1 << 16))
267 #define TRACE_EVENT_FLAG_SCOPE_MASK \
268 (static_cast<unsigned int>(TRACE_EVENT_FLAG_SCOPE_OFFSET | \
269 TRACE_EVENT_FLAG_SCOPE_EXTRA))
270
271 #define TRACE_VALUE_TYPE_BOOL (static_cast<unsigned char>(1))
272 #define TRACE_VALUE_TYPE_UINT (static_cast<unsigned char>(2))
273 #define TRACE_VALUE_TYPE_INT (static_cast<unsigned char>(3))
274 #define TRACE_VALUE_TYPE_DOUBLE (static_cast<unsigned char>(4))
275 #define TRACE_VALUE_TYPE_POINTER (static_cast<unsigned char>(5))
276 #define TRACE_VALUE_TYPE_STRING (static_cast<unsigned char>(6))
277 #define TRACE_VALUE_TYPE_COPY_STRING (static_cast<unsigned char>(7))
278 #define TRACE_VALUE_TYPE_CONVERTABLE (static_cast<unsigned char>(8))
279 #define TRACE_VALUE_TYPE_PROTO (static_cast<unsigned char>(9))
280
281 #define TRACE_EVENT_SCOPE_GLOBAL (static_cast<unsigned char>(0 << 2))
282 #define TRACE_EVENT_SCOPE_PROCESS (static_cast<unsigned char>(1 << 2))
283 #define TRACE_EVENT_SCOPE_THREAD (static_cast<unsigned char>(2 << 2))
284 #define TRACE_EVENT_SCOPE_NAME_GLOBAL ('g')
285 #define TRACE_EVENT_SCOPE_NAME_PROCESS ('p')
286 #define TRACE_EVENT_SCOPE_NAME_THREAD ('t')
287
288 // Typed macros. For these, we have to erase the extra args entirely, as they
289 // may include a lambda that refers to protozero message types (which aren't
290 // available in the stub). This may trigger "unused variable" errors at the
291 // callsite, which have to be addressed at the callsite (e.g. via
292 // [[maybe_unused]]).
293 #define TRACE_EVENT_BEGIN(category, name, ...) \
294 INTERNAL_TRACE_IGNORE(category, name)
295 #define TRACE_EVENT_END(category, ...) INTERNAL_TRACE_IGNORE(category)
296 #define TRACE_EVENT(category, name, ...) INTERNAL_TRACE_IGNORE(category, name)
297 #define TRACE_EVENT_INSTANT(category, name, ...) \
298 INTERNAL_TRACE_IGNORE(category, name)
299
300 namespace base {
301 namespace trace_event {
302
303 class BASE_EXPORT ConvertableToTraceFormat {
304 public:
305 ConvertableToTraceFormat() = default;
306 ConvertableToTraceFormat(const ConvertableToTraceFormat&) = delete;
307 ConvertableToTraceFormat& operator=(const ConvertableToTraceFormat&) = delete;
308 virtual ~ConvertableToTraceFormat();
309
310 // Append the class info to the provided |out| string. The appended
311 // data must be a valid JSON object. Strings must be properly quoted, and
312 // escaped. There is no processing applied to the content after it is
313 // appended.
314 virtual void AppendAsTraceFormat(std::string* out) const = 0;
315 };
316
317 class BASE_EXPORT TracedValue : public ConvertableToTraceFormat {
318 public:
319 explicit TracedValue(size_t capacity = 0) {}
320
EndDictionary()321 void EndDictionary() {}
EndArray()322 void EndArray() {}
323
SetInteger(const char * name,int value)324 void SetInteger(const char* name, int value) {}
SetDouble(const char * name,double value)325 void SetDouble(const char* name, double value) {}
SetBoolean(const char * name,bool value)326 void SetBoolean(const char* name, bool value) {}
SetString(const char * name,std::string_view value)327 void SetString(const char* name, std::string_view value) {}
SetValue(const char * name,TracedValue * value)328 void SetValue(const char* name, TracedValue* value) {}
BeginDictionary(const char * name)329 void BeginDictionary(const char* name) {}
BeginArray(const char * name)330 void BeginArray(const char* name) {}
331
SetIntegerWithCopiedName(std::string_view name,int value)332 void SetIntegerWithCopiedName(std::string_view name, int value) {}
SetDoubleWithCopiedName(std::string_view name,double value)333 void SetDoubleWithCopiedName(std::string_view name, double value) {}
SetBooleanWithCopiedName(std::string_view name,bool value)334 void SetBooleanWithCopiedName(std::string_view name, bool value) {}
SetStringWithCopiedName(std::string_view name,std::string_view value)335 void SetStringWithCopiedName(std::string_view name, std::string_view value) {}
SetValueWithCopiedName(std::string_view name,TracedValue * value)336 void SetValueWithCopiedName(std::string_view name, TracedValue* value) {}
BeginDictionaryWithCopiedName(std::string_view name)337 void BeginDictionaryWithCopiedName(std::string_view name) {}
BeginArrayWithCopiedName(std::string_view name)338 void BeginArrayWithCopiedName(std::string_view name) {}
339
AppendInteger(int)340 void AppendInteger(int) {}
AppendDouble(double)341 void AppendDouble(double) {}
AppendBoolean(bool)342 void AppendBoolean(bool) {}
AppendString(std::string_view)343 void AppendString(std::string_view) {}
BeginArray()344 void BeginArray() {}
BeginDictionary()345 void BeginDictionary() {}
346
347 void AppendAsTraceFormat(std::string* out) const override;
348 };
349
350 class BASE_EXPORT TracedValueJSON : public TracedValue {
351 public:
TracedValue(capacity)352 explicit TracedValueJSON(size_t capacity = 0) : TracedValue(capacity) {}
353
ToBaseValue()354 std::unique_ptr<base::Value> ToBaseValue() const { return nullptr; }
ToJSON()355 std::string ToJSON() const { return ""; }
ToFormattedJSON()356 std::string ToFormattedJSON() const { return ""; }
357 };
358
359 struct MemoryDumpArgs;
360 class ProcessMemoryDump;
361
362 class BASE_EXPORT MemoryDumpProvider {
363 public:
364 MemoryDumpProvider(const MemoryDumpProvider&) = delete;
365 MemoryDumpProvider& operator=(const MemoryDumpProvider&) = delete;
366 virtual ~MemoryDumpProvider();
367
368 virtual bool OnMemoryDump(const MemoryDumpArgs& args,
369 ProcessMemoryDump* pmd) = 0;
370
371 protected:
372 MemoryDumpProvider() = default;
373 };
374
375 class BASE_EXPORT MemoryDumpManager {
376 public:
377 static constexpr const char* const kTraceCategory =
378 TRACE_DISABLED_BY_DEFAULT("memory-infra");
379 };
380
GetNextGlobalTraceId()381 inline uint64_t GetNextGlobalTraceId() {
382 return 0;
383 }
384
385 } // namespace trace_event
386 } // namespace base
387
388 // Stub implementation for
389 // perfetto::StaticString/ThreadTrack/TracedValue/TracedDictionary/TracedArray/
390 // Track.
391 namespace perfetto {
392
393 class TracedArray;
394 class TracedDictionary;
395 class EventContext;
396
397 class StaticString {
398 public:
399 template <typename T>
StaticString(T)400 StaticString(T) {}
401 };
402
403 class DynamicString {
404 public:
405 template <typename T>
DynamicString(T)406 explicit DynamicString(T) {}
407 };
408
409 class TracedValue {
410 public:
WriteInt64(int64_t)411 void WriteInt64(int64_t) && {}
WriteUInt64(uint64_t)412 void WriteUInt64(uint64_t) && {}
WriteDouble(double)413 void WriteDouble(double) && {}
WriteBoolean(bool)414 void WriteBoolean(bool) && {}
WriteString(const char *)415 void WriteString(const char*) && {}
WriteString(const char *,size_t)416 void WriteString(const char*, size_t) && {}
WriteString(const std::string &)417 void WriteString(const std::string&) && {}
WritePointer(const void *)418 void WritePointer(const void*) && {}
419
420 TracedDictionary WriteDictionary() &&;
421 TracedArray WriteArray() &&;
422 };
423
424 class TracedDictionary {
425 public:
AddItem(StaticString)426 TracedValue AddItem(StaticString) { return TracedValue(); }
AddItem(DynamicString)427 TracedValue AddItem(DynamicString) { return TracedValue(); }
428
429 template <typename T>
Add(StaticString,T &&)430 void Add(StaticString, T&&) {}
431 template <typename T>
Add(DynamicString,T &&)432 void Add(DynamicString, T&&) {}
433
434 TracedDictionary AddDictionary(StaticString);
435 TracedDictionary AddDictionary(DynamicString);
436 TracedArray AddArray(StaticString);
437 TracedArray AddArray(DynamicString);
438 };
439
440 class TracedArray {
441 public:
AppendItem()442 TracedValue AppendItem() { return TracedValue(); }
443
444 template <typename T>
Append(T &&)445 void Append(T&&) {}
446
447 TracedDictionary AppendDictionary();
448 TracedArray AppendArray();
449 };
450
451 template <class T>
WriteIntoTracedValue(TracedValue,T &&)452 void WriteIntoTracedValue(TracedValue, T&&) {}
453
454 struct Track {
TrackTrack455 explicit Track(uint64_t id) {}
456 };
457
458 struct NamedTrack {
459 template <class T>
460 explicit NamedTrack(T name, uint64_t id = 0, Track parent = Track{0}) {}
461 };
462
463 struct Flow {
ProcessScopedFlow464 static inline Flow ProcessScoped(uint64_t flow_id) { return Flow(); }
FromPointerFlow465 static inline Flow FromPointer(void* ptr) { return Flow(); }
GlobalFlow466 static inline Flow Global(uint64_t flow_id) { return Flow(); }
467 };
468
469 namespace protos::pbzero {
470 namespace SequenceManagerTask {
471
472 enum class QueueName {
473 UNKNOWN_TQ = 0,
474 DEFAULT_TQ = 1,
475 TASK_ENVIRONMENT_DEFAULT_TQ = 2,
476 TEST2_TQ = 3,
477 TEST_TQ = 4,
478 };
QueueName_Name(QueueName value)479 inline const char* QueueName_Name(QueueName value) {
480 switch (value) {
481 case QueueName::UNKNOWN_TQ:
482 return "UNKNOWN_TQ";
483 case QueueName::DEFAULT_TQ:
484 return "DEFAULT_TQ";
485 case QueueName::TASK_ENVIRONMENT_DEFAULT_TQ:
486 return "TASK_ENVIRONMENT_DEFAULT_TQ";
487 case QueueName::TEST2_TQ:
488 return "TEST2_TQ";
489 case QueueName::TEST_TQ:
490 return "TEST_TQ";
491 }
492 }
493
494 } // namespace SequenceManagerTask
495
496 namespace ChromeProcessDescriptor {
497
498 enum ProcessType {};
499
500 } // namespace ChromeProcessDescriptor
501
502 } // namespace protos::pbzero
503 } // namespace perfetto
504
505 #endif // BASE_TRACE_EVENT_TRACE_EVENT_STUB_H_
506