From f9b0302e6c981b58e86b0f79d29c7a2b556042c9 Mon Sep 17 00:00:00 2001 From: Kenzie Schmoll Date: Tue, 5 Dec 2023 10:37:20 -0800 Subject: [PATCH 1/4] Ensure benchmark client reloads with the proper `initialPage` --- packages/web_benchmarks/CHANGELOG.md | 4 ++++ packages/web_benchmarks/lib/client.dart | 21 +++++++++++++++++-- packages/web_benchmarks/lib/server.dart | 3 ++- packages/web_benchmarks/lib/src/common.dart | 4 ++++ packages/web_benchmarks/lib/src/runner.dart | 5 ----- packages/web_benchmarks/pubspec.yaml | 2 +- .../testing/web_benchmarks_test.dart | 4 ++-- 7 files changed, 32 insertions(+), 11 deletions(-) diff --git a/packages/web_benchmarks/CHANGELOG.md b/packages/web_benchmarks/CHANGELOG.md index 88f460e800f..13a3cc496d8 100644 --- a/packages/web_benchmarks/CHANGELOG.md +++ b/packages/web_benchmarks/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.0+10 + +* Ensure the benchmark client reloads with the proper `initialPage`. + ## 0.1.0+9 * Updates minimum supported SDK version to Flutter 3.10/Dart 3.0. diff --git a/packages/web_benchmarks/lib/client.dart b/packages/web_benchmarks/lib/client.dart index 43ef711918c..c1eb2c44e43 100644 --- a/packages/web_benchmarks/lib/client.dart +++ b/packages/web_benchmarks/lib/client.dart @@ -7,6 +7,8 @@ import 'dart:convert' show json; import 'dart:html' as html; import 'dart:math' as math; +import 'package:path/path.dart'; + import 'src/common.dart'; import 'src/recorder.dart'; export 'src/recorder.dart'; @@ -29,7 +31,10 @@ final LocalBenchmarkServerClient _client = LocalBenchmarkServerClient(); /// /// When used without a server, prompts the user to select a benchmark to /// run next. -Future runBenchmarks(Map benchmarks) async { +Future runBenchmarks( + Map benchmarks, { + String initialPage = defaultInitialPage, +}) async { // Set local benchmarks. _benchmarks = benchmarks; @@ -43,7 +48,19 @@ Future runBenchmarks(Map benchmarks) async { } await _runBenchmark(nextBenchmark); - html.window.location.reload(); + + final Uri currentUri = Uri.parse(html.window.location.href); + // Create a new URI with the current 'page' value set to [initialPage] to + // ensure the benchmark app is reloaded at the proper location. + final Uri newUri = Uri( + scheme: currentUri.scheme, + host: currentUri.host, + port: currentUri.port, + path: initialPage, + ); + + // Reloading the window will trigger the next benchmark to run. + html.window.location.replace(newUri.toString()); } Future _runBenchmark(String? benchmarkName) async { diff --git a/packages/web_benchmarks/lib/server.dart b/packages/web_benchmarks/lib/server.dart index 4aa47af3b83..41ae7623ec9 100644 --- a/packages/web_benchmarks/lib/server.dart +++ b/packages/web_benchmarks/lib/server.dart @@ -8,6 +8,7 @@ import 'dart:io' as io; import 'package:logging/logging.dart'; import 'src/benchmark_result.dart'; +import 'src/common.dart'; import 'src/runner.dart'; export 'src/benchmark_result.dart'; @@ -47,7 +48,7 @@ Future serveWebBenchmark({ int chromeDebugPort = defaultChromeDebugPort, bool headless = true, bool treeShakeIcons = true, - String initialPage = BenchmarkServer.defaultInitialPage, + String initialPage = defaultInitialPage, }) async { // Reduce logging level. Otherwise, package:webkit_inspection_protocol is way too spammy. Logger.root.level = Level.INFO; diff --git a/packages/web_benchmarks/lib/src/common.dart b/packages/web_benchmarks/lib/src/common.dart index 536cbea236d..5c7c7259796 100644 --- a/packages/web_benchmarks/lib/src/common.dart +++ b/packages/web_benchmarks/lib/src/common.dart @@ -14,3 +14,7 @@ const int kMeasuredSampleCount = 100; /// A special value returned by the `/next-benchmark` HTTP POST request when /// all benchmarks have run and there are no more benchmarks to run. const String kEndOfBenchmarks = '__end_of_benchmarks__'; + +/// The default initial page to load upon opening the benchmark app or reloading +/// it in Chrome. +const String defaultInitialPage = 'index.html'; diff --git a/packages/web_benchmarks/lib/src/runner.dart b/packages/web_benchmarks/lib/src/runner.dart index 142b2d1f4eb..9396f42ebc3 100644 --- a/packages/web_benchmarks/lib/src/runner.dart +++ b/packages/web_benchmarks/lib/src/runner.dart @@ -58,11 +58,6 @@ class BenchmarkServer { this.initialPage = defaultInitialPage, }); - /// The default initial page to load upon opening the benchmark app in Chrome. - /// - /// This value will be used by default if no value is passed to [initialPage]. - static const String defaultInitialPage = 'index.html'; - final ProcessManager _processManager = const LocalProcessManager(); /// The directory containing the app that's being benchmarked. diff --git a/packages/web_benchmarks/pubspec.yaml b/packages/web_benchmarks/pubspec.yaml index 5c41da447e0..5afc85637ae 100644 --- a/packages/web_benchmarks/pubspec.yaml +++ b/packages/web_benchmarks/pubspec.yaml @@ -2,7 +2,7 @@ name: web_benchmarks description: A benchmark harness for performance-testing Flutter apps in Chrome. repository: https://github.com/flutter/packages/tree/main/packages/web_benchmarks issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+web_benchmarks%22 -version: 0.1.0+9 +version: 0.1.0+10 environment: sdk: ">=3.0.0 <4.0.0" diff --git a/packages/web_benchmarks/testing/web_benchmarks_test.dart b/packages/web_benchmarks/testing/web_benchmarks_test.dart index a208d16efd8..5d005e2afc7 100644 --- a/packages/web_benchmarks/testing/web_benchmarks_test.dart +++ b/packages/web_benchmarks/testing/web_benchmarks_test.dart @@ -8,7 +8,7 @@ import 'dart:io'; import 'package:test/test.dart'; import 'package:web_benchmarks/server.dart'; -import 'package:web_benchmarks/src/runner.dart'; +import 'package:web_benchmarks/src/common.dart'; Future main() async { test('Can run a web benchmark', () async { @@ -30,7 +30,7 @@ Future main() async { Future _runBenchmarks({ required List benchmarkNames, required String entryPoint, - String initialPage = BenchmarkServer.defaultInitialPage, + String initialPage = defaultInitialPage, }) async { final BenchmarkResults taskResult = await serveWebBenchmark( benchmarkAppDirectory: Directory('testing/test_app'), From 1084a9eddce5d038bad99d0a1f9f195e768dd796 Mon Sep 17 00:00:00 2001 From: Kenzie Schmoll Date: Tue, 5 Dec 2023 10:43:38 -0800 Subject: [PATCH 2/4] import and formatting --- packages/web_benchmarks/lib/client.dart | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/web_benchmarks/lib/client.dart b/packages/web_benchmarks/lib/client.dart index c1eb2c44e43..2b8e170c1f8 100644 --- a/packages/web_benchmarks/lib/client.dart +++ b/packages/web_benchmarks/lib/client.dart @@ -7,8 +7,6 @@ import 'dart:convert' show json; import 'dart:html' as html; import 'dart:math' as math; -import 'package:path/path.dart'; - import 'src/common.dart'; import 'src/recorder.dart'; export 'src/recorder.dart'; @@ -58,7 +56,7 @@ Future runBenchmarks( port: currentUri.port, path: initialPage, ); - + // Reloading the window will trigger the next benchmark to run. html.window.location.replace(newUri.toString()); } From bc2bbbe09acfeaf1d9eb9feb5515bcc1fefbe431 Mon Sep 17 00:00:00 2001 From: Kenzie Schmoll Date: Tue, 5 Dec 2023 10:54:01 -0800 Subject: [PATCH 3/4] migrate from js_util to ui_web --- packages/web_benchmarks/CHANGELOG.md | 1 + packages/web_benchmarks/lib/src/recorder.dart | 23 ++++++++++--------- packages/web_benchmarks/pubspec.yaml | 4 ++-- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/web_benchmarks/CHANGELOG.md b/packages/web_benchmarks/CHANGELOG.md index 13a3cc496d8..7d4a422d2f4 100644 --- a/packages/web_benchmarks/CHANGELOG.md +++ b/packages/web_benchmarks/CHANGELOG.md @@ -1,6 +1,7 @@ ## 0.1.0+10 * Ensure the benchmark client reloads with the proper `initialPage`. +* Migrates benchmark recorder away from deprecated `js_util` APIs. ## 0.1.0+9 diff --git a/packages/web_benchmarks/lib/src/recorder.dart b/packages/web_benchmarks/lib/src/recorder.dart index 51fa697cecf..4c712756cb3 100644 --- a/packages/web_benchmarks/lib/src/recorder.dart +++ b/packages/web_benchmarks/lib/src/recorder.dart @@ -4,10 +4,9 @@ import 'dart:async'; import 'dart:html' as html; -import 'dart:js'; -import 'dart:js_util' as js_util; import 'dart:math' as math; import 'dart:ui'; +import 'dart:ui_web' as ui_web; import 'package:flutter/foundation.dart'; import 'package:flutter/gestures.dart'; @@ -1211,19 +1210,21 @@ final Map _engineBenchmarkListeners = /// /// If another listener is already registered, overrides it. void registerEngineBenchmarkValueListener( - String name, EngineBenchmarkValueListener listener) { + String name, + EngineBenchmarkValueListener listener, +) { if (_engineBenchmarkListeners.containsKey(name)) { - throw StateError('A listener for "$name" is already registered.\n' - 'Call `stopListeningToEngineBenchmarkValues` to unregister the previous ' - 'listener before registering a new one.'); + throw StateError( + 'A listener for "$name" is already registered.\n' + 'Call `stopListeningToEngineBenchmarkValues` to unregister the previous ' + 'listener before registering a new one.', + ); } if (_engineBenchmarkListeners.isEmpty) { // The first listener is being registered. Register the global listener. - js_util.setProperty(html.window, '_flutter_internal_on_benchmark', - allowInterop(_dispatchEngineBenchmarkValue)); + ui_web.benchmarkValueCallback = _dispatchEngineBenchmarkValue; } - _engineBenchmarkListeners[name] = listener; } @@ -1232,7 +1233,7 @@ void stopListeningToEngineBenchmarkValues(String name) { _engineBenchmarkListeners.remove(name); if (_engineBenchmarkListeners.isEmpty) { // The last listener unregistered. Remove the global listener. - js_util.setProperty(html.window, '_flutter_internal_on_benchmark', null); + ui_web.benchmarkValueCallback = null; } } @@ -1245,4 +1246,4 @@ void _dispatchEngineBenchmarkValue(String name, double value) { if (listener != null) { listener(value); } -} +} \ No newline at end of file diff --git a/packages/web_benchmarks/pubspec.yaml b/packages/web_benchmarks/pubspec.yaml index 5afc85637ae..de97f0b2162 100644 --- a/packages/web_benchmarks/pubspec.yaml +++ b/packages/web_benchmarks/pubspec.yaml @@ -5,8 +5,8 @@ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+ version: 0.1.0+10 environment: - sdk: ">=3.0.0 <4.0.0" - flutter: ">=3.10.0" + sdk: ">=3.2.0 <4.0.0" + flutter: ">=3.16.0" dependencies: flutter: From 8e969a87f495c617e115fb80d8e89a605361a25f Mon Sep 17 00:00:00 2001 From: Kenzie Schmoll Date: Tue, 5 Dec 2023 10:56:55 -0800 Subject: [PATCH 4/4] new line + merge --- packages/web_benchmarks/lib/src/recorder.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web_benchmarks/lib/src/recorder.dart b/packages/web_benchmarks/lib/src/recorder.dart index 4c712756cb3..7154386f989 100644 --- a/packages/web_benchmarks/lib/src/recorder.dart +++ b/packages/web_benchmarks/lib/src/recorder.dart @@ -1246,4 +1246,4 @@ void _dispatchEngineBenchmarkValue(String name, double value) { if (listener != null) { listener(value); } -} \ No newline at end of file +}