mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
75 lines
2.3 KiB
Dart
75 lines
2.3 KiB
Dart
// 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 'package:flutter/widgets.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
class TestBinding extends LiveTestWidgetsFlutterBinding {
|
|
TestBinding();
|
|
|
|
int framesBegun = 0;
|
|
int framesDrawn = 0;
|
|
|
|
late bool handleBeginFrameMicrotaskRun;
|
|
|
|
@override
|
|
void handleBeginFrame(Duration? rawTimeStamp) {
|
|
handleBeginFrameMicrotaskRun = false;
|
|
framesBegun += 1;
|
|
Future<void>.microtask(() { handleBeginFrameMicrotaskRun = true; });
|
|
super.handleBeginFrame(rawTimeStamp);
|
|
}
|
|
|
|
@override
|
|
void handleDrawFrame() {
|
|
if (!handleBeginFrameMicrotaskRun) {
|
|
throw "Microtasks scheduled by 'handledBeginFrame' must be run before 'handleDrawFrame'.";
|
|
}
|
|
framesDrawn += 1;
|
|
super.handleDrawFrame();
|
|
}
|
|
}
|
|
|
|
void main() {
|
|
late TestBinding binding;
|
|
|
|
setUp(() {
|
|
binding = TestBinding();
|
|
});
|
|
|
|
test('test pumpBenchmark() only runs one frame', () async {
|
|
await benchmarkWidgets(
|
|
(WidgetTester tester) async {
|
|
const Key root = Key('root');
|
|
binding.attachRootWidget(Container(key: root));
|
|
await tester.pump();
|
|
|
|
expect(binding.framesBegun, greaterThan(0));
|
|
expect(binding.framesDrawn, greaterThan(0));
|
|
|
|
final Element appState = tester.element(find.byKey(root));
|
|
binding.framePolicy = LiveTestWidgetsFlutterBindingFramePolicy.benchmark;
|
|
|
|
final int startFramesBegun = binding.framesBegun;
|
|
final int startFramesDrawn = binding.framesDrawn;
|
|
expect(startFramesBegun, equals(startFramesDrawn));
|
|
|
|
appState.markNeedsBuild();
|
|
|
|
await tester.pumpBenchmark(const Duration(milliseconds: 16));
|
|
|
|
final int endFramesBegun = binding.framesBegun;
|
|
final int endFramesDrawn = binding.framesDrawn;
|
|
expect(endFramesBegun, equals(endFramesDrawn));
|
|
|
|
expect(endFramesBegun, equals(startFramesBegun + 1));
|
|
expect(endFramesDrawn, equals(startFramesDrawn + 1));
|
|
},
|
|
// We are not interested in the performance of the "benchmark", we are just
|
|
// testing the behavior. So it's OK that asserts are enabled.
|
|
mayRunWithAsserts: true,
|
|
);
|
|
}, skip: isBrowser); // https://github.com/flutter/flutter/issues/87871
|
|
}
|