mirror of
https://github.com/flutter/flutter
synced 2024-10-02 14:34:22 +00:00
Validate that min frame number is numeric (#86498)
This commit is contained in:
parent
dacfda07e7
commit
df3fe587e8
16
.ci.yaml
16
.ci.yaml
|
@ -1628,6 +1628,14 @@ targets:
|
|||
["devicelab"]
|
||||
scheduler: luci
|
||||
|
||||
- name: Mac_android integration_ui_frame_number
|
||||
builder: Mac_android integration_ui_frame_number
|
||||
presubmit: false
|
||||
properties:
|
||||
tags: >
|
||||
["devicelab"]
|
||||
scheduler: luci
|
||||
|
||||
- name: Mac_android integration_ui_screenshot
|
||||
builder: Mac_android integration_ui_screenshot
|
||||
presubmit: false
|
||||
|
@ -1912,6 +1920,14 @@ targets:
|
|||
["devicelab"]
|
||||
scheduler: luci
|
||||
|
||||
- name: Mac_ios integration_ui_ios_frame_number
|
||||
builder: Mac_ios integration_ui_ios_frame_number
|
||||
presubmit: false
|
||||
properties:
|
||||
tags: >
|
||||
["devicelab"]
|
||||
scheduler: luci
|
||||
|
||||
- name: Mac_ios integration_ui_ios_screenshot
|
||||
builder: Mac_ios integration_ui_ios_screenshot
|
||||
presubmit: false
|
||||
|
|
|
@ -93,6 +93,7 @@
|
|||
/dev/devicelab/bin/tasks/imagefiltered_transform_animation_perf__timeline_summary.dart @zanderso @flutter/engine
|
||||
/dev/devicelab/bin/tasks/integration_test_test.dart @zanderso @flutter/tool
|
||||
/dev/devicelab/bin/tasks/integration_ui_driver.dart @zanderso @flutter/tool
|
||||
/dev/devicelab/bin/tasks/integration_ui_frame_number.dart @iskakaushik @flutter/engine
|
||||
/dev/devicelab/bin/tasks/integration_ui_keyboard_resize.dart @zanderso @flutter/tool
|
||||
/dev/devicelab/bin/tasks/integration_ui_screenshot.dart @zanderso @flutter/tool
|
||||
/dev/devicelab/bin/tasks/integration_ui_textfield.dart @zanderso @flutter/tool
|
||||
|
@ -126,6 +127,7 @@
|
|||
/dev/devicelab/bin/tasks/hot_mode_dev_cycle_macos_target__benchmark.dart @zanderso @flutter/tool
|
||||
/dev/devicelab/bin/tasks/integration_test_test_ios.dart @zanderso @flutter/engine
|
||||
/dev/devicelab/bin/tasks/integration_ui_ios_driver.dart @zanderso @flutter/tool
|
||||
/dev/devicelab/bin/tasks/integration_ui_ios_frame_number.dart @iskakaushik @flutter/engine
|
||||
/dev/devicelab/bin/tasks/integration_ui_ios_keyboard_resize.dart @zanderso @flutter/engine
|
||||
/dev/devicelab/bin/tasks/integration_ui_ios_screenshot.dart @zanderso @flutter/tool
|
||||
/dev/devicelab/bin/tasks/integration_ui_ios_textfield.dart @zanderso @flutter/tool
|
||||
|
|
12
dev/devicelab/bin/tasks/integration_ui_frame_number.dart
Normal file
12
dev/devicelab/bin/tasks/integration_ui_frame_number.dart
Normal file
|
@ -0,0 +1,12 @@
|
|||
// 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_devicelab/framework/devices.dart';
|
||||
import 'package:flutter_devicelab/framework/framework.dart';
|
||||
import 'package:flutter_devicelab/tasks/integration_tests.dart';
|
||||
|
||||
Future<void> main() async {
|
||||
deviceOperatingSystem = DeviceOperatingSystem.android;
|
||||
await task(createEndToEndFrameNumberTest());
|
||||
}
|
12
dev/devicelab/bin/tasks/integration_ui_ios_frame_number.dart
Normal file
12
dev/devicelab/bin/tasks/integration_ui_ios_frame_number.dart
Normal file
|
@ -0,0 +1,12 @@
|
|||
// 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_devicelab/framework/devices.dart';
|
||||
import 'package:flutter_devicelab/framework/framework.dart';
|
||||
import 'package:flutter_devicelab/tasks/integration_tests.dart';
|
||||
|
||||
Future<void> main() async {
|
||||
deviceOperatingSystem = DeviceOperatingSystem.ios;
|
||||
await task(createEndToEndFrameNumberTest());
|
||||
}
|
|
@ -92,6 +92,13 @@ TaskFunction createEndToEndKeyboardTest() {
|
|||
);
|
||||
}
|
||||
|
||||
TaskFunction createEndToEndFrameNumberTest() {
|
||||
return DriverTest(
|
||||
'${flutterDirectory.path}/dev/integration_tests/ui',
|
||||
'lib/frame_number.dart',
|
||||
);
|
||||
}
|
||||
|
||||
TaskFunction createEndToEndDriverTest() {
|
||||
return DriverTest(
|
||||
'${flutterDirectory.path}/dev/integration_tests/ui',
|
||||
|
|
63
dev/integration_tests/ui/lib/frame_number.dart
Normal file
63
dev/integration_tests/ui/lib/frame_number.dart
Normal file
|
@ -0,0 +1,63 @@
|
|||
// 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:async';
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/scheduler.dart';
|
||||
import 'package:flutter_driver/driver_extension.dart';
|
||||
|
||||
/// This application shows empty screen until first frame timings are acquired.
|
||||
void main() {
|
||||
enableFlutterDriverExtension();
|
||||
|
||||
final Completer<List<FrameTiming>> completer = Completer<List<FrameTiming>>();
|
||||
SchedulerBinding.instance!.addTimingsCallback((List<FrameTiming> timings) {
|
||||
completer.complete(timings);
|
||||
});
|
||||
|
||||
runApp(Directionality(
|
||||
textDirection: TextDirection.ltr,
|
||||
child: _FirstFrameTimings(completer: completer),
|
||||
));
|
||||
}
|
||||
|
||||
class _FirstFrameTimings extends StatefulWidget {
|
||||
const _FirstFrameTimings({
|
||||
Key? key,
|
||||
required this.completer,
|
||||
}) : super(key: key);
|
||||
|
||||
final Completer<List<FrameTiming>> completer;
|
||||
|
||||
@override
|
||||
_FirstFrameTimingsState createState() => _FirstFrameTimingsState();
|
||||
}
|
||||
|
||||
class _FirstFrameTimingsState extends State<_FirstFrameTimings> {
|
||||
int? _minFrameNumber;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
widget.completer.future.then(_setMinFrameNumber);
|
||||
if (_minFrameNumber != null) {
|
||||
return Text(
|
||||
_minFrameNumber.toString(),
|
||||
key: const Key('minFrameNumber'),
|
||||
);
|
||||
} else {
|
||||
return const Text('Waiting...');
|
||||
}
|
||||
}
|
||||
|
||||
void _setMinFrameNumber(List<FrameTiming> timings) {
|
||||
final int minFrameNumber = timings
|
||||
.map((FrameTiming timing) => timing.frameNumber)
|
||||
.reduce(min);
|
||||
setState(() {
|
||||
_minFrameNumber = minFrameNumber;
|
||||
});
|
||||
}
|
||||
}
|
38
dev/integration_tests/ui/test_driver/frame_number_test.dart
Normal file
38
dev/integration_tests/ui/test_driver/frame_number_test.dart
Normal file
|
@ -0,0 +1,38 @@
|
|||
// 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_driver/flutter_driver.dart';
|
||||
import 'package:test/test.dart' hide TypeMatcher, isInstanceOf;
|
||||
|
||||
bool _isNumeric(String s) {
|
||||
return double.tryParse(s) != null;
|
||||
}
|
||||
|
||||
// Connect and disconnect from the empty app.
|
||||
void main() {
|
||||
group('FrameNumber', () {
|
||||
late FlutterDriver driver;
|
||||
|
||||
setUpAll(() async {
|
||||
driver = await FlutterDriver.connect();
|
||||
});
|
||||
|
||||
tearDownAll(() async {
|
||||
await driver.close();
|
||||
});
|
||||
|
||||
test('minFrameNumber is numeric', () async {
|
||||
final SerializableFinder minFrameNumberFinder =
|
||||
find.byValueKey('minFrameNumber');
|
||||
await driver.waitFor(
|
||||
minFrameNumberFinder,
|
||||
timeout: const Duration(seconds: 5),
|
||||
);
|
||||
final String minFrameNumber = await driver.getText(minFrameNumberFinder);
|
||||
// TODO(iskakaushik): enable the stronger check of _minFrameNumber == '1',
|
||||
// once this is fixed. https://github.com/flutter/flutter/issues/86487
|
||||
expect(_isNumeric(minFrameNumber), true);
|
||||
}, timeout: Timeout.none);
|
||||
});
|
||||
}
|
|
@ -2,6 +2,8 @@
|
|||
// Generated file. Do not edit.
|
||||
//
|
||||
|
||||
// clang-format off
|
||||
|
||||
#include "generated_plugin_registrant.h"
|
||||
|
||||
|
||||
|
|
|
@ -72,6 +72,7 @@ Future<void> main() async {
|
|||
testWidgets('Test traceAction', (WidgetTester tester) async {
|
||||
await integrationBinding.enableTimeline(vmService: fakeVM);
|
||||
await integrationBinding.traceAction(() async {});
|
||||
print(integrationBinding.reportData);
|
||||
expect(integrationBinding.reportData, isNotNull);
|
||||
expect(integrationBinding.reportData!.containsKey('timeline'), true);
|
||||
expect(
|
||||
|
|
Loading…
Reference in a new issue