diff --git a/.ci.yaml b/.ci.yaml index 757f0884da..ee926c6683 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -1554,6 +1554,25 @@ targets: - bin/** - .ci.yaml + - name: Linux web_benchmarks_skwasm_st + recipe: devicelab/devicelab_drone + bringup: true + presubmit: false + timeout: 60 + properties: + dependencies: >- + [ + {"dependency": "android_sdk", "version": "version:35v1"}, + {"dependency": "chrome_and_driver", "version": "version:125.0.6422.141"} + ] + tags: > + ["devicelab"] + task_name: web_benchmarks_skwasm_st + runIf: + - dev/** + - bin/** + - .ci.yaml + - name: Linux web_long_running_tests_1_5 recipe: flutter/flutter_drone timeout: 60 diff --git a/TESTOWNERS b/TESTOWNERS index baa9ab967a..1e4b6fe29e 100644 --- a/TESTOWNERS +++ b/TESTOWNERS @@ -292,6 +292,7 @@ /dev/devicelab/bin/tasks/web_benchmarks_canvaskit.dart @yjbanov @flutter/web /dev/devicelab/bin/tasks/web_benchmarks_html.dart @yjbanov @flutter/web /dev/devicelab/bin/tasks/web_benchmarks_skwasm.dart @eyebrowsoffire @flutter/web +/dev/devicelab/bin/tasks/web_benchmarks_skwasm_st.dart @eyebrowsoffire @flutter/web /dev/devicelab/bin/tasks/windows_home_scroll_perf__timeline_summary.dart @jonahwilliams @flutter/engine /dev/devicelab/bin/tasks/windows_startup_test.dart @loic-sharma @flutter/desktop /dev/devicelab/bin/tasks/windows_desktop_impeller.dart @jonahwilliams @flutter/engine diff --git a/dev/benchmarks/macrobenchmarks/web/flutter_bootstrap.js b/dev/benchmarks/macrobenchmarks/web/flutter_bootstrap.js index 2813d7d46a..6682cc3c19 100644 --- a/dev/benchmarks/macrobenchmarks/web/flutter_bootstrap.js +++ b/dev/benchmarks/macrobenchmarks/web/flutter_bootstrap.js @@ -1,8 +1,13 @@ {{flutter_js}} {{flutter_build_config}} + +const searchParams = new URLSearchParams(window.location.search); +const forceSt = searchParams.get('force_st'); +const extraConfig = forceSt ? {forceSingleThreadedSkwasm: true} : {}; _flutter.loader.load({ config: { // Use the local CanvasKit bundle instead of the CDN to reduce test flakiness. canvasKitBaseUrl: "/canvaskit/", + ...extraConfig, }, }); \ No newline at end of file diff --git a/dev/devicelab/bin/tasks/web_benchmarks_canvaskit.dart b/dev/devicelab/bin/tasks/web_benchmarks_canvaskit.dart index 1aabf51464..e420fc3389 100644 --- a/dev/devicelab/bin/tasks/web_benchmarks_canvaskit.dart +++ b/dev/devicelab/bin/tasks/web_benchmarks_canvaskit.dart @@ -10,7 +10,8 @@ Future main() async { await task(() async { return runWebBenchmark(( webRenderer: 'canvaskit', - useWasm: false + useWasm: false, + forceSingleThreadedSkwasm: false, )); }); } diff --git a/dev/devicelab/bin/tasks/web_benchmarks_html.dart b/dev/devicelab/bin/tasks/web_benchmarks_html.dart index b7719cc7ba..a5a7e39db3 100644 --- a/dev/devicelab/bin/tasks/web_benchmarks_html.dart +++ b/dev/devicelab/bin/tasks/web_benchmarks_html.dart @@ -10,7 +10,8 @@ Future main() async { await task(() async { return runWebBenchmark(( webRenderer: 'html', - useWasm: false + useWasm: false, + forceSingleThreadedSkwasm: false, )); }); } diff --git a/dev/devicelab/bin/tasks/web_benchmarks_skwasm.dart b/dev/devicelab/bin/tasks/web_benchmarks_skwasm.dart index 256634a50b..f729c6d48a 100644 --- a/dev/devicelab/bin/tasks/web_benchmarks_skwasm.dart +++ b/dev/devicelab/bin/tasks/web_benchmarks_skwasm.dart @@ -10,7 +10,8 @@ Future main() async { await task(() async { return runWebBenchmark(( webRenderer: 'skwasm', - useWasm: true + useWasm: true, + forceSingleThreadedSkwasm: false, )); }); } diff --git a/dev/devicelab/bin/tasks/web_benchmarks_skwasm_st.dart b/dev/devicelab/bin/tasks/web_benchmarks_skwasm_st.dart new file mode 100644 index 0000000000..71698683ed --- /dev/null +++ b/dev/devicelab/bin/tasks/web_benchmarks_skwasm_st.dart @@ -0,0 +1,17 @@ +// 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/framework.dart'; +import 'package:flutter_devicelab/tasks/web_benchmarks.dart'; + +/// Runs all Web benchmarks using the Skwasm rendering backend. +Future main() async { + await task(() async { + return runWebBenchmark(( + webRenderer: 'skwasm', + useWasm: true, + forceSingleThreadedSkwasm: true, + )); + }); +} diff --git a/dev/devicelab/lib/tasks/web_benchmarks.dart b/dev/devicelab/lib/tasks/web_benchmarks.dart index 201b5c8359..575461cc86 100644 --- a/dev/devicelab/lib/tasks/web_benchmarks.dart +++ b/dev/devicelab/lib/tasks/web_benchmarks.dart @@ -23,6 +23,7 @@ const int chromeDebugPort = 10000; typedef WebBenchmarkOptions = ({ String webRenderer, bool useWasm, + bool forceSingleThreadedSkwasm, }); Future runWebBenchmark(WebBenchmarkOptions benchmarkOptions) async { @@ -142,8 +143,9 @@ Future runWebBenchmark(WebBenchmarkOptions benchmarkOptions) async { final bool isUncalibratedSmokeTest = io.Platform.environment['CALIBRATED'] != 'true'; // final bool isUncalibratedSmokeTest = // io.Platform.environment['UNCALIBRATED_SMOKE_TEST'] == 'true'; + final String urlParams = benchmarkOptions.forceSingleThreadedSkwasm ? '?force_st=true' : ''; final ChromeOptions options = ChromeOptions( - url: 'http://localhost:$benchmarkServerPort/index.html', + url: 'http://localhost:$benchmarkServerPort/index.html$urlParams', userDataDirectory: userDataDir, headless: isUncalibratedSmokeTest, debugPort: chromeDebugPort, @@ -171,7 +173,13 @@ Future runWebBenchmark(WebBenchmarkOptions benchmarkOptions) async { throw 'Benchmark name is empty'; } - final String namespace = '$benchmarkName.${benchmarkOptions.webRenderer}'; + final String webRendererName; + if (benchmarkOptions.useWasm && benchmarkOptions.forceSingleThreadedSkwasm) { + webRendererName = 'skwasm_st'; + } else { + webRendererName = benchmarkOptions.webRenderer; + } + final String namespace = '$benchmarkName.$webRendererName'; final List scoreKeys = List.from(profile['scoreKeys'] as List); if (scoreKeys.isEmpty) { throw 'No score keys in benchmark "$benchmarkName"';