[Impeller] Optimize scale translate rectangle transforms#176123
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces an optimization for transforming rectangles with scale-translate matrices. It adds a Type enum and Classify/Classify2D methods to impeller::Matrix to identify matrix complexity. A new method, TransformBoundsTranslateScale2D, is added to impeller::TRect to provide a fast path for scale-translate transforms, and this is now used by TransformBounds and TransformAndClipBounds. The changes also include new benchmarks to measure the performance improvement and a unit test to verify the correctness of the new transform method. My review includes a critical comment about a potential compilation issue when using this optimization with integer-based rectangles (IRect) and a couple of medium-severity comments regarding C++ style guide adherence.
Roll Flutter from 6cc976e to 96fe3b3 (32 revisions) flutter/flutter@6cc976e...96fe3b3 2025-09-29 [email protected] Roll Packages from 389c678 to 34eec78 (6 revisions) (flutter/flutter#176205) 2025-09-29 [email protected] Roll Skia from 9b2b942d1eb1 to bb3b6bd4be0d (4 revisions) (flutter/flutter#176201) 2025-09-29 [email protected] [ Widget Preview ] Improve IDE integration support (flutter/flutter#176114) 2025-09-29 [email protected] Fix name of driver file (flutter/flutter#176186) 2025-09-29 [email protected] Roll Skia from beb673968802 to 9b2b942d1eb1 (3 revisions) (flutter/flutter#176190) 2025-09-28 [email protected] Roll Fuchsia Linux SDK from 0Z45OXT_Wb8aWI3a0... to 8zjcJic_DtvB2Bo2x... (flutter/flutter#176158) 2025-09-28 [email protected] Revert "[Impeller] Optimize scale translate rectangle transforms" (flutter/flutter#176161) 2025-09-27 [email protected] Roll Skia from 2e5da5c0a9cd to beb673968802 (1 revision) (flutter/flutter#176145) 2025-09-27 [email protected] [Impeller] Optimize scale translate rectangle transforms (flutter/flutter#176123) 2025-09-27 [email protected] Roll Skia from d8422aaf8f89 to 2e5da5c0a9cd (2 revisions) (flutter/flutter#176141) 2025-09-27 [email protected] [web] Remove mention of non-existent `canvaskit_lock.yaml` (flutter/flutter#176108) 2025-09-27 [email protected] Roll Skia from 96b73f61fe61 to d8422aaf8f89 (2 revisions) (flutter/flutter#176118) 2025-09-27 [email protected] [a11y] Add `expanded` flag support to Android. (flutter/flutter#174981) 2025-09-26 [email protected] Make sure that a DesktopTextSelectionToolbar doesn't crash in 0x0 env… (flutter/flutter#173928) 2025-09-26 [email protected] Roll Dart SDK from 899c7340cc4c to af31d2637b6b (11 revisions) (flutter/flutter#176056) 2025-09-26 [email protected] Update java version ranges with the top end limitation for java pre 17 (flutter/flutter#176049) 2025-09-26 [email protected] Add warn java evaluation to android_workflow (flutter/flutter#176097) 2025-09-26 [email protected] Removes type annotations in templates (flutter/flutter#176106) 2025-09-26 [email protected] Marks Linux_pixel_7pro static_path_stroke_tessellation_perf__timeline_summary to be unflaky (flutter/flutter#175917) 2025-09-26 [email protected] Add kotlin/kgp 2.2.* evaluation criteria. (flutter/flutter#176094) 2025-09-26 [email protected] Migrate to `WidgetStateMouseCursor` (flutter/flutter#175981) 2025-09-26 [email protected] Roll Packages from 117bf63 to 389c678 (4 revisions) (flutter/flutter#176092) 2025-09-26 [email protected] Fix link to .gclient setup instructions (flutter/flutter#176046) 2025-09-26 [email protected] Implement Regular Windows for the win32 framework + add an example application for regular windows (flutter/flutter#173715) 2025-09-26 [email protected] Roll Skia from 5d99c3fc7c83 to 96b73f61fe61 (3 revisions) (flutter/flutter#176075) 2025-09-26 [email protected] Roll Fuchsia Linux SDK from naeytagBIBEpKgZNZ... to 0Z45OXT_Wb8aWI3a0... (flutter/flutter#176068) 2025-09-26 [email protected] Add itemClipBehavior property for CarouselView's children (flutter/flutter#175324) 2025-09-26 [email protected] Roll Skia from 55436d87e414 to 5d99c3fc7c83 (4 revisions) (flutter/flutter#176060) 2025-09-26 [email protected] Revert "[Impeller] Optimize scale translate rectangle transforms" (flutter/flutter#176061) 2025-09-25 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Reapply "Update the AccessibilityPlugin::Announce method to account f… (#174365)" (flutter/flutter#176059) 2025-09-25 [email protected] Make sure that a CupertinoDesktopTextSelectionToolbarButton doesn't c… (flutter/flutter#173894) 2025-09-25 [email protected] Improve code quality in `SensitiveContentPluginTest.java` (flutter/flutter#175721) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC [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 ...
) Taken partially from flutter#170446 with only the changes to add a ScaleTranslate rectangle transform method brought over. Unlike the original PR, this PR will apply that optimized method for any caller who transforms a rectangle rather than just the matrix/clip tracker for the engine layer tree code. A benchmark for the new methods is also provided to verify their improved performance.
Taken partially from #170446 with only the changes to add a ScaleTranslate rectangle transform method brought over. Unlike the original PR, this PR will apply that optimized method for any caller who transforms a rectangle rather than just the matrix/clip tracker for the engine layer tree code.
A benchmark for the new methods is also provided to verify their improved performance.