208 {
210
213
215
216typedef void (*TimelineEventHandler)(const char*,
217 int64_t,
218 int64_t,
219 intptr_t,
220 const int64_t*,
221 Dart_Timeline_Event_Type,
222 intptr_t,
223 const char**,
224 const char**);
225
227
229
231
233
235
238 int64_t timestamp_micros,
239 TraceIDArg id,
240 size_t flow_id_count,
241 const uint64_t* flow_ids,
242 Dart_Timeline_Event_Type
type,
243 const std::vector<const char*>& names,
244 const std::vector<std::string>& values);
245
248 TraceIDArg id,
249 size_t flow_id_count,
250 const uint64_t* flow_ids,
251 Dart_Timeline_Event_Type
type,
252 const std::vector<const char*>& names,
253 const std::vector<std::string>& values);
254
256 return std::string{string};
257}
258
260 return string;
261}
262
264 return std::to_string(point.ToEpochDelta().ToNanoseconds());
265}
266
267template <typename T, typename = std::enable_if_t<std::is_arithmetic<T>::value>>
269 return std::to_string(string);
270}
271
273 std::vector<std::string>& values) {}
274
275template <typename Key, typename Value, typename... Args>
277 std::vector<std::string>& values,
279 Value value,
281 keys.emplace_back(
key);
284}
285
286inline std::pair<std::vector<const char*>, std::vector<std::string>>
288 return {};
289}
290
291template <typename Key, typename Value, typename... Args>
292std::pair<std::vector<const char*>, std::vector<std::string>>
294 std::vector<const char*> keys;
295 std::vector<std::string> values;
297 return std::make_pair(std::move(keys), std::move(values));
298}
299
301
302template <typename... Args>
305 TraceIDArg identifier,
307#if FLUTTER_TIMELINE_ENABLED
310 nullptr, Dart_Timeline_Event_Counter,
311 split.first, split.second);
312#endif
313}
314
315
316
317template <typename... Args>
320 TraceIDArg identifier,
322
323template <typename... Args>
326 size_t flow_id_count,
327 const uint64_t* flow_ids,
329#if FLUTTER_TIMELINE_ENABLED
332 Dart_Timeline_Event_Begin, split.first, split.second);
333#endif
334}
335
338 size_t flow_id_count,
339 const uint64_t* flow_ids);
340
343 size_t flow_id_count,
344 const uint64_t* flow_ids,
345 TraceArg arg1_name,
346 TraceArg arg1_val);
347
350 size_t flow_id_count,
351 const uint64_t* flow_ids,
352 TraceArg arg1_name,
353 TraceArg arg1_val,
354 TraceArg arg2_name,
355 TraceArg arg2_val);
356
358
359template <typename... Args>
362 TimePoint begin,
365#if FLUTTER_TIMELINE_ENABLED
368
370 std::swap(begin,
end);
371 }
372
373 const int64_t begin_micros = begin.ToEpochDelta().ToMicroseconds();
374 const int64_t end_micros =
end.ToEpochDelta().ToMicroseconds();
375
378 begin_micros,
379 identifier,
380 0,
381 nullptr,
382 Dart_Timeline_Event_Async_Begin,
383 split.first,
384 split.second
385 );
386
389 end_micros,
390 identifier,
391 0,
392 nullptr,
393 Dart_Timeline_Event_Async_End,
394 split.first,
395 split.second
396 );
397#endif
398}
399
402 TraceIDArg id,
403 size_t flow_id_count,
404 const uint64_t* flow_ids);
405
407
410 TraceIDArg id,
411 size_t flow_id_count,
412 const uint64_t* flow_ids,
413 TraceArg arg1_name,
414 TraceArg arg1_val);
415
418 TraceIDArg id,
419 TraceArg arg1_name,
420 TraceArg arg1_val);
421
424 size_t flow_id_count,
425 const uint64_t* flow_ids);
426
429 size_t flow_id_count,
430 const uint64_t* flow_ids,
431 TraceArg arg1_name,
432 TraceArg arg1_val);
433
436 size_t flow_id_count,
437 const uint64_t* flow_ids,
438 TraceArg arg1_name,
439 TraceArg arg1_val,
440 TraceArg arg2_name,
441 TraceArg arg2_val);
442
445 TraceIDArg id);
446
448
450
451class ScopedInstantEnd {
452 public:
453 explicit ScopedInstantEnd(const char* str) : label_(str) {}
454
456
457 private:
458 const char* label_;
459
461};
462
463
464
465
466
467
468class TraceFlow {
469 public:
470 explicit TraceFlow(
const char* label) : label_(label), nonce_(
TraceNonce()) {
472 &nonce_);
475 }
476
477 ~TraceFlow() { End(label_); }
478
479 TraceFlow(TraceFlow&& other) : label_(other.label_), nonce_(other.nonce_) {
480 other.nonce_ = 0;
481 }
482
483 void Step(const char* label = nullptr) const {
485 &nonce_);
488 }
489
490 void End(const char* label = nullptr) {
491 if (nonce_ != 0) {
493 &nonce_);
496 nonce_ = 0;
497 }
498 }
499
500 private:
501 const char* label_;
502 uint64_t nonce_;
503
505};
506
507}
508}
509
510#endif
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
const gchar FlBinaryMessengerMessageHandler handler
#define FML_DISALLOW_COPY_AND_ASSIGN(TypeName)
it will be possible to load the file into Perfetto s trace viewer use test Running tests that layout and measure text will not yield consistent results across various platforms Enabling this option will make font resolution default to the Ahem test font on all disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap The size limit in megabytes for the Dart VM old gen heap space enable Enable the Impeller renderer on supported platforms Ignored if Impeller is not supported on the platform enable vulkan Enable loading Vulkan validation layers The layers must be available to the application and loadable On non Vulkan this flag does nothing enable vulkan gpu tracing
void TraceEventFlowEnd0(TraceArg category_group, TraceArg name, TraceIDArg id)
void TraceEventInstant0(TraceArg category_group, TraceArg name, size_t flow_id_count, const uint64_t *flow_ids)
std::string TraceToString(const char *string)
void TraceEventFlowBegin0(TraceArg category_group, TraceArg name, TraceIDArg id)
bool TraceHasTimelineEventHandler()
void TraceEventAsyncBegin0(TraceArg category_group, TraceArg name, TraceIDArg id, size_t flow_id_count, const uint64_t *flow_ids)
void TraceSetAllowlist(const std::vector< std::string > &allowlist)
void TraceEventAsyncEnd0(TraceArg category_group, TraceArg name, TraceIDArg id)
void TraceEvent0(TraceArg category_group, TraceArg name, size_t flow_id_count, const uint64_t *flow_ids)
void TraceEventInstant1(TraceArg category_group, TraceArg name, size_t flow_id_count, const uint64_t *flow_ids, TraceArg arg1_name, TraceArg arg1_val)
int64_t(*)() TimelineMicrosSource
void TraceEventAsyncBegin1(TraceArg category_group, TraceArg name, TraceIDArg id, size_t flow_id_count, const uint64_t *flow_ids, TraceArg arg1_name, TraceArg arg1_val)
void TraceTimelineEvent(TraceArg category_group, TraceArg name, int64_t timestamp_micros, TraceIDArg identifier, size_t flow_id_count, const uint64_t *flow_ids, Dart_Timeline_Event_Type type, const std::vector< const char * > &c_names, const std::vector< std::string > &values)
void SplitArgumentsCollect(std::vector< const char * > &keys, std::vector< std::string > &values)
void TraceSetTimelineEventHandler(TimelineEventHandler handler)
void TraceSetTimelineMicrosSource(TimelineMicrosSource source)
void TraceEvent2(TraceArg category_group, TraceArg name, size_t flow_id_count, const uint64_t *flow_ids, TraceArg arg1_name, TraceArg arg1_val, TraceArg arg2_name, TraceArg arg2_val)
void TraceEventAsyncEnd1(TraceArg category_group, TraceArg name, TraceIDArg id, TraceArg arg1_name, TraceArg arg1_val)
void TraceEventEnd(TraceArg name)
void TraceEventInstant2(TraceArg category_group, TraceArg name, size_t flow_id_count, const uint64_t *flow_ids, TraceArg arg1_name, TraceArg arg1_val, TraceArg arg2_name, TraceArg arg2_val)
void TraceEvent(TraceArg category, TraceArg name, size_t flow_id_count, const uint64_t *flow_ids, Args... args)
int64_t TraceGetTimelineMicros()
void TraceCounter(TraceArg category, TraceArg name, TraceIDArg identifier, Args... args)
std::pair< std::vector< const char * >, std::vector< std::string > > SplitArguments()
void TraceEvent1(TraceArg category_group, TraceArg name, size_t flow_id_count, const uint64_t *flow_ids, TraceArg arg1_name, TraceArg arg1_val)
void TraceCounterNopHACK(TraceArg category, TraceArg name, TraceIDArg identifier, Args... args)
void TraceEventAsyncComplete(TraceArg category_group, TraceArg name, TimePoint begin, TimePoint end)
void TraceEventFlowStep0(TraceArg category_group, TraceArg name, TraceIDArg id)