Repository navigation
Add benchmark for warmed pipeline usage - #195001
Conversation
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request enhances Impeller pipeline warmup metrics reporting by tracking whether pipelines were created eagerly (warmed) or lazily, along with their specialization constants and usage counts. It updates the PipelineLibrary to store this detailed usage, exposes it via the _flutter.getPipelineUsage service protocol, and integrates these metrics into the Devicelab performance tests and transition benchmarks. Feedback on the changes suggests catching all Object types instead of just Exception in the Dart performance test driver to robustly handle potential TypeError or other non-Exception errors during JSON parsing.
There was a problem hiding this comment.
Code Review
This pull request refactors Impeller's pipeline tracking to record both execution counts and whether a pipeline was eagerly created (warmed). It updates the _flutter.getPipelineUsage service protocol to return detailed pipeline metadata, including labels, specialization constants, counts, and warmup status. Additionally, it integrates these warmup metrics into the Devicelab performance tests and the Flutter Gallery transition benchmarks, and adds corresponding unit and integration tests. No review comments were provided.
gaaclarke
left a comment
There was a problem hiding this comment.
noice, just needs a bit of shuffling and organization
| if (std::optional<PipelineDescriptor> desc = pipeline->GetDescriptor()) { | ||
| context.GetPipelineLibrary()->LogPipelineCreation(*desc); | ||
| } |
There was a problem hiding this comment.
Instead of calling this here, can we do it at a higher level and only do it in non-release builds? I want to try to reduce the amount that logging invades essential logic.
There was a problem hiding this comment.
LogPipelineCreation is a noop in release builds
.We could keep the logic where it is, but ClipPipeline will be missed in the logging because it uses SetDefault directly. We would have to add a manual LogPipeline call there.
I could rework things to have ClipPipeline go through the same entrypoint as everything else, but I'd probably want to do that in a follow-on PR rather than here.
There was a problem hiding this comment.
Okay, let's just pass in the pipeline library instead of the context then. Let's give the function the minimal it needs to function.
| #if FLUTTER_RUNTIME_MODE == FLUTTER_RUNTIME_MODE_DEBUG || \ | ||
| FLUTTER_RUNTIME_MODE == FLUTTER_RUNTIME_MODE_PROFILE | ||
| mutable RWMutex pipeline_use_counts_mutex_; | ||
| mutable RWMutex pipeline_usage_mutex_; |
There was a problem hiding this comment.
Remind me why we needed a readwrite mutex on this? Could we have just executed things on the raster thread instead?
There was a problem hiding this comment.
The logging should always happen on the raster thread, but the calls to GetPipelineUseCounts happens on the I/O thread.
gaaclarke
left a comment
There was a problem hiding this comment.
Looking good, one more request to improve encapsulation
| if (std::optional<PipelineDescriptor> desc = pipeline->GetDescriptor()) { | ||
| context.GetPipelineLibrary()->LogPipelineCreation(*desc); | ||
| } |
There was a problem hiding this comment.
Okay, let's just pass in the pipeline library instead of the context then. Let's give the function the minimal it needs to function.
|
@gaaclarke updated because of clang-tidy failure |
gaaclarke
left a comment
There was a problem hiding this comment.
tidy, you could eat off of this pr
flutter/flutter@d4c8577...0c2473c 2026-10-28 [email protected] Roll Packages from a8549ae to 13d38e0 (9 revisions) (flutter/flutter#195488) 2026-10-28 [email protected] Use int.oneBitCount in PersistentHashMap and scope 53-bit caps to JS (flutter/flutter#195005) 2026-10-28 [email protected] Roll pub packages (flutter/flutter#195483) 2026-10-28 [email protected] [iPhone Duo] Use the correct UIScreen to report the display size and update when fold/unfold (flutter/flutter#195199) 2026-10-28 [email protected] [fuchsia] Fix portable_ui_test.h includes for newer Fuchsia SDKs (flutter/flutter#195420) 2026-10-28 [email protected] Change default pipeline options to match production draw calls (flutter/flutter#194597) 2026-10-28 [email protected] Roll Fuchsia Test Scripts from 2T18KC7-LDQtmQiLP... to xl1LWBuppzu-BnOzV... (flutter/flutter#195450) 2026-10-27 [email protected] [flutter_tools] Inject dependencies into Darwin build targets, native assets, and Xcode build settings (flutter/flutter#194052) 2026-10-27 [email protected] Revert: Reland square corners fix (flutter/flutter#195436) 2026-10-27 [email protected] [flutter_tools] Add DeviceService app launch and flutter run support for tool extensions (flutter/flutter#194589) 2026-10-27 [email protected] [engine] Honor targetWidth/targetHeight for animated images (flutter/flutter#194615) 2026-10-27 [email protected] [Android][a11y] Set visibleToUser=false for hidden semantics nodes (flutter/flutter#194411) 2026-10-27 [email protected] Fix repo deletion test flake (flutter/flutter#195349) 2026-10-27 [email protected] Roll Packages from 23a05b6 to a8549ae (10 revisions) (flutter/flutter#195434) 2026-10-27 [email protected] [web] Capture pointers to the Flutter view so drags survive platform view iframes (flutter/flutter#195187) 2026-10-27 [email protected] [web] Add opt-in raw samples, measured sample count and warm-up phase hook to the web benchmark recorder (flutter/flutter#195118) 2026-10-27 [email protected] Link migration guide in deprecation messages (flutter/flutter#195361) 2026-10-27 [email protected] Pin basic_material_app_macos__compile to macOS 26 (flutter/flutter#195429) 2026-10-27 [email protected] Add benchmark for warmed pipeline usage (flutter/flutter#195001) 2026-10-27 [email protected] [flutter_tools] Add device log streaming support to DeviceService and ExtensionBackedDevice (flutter/flutter#194964) 2026-10-27 [email protected] Roll Dart SDK from 1d16c04dc346 to 65fc979759ca (4 revisions) (flutter/flutter#195383) 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 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Adds Impeller shader-warmup coverage metrics to the existing new_gallery benchmarks using the existing pipeline_variant_recorder. Also fixes a bug in the recorder that prevented the ClipPipeline from being properly logged ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant in-code documentation (doc comments with `///`). - [x] If this PR introduces a new feature or capability, I created and linked a website documentation issue or PR in [flutter/website] (or verified none is needed). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing.
Adds Impeller shader-warmup coverage metrics to the existing new_gallery benchmarks using the existing pipeline_variant_recorder.
Also fixes a bug in the recorder that prevented the ClipPipeline from being properly logged
Pre-launch Checklist
///).