Repository navigation
[flutter_tools] Handle RPCError in ScreenshotCommand.runSkia - #196132
Merged
Merged
Conversation
Previously, running `flutter screenshot --type=skia` against an application with Impeller enabled crashed with an unhandled `vm_service.RPCError` (`-32000`) because the engine rejects `_flutter.screenshotSkp` requests under Impeller and `ScreenshotCommand.runSkia` did not catch `RPCError`. Catch `vm_service.RPCError` in `ScreenshotCommand.runSkia` and exit cleanly via `throwToolExit` with the engine's error message. Previous output: ``` _flutter.screenshotSkp: (-32000) Cannot capture SKP screenshot with Impeller enabled. #0 new _OutstandingRequest (package:vm_service/src/vm_service.dart:280:34) #1 VmService._call.<anonymous closure> (package:vm_service/src/vm_service.dart:1962:25) #2 VmService._call (package:vm_service/src/vm_service.dart:1974:8) #3 VmService.callServiceExtension (package:vm_service/src/vm_service.dart:1905:14) #4 FlutterVmService._checkedCallServiceExtension (package:flutter_tools/src/vmservice.dart:835:28) #5 FlutterVmService.screenshotSkp (package:flutter_tools/src/vmservice.dart:1069:12) #6 ScreenshotCommand.runSkia (package:flutter_tools/src/commands/screenshot.dart:167:54) <asynchronous suspension> flutter#7 ScreenshotCommand.runCommand (package:flutter_tools/src/commands/screenshot.dart:123:19) <asynchronous suspension> flutter#8 FlutterCommand.run.<anonymous closure> (package:flutter_tools/src/runner/flutter_command.dart:876:27) <asynchronous suspension> flutter#9 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#10 CommandRunner.runCommand (package:args/command_runner.dart:212:13) <asynchronous suspension> flutter#11 FlutterCommandRunner.runCommand.<anonymous closure> (package:flutter_tools/src/runner/flutter_command_runner.dart:689:9) <asynchronous suspension> flutter#12 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#13 FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:619:5) <asynchronous suspension> flutter#14 FlutterCommandRunner.run (package:flutter_tools/src/runner/flutter_command_runner.dart:379:5) <asynchronous suspension> flutter#15 run.<anonymous closure>.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:flutter_tools/runner.dart:419:19) <asynchronous suspension> flutter#16 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#17 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#18 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#19 main (package:flutter_tools/executable.dart:133:3) <asynchronous suspension> Feature flags enabled: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, enable-record-use, enable-swift-package-manager, omit-legacy-version-file, enable-lldb-debugging, enable-uiscene-migration, enable-riscv64, enable-hcpp ``` Current output: ``` The Skia picture request failed: Cannot capture SKP screenshot with Impeller enabled. ``` Fixes flutter#196119
bkonyi
marked this pull request as ready for review
November 11, 2026 21:00
Contributor
There was a problem hiding this comment.
Code Review
This pull request handles RPCError exceptions during Skia picture screenshot requests by throwing a ToolExit with a descriptive message, and adds a new integration test suite to verify screenshot behavior under Impeller and software rendering. The review feedback suggests improving the integration test's process lifecycle management by registering the teardown immediately after starting the process and handling unexpected early exits to prevent process leaks.
11 of 12 tasks
Update `screenshot_test.dart` to write its synthetic package configuration via `writePackageConfigFiles`, resolve local engine paths via `LocalEngineLocator` and `getLocalEngineArguments()` with a normalized absolute `flutterBin` path, and register `flutter_tester` teardown immediately after process startup with early-exit reporting. Previous output: ``` _flutter.screenshotSkp: (-32000) Cannot capture SKP screenshot with Impeller enabled. #0 new _OutstandingRequest (package:vm_service/src/vm_service.dart:280:34) #1 VmService._call.<anonymous closure> (package:vm_service/src/vm_service.dart:1962:25) #2 VmService._call (package:vm_service/src/vm_service.dart:1974:8) #3 VmService.callServiceExtension (package:vm_service/src/vm_service.dart:1905:14) #4 FlutterVmService._checkedCallServiceExtension (package:flutter_tools/src/vmservice.dart:835:28) #5 FlutterVmService.screenshotSkp (package:flutter_tools/src/vmservice.dart:1069:12) #6 ScreenshotCommand.runSkia (package:flutter_tools/src/commands/screenshot.dart:167:54) <asynchronous suspension> flutter#7 ScreenshotCommand.runCommand (package:flutter_tools/src/commands/screenshot.dart:123:19) <asynchronous suspension> flutter#8 FlutterCommand.run.<anonymous closure> (package:flutter_tools/src/runner/flutter_command.dart:876:27) <asynchronous suspension> flutter#9 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#10 CommandRunner.runCommand (package:args/command_runner.dart:212:13) <asynchronous suspension> flutter#11 FlutterCommandRunner.runCommand.<anonymous closure> (package:flutter_tools/src/runner/flutter_command_runner.dart:689:9) <asynchronous suspension> flutter#12 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#13 FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:619:5) <asynchronous suspension> flutter#14 FlutterCommandRunner.run (package:flutter_tools/src/runner/flutter_command_runner.dart:379:5) <asynchronous suspension> flutter#15 run.<anonymous closure>.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:flutter_tools/runner.dart:419:19) <asynchronous suspension> flutter#16 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#17 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#18 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:174:19) <asynchronous suspension> flutter#19 main (package:flutter_tools/executable.dart:133:3) <asynchronous suspension> Feature flags enabled: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, enable-record-use, enable-swift-package-manager, omit-legacy-version-file, enable-lldb-debugging, enable-uiscene-migration, enable-riscv64, enable-hcpp ``` Current output: ``` The Skia picture request failed: Cannot capture SKP screenshot with Impeller enabled. ``` Fixes flutter#196119
chingjun
approved these changes
Nov 13, 2026
This was referenced Nov 13, 2026
auto-submit Bot
pushed a commit
to flutter/packages
that referenced
this pull request
Nov 13, 2026
…13653) Manual roll Flutter from 9c427b5d7b1c to 1b9585481095 (32 revisions) Manual roll requested by [email protected] flutter/flutter@9c427b5...1b95854 2026-11-13 [email protected] Roll pub packages (flutter/flutter#196541) 2026-11-13 [email protected] Do not route PRs for review without cla, convert to draft (flutter/flutter#196341) 2026-11-13 [email protected] Roll Skia from d87a6c04da74 to 11f46cfe8838 (13 revisions) (flutter/flutter#196533) 2026-11-13 [email protected] [flutter_tools, flutter_test] Deprecate --experimental-faster-testing (flutter/flutter#196123) 2026-11-13 [email protected] [flutter_tools] Handle RPCError in ScreenshotCommand.runSkia (flutter/flutter#196132) 2026-11-13 [email protected] Roll Dart SDK from a8b961fd48bb to c91e8b6674e2 (2 revisions) (flutter/flutter#196502) 2026-11-13 [email protected] Roll Skia from 0c5ce4960cef to d87a6c04da74 (12 revisions) (flutter/flutter#196497) 2026-11-13 [email protected] Don't call `skia_image()` for raster-owned images in `DlImage::Equals` (flutter/flutter#196473) 2026-11-13 [email protected] [flutter_tools] Require FlutterCommandRunner DI fields and extract findCommandName (flutter/flutter#196331) 2026-11-13 [email protected] [web] Unify ui.Canvas behind a shared EngineCanvas frontend (flutter/flutter#196348) 2026-11-13 [email protected] Link to MediaQuery.displayFeaturesOf from DisplayFeatures (flutter/flutter#193728) 2026-11-13 [email protected] Removes reference to unnecessary ensureSemantics call in doc (flutter/flutter#195831) 2026-11-13 [email protected] [flutter_tools] Register trackWidgetCreation in AppleBuildOptionsBundle (flutter/flutter#196078) 2026-11-12 [email protected] [Android] Skip the HardwareBuffer defect fallback for platform views (flutter/flutter#193441) 2026-11-12 [email protected] Fix supports_decal check in framebuffer_blend.frag (flutter/flutter#196227) 2026-11-12 [email protected] [ios] Update the screen in didUpdateEffectiveGeometry (flutter/flutter#195508) 2026-11-12 [email protected] [flutter_tools] Add `Cache-Control` headers for web test assets (flutter/flutter#196414) 2026-11-12 [email protected] Roll Skia from 3b71ec08218f to 0c5ce4960cef (16 revisions) (flutter/flutter#196472) 2026-11-12 [email protected] [web] Render bounded ImageFilter.blur on wimp (flutter/flutter#196081) 2026-11-12 [email protected] Roll Dart SDK from 69567bd3c427 to a8b961fd48bb (2 revisions) (flutter/flutter#196464) 2026-11-12 [email protected] [engine] Release the Skia OpenGL resource context on shutdown (flutter/flutter#193592) 2026-11-12 [email protected] [web] Fix decoding of still AVIF images on Chrome (flutter/flutter#195958) 2026-11-12 [email protected] Gate SurfaceControl context setting on API 34+ (flutter/flutter#196394) 2026-11-12 [email protected] [flutter_tools] Only pass on a valid root tool in DASH__TOOL (flutter/flutter#196228) 2026-11-12 [email protected] Support GL_TEXTURE_EXTERNAL_OES embedder textures in Impeller (flutter/flutter#195857) 2026-11-12 [email protected] Stop building linux/wasm_release in local_engine_builds (flutter/flutter#196345) 2026-11-12 [email protected] Split flame out of Linux customer_testing (flutter/flutter#196347) 2026-11-12 Jiwon Lee [Windows] Fix Space input after Alt+Space with previous Microsoft IME (flutter/flutter#192105) 2026-11-12 [email protected] [flutter_tools] Add ToolExtensionException, exit() guard, graceful shutdown, and base modifiers (flutter/flutter#195908) 2026-11-12 [email protected] Roll Packages from 653628e to 14f9933 (9 revisions) (flutter/flutter#196450) 2026-11-12 [email protected] Roll Dart SDK from e5add7a25b32 to 69567bd3c427 (2 revisions) (flutter/flutter#196437) 2026-11-12 [email protected] Roll Skia from 9aa2513a4ac9 to 3b71ec08218f (1 revision) (flutter/flutter#196436) If this roll has caused a breakage, revert this CL and set the roller to dry run mode using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 ...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Previously, running
flutter screenshot --type=skiaagainst an application with Impeller enabled crashed with an unhandledvm_service.RPCError(-32000) because the engine rejects_flutter.screenshotSkprequests under Impeller andScreenshotCommand.runSkiadid not catchRPCError. Catchvm_service.RPCErrorinScreenshotCommand.runSkiaand exit cleanly viathrowToolExitwith the engine's error message.Previous output:
Current output:
Fixes #196119