Skip to content

Commit 8f6036e

Browse files
authored
Reland fix wrong VSYNC event (flutter#37865)
1 parent 5caef85 commit 8f6036e

File tree

4 files changed

+28
-8
lines changed

4 files changed

+28
-8
lines changed

fml/trace_event.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,13 @@
139139
#endif // TRACE_EVENT_HIDE_MACROS
140140
#endif // !defined(OS_FUCHSIA)
141141

142+
#define TRACE_EVENT2_INT(category_group, name, arg1_name, arg1_val, arg2_name, \
143+
arg2_val) \
144+
const auto __arg1_val_str = std::to_string(arg1_val); \
145+
const auto __arg2_val_str = std::to_string(arg2_val); \
146+
TRACE_EVENT2(category_group, name, arg1_name, __arg1_val_str.c_str(), \
147+
arg2_name, __arg2_val_str.c_str());
148+
142149
namespace fml {
143150
namespace tracing {
144151

shell/common/vsync_waiter_fallback.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,17 @@ VsyncWaiterFallback::~VsyncWaiterFallback() = default;
3535

3636
// |VsyncWaiter|
3737
void VsyncWaiterFallback::AwaitVSync() {
38-
TRACE_EVENT0("flutter", "VSYNC");
39-
4038
constexpr fml::TimeDelta kSingleFrameInterval =
4139
fml::TimeDelta::FromSecondsF(1.0 / 60.0);
4240
auto frame_start_time =
4341
SnapToNextTick(fml::TimePoint::Now(), phase_, kSingleFrameInterval);
4442
auto frame_target_time = frame_start_time + kSingleFrameInterval;
43+
44+
TRACE_EVENT2_INT("flutter", "PlatformVsync", "frame_start_time",
45+
frame_start_time.ToEpochDelta().ToMicroseconds(),
46+
"frame_target_time",
47+
frame_target_time.ToEpochDelta().ToMicroseconds());
48+
4549
std::weak_ptr<VsyncWaiterFallback> weak_this =
4650
std::static_pointer_cast<VsyncWaiterFallback>(shared_from_this());
4751

shell/platform/android/vsync_waiter_android.cc

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@ void VsyncWaiterAndroid::AwaitVSync() {
5252

5353
// static
5454
void VsyncWaiterAndroid::OnVsyncFromNDK(int64_t frame_nanos, void* data) {
55-
TRACE_EVENT0("flutter", "VSYNC");
56-
5755
auto frame_time = fml::TimePoint::FromEpochDelta(
5856
fml::TimeDelta::FromNanoseconds(frame_nanos));
5957
auto now = fml::TimePoint::Now();
@@ -62,6 +60,12 @@ void VsyncWaiterAndroid::OnVsyncFromNDK(int64_t frame_nanos, void* data) {
6260
}
6361
auto target_time = frame_time + fml::TimeDelta::FromNanoseconds(
6462
1000000000.0 / g_refresh_rate_);
63+
64+
TRACE_EVENT2_INT("flutter", "PlatformVsync", "frame_start_time",
65+
frame_time.ToEpochDelta().ToMicroseconds(),
66+
"frame_target_time",
67+
target_time.ToEpochDelta().ToMicroseconds());
68+
6569
auto* weak_this = reinterpret_cast<std::weak_ptr<VsyncWaiter>*>(data);
6670
ConsumePendingCallback(weak_this, frame_time, target_time);
6771
}
@@ -72,13 +76,16 @@ void VsyncWaiterAndroid::OnVsyncFromJava(JNIEnv* env,
7276
jlong frameDelayNanos,
7377
jlong refreshPeriodNanos,
7478
jlong java_baton) {
75-
TRACE_EVENT0("flutter", "VSYNC");
76-
7779
auto frame_time =
7880
fml::TimePoint::Now() - fml::TimeDelta::FromNanoseconds(frameDelayNanos);
7981
auto target_time =
8082
frame_time + fml::TimeDelta::FromNanoseconds(refreshPeriodNanos);
8183

84+
TRACE_EVENT2_INT("flutter", "PlatformVsync", "frame_start_time",
85+
frame_time.ToEpochDelta().ToMicroseconds(),
86+
"frame_target_time",
87+
target_time.ToEpochDelta().ToMicroseconds());
88+
8289
auto* weak_this = reinterpret_cast<std::weak_ptr<VsyncWaiter>*>(java_baton);
8390
ConsumePendingCallback(weak_this, frame_time, target_time);
8491
}

shell/platform/darwin/ios/framework/Source/vsync_waiter_ios.mm

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,16 @@ - (void)pause {
102102
}
103103

104104
- (void)onDisplayLink:(CADisplayLink*)link {
105-
TRACE_EVENT0("flutter", "VSYNC");
106-
107105
CFTimeInterval delay = CACurrentMediaTime() - link.timestamp;
108106
fml::TimePoint frame_start_time = fml::TimePoint::Now() - fml::TimeDelta::FromSecondsF(delay);
109107

110108
CFTimeInterval duration = link.targetTimestamp - link.timestamp;
111109
fml::TimePoint frame_target_time = frame_start_time + fml::TimeDelta::FromSecondsF(duration);
112110

111+
TRACE_EVENT2_INT("flutter", "PlatformVsync", "frame_start_time",
112+
frame_start_time.ToEpochDelta().ToMicroseconds(), "frame_target_time",
113+
frame_target_time.ToEpochDelta().ToMicroseconds());
114+
113115
std::unique_ptr<flutter::FrameTimingsRecorder> recorder =
114116
std::make_unique<flutter::FrameTimingsRecorder>();
115117

0 commit comments

Comments
 (0)