18#if FLUTTER_TIMELINE_ENABLED
22int64_t DefaultMicrosSource() {
27std::atomic<TimelineEventHandler> gTimelineEventHandler;
28std::atomic<TimelineMicrosSource> gTimelineMicrosSource = DefaultMicrosSource;
30inline void FlutterTimelineEvent(
const char* label,
32 int64_t timestamp1_or_async_id,
33 intptr_t flow_id_count,
34 const int64_t* flow_ids,
35 Dart_Timeline_Event_Type
type,
37 const char** argument_names,
38 const char** argument_values) {
40 gTimelineEventHandler.load(std::memory_order_relaxed);
42 handler(label, timestamp0, timestamp1_or_async_id, flow_id_count, flow_ids,
49 gAllowlist.Fill(allowlist);
53 gTimelineEventHandler =
handler;
57 return static_cast<bool>(
58 gTimelineEventHandler.load(std::memory_order_relaxed));
62 return gTimelineMicrosSource.load()();
66 gTimelineMicrosSource = source;
70 static std::atomic_size_t last_item;
76 int64_t timestamp_micros,
79 const uint64_t* flow_ids,
80 Dart_Timeline_Event_Type
type,
81 const std::vector<const char*>& c_names,
82 const std::vector<std::string>& values) {
83 const auto argument_count = std::min(c_names.size(), values.size());
85 std::vector<const char*> c_values;
89 c_values[
i] = values[
i].c_str();
97 reinterpret_cast<const int64_t*
>(flow_ids),
100 const_cast<const char**
>(c_names.data()),
108 size_t flow_id_count,
109 const uint64_t* flow_ids,
110 Dart_Timeline_Event_Type
type,
111 const std::vector<const char*>& c_names,
112 const std::vector<std::string>& values) {
115 gTimelineMicrosSource.load()(),
127 size_t flow_id_count,
128 const uint64_t* flow_ids) {
129 FlutterTimelineEvent(
name,
130 gTimelineMicrosSource.load()(),
133 reinterpret_cast<const int64_t*
>(flow_ids),
134 Dart_Timeline_Event_Begin,
143 size_t flow_id_count,
144 const uint64_t* flow_ids,
147 const char* arg_names[] = {arg1_name};
148 const char* arg_values[] = {arg1_val};
149 FlutterTimelineEvent(
name,
150 gTimelineMicrosSource.load()(),
153 reinterpret_cast<const int64_t*
>(flow_ids),
154 Dart_Timeline_Event_Begin,
163 size_t flow_id_count,
164 const uint64_t* flow_ids,
169 const char* arg_names[] = {arg1_name, arg2_name};
170 const char* arg_values[] = {arg1_val, arg2_val};
171 FlutterTimelineEvent(
name,
172 gTimelineMicrosSource.load()(),
175 reinterpret_cast<const int64_t*
>(flow_ids),
176 Dart_Timeline_Event_Begin,
184 FlutterTimelineEvent(
name,
185 gTimelineMicrosSource.load()(),
189 Dart_Timeline_Event_End,
199 size_t flow_id_count,
200 const uint64_t* flow_ids) {
201 FlutterTimelineEvent(
name,
202 gTimelineMicrosSource.load()(),
205 reinterpret_cast<const int64_t*
>(flow_ids),
206 Dart_Timeline_Event_Async_Begin,
216 FlutterTimelineEvent(
name,
217 gTimelineMicrosSource.load()(),
221 Dart_Timeline_Event_Async_End,
231 size_t flow_id_count,
232 const uint64_t* flow_ids,
235 const char* arg_names[] = {arg1_name};
236 const char* arg_values[] = {arg1_val};
237 FlutterTimelineEvent(
name,
238 gTimelineMicrosSource.load()(),
241 reinterpret_cast<const int64_t*
>(flow_ids),
242 Dart_Timeline_Event_Async_Begin,
254 const char* arg_names[] = {arg1_name};
255 const char* arg_values[] = {arg1_val};
256 FlutterTimelineEvent(
name,
257 gTimelineMicrosSource.load()(),
261 Dart_Timeline_Event_Async_End,
270 size_t flow_id_count,
271 const uint64_t* flow_ids) {
272 FlutterTimelineEvent(
name,
273 gTimelineMicrosSource.load()(),
276 reinterpret_cast<const int64_t*
>(flow_ids),
277 Dart_Timeline_Event_Instant,
286 size_t flow_id_count,
287 const uint64_t* flow_ids,
290 const char* arg_names[] = {arg1_name};
291 const char* arg_values[] = {arg1_val};
292 FlutterTimelineEvent(
name,
293 gTimelineMicrosSource.load()(),
296 reinterpret_cast<const int64_t*
>(flow_ids),
297 Dart_Timeline_Event_Instant,
306 size_t flow_id_count,
307 const uint64_t* flow_ids,
312 const char* arg_names[] = {arg1_name, arg2_name};
313 const char* arg_values[] = {arg1_val, arg2_val};
314 FlutterTimelineEvent(
name,
315 gTimelineMicrosSource.load()(),
318 reinterpret_cast<const int64_t*
>(flow_ids),
319 Dart_Timeline_Event_Instant,
329 FlutterTimelineEvent(
name,
330 gTimelineMicrosSource.load()(),
334 Dart_Timeline_Event_Flow_Begin,
344 FlutterTimelineEvent(
name,
345 gTimelineMicrosSource.load()(),
349 Dart_Timeline_Event_Flow_Step,
357 FlutterTimelineEvent(
name,
358 gTimelineMicrosSource.load()(),
362 Dart_Timeline_Event_Flow_End,
391 int64_t timestamp_micros,
393 size_t flow_id_count,
394 const uint64_t* flow_ids,
395 Dart_Timeline_Event_Type
type,
396 const std::vector<const char*>& c_names,
397 const std::vector<std::string>& values) {}
402 size_t flow_id_count,
403 const uint64_t* flow_ids,
404 Dart_Timeline_Event_Type
type,
405 const std::vector<const char*>& c_names,
406 const std::vector<std::string>& values) {}
410 size_t flow_id_count,
411 const uint64_t* flow_ids) {}
415 size_t flow_id_count,
416 const uint64_t* flow_ids,
422 size_t flow_id_count,
423 const uint64_t* flow_ids,
439 size_t flow_id_count,
440 const uint64_t* flow_ids) {}
449 size_t flow_id_count,
450 const uint64_t* flow_ids,
462 size_t flow_id_count,
463 const uint64_t* flow_ids) {}
467 size_t flow_id_count,
468 const uint64_t* flow_ids,
474 size_t flow_id_count,
475 const uint64_t* flow_ids,