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