• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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