diff --git a/fml/trace_event.h b/fml/trace_event.h index d6749e61acb87..378b037101b57 100644 --- a/fml/trace_event.h +++ b/fml/trace_event.h @@ -139,6 +139,13 @@ #endif // TRACE_EVENT_HIDE_MACROS #endif // !defined(OS_FUCHSIA) +#define TRACE_EVENT2_INT(category_group, name, arg1_name, arg1_val, arg2_name, \ + arg2_val) \ + const auto __arg1_val_str = std::to_string(arg1_val); \ + const auto __arg2_val_str = std::to_string(arg2_val); \ + TRACE_EVENT2(category_group, name, arg1_name, __arg1_val_str.c_str(), \ + arg2_name, __arg2_val_str.c_str()); + namespace fml { namespace tracing { diff --git a/shell/common/vsync_waiter_fallback.cc b/shell/common/vsync_waiter_fallback.cc index 89c3fb0c805fc..bad751e4afd89 100644 --- a/shell/common/vsync_waiter_fallback.cc +++ b/shell/common/vsync_waiter_fallback.cc @@ -35,13 +35,17 @@ VsyncWaiterFallback::~VsyncWaiterFallback() = default; // |VsyncWaiter| void VsyncWaiterFallback::AwaitVSync() { - TRACE_EVENT0("flutter", "VSYNC"); - constexpr fml::TimeDelta kSingleFrameInterval = fml::TimeDelta::FromSecondsF(1.0 / 60.0); auto frame_start_time = SnapToNextTick(fml::TimePoint::Now(), phase_, kSingleFrameInterval); auto frame_target_time = frame_start_time + kSingleFrameInterval; + + TRACE_EVENT2_INT("flutter", "PlatformVsync", "frame_start_time", + frame_start_time.ToEpochDelta().ToMicroseconds(), + "frame_target_time", + frame_target_time.ToEpochDelta().ToMicroseconds()); + std::weak_ptr weak_this = std::static_pointer_cast(shared_from_this()); diff --git a/shell/platform/android/vsync_waiter_android.cc b/shell/platform/android/vsync_waiter_android.cc index 84e477e3ebac0..defde4340e443 100644 --- a/shell/platform/android/vsync_waiter_android.cc +++ b/shell/platform/android/vsync_waiter_android.cc @@ -52,8 +52,6 @@ void VsyncWaiterAndroid::AwaitVSync() { // static void VsyncWaiterAndroid::OnVsyncFromNDK(int64_t frame_nanos, void* data) { - TRACE_EVENT0("flutter", "VSYNC"); - auto frame_time = fml::TimePoint::FromEpochDelta( fml::TimeDelta::FromNanoseconds(frame_nanos)); auto now = fml::TimePoint::Now(); @@ -62,6 +60,12 @@ void VsyncWaiterAndroid::OnVsyncFromNDK(int64_t frame_nanos, void* data) { } auto target_time = frame_time + fml::TimeDelta::FromNanoseconds( 1000000000.0 / g_refresh_rate_); + + TRACE_EVENT2_INT("flutter", "PlatformVsync", "frame_start_time", + frame_time.ToEpochDelta().ToMicroseconds(), + "frame_target_time", + target_time.ToEpochDelta().ToMicroseconds()); + auto* weak_this = reinterpret_cast*>(data); ConsumePendingCallback(weak_this, frame_time, target_time); } @@ -72,13 +76,16 @@ void VsyncWaiterAndroid::OnVsyncFromJava(JNIEnv* env, jlong frameDelayNanos, jlong refreshPeriodNanos, jlong java_baton) { - TRACE_EVENT0("flutter", "VSYNC"); - auto frame_time = fml::TimePoint::Now() - fml::TimeDelta::FromNanoseconds(frameDelayNanos); auto target_time = frame_time + fml::TimeDelta::FromNanoseconds(refreshPeriodNanos); + TRACE_EVENT2_INT("flutter", "PlatformVsync", "frame_start_time", + frame_time.ToEpochDelta().ToMicroseconds(), + "frame_target_time", + target_time.ToEpochDelta().ToMicroseconds()); + auto* weak_this = reinterpret_cast*>(java_baton); ConsumePendingCallback(weak_this, frame_time, target_time); } diff --git a/shell/platform/darwin/ios/framework/Source/vsync_waiter_ios.mm b/shell/platform/darwin/ios/framework/Source/vsync_waiter_ios.mm index 6c6a45477858a..207205f7288d8 100644 --- a/shell/platform/darwin/ios/framework/Source/vsync_waiter_ios.mm +++ b/shell/platform/darwin/ios/framework/Source/vsync_waiter_ios.mm @@ -102,14 +102,16 @@ - (void)pause { } - (void)onDisplayLink:(CADisplayLink*)link { - TRACE_EVENT0("flutter", "VSYNC"); - CFTimeInterval delay = CACurrentMediaTime() - link.timestamp; fml::TimePoint frame_start_time = fml::TimePoint::Now() - fml::TimeDelta::FromSecondsF(delay); CFTimeInterval duration = link.targetTimestamp - link.timestamp; fml::TimePoint frame_target_time = frame_start_time + fml::TimeDelta::FromSecondsF(duration); + TRACE_EVENT2_INT("flutter", "PlatformVsync", "frame_start_time", + frame_start_time.ToEpochDelta().ToMicroseconds(), "frame_target_time", + frame_target_time.ToEpochDelta().ToMicroseconds()); + std::unique_ptr recorder = std::make_unique();