Unverified Commit d6f6fc4d authored by Jia Hao's avatar Jia Hao Committed by GitHub

Fix WidgetsBinding.firstFrameRasterized not completing (#56022)

parent 96233db9
......@@ -877,6 +877,9 @@ mixin WidgetsBinding on BindingBase, ServicesBinding, SchedulerBinding, GestureB
}
_needToReportFirstFrame = false;
if (firstFrameCallback != null && !sendFramesToEngine) {
// This frame is deferred and not the first frame sent to the engine that
// should be reported.
_needToReportFirstFrame = true;
SchedulerBinding.instance.removeTimingsCallback(firstFrameCallback);
}
}
......
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:quiver/testing/async.dart';
void main() {
test('Deferred frames will trigger the first frame callback', () {
FakeAsync().run((FakeAsync fakeAsync) {
final WidgetsBinding binding = WidgetsFlutterBinding.ensureInitialized();
binding.deferFirstFrame();
runApp(const Placeholder());
fakeAsync.flushTimers();
// Simulates the engine completing a frame render to trigger the
// appropriate callback setting [WidgetBinding.firstFrameRasterized].
binding.window.onReportTimings(<FrameTiming>[]);
expect(binding.firstFrameRasterized, isFalse);
binding.allowFirstFrame();
fakeAsync.flushTimers();
// Simulates the engine again.
binding.window.onReportTimings(<FrameTiming>[]);
expect(binding.firstFrameRasterized, isTrue);
});
});
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment