From bd9cdb001a445b9034dc264107a988e03e832f8f Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Mon, 13 Mar 2023 10:57:15 -0700 Subject: [PATCH] Squashed commit of the following: commit db8dfbe57f41814233fdca0a72727e5e5be97842 Author: jonahwilliams Date: Mon Mar 13 10:44:36 2023 -0700 update malioc diff commit 0877a537cb29a3f62eb697c6df17a86783d14cf8 Merge: 04e8d806b4 7c5a9d5e7e Author: jonahwilliams Date: Mon Mar 13 10:40:07 2023 -0700 Merge branch 'master' of github.com:flutter/engine into uv_computation commit 7c5a9d5e7e7a1ed0b8457a8eba082f7474426813 Author: Jackson Gardner Date: Mon Mar 13 09:54:22 2023 -0700 Use plain Uint32List objects with the fragmenter APIs. (#40239) Use plain Uint32List objects with the fragmenter APIs. commit 04e8d806b4187396d290074acbe3b0ed85d5943d Author: jonahwilliams Date: Mon Mar 13 09:50:23 2023 -0700 fix double divide and add test commit 9b42cbc5ff06f271a7e3d87fb5f1498fac5cf3ac Author: jonahwilliams Date: Mon Mar 13 09:32:48 2023 -0700 [impeller] implement GetPositionUVBuffer commit 3d545ad93eaa700ae94608518bb23525b834b60d Author: Dan Field Date: Mon Mar 13 09:22:28 2023 -0700 [Impeller][Compute] Fix visual issues with heart (#40240) commit 650c6e3ad8c9f6597007684e87fd999a4ea39dda Author: Zachary Anderson Date: Mon Mar 13 08:45:38 2023 -0700 Revert "[Impeller] More sundry fixes to the Vulkan backend. (#40244)" (#40247) Revert "[Impeller] More sundry fixes to the Vulkan backend." commit 3ac895ee38b8f188e1a8da06abd357eba9f9ba7c Author: Jonah Williams Date: Mon Mar 13 08:42:13 2023 -0700 [Impeller] support for foreground shaders on text (#40193) [Impeller] support for foreground shaders on text commit bb1ca8f1e659b329bff1ebe19dadfd91a2fa6e05 Author: Lasse R.H. Nielsen Date: Mon Mar 13 13:43:04 2023 +0100 Change `extends Iterator` to using `implements` (#40175) The Dart 3.0 libraries will mark Iterator with the interface class modifier, which prevents extends. It will do so because the class has no implementation to inherit, and is only intended as an interface, which it is now possible to express. This should unblock relanding https://dart-review.googlesource.com/c/sdk/+/287760 (Also working on disabling the class-modifiers experiment for Flutter dart: libraries, which was enabled along with the Dart SDK libraries, until the experiment can be intentionally turned back on.) commit 24afaf9eb60f177e29300ea09c70b8a525917a46 Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon Mar 13 09:44:31 2023 +0000 Bump github/codeql-action from 2.2.5 to 2.2.6 (#40246) Bump github/codeql-action from 2.2.5 to 2.2.6 commit ae979a854eed6f645e6e057b89cde35ae28d6887 Author: Chinmay Garde Date: Sun Mar 12 23:49:22 2023 -0700 [Impeller] More sundry fixes to the Vulkan backend. (#40244) [Impeller] More sundry fixes to the Vulkan backend. commit 57f7120ef923a2806e2406319f0c35dc3619508b Author: Zachary Anderson Date: Sat Mar 11 19:38:43 2023 -0800 Add GN arguments that disable building host artifacts (#40242) commit 04e8d5431203fc8d5000bafa21e14e179c43b06b Author: Chris Bracken Date: Sat Mar 11 12:49:59 2023 -0800 [macOS] Forward mouseDown/Up to view controller (#40241) This works around an AppKit bug in which mouseDown/mouseUp events are not correctly forwarded up the responder chain for views nested inside an NSPopover if (and only if) the macOS "Reduce Transparency" accessibility setting is enabled in the System Settings. When the above conditions are satisfied, the nested NSView receives the mouseDown:/mouseUp: call but if it delegates to the default implementation (implemented in NSResponder) mouseDown/mouseUp calls are triggered on containing views (in our case FlutterViewWrapper) but not triggered on the view controller and other responders in the responder chain until we an _NSPopoverWindow class is hit. A minimal AppKit-only (non-Flutter) repro shows this behaviour repros with even a minimal NSViewController implementation and an unmodified NSView. See: https://github.com/cbracken/PopoverRepro A radar has been filed with Apple and a copy posted to OpenRadar. See: http://www.openradar.me/FB12050037 In order to work around this bug, we override mouseDown/mouseUp in the topmost containing view of FlutterView (in our case, FlutterViewWrapper) to have the behaviour documented as the default behaviour in NSResponder's mouseDown/mouseUp documentation. In otherwords, to simply forward the call to self.nextResponder. See: https://developer.apple.com/documentation/appkit/nsresponder/1524634-mousedown Because replicating the exact configuration of a FlutterView contained in an NSPopover and System Settings that have been modified to enable the "Reduce Transparency" setting is difficult and likely error-prone in infra, we instead simulate the bug by testing that even if NSResponder's mouseDown/mouseUp method are swizzled to no-op, these calls are correctly forwarded to the next responder in the chain. If, in the future Apple does fix this issue, this workaround can be removed once Flutter's minimum supported macOS SDK is at least the version that contains the fix. Issue: https://github.com/flutter/flutter/issues/115015 commit c7894a662ae10b3a203c2c608aa5f5529478e3af Author: Dan Field Date: Fri Mar 10 16:39:04 2023 -0800 Make the context current before accessing GL in MakeSkiaGpuImage (#40208) Make the context current before accessing GL in MakeSkiaGpuImage commit 7f250234104ae74bd36115780d5fca012d15ee6c Author: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com> Date: Fri Mar 10 15:42:18 2023 -0800 Revert "Make FlutterTest the default test font (#40188)" (#40237) This reverts commit 9270e3de510eaee878920ffb0542fc78d2cdc9aa. commit 12f2fdff743a56ced0557c042c29d617af398873 Author: Yegor Date: Fri Mar 10 14:46:06 2023 -0800 Revert "[web] Access engine version to get correct gstatic URL (#40194)" (#40235) This reverts commit 161f75931834b79ec9f700046c4d3fe748a7a60b. commit 3018843dc50c2b778ebbec19991735393e83411f Author: skia-flutter-autoroll Date: Fri Mar 10 17:44:48 2023 -0500 Manual roll Dart SDK from 7240b35cc401 to c766fffb626e (9 revisions) (#40233) Manual roll requested by asiva@google.com https://dart.googlesource.com/sdk.git/+log/7240b35cc401..c766fffb626e 2023-03-10 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.0.0-322.0.dev 2023-03-10 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.0.0-321.0.dev 2023-03-10 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.0.0-320.0.dev 2023-03-10 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.0.0-319.0.dev 2023-03-09 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.0.0-318.0.dev 2023-03-09 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.0.0-317.0.dev 2023-03-09 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.0.0-316.0.dev 2023-03-09 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.0.0-315.0.dev 2023-03-09 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com Version 3.0.0-314.0.dev If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/dart-sdk-flutter-engine Please CC aam@google.com,asiva@google.com,dart-vm-team@google.com,jimgraham@google.com,rmistry@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Flutter Engine: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md commit 220e867d787668123b9938eda1d1a44f203946c1 Author: Zachary Anderson Date: Fri Mar 10 14:38:58 2023 -0800 Roll buildroot to 287917d342224d34d6fbdf863aee8417a5f2e8b8 (#40232) To pick up https://github.com/flutter/buildroot/pull/691 commit c99baf29c33d5bebbea51b13e6d0431b1222aa99 Author: Jim Graham Date: Fri Mar 10 14:32:52 2023 -0800 Roll Fuchsia Linux SDK to 12.20230309.0.1 (#40231) Roll Fuchsia Linux SDK to 12.20230309.0.1 commit 3b07c4c29c72b0c00d6690a1c1c026f37efe34b2 Author: Jonah Williams Date: Fri Mar 10 14:24:45 2023 -0800 [Impeller] remove unused shader, format malioc diff (#40230) [Impeller] remove unused shader, format malioc diff --- .github/workflows/scorecards-analysis.yml | 2 +- .github/workflows/third_party_scan.yml | 2 +- DEPS | 18 +- ci/licenses_golden/excluded_files | 1 - ci/licenses_golden/licenses_flutter | 11 +- ci/licenses_golden/licenses_fuchsia | 2 +- ci/licenses_golden/licenses_third_party | 2 +- common/config.gni | 8 +- impeller/aiks/canvas.cc | 31 +- .../display_list/display_list_unittests.cc | 19 + impeller/entity/BUILD.gn | 3 +- .../entity/contents/color_source_contents.h | 4 +- .../contents/color_source_text_contents.cc | 84 + .../contents/color_source_text_contents.h | 48 + impeller/entity/contents/content_context.cc | 2 - impeller/entity/contents/content_context.h | 9 - impeller/entity/contents/text_contents.cc | 17 +- impeller/entity/contents/text_contents.h | 3 + .../entity/contents/tiled_texture_contents.cc | 145 +- .../entity/contents/tiled_texture_contents.h | 4 - impeller/entity/contents/vertices_contents.cc | 1 - impeller/entity/entity_unittests.cc | 22 + impeller/entity/geometry.cc | 192 +- impeller/entity/geometry.h | 46 +- impeller/entity/shaders/position.vert | 21 - .../entity/shaders/tiled_texture_fill.vert | 12 +- impeller/fixtures/cubic_to_quads.comp | 2 +- impeller/fixtures/golden_heart.h | 440 +- impeller/fixtures/stroke.comp | 9 +- impeller/geometry/geometry_unittests.cc | 7 + impeller/geometry/rect.h | 6 + .../renderer/compute_subgroup_unittests.cc | 10 +- impeller/renderer/vertex_buffer_builder.h | 6 + impeller/tools/malioc.json | 7428 ++++++++++++++++- impeller/tools/malioc_diff.py | 4 +- .../src/engine/canvaskit/canvaskit_api.dart | 12 +- .../lib/src/engine/canvaskit/fonts.dart | 9 +- .../src/engine/canvaskit/text_fragmenter.dart | 14 +- lib/web_ui/lib/src/engine/configuration.dart | 9 +- lib/web_ui/lib/src/engine/dom.dart | 4 +- .../lib/src/engine/text/font_collection.dart | 6 +- lib/web_ui/pubspec.yaml | 3 - .../canvaskit/skia_font_collection_test.dart | 9 - .../test/canvaskit/text_fragmenter_test.dart | 30 +- runtime/test_font_data.cc | 6 +- shell/common/BUILD.gn | 8 + shell/common/fixtures/shell_test.dart | 4 + shell/common/rasterizer.cc | 17 +- shell/common/shell_unittests.cc | 61 + .../framework/Source/FlutterViewController.mm | 28 + .../Source/FlutterViewControllerTest.mm | 75 + sky/packages/sky_engine/LICENSE | 1 + testing/dart/canvas_test.dart | 1 - testing/dart/paragraph_builder_test.dart | 19 +- third_party/web_sdk_version/BUILD.gn | 43 - .../web_sdk_version/lib/web_sdk_version.dart | 7 - .../lib/web_sdk_version/web_sdk_version.dart | 10 - third_party/web_sdk_version/pubspec.yaml | 6 - tools/gn | 33 +- web_sdk/BUILD.gn | 12 - web_sdk/libraries.json | 9 - web_sdk/libraries.yaml | 9 - web_sdk/sdk_rewriter.dart | 1 - web_sdk/test/sdk_rewriter_test.dart | 4 - 64 files changed, 8389 insertions(+), 682 deletions(-) create mode 100644 impeller/entity/contents/color_source_text_contents.cc create mode 100644 impeller/entity/contents/color_source_text_contents.h delete mode 100644 impeller/entity/shaders/position.vert delete mode 100644 third_party/web_sdk_version/BUILD.gn delete mode 100644 third_party/web_sdk_version/lib/web_sdk_version.dart delete mode 100644 third_party/web_sdk_version/lib/web_sdk_version/web_sdk_version.dart delete mode 100644 third_party/web_sdk_version/pubspec.yaml diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 818126d58b0a2..10a01d9900b27 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -65,6 +65,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@32dc499307d133bb5085bae78498c0ac2cf762d5 + uses: github/codeql-action/upload-sarif@16964e90ba004cdf0cd845b866b5df21038b7723 with: sarif_file: results.sarif diff --git a/.github/workflows/third_party_scan.yml b/.github/workflows/third_party_scan.yml index b93e79714b576..d8dd3c15a550c 100644 --- a/.github/workflows/third_party_scan.yml +++ b/.github/workflows/third_party_scan.yml @@ -51,6 +51,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@32dc499307d133bb5085bae78498c0ac2cf762d5 + uses: github/codeql-action/upload-sarif@16964e90ba004cdf0cd845b866b5df21038b7723 with: sarif_file: osvReport.sarif diff --git a/DEPS b/DEPS index 39c920f96e589..021b1f8f3309f 100644 --- a/DEPS +++ b/DEPS @@ -48,7 +48,7 @@ vars = { # Dart is: https://github.com/dart-lang/sdk/blob/main/DEPS # You can use //tools/dart/create_updated_flutter_deps.py to produce # updated revision list of existing dependencies. - 'dart_revision': '7240b35cc401ad8cf3107e83c04b055ef3cc895d', + 'dart_revision': 'c766fffb626ecac3be237703d4c68178f308e5f3', # WARNING: DO NOT EDIT MANUALLY # The lines between blank lines above and below are generated by a script. See create_updated_flutter_deps.py @@ -61,14 +61,14 @@ vars = { 'dart_devtools_rev': 'bf15e7348d53dc83531d503be94e0c035b604984', 'dart_libprotobuf_rev': '24487dd1045c7f3d64a21f38a3f0c06cc4cf2edb', 'dart_perfetto_rev': 'b8da07095979310818f0efde2ef3c69ea70d62c5', - 'dart_protobuf_gn_rev': '5f87ef9990fc4f4ffd76b3f5b0138562178db8bc', + 'dart_protobuf_gn_rev': 'f872f05cb0378eef9a7a2609076929f0f35b4141', 'dart_protobuf_rev': '75bc380a6e9601565606a13dee16c5ab2bf5019c', 'dart_pub_rev': '048e3ad2b5e1b4ebe6883addbc95722be6904a7b', 'dart_root_certificates_rev': '692f6d6488af68e0121317a9c2c9eb393eb0ee50', 'dart_watcher_rev': '5968409e1d73e21e75fc22a6481d5efaef7f3558', - 'dart_webdev_rev': 'c007560346a53728920362e5ccaa7eaae85301a7', + 'dart_webdev_rev': 'cfe97534b33d37c7e0bbac2a3576085f74f2eaa3', 'dart_webkit_inspection_protocol_rev': '8401098ace995e4dcd9855a2741c2dacccaa780b', - 'dart_yaml_edit_rev': '998eea2e4fc474a5e95cfea117e4233d35c3069b', + 'dart_yaml_edit_rev': '6abc42a74b76700ad02fa1c1ebd94951b62626b9', 'dart_zlib_rev': '27c2f474b71d0d20764f86f60ef8b00da1a16cda', 'ocmock_rev': 'c4ec0e3a7a9f56cfdbd0aa01f4f97bb4b75c5ef8', # v3.7.1 @@ -239,7 +239,7 @@ allowed_hosts = [ ] deps = { - 'src': 'https://github.com/flutter/buildroot.git' + '@' + 'a357fb6285af70772dbca8b164cd61af16cc8af1', + 'src': 'https://github.com/flutter/buildroot.git' + '@' + '287917d342224d34d6fbdf863aee8417a5f2e8b8', # Fuchsia compatibility # @@ -449,13 +449,13 @@ deps = { Var('dart_git') + '/term_glyph.git@d275a8f7482b6a5e4f15d0da6feb66c24f52eb94', 'src/third_party/dart/third_party/pkg/test': - Var('dart_git') + '/test.git@92da93a83615f2bc0483aa00e6a85c4f89d616e4', + Var('dart_git') + '/test.git@3ba78f15538399073d0b5aba4ec19b1378af1625', 'src/third_party/dart/third_party/pkg/test_reflective_loader': Var('dart_git') + '/test_reflective_loader.git@c4c2d5c3f94a96f3fc79e9e28944fba391bc544c', 'src/third_party/dart/third_party/pkg/tools': - Var('dart_git') + '/tools.git@a1c35060d920122ecbecb8c5a389b58ccbceb125', + Var('dart_git') + '/tools.git@bed358ea8ca10551c710282be96cf6e95620fb24', 'src/third_party/dart/third_party/pkg/typed_data': Var('dart_git') + '/typed_data.git@f858046fb420cf644e7d8cb86b7893f2830d8a6c', @@ -476,7 +476,7 @@ deps = { Var('dart_git') + '/external/github.com/google/webkit_inspection_protocol.dart.git' + '@' + Var('dart_webkit_inspection_protocol_rev'), 'src/third_party/dart/third_party/pkg/yaml': - Var('dart_git') + '/yaml.git@a6d8781744d34c391368664b4c1e174f0433bbb6', + Var('dart_git') + '/yaml.git@0f80b12978f066b3547632dec4a273649138fae4', 'src/third_party/dart/third_party/pkg/yaml_edit': Var('dart_git') + '/yaml_edit.git' + '@' + Var('dart_yaml_edit_rev'), @@ -842,7 +842,7 @@ deps = { 'packages': [ { 'package': 'fuchsia/sdk/core/linux-amd64', - 'version': '2R3ybztMdyKjvEdPR-vchKcZhjxosgkdGCod1t8MApUC' + 'version': 'VFZ_BtgLOf7FaEr6XYKW1wXqPuy7nQFMxd3P6-d9XwgC' } ], 'condition': 'host_os == "linux" and not download_fuchsia_sdk', diff --git a/ci/licenses_golden/excluded_files b/ci/licenses_golden/excluded_files index 717861a002dd6..2d0dbbe4c1f55 100644 --- a/ci/licenses_golden/excluded_files +++ b/ci/licenses_golden/excluded_files @@ -408,7 +408,6 @@ ../../../flutter/third_party/web_locale_keymap/README.md ../../../flutter/third_party/web_locale_keymap/pubspec.yaml ../../../flutter/third_party/web_locale_keymap/test -../../../flutter/third_party/web_sdk_version/pubspec.yaml ../../../flutter/third_party/web_test_fonts/pubspec.yaml ../../../flutter/third_party/web_unicode/README.md ../../../flutter/third_party/web_unicode/pubspec.yaml diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 377e52850658f..fdb72da12350e 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -680,7 +680,6 @@ LIBRARY: engine LIBRARY: spring_animation LIBRARY: tonic LIBRARY: txt -LIBRARY: web_sdk_version LIBRARY: web_test_fonts LIBRARY: web_unicode ORIGIN: ../../../flutter/LICENSE @@ -1122,6 +1121,8 @@ ORIGIN: ../../../flutter/impeller/entity/contents/clip_contents.cc + ../../../fl ORIGIN: ../../../flutter/impeller/entity/contents/clip_contents.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/entity/contents/color_source_contents.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/entity/contents/color_source_contents.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/entity/contents/color_source_text_contents.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/impeller/entity/contents/color_source_text_contents.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/entity/contents/content_context.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/entity/contents/content_context.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/entity/contents/contents.cc + ../../../flutter/LICENSE @@ -1251,7 +1252,6 @@ ORIGIN: ../../../flutter/impeller/entity/shaders/linear_to_srgb_filter.frag + .. ORIGIN: ../../../flutter/impeller/entity/shaders/linear_to_srgb_filter.vert + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/entity/shaders/morphology_filter.frag + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/entity/shaders/morphology_filter.vert + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/impeller/entity/shaders/position.vert + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/entity/shaders/position_color.vert + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/entity/shaders/position_uv.vert + ../../../flutter/LICENSE ORIGIN: ../../../flutter/impeller/entity/shaders/radial_gradient_fill.frag + ../../../flutter/LICENSE @@ -3169,8 +3169,6 @@ ORIGIN: ../../../flutter/third_party/txt/src/txt/platform_fuchsia.cc + ../../../ ORIGIN: ../../../flutter/third_party/txt/src/txt/platform_linux.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/third_party/txt/src/txt/platform_mac.mm + ../../../flutter/LICENSE ORIGIN: ../../../flutter/third_party/txt/src/txt/platform_windows.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/third_party/web_sdk_version/lib/web_sdk_version.dart + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/third_party/web_sdk_version/lib/web_sdk_version/web_sdk_version.dart + ../../../flutter/LICENSE ORIGIN: ../../../flutter/third_party/web_test_fonts/lib/web_test_fonts.dart + ../../../flutter/LICENSE ORIGIN: ../../../flutter/third_party/web_test_fonts/lib/web_test_fonts/web_test_fonts.dart + ../../../flutter/LICENSE ORIGIN: ../../../flutter/third_party/web_unicode/lib/web_unicode.dart + ../../../flutter/LICENSE @@ -3652,6 +3650,8 @@ FILE: ../../../flutter/impeller/entity/contents/clip_contents.cc FILE: ../../../flutter/impeller/entity/contents/clip_contents.h FILE: ../../../flutter/impeller/entity/contents/color_source_contents.cc FILE: ../../../flutter/impeller/entity/contents/color_source_contents.h +FILE: ../../../flutter/impeller/entity/contents/color_source_text_contents.cc +FILE: ../../../flutter/impeller/entity/contents/color_source_text_contents.h FILE: ../../../flutter/impeller/entity/contents/content_context.cc FILE: ../../../flutter/impeller/entity/contents/content_context.h FILE: ../../../flutter/impeller/entity/contents/contents.cc @@ -3781,7 +3781,6 @@ FILE: ../../../flutter/impeller/entity/shaders/linear_to_srgb_filter.frag FILE: ../../../flutter/impeller/entity/shaders/linear_to_srgb_filter.vert FILE: ../../../flutter/impeller/entity/shaders/morphology_filter.frag FILE: ../../../flutter/impeller/entity/shaders/morphology_filter.vert -FILE: ../../../flutter/impeller/entity/shaders/position.vert FILE: ../../../flutter/impeller/entity/shaders/position_color.vert FILE: ../../../flutter/impeller/entity/shaders/position_uv.vert FILE: ../../../flutter/impeller/entity/shaders/radial_gradient_fill.frag @@ -5720,8 +5719,6 @@ FILE: ../../../flutter/third_party/txt/src/txt/platform_fuchsia.cc FILE: ../../../flutter/third_party/txt/src/txt/platform_linux.cc FILE: ../../../flutter/third_party/txt/src/txt/platform_mac.mm FILE: ../../../flutter/third_party/txt/src/txt/platform_windows.cc -FILE: ../../../flutter/third_party/web_sdk_version/lib/web_sdk_version.dart -FILE: ../../../flutter/third_party/web_sdk_version/lib/web_sdk_version/web_sdk_version.dart FILE: ../../../flutter/third_party/web_test_fonts/lib/web_test_fonts.dart FILE: ../../../flutter/third_party/web_test_fonts/lib/web_test_fonts/web_test_fonts.dart FILE: ../../../flutter/third_party/web_unicode/lib/web_unicode.dart diff --git a/ci/licenses_golden/licenses_fuchsia b/ci/licenses_golden/licenses_fuchsia index 85e150581bcdf..081306f66cc24 100644 --- a/ci/licenses_golden/licenses_fuchsia +++ b/ci/licenses_golden/licenses_fuchsia @@ -1,4 +1,4 @@ -Signature: 3b439c79749ab1a71ef2b21c0b2018f1 +Signature: 943c8628754a36c980fd63c32c301539 ==================================================================================================== LIBRARY: fuchsia_sdk diff --git a/ci/licenses_golden/licenses_third_party b/ci/licenses_golden/licenses_third_party index 8b25e72097fff..94f0ab6c3d2a8 100644 --- a/ci/licenses_golden/licenses_third_party +++ b/ci/licenses_golden/licenses_third_party @@ -1,4 +1,4 @@ -Signature: 479841c56f2e6285f5971d095ed2306c +Signature: 2959cbbbe19ce6fbee5f838b9de1f204 ==================================================================================================== LIBRARY: angle diff --git a/common/config.gni b/common/config.gni index 48f78fbbc17c2..142701b8542ff 100644 --- a/common/config.gni +++ b/common/config.gni @@ -16,6 +16,9 @@ declare_args() { # Whether to use a prebuilt Dart SDK instead of building one. flutter_prebuilt_dart_sdk = false + + # Whether to build host-side development artifacts. + flutter_build_engine_artifacts = true } # feature_defines_list --------------------------------------------------------- @@ -122,5 +125,6 @@ if (flutter_prebuilt_dart_sdk) { # TODO: We can't build the engine artifacts for arm (32-bit) right now; # see https://github.com/flutter/flutter/issues/74322 build_engine_artifacts = - current_toolchain == host_toolchain || - (is_linux && !is_chromeos && current_cpu != "arm") || is_mac || is_win + flutter_build_engine_artifacts && + (current_toolchain == host_toolchain || + (is_linux && !is_chromeos && current_cpu != "arm") || is_mac || is_win) diff --git a/impeller/aiks/canvas.cc b/impeller/aiks/canvas.cc index e726dd75c5485..f8b15d8472fcc 100644 --- a/impeller/aiks/canvas.cc +++ b/impeller/aiks/canvas.cc @@ -12,6 +12,7 @@ #include "impeller/aiks/paint_pass_delegate.h" #include "impeller/entity/contents/atlas_contents.h" #include "impeller/entity/contents/clip_contents.h" +#include "impeller/entity/contents/color_source_text_contents.h" #include "impeller/entity/contents/rrect_shadow_contents.h" #include "impeller/entity/contents/text_contents.h" #include "impeller/entity/contents/texture_contents.h" @@ -398,16 +399,40 @@ void Canvas::DrawTextFrame(const TextFrame& text_frame, const Paint& paint) { lazy_glyph_atlas_->AddTextFrame(text_frame); + Entity entity; + entity.SetStencilDepth(GetStencilDepth()); + entity.SetBlendMode(paint.blend_mode); + auto text_contents = std::make_shared(); text_contents->SetTextFrame(text_frame); text_contents->SetGlyphAtlas(lazy_glyph_atlas_); + + if (paint.color_source.has_value()) { + auto& source = paint.color_source.value(); + auto color_text_contents = std::make_shared(); + entity.SetTransformation(GetCurrentTransformation()); + + Entity test; + auto cvg = text_contents->GetCoverage(test).value(); + color_text_contents->SetTextPosition(cvg.origin + position); + + text_contents->SetInverseMatrix( + Matrix::MakeTranslation(Vector3(-cvg.origin.x, -cvg.origin.y, 0))); + color_text_contents->SetTextContents(std::move(text_contents)); + color_text_contents->SetColorSourceContents(source()); + + entity.SetContents( + paint.WithFilters(std::move(color_text_contents), false)); + + GetCurrentPass().AddEntity(entity); + return; + } + text_contents->SetColor(paint.color); - Entity entity; entity.SetTransformation(GetCurrentTransformation() * Matrix::MakeTranslation(position)); - entity.SetStencilDepth(GetStencilDepth()); - entity.SetBlendMode(paint.blend_mode); + entity.SetContents(paint.WithFilters(std::move(text_contents), true)); GetCurrentPass().AddEntity(entity); diff --git a/impeller/display_list/display_list_unittests.cc b/impeller/display_list/display_list_unittests.cc index 0c5c9565b69f3..d214406eca2d2 100644 --- a/impeller/display_list/display_list_unittests.cc +++ b/impeller/display_list/display_list_unittests.cc @@ -57,6 +57,25 @@ TEST_P(DisplayListTest, CanDrawTextBlob) { ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); } +TEST_P(DisplayListTest, CanDrawTextBlobWithGradient) { + flutter::DisplayListBuilder builder; + + std::vector colors = {flutter::DlColor::kBlue(), + flutter::DlColor::kRed()}; + const float stops[2] = {0.0, 1.0}; + + auto linear = flutter::DlColorSource::MakeLinear({0.0, 0.0}, {300.0, 300.0}, + 2, colors.data(), stops, + flutter::DlTileMode::kClamp); + flutter::DlPaint paint; + paint.setColorSource(linear); + + builder.DrawTextBlob( + SkTextBlob::MakeFromString("Hello World", CreateTestFont()), 100, 100, + paint); + ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); +} + TEST_P(DisplayListTest, CanDrawTextWithSaveLayer) { flutter::DisplayListBuilder builder; builder.setColor(SK_ColorRED); diff --git a/impeller/entity/BUILD.gn b/impeller/entity/BUILD.gn index 54bca085b983d..900758b38088f 100644 --- a/impeller/entity/BUILD.gn +++ b/impeller/entity/BUILD.gn @@ -45,7 +45,6 @@ impeller_shaders("entity_shaders") { "shaders/morphology_filter.vert", "shaders/position_color.vert", "shaders/position_uv.vert", - "shaders/position.vert", "shaders/radial_gradient_fill.frag", "shaders/rrect_blur.vert", "shaders/rrect_blur.frag", @@ -122,6 +121,8 @@ impeller_component("entity") { "contents/clip_contents.h", "contents/color_source_contents.cc", "contents/color_source_contents.h", + "contents/color_source_text_contents.cc", + "contents/color_source_text_contents.h", "contents/content_context.cc", "contents/content_context.h", "contents/contents.cc", diff --git a/impeller/entity/contents/color_source_contents.h b/impeller/entity/contents/color_source_contents.h index 89a86cf47ea78..5eacfc6041a39 100644 --- a/impeller/entity/contents/color_source_contents.h +++ b/impeller/entity/contents/color_source_contents.h @@ -22,6 +22,8 @@ class ColorSourceContents : public Contents { void SetEffectTransform(Matrix matrix); + const Matrix& GetInverseMatrix() const; + void SetAlpha(Scalar alpha); // |Contents| @@ -34,8 +36,6 @@ class ColorSourceContents : public Contents { protected: const std::shared_ptr& GetGeometry() const; - const Matrix& GetInverseMatrix() const; - Scalar GetAlpha() const; private: diff --git a/impeller/entity/contents/color_source_text_contents.cc b/impeller/entity/contents/color_source_text_contents.cc new file mode 100644 index 0000000000000..3301fb26c9e7e --- /dev/null +++ b/impeller/entity/contents/color_source_text_contents.cc @@ -0,0 +1,84 @@ +// Copyright 2013 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. + +#include "impeller/entity/contents/color_source_text_contents.h" + +#include "impeller/entity/contents/content_context.h" +#include "impeller/entity/contents/texture_contents.h" +#include "impeller/renderer/render_pass.h" + +namespace impeller { + +ColorSourceTextContents::ColorSourceTextContents() = default; + +ColorSourceTextContents::~ColorSourceTextContents() = default; + +void ColorSourceTextContents::SetTextContents( + std::shared_ptr text_contents) { + text_contents_ = std::move(text_contents); +} + +void ColorSourceTextContents::SetColorSourceContents( + std::shared_ptr color_source_contents) { + color_source_contents_ = std::move(color_source_contents); +} + +std::optional ColorSourceTextContents::GetCoverage( + const Entity& entity) const { + return text_contents_->GetCoverage(entity); +} + +void ColorSourceTextContents::SetTextPosition(Point position) { + position_ = position; +} + +bool ColorSourceTextContents::Render(const ContentContext& renderer, + const Entity& entity, + RenderPass& pass) const { + auto coverage = text_contents_->GetCoverage(entity); + if (!coverage.has_value()) { + return true; + } + auto transform = entity.GetTransformation(); + + text_contents_->SetColor(Color::Black()); + color_source_contents_->SetGeometry( + Geometry::MakeRect(Rect::MakeSize(coverage->size))); + + // offset the color source so it behaves as if it were drawn in the original + // position. + auto effect_transform = + color_source_contents_->GetInverseMatrix().Invert().Translate(-position_); + color_source_contents_->SetEffectTransform(effect_transform); + + auto new_texture = renderer.MakeSubpass( + "Text Color Blending", ISize::Ceil(coverage.value().size), + [&](const ContentContext& context, RenderPass& pass) { + Entity sub_entity; + sub_entity.SetTransformation(transform); + sub_entity.SetContents(text_contents_); + sub_entity.SetBlendMode(BlendMode::kSource); + if (!sub_entity.Render(context, pass)) { + return false; + } + + sub_entity.SetContents(color_source_contents_); + sub_entity.SetBlendMode(BlendMode::kSourceIn); + return sub_entity.Render(context, pass); + }); + if (!new_texture) { + return false; + } + + auto dest_rect = Rect::MakeSize(new_texture->GetSize()) + .TransformBounds(transform.Invert()) + .Shift(position_); + + auto texture_contents = TextureContents::MakeRect(dest_rect); + texture_contents->SetTexture(new_texture); + texture_contents->SetSourceRect(Rect::MakeSize(new_texture->GetSize())); + return texture_contents->Render(renderer, entity, pass); +} + +} // namespace impeller diff --git a/impeller/entity/contents/color_source_text_contents.h b/impeller/entity/contents/color_source_text_contents.h new file mode 100644 index 0000000000000..e93738c8f3760 --- /dev/null +++ b/impeller/entity/contents/color_source_text_contents.h @@ -0,0 +1,48 @@ +// Copyright 2013 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. + +#pragma once + +#include +#include +#include +#include + +#include "flutter/fml/macros.h" +#include "impeller/entity/contents/color_source_contents.h" +#include "impeller/entity/contents/contents.h" +#include "impeller/entity/contents/text_contents.h" + +namespace impeller { + +class ColorSourceTextContents final : public Contents { + public: + ColorSourceTextContents(); + + ~ColorSourceTextContents(); + + void SetTextContents(std::shared_ptr text_contents); + + void SetColorSourceContents( + std::shared_ptr color_source_contents); + + void SetTextPosition(Point position); + + // |Contents| + std::optional GetCoverage(const Entity& entity) const override; + + // |Contents| + bool Render(const ContentContext& renderer, + const Entity& entity, + RenderPass& pass) const override; + + private: + Point position_; + std::shared_ptr text_contents_; + std::shared_ptr color_source_contents_; + + FML_DISALLOW_COPY_AND_ASSIGN(ColorSourceTextContents); +}; + +} // namespace impeller diff --git a/impeller/entity/contents/content_context.cc b/impeller/entity/contents/content_context.cc index 7d9daea007689..bf189431a178b 100644 --- a/impeller/entity/contents/content_context.cc +++ b/impeller/entity/contents/content_context.cc @@ -278,8 +278,6 @@ ContentContext::ContentContext(std::shared_ptr context) CreateDefaultPipeline(*context_); geometry_color_pipelines_[{}] = CreateDefaultPipeline(*context_); - geometry_position_pipelines_[{}] = - CreateDefaultPipeline(*context_); yuv_to_rgb_filter_pipelines_[{}] = CreateDefaultPipeline(*context_); diff --git a/impeller/entity/contents/content_context.h b/impeller/entity/contents/content_context.h index 8379b4fc10376..291948ff9b26e 100644 --- a/impeller/entity/contents/content_context.h +++ b/impeller/entity/contents/content_context.h @@ -53,7 +53,6 @@ #include "impeller/renderer/pipeline.h" #include "impeller/scene/scene_context.h" -#include "impeller/entity/position.vert.h" #include "impeller/entity/position_color.vert.h" #include "impeller/scene/scene_context.h" @@ -155,8 +154,6 @@ using GlyphAtlasSdfPipeline = using ClipPipeline = RenderPipelineT; -using GeometryPositionPipeline = - RenderPipelineT; using GeometryColorPipeline = RenderPipelineT; using YUVToRGBFilterPipeline = @@ -435,11 +432,6 @@ class ContentContext { return GetPipeline(geometry_color_pipelines_, opts); } - std::shared_ptr> GetGeometryPositionPipeline( - ContentContextOptions opts) const { - return GetPipeline(geometry_position_pipelines_, opts); - } - std::shared_ptr> GetYUVToRGBFilterPipeline( ContentContextOptions opts) const { return GetPipeline(yuv_to_rgb_filter_pipelines_, opts); @@ -670,7 +662,6 @@ class ContentContext { mutable Variants clip_pipelines_; mutable Variants glyph_atlas_pipelines_; mutable Variants glyph_atlas_sdf_pipelines_; - mutable Variants geometry_position_pipelines_; mutable Variants geometry_color_pipelines_; mutable Variants yuv_to_rgb_filter_pipelines_; // Advanced blends. diff --git a/impeller/entity/contents/text_contents.cc b/impeller/entity/contents/text_contents.cc index 141ffaccea293..713dbbaf2033b 100644 --- a/impeller/entity/contents/text_contents.cc +++ b/impeller/entity/contents/text_contents.cc @@ -50,6 +50,10 @@ void TextContents::SetColor(Color color) { color_ = color; } +void TextContents::SetInverseMatrix(Matrix matrix) { + inverse_matrix_ = matrix; +} + std::optional TextContents::GetCoverage(const Entity& entity) const { auto bounds = frame_.GetBounds(); if (!bounds.has_value()) { @@ -71,6 +75,7 @@ static bool CommonRender( RenderPass& pass, const Color& color, const TextFrame& frame, + const Matrix& inverse_matrix, std::shared_ptr atlas, // NOLINT(performance-unnecessary-value-param) Command& cmd) { @@ -159,8 +164,10 @@ static bool CommonRender( auto uv_scaler_a = atlas_glyph_pos->size / atlas_size; auto uv_scaler_b = (Point::Round(atlas_glyph_pos->origin) / atlas_size); - auto translation = Matrix::MakeTranslation( - Vector3(offset_glyph_position.x, offset_glyph_position.y, 0)); + auto translation = + Matrix::MakeTranslation( + Vector3(offset_glyph_position.x, offset_glyph_position.y, 0)) * + inverse_matrix; for (const auto& point : unit_points) { typename VS::PerVertexData vtx; @@ -209,8 +216,8 @@ bool TextContents::RenderSdf(const ContentContext& renderer, cmd.pipeline = renderer.GetGlyphAtlasSdfPipeline(opts); cmd.stencil_reference = entity.GetStencilDepth(); - return CommonRender(renderer, entity, pass, color_, - frame_, atlas, cmd); + return CommonRender( + renderer, entity, pass, color_, frame_, inverse_matrix_, atlas, cmd); } bool TextContents::Render(const ContentContext& renderer, @@ -245,7 +252,7 @@ bool TextContents::Render(const ContentContext& renderer, cmd.stencil_reference = entity.GetStencilDepth(); return CommonRender(renderer, entity, pass, color_, - frame_, atlas, cmd); + frame_, inverse_matrix_, atlas, cmd); } } // namespace impeller diff --git a/impeller/entity/contents/text_contents.h b/impeller/entity/contents/text_contents.h index a0cec70a95103..0a6b5bf716e4b 100644 --- a/impeller/entity/contents/text_contents.h +++ b/impeller/entity/contents/text_contents.h @@ -32,6 +32,8 @@ class TextContents final : public Contents { void SetColor(Color color); + void SetInverseMatrix(Matrix matrix); + // |Contents| std::optional GetCoverage(const Entity& entity) const override; @@ -49,6 +51,7 @@ class TextContents final : public Contents { TextFrame frame_; Color color_; mutable std::shared_ptr lazy_atlas_; + Matrix inverse_matrix_; std::shared_ptr ResolveAtlas( GlyphAtlas::Type type, diff --git a/impeller/entity/contents/tiled_texture_contents.cc b/impeller/entity/contents/tiled_texture_contents.cc index e21bee33c74c8..503066c2032e8 100644 --- a/impeller/entity/contents/tiled_texture_contents.cc +++ b/impeller/entity/contents/tiled_texture_contents.cc @@ -95,13 +95,6 @@ bool TiledTextureContents::Render(const ContentContext& renderer, if (texture_ == nullptr) { return true; } - // TODO(jonahwilliams): this is a special case for VerticesGeometry which - // implements GetPositionUVBuffer. The general geometry case does not use - // this method (see note below). - auto geometry = GetGeometry(); - if (geometry->GetVertexType() == GeometryVertexType::kUV) { - return RenderVertices(renderer, entity, pass); - } const auto texture_size = texture_->GetSize(); if (texture_size.IsEmpty()) { @@ -110,75 +103,14 @@ bool TiledTextureContents::Render(const ContentContext& renderer, auto& host_buffer = pass.GetTransientsBuffer(); - auto geometry_result = - GetGeometry()->GetPositionBuffer(renderer, entity, pass); - - if (fast_src_in_color_.has_value()) { - using VS = TiledTextureFillVertexShader; - using FS = TextureFillSrcInFragmentShader; - - VS::FrameInfo frame_info; - frame_info.mvp = geometry_result.transform; - frame_info.texture_sampler_y_coord_scale = texture_->GetYCoordScale(); - frame_info.effect_transform = GetInverseMatrix(); - frame_info.bounds_origin = geometry->GetCoverage(Matrix())->origin; - frame_info.texture_size = Vector2(static_cast(texture_size.width), - static_cast(texture_size.height)); - - FS::FragInfo frag_info; - frag_info.x_tile_mode = static_cast(x_tile_mode_); - frag_info.y_tile_mode = static_cast(y_tile_mode_); - frag_info.alpha = GetAlpha(); - frag_info.blend_color = fast_src_in_color_.value().Premultiply(); - - Command cmd; - cmd.label = "TiledTextureFillSrcIn"; - cmd.stencil_reference = entity.GetStencilDepth(); - - auto options = OptionsFromPassAndEntity(pass, entity); - if (geometry_result.prevent_overdraw) { - options.stencil_compare = CompareFunction::kEqual; - options.stencil_operation = StencilOperation::kIncrementClamp; - } - options.primitive_type = geometry_result.type; - cmd.pipeline = renderer.GetTextureSrcInPipeline(options); - - cmd.BindVertices(geometry_result.vertex_buffer); - VS::BindFrameInfo(cmd, host_buffer.EmplaceUniform(frame_info)); - FS::BindFragInfo(cmd, host_buffer.EmplaceUniform(frag_info)); - - FS::BindTextureSampler( - cmd, texture_, - renderer.GetContext()->GetSamplerLibrary()->GetSampler( - CreateDescriptor())); - - if (!pass.AddCommand(std::move(cmd))) { - return false; - } - - if (geometry_result.prevent_overdraw) { - auto restore = ClipRestoreContents(); - restore.SetRestoreCoverage(GetCoverage(entity)); - return restore.Render(renderer, entity, pass); - } - return true; - } - - using VS = TiledTextureFillVertexShader; - using FS = TiledTextureFillFragmentShader; - - // TODO(bdero): The geometry should be fetched from GetPositionUVBuffer and - // contain coverage-mapped UVs, and this should use - // position_uv.vert. - // https://github.com/flutter/flutter/issues/118553 + auto bounds_origin = GetGeometry()->GetCoverage(Matrix())->origin; + auto geometry_result = GetGeometry()->GetPositionUVBuffer( + Rect(bounds_origin, Size(texture_size)), GetInverseMatrix(), renderer, + entity, pass); VS::FrameInfo frame_info; frame_info.mvp = geometry_result.transform; frame_info.texture_sampler_y_coord_scale = texture_->GetYCoordScale(); - frame_info.effect_transform = GetInverseMatrix(); - frame_info.bounds_origin = geometry->GetCoverage(Matrix())->origin; - frame_info.texture_size = Vector2(static_cast(texture_size.width), - static_cast(texture_size.height)); FS::FragInfo frag_info; frag_info.x_tile_mode = static_cast(x_tile_mode_); @@ -229,73 +161,4 @@ bool TiledTextureContents::Render(const ContentContext& renderer, return true; } -bool TiledTextureContents::RenderVertices(const ContentContext& renderer, - const Entity& entity, - RenderPass& pass) const { - using VS = PositionUVPipeline::VertexShader; - using FS = PositionUVPipeline::FragmentShader; - - const auto texture_size = texture_->GetSize(); - if (texture_size.IsEmpty()) { - return true; - } - - auto& host_buffer = pass.GetTransientsBuffer(); - - auto geometry_result = GetGeometry()->GetPositionUVBuffer( - Rect::MakeSize(texture_size), GetInverseMatrix(), renderer, entity, pass); - - VS::FrameInfo frame_info; - frame_info.mvp = geometry_result.transform; - frame_info.texture_sampler_y_coord_scale = texture_->GetYCoordScale(); - - FS::FragInfo frag_info; - frag_info.x_tile_mode = static_cast(x_tile_mode_); - frag_info.y_tile_mode = static_cast(y_tile_mode_); - frag_info.alpha = GetAlpha(); - - Command cmd; - cmd.label = "PositionUV"; - cmd.stencil_reference = entity.GetStencilDepth(); - - auto options = OptionsFromPassAndEntity(pass, entity); - if (geometry_result.prevent_overdraw) { - options.stencil_compare = CompareFunction::kEqual; - options.stencil_operation = StencilOperation::kIncrementClamp; - } - options.primitive_type = geometry_result.type; - cmd.pipeline = renderer.GetPositionUVPipeline(options); - - cmd.BindVertices(geometry_result.vertex_buffer); - VS::BindFrameInfo(cmd, host_buffer.EmplaceUniform(frame_info)); - FS::BindFragInfo(cmd, host_buffer.EmplaceUniform(frag_info)); - - if (color_filter_.has_value()) { - auto filtered_texture = CreateFilterTexture(renderer); - if (!filtered_texture.has_value()) { - return false; - } - FS::BindTextureSampler( - cmd, filtered_texture.value(), - renderer.GetContext()->GetSamplerLibrary()->GetSampler( - CreateDescriptor())); - } else { - FS::BindTextureSampler( - cmd, texture_, - renderer.GetContext()->GetSamplerLibrary()->GetSampler( - CreateDescriptor())); - } - - if (!pass.AddCommand(std::move(cmd))) { - return false; - } - - if (geometry_result.prevent_overdraw) { - auto restore = ClipRestoreContents(); - restore.SetRestoreCoverage(GetCoverage(entity)); - return restore.Render(renderer, entity, pass); - } - return true; -} - } // namespace impeller diff --git a/impeller/entity/contents/tiled_texture_contents.h b/impeller/entity/contents/tiled_texture_contents.h index 7ae34291603ad..e7157cf7fa2c6 100644 --- a/impeller/entity/contents/tiled_texture_contents.h +++ b/impeller/entity/contents/tiled_texture_contents.h @@ -57,10 +57,6 @@ class TiledTextureContents final : public ColorSourceContents { std::optional> CreateFilterTexture( const ContentContext& renderer) const; - bool RenderVertices(const ContentContext& renderer, - const Entity& entity, - RenderPass& pass) const; - SamplerDescriptor CreateDescriptor() const; std::shared_ptr texture_; diff --git a/impeller/entity/contents/vertices_contents.cc b/impeller/entity/contents/vertices_contents.cc index de2954b00e1cc..0e675ae40498c 100644 --- a/impeller/entity/contents/vertices_contents.cc +++ b/impeller/entity/contents/vertices_contents.cc @@ -8,7 +8,6 @@ #include "impeller/entity/contents/filters/color_filter_contents.h" #include "impeller/entity/contents/filters/filter_contents.h" #include "impeller/entity/contents/texture_contents.h" -#include "impeller/entity/position.vert.h" #include "impeller/entity/position_color.vert.h" #include "impeller/entity/vertices.frag.h" #include "impeller/geometry/color.h" diff --git a/impeller/entity/entity_unittests.cc b/impeller/entity/entity_unittests.cc index 8a96888424807..208559fa9ade0 100644 --- a/impeller/entity/entity_unittests.cc +++ b/impeller/entity/entity_unittests.cc @@ -26,6 +26,7 @@ #include "impeller/entity/contents/solid_color_contents.h" #include "impeller/entity/contents/text_contents.h" #include "impeller/entity/contents/texture_contents.h" +#include "impeller/entity/contents/tiled_texture_contents.h" #include "impeller/entity/contents/vertices_contents.h" #include "impeller/entity/entity.h" #include "impeller/entity/entity_pass.h" @@ -243,6 +244,27 @@ TEST_P(EntityTest, ThreeStrokesInOnePath) { ASSERT_TRUE(OpenPlaygroundHere(entity)); } +TEST_P(EntityTest, StrokeWithTextureContents) { + auto bridge = CreateTextureForFixture("bay_bridge.jpg"); + Path path = PathBuilder{} + .MoveTo({100, 100}) + .LineTo({100, 200}) + .MoveTo({100, 300}) + .LineTo({100, 400}) + .MoveTo({100, 500}) + .LineTo({100, 600}) + .TakePath(); + + Entity entity; + entity.SetTransformation(Matrix::MakeScale(GetContentScale())); + auto contents = std::make_unique(); + contents->SetGeometry(Geometry::MakeStrokePath(path, 100.0)); + contents->SetTexture(bridge); + contents->SetTileModes(Entity::TileMode::kClamp, Entity::TileMode::kClamp); + entity.SetContents(std::move(contents)); + ASSERT_TRUE(OpenPlaygroundHere(entity)); +} + TEST_P(EntityTest, TriangleInsideASquare) { auto callback = [&](ContentContext& context, RenderPass& pass) { Point offset(100, 100); diff --git a/impeller/entity/geometry.cc b/impeller/entity/geometry.cc index 4b3f064f289eb..05ed0781b63d6 100644 --- a/impeller/entity/geometry.cc +++ b/impeller/entity/geometry.cc @@ -5,6 +5,7 @@ #include "impeller/entity/geometry.h" #include "impeller/entity/contents/content_context.h" #include "impeller/entity/position_color.vert.h" +#include "impeller/entity/texture_fill.vert.h" #include "impeller/geometry/matrix.h" #include "impeller/geometry/path_builder.h" #include "impeller/renderer/device_buffer.h" @@ -17,14 +18,6 @@ Geometry::Geometry() = default; Geometry::~Geometry() = default; -GeometryResult Geometry::GetPositionUVBuffer(Rect texture_coverage, - Matrix effect_transform, - const ContentContext& renderer, - const Entity& entity, - RenderPass& pass) { - return {}; -} - // static std::unique_ptr Geometry::MakeFillPath(const Path& path) { return std::make_unique(path); @@ -51,6 +44,40 @@ std::unique_ptr Geometry::MakeRect(Rect rect) { return std::make_unique(rect); } +static GeometryResult ComputeUVGeometryForRect(Rect source_rect, + Rect texture_coverage, + Matrix effect_transform, + const ContentContext& renderer, + const Entity& entity, + RenderPass& pass) { + constexpr uint16_t kRectIndicies[4] = {0, 1, 2, 3}; + auto& host_buffer = pass.GetTransientsBuffer(); + + std::vector data(8); + auto points = source_rect.GetPoints(); + for (auto i = 0u, j = 0u; i < 8; i += 2, j++) { + data[i] = points[j]; + data[i + 1] = effect_transform * ((points[j] - texture_coverage.origin) / + texture_coverage.size); + } + + return GeometryResult{ + .type = PrimitiveType::kTriangleStrip, + .vertex_buffer = + { + .vertex_buffer = host_buffer.Emplace( + data.data(), 16 * sizeof(float), alignof(float)), + .index_buffer = host_buffer.Emplace( + kRectIndicies, 4 * sizeof(uint16_t), alignof(uint16_t)), + .index_count = 4, + .index_type = IndexType::k16bit, + }, + .transform = Matrix::MakeOrthographic(pass.GetRenderTargetSize()) * + entity.GetTransformation(), + .prevent_overdraw = false, + }; +} + /////// Path Geometry /////// FillPathGeometry::FillPathGeometry(const Path& path) : path_(path) {} @@ -89,6 +116,52 @@ GeometryResult FillPathGeometry::GetPositionBuffer( }; } +// |Geometry| +GeometryResult FillPathGeometry::GetPositionUVBuffer( + Rect texture_coverage, + std::optional source_rect, + Matrix effect_transform, + const ContentContext& renderer, + const Entity& entity, + RenderPass& pass) { + using VS = TextureFillVertexShader; + + VertexBufferBuilder vertex_builder; + auto tesselation_result = renderer.GetTessellator()->Tessellate( + path_.GetFillType(), + path_.CreatePolyline(entity.GetTransformation().GetMaxBasisLength()), + [&vertex_builder, &texture_coverage, &effect_transform]( + const float* vertices, size_t vertices_count, const uint16_t* indices, + size_t indices_count) { + for (auto i = 0u; i < vertices_count; i += 2) { + VS::PerVertexData data; + Point vtx = {vertices[i], vertices[i + 1]}; + data.position = vtx; + auto coverage_coords = + ((vtx - texture_coverage.origin) / texture_coverage.size) / + texture_coverage.size; + data.texture_coords = effect_transform * coverage_coords; + vertex_builder.AppendVertex(data); + } + FML_DCHECK(vertex_builder.GetVertexCount() == vertices_count / 2); + for (auto i = 0u; i < indices_count; i++) { + vertex_builder.AppendIndex(indices[i]); + } + return true; + }); + if (tesselation_result != Tessellator::Result::kSuccess) { + return {}; + } + return GeometryResult{ + .type = PrimitiveType::kTriangle, + .vertex_buffer = + vertex_builder.CreateVertexBuffer(pass.GetTransientsBuffer()), + .transform = Matrix::MakeOrthographic(pass.GetRenderTargetSize()) * + entity.GetTransformation(), + .prevent_overdraw = false, + }; +} + GeometryVertexType FillPathGeometry::GetVertexType() const { return GeometryVertexType::kPosition; } @@ -300,9 +373,9 @@ StrokePathGeometry::CapProc StrokePathGeometry::GetCapProc(Cap stroke_cap) { } // static -VertexBuffer StrokePathGeometry::CreateSolidStrokeVertices( +VertexBufferBuilder +StrokePathGeometry::CreateSolidStrokeVertices( const Path& path, - HostBuffer& buffer, Scalar stroke_width, Scalar scaled_miter_limit, Cap cap, @@ -422,7 +495,7 @@ VertexBuffer StrokePathGeometry::CreateSolidStrokeVertices( } } - return vtx_builder.CreateVertexBuffer(buffer); + return vtx_builder; } GeometryResult StrokePathGeometry::GetPositionBuffer( @@ -441,14 +514,59 @@ GeometryResult StrokePathGeometry::GetPositionBuffer( Scalar stroke_width = std::max(stroke_width_, min_size); auto& host_buffer = pass.GetTransientsBuffer(); - auto vertex_buffer = CreateSolidStrokeVertices( - path_, host_buffer, stroke_width, miter_limit_ * stroke_width_ * 0.5, - stroke_cap_, GetJoinProc(stroke_join_), GetCapProc(stroke_cap_), + auto vertex_builder = CreateSolidStrokeVertices( + path_, stroke_width, miter_limit_ * stroke_width_ * 0.5, stroke_cap_, + GetJoinProc(stroke_join_), GetCapProc(stroke_cap_), entity.GetTransformation().GetMaxBasisLength()); return GeometryResult{ .type = PrimitiveType::kTriangleStrip, - .vertex_buffer = vertex_buffer, + .vertex_buffer = vertex_builder.CreateVertexBuffer(host_buffer), + .transform = Matrix::MakeOrthographic(pass.GetRenderTargetSize()) * + entity.GetTransformation(), + .prevent_overdraw = true, + }; +} + +GeometryResult StrokePathGeometry::GetPositionUVBuffer( + Rect texture_coverage, + std::optional source_rect, + Matrix effect_transform, + const ContentContext& renderer, + const Entity& entity, + RenderPass& pass) { + if (stroke_width_ < 0.0) { + return {}; + } + auto determinant = entity.GetTransformation().GetDeterminant(); + if (determinant == 0) { + return {}; + } + + Scalar min_size = 1.0f / sqrt(std::abs(determinant)); + Scalar stroke_width = std::max(stroke_width_, min_size); + + auto& host_buffer = pass.GetTransientsBuffer(); + auto stroke_builder = CreateSolidStrokeVertices( + path_, stroke_width, miter_limit_ * stroke_width_ * 0.5, stroke_cap_, + GetJoinProc(stroke_join_), GetCapProc(stroke_cap_), + entity.GetTransformation().GetMaxBasisLength()); + + VertexBufferBuilder vertex_builder; + stroke_builder.IterateVertices( + [&vertex_builder, &texture_coverage, + &effect_transform](SolidFillVertexShader::PerVertexData old_vtx) { + TextureFillVertexShader::PerVertexData data; + data.position = old_vtx.position; + auto coverage_coords = (old_vtx.position - texture_coverage.origin) / + texture_coverage.size; + data.texture_coords = effect_transform * coverage_coords; + vertex_builder.AppendVertex(data); + }); + + return GeometryResult{ + .type = PrimitiveType::kTriangleStrip, + .vertex_buffer = vertex_builder.CreateVertexBuffer(host_buffer), .transform = Matrix::MakeOrthographic(pass.GetRenderTargetSize()) * entity.GetTransformation(), .prevent_overdraw = true, @@ -515,6 +633,19 @@ GeometryResult CoverGeometry::GetPositionBuffer(const ContentContext& renderer, }; } +// |Geometry| +GeometryResult CoverGeometry::GetPositionUVBuffer( + Rect texture_coverage, + std::optional source_rect, + Matrix effect_transform, + const ContentContext& renderer, + const Entity& entity, + RenderPass& pass) { + auto rect = Rect(Size(pass.GetRenderTargetSize())); + return ComputeUVGeometryForRect(rect, texture_coverage, effect_transform, + renderer, entity, pass); +} + GeometryVertexType CoverGeometry::GetVertexType() const { return GeometryVertexType::kPosition; } @@ -553,38 +684,13 @@ GeometryResult RectGeometry::GetPositionBuffer(const ContentContext& renderer, // |Geometry| GeometryResult RectGeometry::GetPositionUVBuffer(Rect texture_coverage, + std::optional source_rect, Matrix effect_transform, const ContentContext& renderer, const Entity& entity, RenderPass& pass) { - constexpr uint16_t kRectIndicies[4] = {0, 1, 2, 3}; - - auto size = texture_coverage.size; - auto origin = texture_coverage.origin; - - auto& host_buffer = pass.GetTransientsBuffer(); - - auto points = rect_.GetPoints(); - std::vector vertex_data(8); - for (auto i = 0u, j = 0u; i < 8; i += 2, j += 1) { - vertex_data[i] = points[j]; - vertex_data[i + 1] = effect_transform * (points[j] - origin) / size; - } - return GeometryResult{ - .type = PrimitiveType::kTriangleStrip, - .vertex_buffer = - { - .vertex_buffer = host_buffer.Emplace( - vertex_data.data(), 16 * sizeof(float), alignof(float)), - .index_buffer = host_buffer.Emplace( - kRectIndicies, 4 * sizeof(uint16_t), alignof(uint16_t)), - .index_count = 4, - .index_type = IndexType::k16bit, - }, - .transform = Matrix::MakeOrthographic(pass.GetRenderTargetSize()) * - entity.GetTransformation(), - .prevent_overdraw = false, - }; + return ComputeUVGeometryForRect(rect_, texture_coverage, effect_transform, + renderer, entity, pass); } GeometryVertexType RectGeometry::GetVertexType() const { diff --git a/impeller/entity/geometry.h b/impeller/entity/geometry.h index e03742c194644..59a51bae69c8a 100644 --- a/impeller/entity/geometry.h +++ b/impeller/entity/geometry.h @@ -66,10 +66,11 @@ class Geometry { RenderPass& pass) = 0; virtual GeometryResult GetPositionUVBuffer(Rect texture_coverage, + std::optional source_rect, Matrix effect_transform, const ContentContext& renderer, const Entity& entity, - RenderPass& pass); + RenderPass& pass) = 0; virtual GeometryVertexType GetVertexType() const = 0; @@ -109,6 +110,14 @@ class FillPathGeometry : public Geometry { // |Geometry| std::optional GetCoverage(const Matrix& transform) const override; + // |Geometry| + GeometryResult GetPositionUVBuffer(Rect texture_coverage, + std::optional source_rect, + Matrix effect_transform, + const ContentContext& renderer, + const Entity& entity, + RenderPass& pass) override; + Path path_; FML_DISALLOW_COPY_AND_ASSIGN(FillPathGeometry); @@ -154,26 +163,36 @@ class StrokePathGeometry : public Geometry { const Entity& entity, RenderPass& pass) override; + // |Geometry| + GeometryResult GetPositionUVBuffer(Rect texture_coverage, + std::optional source_rect, + Matrix effect_transform, + const ContentContext& renderer, + const Entity& entity, + RenderPass& pass) override; + // |Geometry| GeometryVertexType GetVertexType() const override; // |Geometry| std::optional GetCoverage(const Matrix& transform) const override; + bool SkipRendering() const; + static Scalar CreateBevelAndGetDirection( VertexBufferBuilder& vtx_builder, const Point& position, const Point& start_offset, const Point& end_offset); - static VertexBuffer CreateSolidStrokeVertices(const Path& path, - HostBuffer& buffer, - Scalar stroke_width, - Scalar scaled_miter_limit, - Cap cap, - const JoinProc& join_proc, - const CapProc& cap_proc, - Scalar scale); + static VertexBufferBuilder + CreateSolidStrokeVertices(const Path& path, + Scalar stroke_width, + Scalar scaled_miter_limit, + Cap cap, + const JoinProc& join_proc, + const CapProc& cap_proc, + Scalar scale); static StrokePathGeometry::JoinProc GetJoinProc(Join stroke_join); @@ -208,6 +227,14 @@ class CoverGeometry : public Geometry { // |Geometry| std::optional GetCoverage(const Matrix& transform) const override; + // |Geometry| + GeometryResult GetPositionUVBuffer(Rect texture_coverage, + std::optional source_rect, + Matrix effect_transform, + const ContentContext& renderer, + const Entity& entity, + RenderPass& pass) override; + FML_DISALLOW_COPY_AND_ASSIGN(CoverGeometry); }; @@ -225,6 +252,7 @@ class RectGeometry : public Geometry { // |Geometry| GeometryResult GetPositionUVBuffer(Rect texture_coverage, + std::optional source_rect, Matrix effect_transform, const ContentContext& renderer, const Entity& entity, diff --git a/impeller/entity/shaders/position.vert b/impeller/entity/shaders/position.vert deleted file mode 100644 index db4c711fcb6c0..0000000000000 --- a/impeller/entity/shaders/position.vert +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2013 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. - -#include -#include - -uniform FrameInfo { - mat4 mvp; - vec4 color; -} -frame_info; - -in vec2 position; - -out vec4 v_color; - -void main() { - gl_Position = frame_info.mvp * vec4(position, 0.0, 1.0); - v_color = frame_info.color; -} diff --git a/impeller/entity/shaders/tiled_texture_fill.vert b/impeller/entity/shaders/tiled_texture_fill.vert index 7bdce80f7fc5d..e0f2c7882936a 100644 --- a/impeller/entity/shaders/tiled_texture_fill.vert +++ b/impeller/entity/shaders/tiled_texture_fill.vert @@ -3,27 +3,21 @@ // found in the LICENSE file. #include -#include #include uniform FrameInfo { mat4 mvp; - mat4 effect_transform; - vec2 bounds_origin; - vec2 texture_size; float texture_sampler_y_coord_scale; } frame_info; in vec2 position; +in vec2 texture_coords; out vec2 v_texture_coords; void main() { gl_Position = frame_info.mvp * vec4(position, 0.0, 1.0); - v_texture_coords = IPRemapCoords( - IPVec2TransformPosition( - frame_info.effect_transform, - (position - frame_info.bounds_origin) / frame_info.texture_size), - frame_info.texture_sampler_y_coord_scale); + v_texture_coords = + IPRemapCoords(texture_coords, frame_info.texture_sampler_y_coord_scale); } diff --git a/impeller/fixtures/cubic_to_quads.comp b/impeller/fixtures/cubic_to_quads.comp index 723e2e3a280bd..4d83d1805d2c3 100644 --- a/impeller/fixtures/cubic_to_quads.comp +++ b/impeller/fixtures/cubic_to_quads.comp @@ -49,7 +49,7 @@ void main() { CubicData cubic = cubics.data[ident]; - vec2 err_v = 3.0 * (cubic.cp2 - cubic.cp1) + cubic.p1 - cubic.p2; + vec2 err_v = (3.0 * cubic.cp2 - cubic.p2) - (3.0 * cubic.cp1 - cubic.p1); float err = dot(err_v, err_v); float quad_count = max(1., ceil(pow(err * (1.0 / max_hypot2), 1. / 6.0))); diff --git a/impeller/fixtures/golden_heart.h b/impeller/fixtures/golden_heart.h index def3f465d4593..2325c1ea6ad0b 100644 --- a/impeller/fixtures/golden_heart.h +++ b/impeller/fixtures/golden_heart.h @@ -71,7 +71,7 @@ std::vector golden_heart_quads = { // easier storage and reading, but still precise enough to work visually. std::vector golden_heart_points = { {140, 20}, {131.765, 20.3023}, {123.672, 21.1078}, - {115.734, 22.4239}, {107.965, 24.2554}, {100.378, 26.6041}, + {115.734, 22.4238}, {107.965, 24.2553}, {100.378, 26.604}, {92.9844, 29.4688}, {85.9188, 32.7537}, {79.1253, 36.4472}, {72.615, 40.5481}, {66.3979, 45.0528}, {60.4823, 49.956}, {54.875, 55.25}, {49.6196, 60.8847}, {44.7551, 66.8194}, @@ -80,242 +80,242 @@ std::vector golden_heart_points = { {22.387, 116.001}, {21.0895, 123.861}, {20.296, 131.865}, {20, 140}, {20.2534, 149.197}, {20.906, 158.214}, {21.9689, 167.034}, {23.4519, 175.646}, {25.3637, 184.033}, - {27.7113, 192.183}, {30.5, 200.083}, {34.1384, 208.814}, - {38.2033, 217.323}, {42.6928, 225.603}, {47.6033, 233.646}, + {27.7113, 192.184}, {30.5, 200.083}, {34.1384, 208.814}, + {38.2033, 217.323}, {42.6928, 225.603}, {47.6032, 233.646}, {52.9299, 241.447}, {58.6667, 249}, {66.101, 257.978}, - {73.9106, 266.793}, {82.0865, 275.443}, {90.6194, 283.929}, + {73.9105, 266.793}, {82.0864, 275.443}, {90.6194, 283.929}, {99.5, 292.25}, {115.262, 306.476}, {131.433, 320.838}, - {148, 335.333}, {160.921, 346.811}, {173.757, 358.715}, - {186.506, 371.032}, {199.167, 383.75}, {207.755, 392.805}, - {216.163, 402.198}, {224.391, 411.923}, {232.439, 421.971}, - {240.309, 432.333}, {248, 443}, {255.407, 432.366}, - {263.018, 422.027}, {270.835, 411.988}, {278.857, 402.258}, - {287.085, 392.843}, {295.519, 383.75}, {308.072, 370.878}, - {320.75, 358.4}, {333.554, 346.326}, {346.481, 334.667}, + {148, 335.333}, {160.921, 346.811}, {173.756, 358.715}, + {186.505, 371.032}, {199.167, 383.75}, {207.755, 392.805}, + {216.162, 402.199}, {224.39, 411.923}, {232.439, 421.971}, + {240.308, 432.333}, {248, 443}, {255.407, 432.367}, + {263.018, 422.027}, {270.834, 411.988}, {278.856, 402.258}, + {287.084, 392.843}, {295.519, 383.75}, {308.072, 370.878}, + {320.751, 358.4}, {333.554, 346.326}, {346.481, 334.667}, {363.181, 319.87}, {379.524, 305.229}, {395.5, 290.75}, {404.531, 282.291}, {413.224, 273.686}, {421.57, 264.936}, {429.56, 256.04}, {437.185, 247}, {443.055, 239.45}, - {448.516, 231.675}, {453.562, 223.678}, {458.186, 215.466}, + {448.516, 231.674}, {453.562, 223.678}, {458.186, 215.466}, {462.382, 207.043}, {466.148, 198.417}, {469.016, 190.697}, - {471.436, 182.748}, {473.412, 174.582}, {474.949, 166.212}, - {476.053, 157.649}, {476.734, 148.908}, {477, 140}, - {476.697, 131.863}, {475.889, 123.857}, {474.571, 115.997}, + {471.437, 182.748}, {473.413, 174.582}, {474.949, 166.211}, + {476.054, 157.649}, {476.734, 148.908}, {477, 140}, + {476.697, 131.863}, {475.889, 123.858}, {474.571, 115.997}, {472.739, 108.293}, {470.392, 100.759}, {467.531, 93.4062}, - {464.244, 86.3502}, {460.548, 79.5599}, {456.446, 73.0461}, - {451.942, 66.8181}, {447.041, 60.884}, {441.75, 55.25}, + {464.244, 86.3502}, {460.548, 79.56}, {456.446, 73.0462}, + {451.942, 66.8182}, {447.041, 60.884}, {441.75, 55.25}, {436.116, 49.9595}, {430.182, 45.0581}, {423.954, 40.5537}, - {417.44, 36.452}, {410.65, 32.7565}, {403.594, 29.4688}, - {396.241, 26.6084}, {388.707, 24.2609}, {381.004, 22.4286}, + {417.44, 36.4519}, {410.65, 32.7564}, {403.594, 29.4688}, + {396.241, 26.6083}, {388.707, 24.2609}, {381.004, 22.4285}, {373.143, 21.1106}, {365.137, 20.3032}, {357, 20}, {349.102, 20.2777}, {341.323, 21.0241}, {333.676, 22.2452}, - {326.171, 23.9443}, {318.819, 26.1224}, {311.63, 28.7778}, - {304.722, 31.8337}, {298.058, 35.2778}, {291.65, 39.1093}, + {326.17, 23.9443}, {318.818, 26.1223}, {311.63, 28.7778}, + {304.721, 31.8336}, {298.058, 35.2778}, {291.65, 39.1093}, {285.505, 43.3251}, {279.632, 47.9205}, {274.037, 52.8889}, {268.767, 58.1866}, {263.861, 63.7819}, {259.326, 69.6689}, {255.169, 75.8403}, {251.393, 82.2873}, {248, 89}, {244.622, 82.2933}, {240.874, 75.8498}, {236.755, 69.6796}, - {232.27, 63.7913}, {227.423, 58.1924}, {222.222, 52.8889}, - {216.709, 47.922}, {210.917, 43.3271}, {204.854, 39.1112}, - {198.525, 35.2793}, {191.941, 31.8344}, {185.111, 28.7778}, + {232.27, 63.7913}, {227.424, 58.1923}, {222.222, 52.8889}, + {216.709, 47.922}, {210.918, 43.3271}, {204.854, 39.1112}, + {198.525, 35.2792}, {191.941, 31.8344}, {185.111, 28.7778}, {177.988, 26.1195}, {170.693, 23.9406}, {163.234, 22.242}, {155.625, 21.0222}, {147.876, 20.277}, {140, 20}}; std::vector golden_heart_vertices = { - {139.95, 19.5025}, {140.05, 20.4975}, {131.715, 19.8048}, - {131.815, 20.7998}, {131.683, 19.809}, {131.847, 20.7956}, - {123.59, 20.6145}, {123.753, 21.601}, {123.557, 20.6211}, - {123.786, 21.5944}, {115.619, 21.9372}, {115.848, 22.9105}, - {115.586, 21.9462}, {115.882, 22.9015}, {107.817, 23.7777}, - {108.113, 24.733}, {107.784, 23.7891}, {108.146, 24.7215}, - {100.197, 26.1378}, {100.558, 27.0703}, {100.167, 26.1506}, - {100.589, 27.0574}, {92.7736, 29.0154}, {93.1952, 29.9221}, - {92.7456, 29.0295}, {93.2232, 29.908}, {85.68, 32.3144}, - {86.1576, 33.193}, {85.6523, 32.3306}, {86.1853, 33.1768}, - {78.8588, 36.0242}, {79.3918, 36.8703}, {78.8319, 36.0423}, - {79.4187, 36.8521}, {72.3216, 40.1432}, {72.9084, 40.9529}, - {72.2959, 40.1631}, {72.9341, 40.933}, {66.0788, 44.6679}, - {66.717, 45.4378}, {66.0546, 44.6893}, {66.7411, 45.4164}, - {60.139, 49.5924}, {60.8255, 50.3196}, {60.1166, 49.615}, - {60.8479, 50.297}, {54.5094, 54.909}, {55.2406, 55.591}, - {54.4883, 54.933}, {55.2617, 55.567}, {49.2329, 60.5677}, - {50.0063, 61.2016}, {49.2133, 60.5933}, {50.026, 61.176}, - {44.3488, 66.5281}, {45.1614, 67.1108}, {44.3308, 66.5549}, - {45.1794, 67.084}, {39.8648, 72.7832}, {40.7133, 73.3123}, - {39.8488, 72.8108}, {40.7293, 73.2847}, {35.7869, 79.3246}, - {36.6675, 79.7985}, {35.7729, 79.3526}, {36.6815, 79.7705}, - {32.1188, 86.1424}, {33.0273, 86.5603}, {32.1062, 86.1723}, - {33.0399, 86.5304}, {28.8613, 93.2272}, {29.795, 93.5853}, - {28.8502, 93.2595}, {29.8061, 93.553}, {26.0288, 100.615}, - {26.9847, 100.908}, {26.0199, 100.648}, {26.9935, 100.876}, - {23.7056, 108.183}, {24.6792, 108.411}, {23.6991, 108.215}, - {24.6857, 108.378}, {21.8937, 115.919}, {22.8804, 116.082}, - {21.8895, 115.951}, {22.8846, 116.05}, {20.592, 123.812}, - {21.5871, 123.91}, {20.5899, 123.843}, {21.5892, 123.879}, - {19.7964, 131.847}, {20.7957, 131.883}, {19.7962, 131.879}, - {20.7958, 131.851}, {19.5002, 140.014}, {20.4998, 139.986}, - {19.5013, 140.036}, {20.4987, 139.964}, {19.7547, 149.234}, - {20.7521, 149.161}, {19.757, 149.257}, {20.7498, 149.138}, - {20.4096, 158.273}, {21.4024, 158.154}, {20.4133, 158.299}, - {21.3987, 158.129}, {21.4761, 167.119}, {22.4616, 166.95}, - {21.4814, 167.146}, {22.4564, 166.923}, {22.9644, 175.757}, - {23.9394, 175.535}, {22.9715, 175.784}, {23.9324, 175.507}, - {24.8833, 184.172}, {25.8442, 183.895}, {24.8923, 184.2}, - {25.8352, 183.867}, {27.2398, 192.35}, {28.1828, 192.017}, - {27.2498, 192.376}, {28.1728, 191.991}, {30.0385, 200.276}, - {30.9615, 199.891}, {30.0488, 200.299}, {30.9512, 199.868}, - {33.6872, 209.03}, {34.5896, 208.599}, {33.6989, 209.053}, - {34.5779, 208.576}, {37.7638, 217.562}, {38.6429, 217.085}, - {37.7766, 217.584}, {38.6301, 217.063}, {42.266, 225.863}, - {43.1195, 225.342}, {42.2799, 225.885}, {43.1057, 225.321}, - {47.1903, 233.928}, {48.0162, 233.364}, {47.2051, 233.949}, - {48.0014, 233.344}, {52.5317, 241.749}, {53.3281, 241.144}, - {52.5448, 241.766}, {53.315, 241.128}, {58.2816, 249.319}, - {59.0518, 248.681}, {58.2924, 249.332}, {59.0409, 248.668}, - {65.7267, 258.309}, {66.4752, 257.646}, {65.7376, 258.321}, - {66.4644, 257.634}, {73.5471, 267.136}, {74.2739, 266.449}, - {73.558, 267.147}, {74.2631, 266.438}, {81.7338, 275.798}, - {82.439, 275.089}, {81.7445, 275.808}, {82.4283, 275.078}, - {90.2775, 284.294}, {90.9613, 283.564}, {90.2844, 284.3}, - {90.9544, 283.558}, {99.165, 292.621}, {99.835, 291.879}, - {99.168, 292.624}, {99.832, 291.876}, {114.93, 306.849}, - {115.594, 306.102}, {114.933, 306.852}, {115.591, 306.099}, - {131.104, 321.215}, {131.762, 320.462}, {131.101, 321.212}, - {131.765, 320.464}, {147.668, 335.707}, {148.332, 334.96}, - {147.66, 335.7}, {148.34, 334.967}, {160.581, 347.178}, - {161.261, 346.445}, {160.573, 347.171}, {161.268, 346.452}, - {173.409, 359.074}, {174.104, 358.355}, {173.402, 359.068}, - {174.111, 358.362}, {186.151, 371.385}, {186.86, 370.679}, - {186.143, 371.376}, {186.868, 370.688}, {198.804, 384.094}, - {199.529, 383.406}, {198.794, 384.084}, {199.539, 383.417}, - {207.382, 393.138}, {208.127, 392.471}, {207.373, 393.128}, - {208.136, 392.482}, {215.781, 402.522}, {216.544, 401.876}, - {215.772, 402.511}, {216.553, 401.886}, {224, 412.236}, - {224.781, 411.611}, {223.992, 412.226}, {224.789, 411.621}, - {232.041, 422.273}, {232.837, 421.668}, {232.033, 422.263}, - {232.844, 421.678}, {239.903, 432.625}, {240.714, 432.04}, - {240.719, 432.618}, {239.898, 432.047}, {248.41, 443.286}, - {247.59, 442.714}, {248.403, 443.296}, {247.597, 442.704}, - {255.809, 432.663}, {255.004, 432.07}, {255.801, 432.674}, - {255.012, 432.059}, {263.412, 422.334}, {262.623, 421.72}, - {263.404, 422.345}, {262.632, 421.709}, {271.22, 412.306}, - {270.448, 411.67}, {271.211, 412.317}, {270.458, 411.659}, - {279.233, 402.587}, {278.48, 401.929}, {279.223, 402.598}, - {278.49, 401.918}, {287.451, 393.183}, {286.718, 392.503}, - {287.442, 393.192}, {286.727, 392.494}, {295.876, 384.099}, - {295.161, 383.401}, {295.869, 384.106}, {295.168, 383.394}, - {308.423, 371.234}, {307.721, 370.522}, {308.415, 371.242}, - {307.729, 370.514}, {321.094, 358.764}, {320.408, 358.036}, - {321.086, 358.771}, {320.416, 358.029}, {333.889, 346.697}, - {333.219, 345.955}, {333.886, 346.7}, {333.222, 345.952}, - {346.813, 335.041}, {346.15, 334.292}, {346.815, 335.039}, - {346.148, 334.294}, {363.515, 320.242}, {362.848, 319.497}, - {363.517, 320.24}, {362.846, 319.499}, {379.86, 305.6}, - {379.189, 304.859}, {379.866, 305.594}, {379.183, 304.864}, - {395.842, 291.115}, {395.158, 290.385}, {395.852, 291.105}, - {395.148, 290.395}, {404.882, 282.647}, {404.179, 281.936}, - {404.892, 282.636}, {404.169, 281.946}, {413.586, 274.032}, - {412.862, 273.341}, {413.596, 274.021}, {412.852, 273.352}, - {421.942, 265.27}, {421.198, 264.602}, {421.952, 265.258}, - {421.188, 264.613}, {429.943, 256.362}, {429.178, 255.718}, - {429.955, 256.347}, {429.166, 255.733}, {437.58, 247.307}, - {436.79, 246.693}, {437.594, 247.287}, {436.776, 246.713}, - {443.464, 239.737}, {442.646, 239.163}, {443.478, 239.717}, - {442.632, 239.183}, {448.939, 231.941}, {448.094, 231.408}, - {448.952, 231.92}, {448.081, 231.429}, {453.998, 223.923}, - {453.126, 223.433}, {454.01, 223.901}, {453.115, 223.455}, - {458.633, 215.689}, {457.738, 215.243}, {458.644, 215.666}, - {457.727, 215.266}, {462.841, 207.243}, {461.924, 206.843}, - {462.851, 207.217}, {461.914, 206.869}, {466.617, 198.591}, - {465.679, 198.243}, {466.626, 198.562}, {465.67, 198.271}, - {469.494, 190.842}, {468.538, 190.551}, {469.502, 190.814}, - {468.53, 190.579}, {471.922, 182.865}, {470.951, 182.63}, - {471.928, 182.838}, {470.945, 182.657}, {473.904, 174.672}, - {472.921, 174.492}, {473.908, 174.646}, {472.917, 174.518}, - {475.445, 166.275}, {474.453, 166.147}, {475.448, 166.25}, - {474.451, 166.173}, {476.552, 157.688}, {475.555, 157.61}, - {476.553, 157.664}, {475.554, 157.634}, {477.234, 148.922}, - {476.234, 148.893}, {477.234, 148.889}, {476.234, 148.926}, - {477.5, 139.981}, {476.5, 140.019}, {477.497, 139.95}, - {476.503, 140.05}, {477.194, 131.813}, {476.199, 131.913}, - {477.19, 131.78}, {476.204, 131.946}, {476.383, 123.775}, - {475.396, 123.94}, {476.376, 123.742}, {475.403, 123.973}, - {475.058, 115.881}, {474.085, 116.112}, {475.049, 115.848}, - {474.094, 116.145}, {473.216, 108.144}, {472.262, 108.442}, - {473.205, 108.112}, {472.273, 108.474}, {470.858, 100.578}, - {469.926, 100.94}, {470.845, 100.548}, {469.938, 100.97}, - {467.984, 93.1951}, {467.078, 93.6174}, {467.97, 93.1672}, - {467.092, 93.6453}, {464.683, 86.1112}, {463.804, 86.5892}, - {464.667, 86.0838}, {463.821, 86.6167}, {460.971, 79.2935}, - {460.125, 79.8264}, {460.953, 79.267}, {460.143, 79.853}, - {456.851, 72.7531}, {456.041, 73.3392}, {456.832, 72.7278}, - {456.061, 73.3646}, {452.327, 66.4998}, {451.556, 67.1366}, - {452.306, 66.4759}, {451.577, 67.1604}, {447.405, 60.5417}, - {446.676, 61.2262}, {447.383, 60.5195}, {446.698, 61.2485}, - {442.092, 54.8855}, {441.408, 55.6145}, {442.068, 54.8645}, - {441.432, 55.6355}, {436.434, 49.5739}, {435.798, 50.345}, - {436.409, 49.5543}, {435.823, 50.3646}, {430.475, 44.653}, - {429.889, 45.4633}, {430.448, 44.635}, {429.915, 45.4812}, - {424.22, 40.1306}, {423.687, 40.9768}, {424.193, 40.1145}, - {423.715, 40.9929}, {417.679, 36.0127}, {417.201, 36.8911}, - {417.651, 35.9987}, {417.229, 36.9051}, {410.861, 32.3032}, - {410.439, 33.2096}, {410.831, 32.2904}, {410.469, 33.2224}, - {403.775, 29.0028}, {403.412, 29.9347}, {403.742, 28.9914}, - {403.445, 29.9461}, {396.39, 26.131}, {396.092, 27.0857}, - {396.357, 26.1219}, {396.125, 27.0948}, {388.823, 23.7744}, - {388.591, 24.7473}, {388.79, 23.7677}, {388.624, 24.754}, - {381.086, 21.9354}, {380.921, 22.9217}, {381.054, 21.9311}, - {380.953, 22.926}, {373.193, 20.6131}, {373.092, 21.608}, - {373.161, 20.6109}, {373.124, 21.6102}, {365.156, 19.8036}, - {365.118, 20.8029}, {365.119, 19.8035}, {365.154, 20.8029}, - {356.982, 19.5003}, {357.018, 20.4997}, {356.952, 19.5023}, - {357.048, 20.4977}, {349.054, 19.7799}, {349.15, 20.7754}, - {349.023, 19.7839}, {349.181, 20.7714}, {341.244, 20.5304}, - {341.402, 21.5179}, {341.213, 20.5365}, {341.434, 21.5118}, - {333.565, 21.7575}, {333.786, 22.7329}, {333.534, 21.7658}, - {333.818, 22.7246}, {326.028, 23.4649}, {326.312, 24.4237}, - {325.997, 23.4753}, {326.343, 24.4133}, {318.645, 25.6533}, - {318.991, 26.5914}, {318.616, 25.6651}, {319.02, 26.5796}, - {311.427, 28.3205}, {311.832, 29.235}, {311.4, 28.3336}, - {311.859, 29.2219}, {304.492, 31.3895}, {304.951, 32.2778}, - {304.465, 31.4045}, {304.978, 32.2628}, {297.801, 34.8487}, - {298.314, 35.707}, {297.775, 34.8655}, {298.341, 35.6901}, - {291.367, 38.697}, {291.932, 39.5216}, {291.341, 38.7155}, - {291.958, 39.5031}, {285.197, 42.9313}, {285.813, 43.7189}, - {285.173, 42.9512}, {285.837, 43.699}, {279.3, 47.5467}, - {279.964, 48.2944}, {279.278, 47.5679}, {279.987, 48.2732}, - {273.683, 52.5363}, {274.392, 53.2415}, {273.661, 52.5592}, - {274.413, 53.2185}, {268.391, 57.857}, {269.143, 58.5163}, - {268.371, 57.8815}, {269.163, 58.4917}, {263.465, 63.4768}, - {264.257, 64.087}, {263.446, 63.5026}, {264.276, 64.0613}, - {258.912, 69.3896}, {259.741, 69.9483}, {258.895, 69.4162}, - {259.758, 69.9216}, {254.738, 75.5876}, {255.601, 76.093}, - {254.723, 75.6147}, {255.615, 76.0659}, {250.947, 82.0618}, - {251.839, 82.5129}, {251.84, 82.0624}, {250.947, 82.5122}, - {248.447, 88.7751}, {247.553, 89.2249}, {248.432, 88.7486}, - {247.568, 89.2514}, {245.055, 82.0419}, {244.19, 82.5447}, - {245.038, 82.0157}, {244.207, 82.5709}, {241.29, 75.5723}, - {240.458, 76.1274}, {241.271, 75.5469}, {240.476, 76.1528}, - {237.153, 69.3766}, {236.357, 69.9825}, {237.133, 69.3523}, - {236.377, 70.0068}, {232.648, 63.464}, {231.892, 64.1185}, - {232.627, 63.4412}, {231.913, 64.1414}, {227.781, 57.8422}, - {227.067, 58.5424}, {227.758, 57.8209}, {227.089, 58.5638}, - {222.557, 52.5174}, {221.888, 53.2604}, {222.533, 52.4972}, - {221.911, 53.2806}, {217.02, 47.5303}, {216.398, 48.3137}, - {216.995, 47.5114}, {216.424, 48.3325}, {211.203, 42.9166}, - {210.632, 43.7376}, {211.176, 42.8994}, {210.659, 43.7548}, - {205.113, 38.6835}, {204.595, 39.5389}, {205.086, 38.6682}, - {204.622, 39.5542}, {198.757, 34.8362}, {198.294, 35.7223}, - {198.73, 34.8229}, {198.321, 35.7356}, {192.145, 31.378}, - {191.737, 32.2908}, {192.116, 31.3659}, {191.766, 32.3028}, - {185.286, 28.3093}, {184.936, 29.2462}, {185.254, 28.2987}, - {184.968, 29.2569}, {178.132, 25.6404}, {177.845, 26.5986}, - {178.1, 25.632}, {177.877, 26.607}, {170.804, 23.4531}, - {170.582, 24.4281}, {170.772, 23.4469}, {170.614, 24.4343}, - {163.313, 21.7483}, {163.155, 22.7357}, {163.282, 21.7443}, - {163.186, 22.7397}, {155.673, 20.5245}, {155.577, 21.5199}, - {155.642, 20.5225}, {155.607, 21.5219}, {147.893, 19.7773}, - {147.858, 20.7767}, {147.947, 19.782}, {147.805, 20.772}, - {140.071, 19.505}, {139.929, 20.495}, -}; + {139.982, 19.5003}, {140.018, 20.4997}, {131.747, 19.8026}, + {131.783, 20.802}, {131.715, 19.8048}, {131.815, 20.7998}, + {123.622, 20.6102}, {123.721, 21.6053}, {123.59, 20.6145}, + {123.753, 21.601}, {115.652, 21.9306}, {115.816, 22.9171}, + {115.619, 21.9372}, {115.848, 22.9105}, {107.85, 23.7687}, + {108.08, 24.742}, {107.817, 23.7777}, {108.113, 24.733}, + {100.23, 26.1264}, {100.526, 27.0817}, {100.197, 26.1378}, + {100.558, 27.0703}, {92.8037, 29.0025}, {93.165, 29.935}, + {92.7736, 29.0154}, {93.1952, 29.9221}, {85.708, 32.3003}, + {86.1296, 33.2071}, {85.68, 32.3144}, {86.1576, 33.193}, + {78.8865, 36.008}, {79.3641, 36.8865}, {78.8588, 36.0242}, + {79.3918, 36.8703}, {72.3485, 40.125}, {72.8815, 40.9711}, + {72.3216, 40.1432}, {72.9084, 40.9529}, {66.1045, 44.6479}, + {66.6913, 45.4577}, {66.0788, 44.6679}, {66.717, 45.4378}, + {60.1632, 49.5711}, {60.8014, 50.341}, {60.139, 49.5924}, + {60.8255, 50.3196}, {54.5317, 54.8864}, {55.2183, 55.6136}, + {54.5094, 54.909}, {55.2406, 55.591}, {49.254, 60.5436}, + {49.9853, 61.2257}, {49.2329, 60.5677}, {50.0063, 61.2016}, + {44.3684, 66.5025}, {45.1418, 67.1364}, {44.3488, 66.5281}, + {45.1614, 67.1108}, {39.8827, 72.7564}, {40.6954, 73.3391}, + {39.8648, 72.7832}, {40.7133, 73.3123}, {35.8029, 79.297}, + {36.6515, 79.8261}, {35.7869, 79.3246}, {36.6675, 79.7985}, + {32.1328, 86.1144}, {33.0134, 86.5883}, {32.1188, 86.1424}, + {33.0273, 86.5603}, {28.8739, 93.1973}, {29.7824, 93.6152}, + {28.8613, 93.2272}, {29.795, 93.5853}, {26.0399, 100.583}, + {26.9736, 100.941}, {26.0288, 100.615}, {26.9847, 100.908}, + {23.7144, 108.15}, {24.6704, 108.444}, {23.7056, 108.183}, + {24.6792, 108.411}, {21.9002, 115.886}, {22.8738, 116.115}, + {21.8937, 115.919}, {22.8804, 116.082}, {20.5962, 123.779}, + {21.5828, 123.942}, {20.592, 123.812}, {21.5871, 123.91}, + {19.7985, 131.816}, {20.7936, 131.914}, {19.7964, 131.847}, + {20.7957, 131.883}, {19.5003, 139.982}, {20.4997, 140.018}, + {19.5002, 140.014}, {20.4998, 139.986}, {19.7536, 149.211}, + {20.7532, 149.184}, {19.7547, 149.234}, {20.7521, 149.161}, + {20.4073, 158.25}, {21.4047, 158.178}, {20.4096, 158.273}, + {21.4024, 158.154}, {21.4725, 167.094}, {22.4653, 166.975}, + {21.4761, 167.119}, {22.4616, 166.95}, {22.9592, 175.73}, + {23.9447, 175.561}, {22.9644, 175.757}, {23.9394, 175.535}, + {24.8762, 184.144}, {25.8512, 183.922}, {24.8833, 184.172}, + {25.8442, 183.895}, {27.2309, 192.322}, {28.1918, 192.045}, + {27.2398, 192.35}, {28.1828, 192.017}, {30.0285, 200.25}, + {30.9715, 199.917}, {30.0385, 200.276}, {30.9615, 199.891}, + {33.6769, 209.007}, {34.5999, 208.622}, {33.6872, 209.03}, + {34.5896, 208.599}, {37.7522, 217.539}, {38.6545, 217.108}, + {37.7638, 217.562}, {38.6429, 217.085}, {42.2532, 225.841}, + {43.1323, 225.365}, {42.266, 225.863}, {43.1195, 225.342}, + {47.1765, 233.907}, {48.03, 233.386}, {47.1903, 233.928}, + {48.0162, 233.364}, {52.517, 241.729}, {53.3428, 241.165}, + {52.5317, 241.749}, {53.3281, 241.144}, {58.2685, 249.302}, + {59.0648, 248.698}, {58.2816, 249.319}, {59.0518, 248.681}, + {65.7159, 258.297}, {66.4861, 257.659}, {65.7267, 258.309}, + {66.4752, 257.646}, {73.5363, 267.124}, {74.2848, 266.461}, + {73.5471, 267.136}, {74.2739, 266.449}, {81.723, 275.787}, + {82.4498, 275.1}, {81.7338, 275.798}, {82.439, 275.089}, + {90.2668, 284.284}, {90.972, 283.575}, {90.2775, 284.294}, + {90.9613, 283.564}, {99.1581, 292.615}, {99.8419, 291.885}, + {99.165, 292.621}, {99.835, 291.879}, {114.927, 306.847}, + {115.597, 306.104}, {114.93, 306.849}, {115.594, 306.102}, + {131.101, 321.212}, {131.765, 320.464}, {131.104, 321.215}, + {131.762, 320.462}, {147.671, 335.71}, {148.329, 334.957}, + {147.668, 335.707}, {148.332, 334.96}, {160.589, 347.185}, + {161.253, 346.437}, {160.581, 347.178}, {161.261, 346.445}, + {173.416, 359.081}, {174.096, 358.348}, {173.409, 359.074}, + {174.104, 358.355}, {186.158, 371.391}, {186.853, 370.672}, + {186.151, 371.385}, {186.86, 370.679}, {198.812, 384.103}, + {199.521, 383.397}, {198.804, 384.094}, {199.529, 383.406}, + {207.392, 393.149}, {208.117, 392.461}, {207.382, 393.138}, + {208.127, 392.471}, {215.79, 402.532}, {216.535, 401.865}, + {215.781, 402.522}, {216.544, 401.876}, {224.009, 412.246}, + {224.772, 411.6}, {224, 412.236}, {224.781, 411.611}, + {232.049, 422.283}, {232.829, 421.658}, {232.041, 422.273}, + {232.837, 421.668}, {239.91, 432.635}, {240.707, 432.03}, + {239.903, 432.625}, {240.714, 432.04}, {247.594, 443.292}, + {248.406, 442.708}, {248.41, 443.286}, {247.59, 442.714}, + {255.817, 432.652}, {254.996, 432.081}, {255.809, 432.663}, + {255.004, 432.07}, {263.421, 422.323}, {262.615, 421.73}, + {263.412, 422.334}, {262.623, 421.72}, {271.229, 412.296}, + {270.44, 411.681}, {271.22, 412.306}, {270.448, 411.67}, + {279.242, 402.576}, {278.471, 401.94}, {279.233, 402.587}, + {278.48, 401.929}, {287.461, 393.172}, {286.708, 392.514}, + {287.451, 393.183}, {286.718, 392.503}, {295.885, 384.09}, + {295.152, 383.41}, {295.876, 384.099}, {295.161, 383.401}, + {308.43, 371.227}, {307.714, 370.529}, {308.423, 371.234}, + {307.721, 370.522}, {321.101, 358.756}, {320.4, 358.043}, + {321.094, 358.764}, {320.408, 358.036}, {333.897, 346.69}, + {333.211, 345.962}, {333.889, 346.697}, {333.219, 345.955}, + {346.816, 335.038}, {346.147, 334.295}, {346.813, 335.041}, + {346.15, 334.292}, {363.513, 320.244}, {362.85, 319.495}, + {363.515, 320.242}, {362.848, 319.497}, {379.858, 305.602}, + {379.191, 304.857}, {379.86, 305.6}, {379.189, 304.859}, + {395.836, 291.12}, {395.164, 290.38}, {395.842, 291.115}, + {395.158, 290.385}, {404.872, 282.656}, {404.189, 281.926}, + {404.882, 282.647}, {404.179, 281.936}, {413.576, 274.042}, + {412.872, 273.331}, {413.586, 274.032}, {412.862, 273.341}, + {421.932, 265.281}, {421.208, 264.591}, {421.942, 265.27}, + {421.198, 264.602}, {429.932, 256.374}, {429.188, 255.706}, + {429.943, 256.362}, {429.178, 255.718}, {437.567, 247.322}, + {436.803, 246.678}, {437.58, 247.307}, {436.79, 246.693}, + {443.45, 239.757}, {442.66, 239.143}, {443.464, 239.737}, + {442.646, 239.163}, {448.926, 231.962}, {448.107, 231.387}, + {448.939, 231.941}, {448.094, 231.408}, {453.985, 223.945}, + {453.139, 223.411}, {453.998, 223.923}, {453.126, 223.433}, + {458.621, 215.711}, {457.75, 215.22}, {458.633, 215.689}, + {457.738, 215.243}, {462.83, 207.266}, {461.935, 206.82}, + {462.841, 207.243}, {461.924, 206.843}, {466.606, 198.617}, + {465.69, 198.217}, {466.617, 198.591}, {465.679, 198.243}, + {469.485, 190.871}, {468.547, 190.522}, {469.494, 190.842}, + {468.538, 190.551}, {471.915, 182.893}, {470.958, 182.602}, + {471.922, 182.865}, {470.951, 182.63}, {473.898, 174.7}, + {472.927, 174.464}, {473.904, 174.672}, {472.921, 174.492}, + {475.441, 166.302}, {474.457, 166.121}, {475.445, 166.275}, + {474.453, 166.147}, {476.55, 157.713}, {475.558, 157.585}, + {476.552, 157.688}, {475.555, 157.61}, {477.232, 148.946}, + {476.235, 148.869}, {477.234, 148.922}, {476.234, 148.893}, + {477.5, 140.015}, {476.5, 139.985}, {477.5, 139.981}, + {476.5, 140.019}, {477.196, 131.844}, {476.197, 131.882}, + {477.194, 131.813}, {476.199, 131.913}, {476.387, 123.807}, + {475.392, 123.908}, {476.383, 123.775}, {475.396, 123.94}, + {475.065, 115.914}, {474.078, 116.079}, {475.058, 115.881}, + {474.085, 116.112}, {473.226, 108.177}, {472.253, 108.409}, + {473.216, 108.144}, {472.262, 108.442}, {470.869, 100.61}, + {469.914, 100.908}, {470.858, 100.578}, {469.926, 100.94}, + {467.997, 93.225}, {467.065, 93.5875}, {467.984, 93.1951}, + {467.078, 93.6174}, {464.697, 86.1391}, {463.79, 86.5614}, + {464.683, 86.1112}, {463.804, 86.5892}, {460.987, 79.321}, + {460.109, 79.799}, {460.971, 79.2935}, {460.125, 79.8264}, + {456.869, 72.7797}, {456.023, 73.3126}, {456.851, 72.7531}, + {456.041, 73.3392}, {452.347, 66.5252}, {451.537, 67.1112}, + {452.327, 66.4998}, {451.556, 67.1366}, {447.426, 60.5656}, + {446.655, 61.2024}, {447.405, 60.5417}, {446.676, 61.2262}, + {442.115, 54.9077}, {441.385, 55.5923}, {442.092, 54.8855}, + {441.408, 55.6145}, {436.458, 49.595}, {435.774, 50.3239}, + {436.434, 49.5739}, {435.798, 50.345}, {430.5, 44.6726}, + {429.863, 45.4436}, {430.475, 44.653}, {429.889, 45.4633}, + {424.247, 40.1486}, {423.661, 40.9588}, {424.22, 40.1306}, + {423.687, 40.9768}, {417.706, 36.0288}, {417.174, 36.875}, + {417.679, 36.0127}, {417.201, 36.8911}, {410.889, 32.3172}, + {410.411, 33.1956}, {410.861, 32.3032}, {410.439, 33.2096}, + {403.805, 29.0155}, {403.383, 29.922}, {403.775, 29.0028}, + {403.412, 29.9347}, {396.422, 26.1423}, {396.06, 27.0743}, + {396.39, 26.131}, {396.092, 27.0857}, {388.856, 23.7835}, + {388.558, 24.7382}, {388.823, 23.7744}, {388.591, 24.7473}, + {381.119, 21.9421}, {380.888, 22.915}, {381.086, 21.9354}, + {380.921, 22.9217}, {373.225, 20.6175}, {373.06, 21.6037}, + {373.193, 20.6131}, {373.092, 21.608}, {365.187, 19.8057}, + {365.087, 20.8007}, {365.156, 19.8036}, {365.118, 20.8029}, + {357.019, 19.5003}, {356.981, 20.4997}, {356.982, 19.5003}, + {357.018, 20.4997}, {349.084, 19.778}, {349.12, 20.7773}, + {349.054, 19.7799}, {349.15, 20.7754}, {341.275, 20.5264}, + {341.371, 21.5218}, {341.244, 20.5304}, {341.402, 21.5179}, + {333.597, 21.7514}, {333.754, 22.7389}, {333.565, 21.7575}, + {333.786, 22.7329}, {326.06, 23.4566}, {326.281, 24.4319}, + {326.028, 23.4649}, {326.312, 24.4237}, {318.676, 25.6429}, + {318.96, 26.6017}, {318.645, 25.6533}, {318.991, 26.5914}, + {311.456, 28.3088}, {311.803, 29.2468}, {311.427, 28.3205}, + {311.832, 29.235}, {304.519, 31.3764}, {304.923, 32.2909}, + {304.492, 31.3895}, {304.951, 32.2778}, {297.828, 34.8336}, + {298.287, 35.722}, {297.801, 34.8487}, {298.314, 35.707}, + {291.393, 38.6801}, {291.906, 39.5384}, {291.367, 38.697}, + {291.932, 39.5216}, {285.222, 42.9128}, {285.788, 43.7374}, + {285.197, 42.9313}, {285.813, 43.7189}, {279.324, 47.5267}, + {279.94, 48.3143}, {279.3, 47.5467}, {279.964, 48.2944}, + {273.705, 52.515}, {274.369, 53.2628}, {273.683, 52.5363}, + {274.392, 53.2415}, {268.412, 57.834}, {269.121, 58.5393}, + {268.391, 57.857}, {269.143, 58.5163}, {263.485, 63.4523}, + {264.237, 64.1116}, {263.465, 63.4768}, {264.257, 64.087}, + {258.93, 69.3638}, {259.722, 69.974}, {258.912, 69.3896}, + {259.741, 69.9483}, {254.754, 75.561}, {255.584, 76.1196}, + {254.738, 75.5876}, {255.601, 76.093}, {250.962, 82.0346}, + {251.825, 82.54}, {250.947, 82.0618}, {251.839, 82.5129}, + {247.554, 88.7744}, {248.446, 89.2256}, {248.447, 88.7751}, + {247.553, 89.2249}, {245.069, 82.0684}, {244.176, 82.5182}, + {245.055, 82.0419}, {244.19, 82.5447}, {241.306, 75.5984}, + {240.442, 76.1013}, {241.29, 75.5723}, {240.458, 76.1274}, + {237.171, 69.402}, {236.339, 69.9572}, {237.153, 69.3766}, + {236.357, 69.9825}, {232.668, 63.4883}, {231.872, 64.0942}, + {232.648, 63.464}, {231.892, 64.1185}, {227.802, 57.8651}, + {227.046, 58.5196}, {227.781, 57.8422}, {227.067, 58.5424}, + {222.579, 52.5388}, {221.865, 53.239}, {222.557, 52.5174}, + {221.888, 53.2604}, {217.044, 47.5505}, {216.374, 48.2934}, + {217.02, 47.5303}, {216.398, 48.3137}, {211.228, 42.9354}, + {210.607, 43.7188}, {211.203, 42.9166}, {210.632, 43.7376}, + {205.139, 38.7007}, {204.568, 39.5217}, {205.113, 38.6835}, + {204.595, 39.5389}, {198.784, 34.8515}, {198.266, 35.7069}, + {198.757, 34.8362}, {198.294, 35.7223}, {192.173, 31.3913}, + {191.709, 32.2774}, {192.145, 31.378}, {191.737, 32.2908}, + {185.315, 28.3214}, {184.907, 29.2342}, {185.286, 28.3093}, + {184.936, 29.2462}, {178.163, 25.6511}, {177.814, 26.588}, + {178.132, 25.6404}, {177.845, 26.5986}, {170.836, 23.4615}, + {170.55, 24.4197}, {170.804, 23.4531}, {170.582, 24.4281}, + {163.345, 21.7545}, {163.123, 22.7295}, {163.313, 21.7483}, + {163.155, 22.7357}, {155.704, 20.5285}, {155.546, 21.5159}, + {155.673, 20.5245}, {155.577, 21.5199}, {147.924, 19.7793}, + {147.828, 20.7747}, {147.893, 19.7773}, {147.858, 20.7767}, + {140.018, 19.5003}, {139.982, 20.4997}, {140, 20}, + {140, 20}}; } // namespace testing } // namespace impeller diff --git a/impeller/fixtures/stroke.comp b/impeller/fixtures/stroke.comp index 5a48a29c61e1e..7f5453cd0cd62 100644 --- a/impeller/fixtures/stroke.comp +++ b/impeller/fixtures/stroke.comp @@ -47,10 +47,17 @@ void main() { atomicAdd(vertex_buffer_count.count, 4); - vec2 offset = compute_offset(ident); uint index = ident - 1; + vec2 offset = compute_offset(index); vertex_buffer.position[index * 4 + 0] = polyline.data[ident - 1] + offset; vertex_buffer.position[index * 4 + 1] = polyline.data[ident - 1] - offset; vertex_buffer.position[index * 4 + 2] = polyline.data[ident] + offset; vertex_buffer.position[index * 4 + 3] = polyline.data[ident] - offset; + + // TODO(dnfield): Implement other cap/join mechanisms. + if (ident == polyline.count - 1) { + vertex_buffer.position[index * 4 + 4] = vec2(140, 20); + vertex_buffer.position[index * 4 + 5] = vec2(140, 20); + atomicAdd(vertex_buffer_count.count, 2); + } } diff --git a/impeller/geometry/geometry_unittests.cc b/impeller/geometry/geometry_unittests.cc index 927f8536a3f49..b5720d0c0cebd 100644 --- a/impeller/geometry/geometry_unittests.cc +++ b/impeller/geometry/geometry_unittests.cc @@ -1646,6 +1646,13 @@ TEST(GeometryTest, RectGetPoints) { ASSERT_POINT_NEAR(points[3], Point(400, 600)); } +TEST(GeometryTest, RectShift) { + auto r = Rect::MakeLTRB(0, 0, 100, 100); + + ASSERT_EQ(r.Shift(Point(10, 5)), Rect::MakeLTRB(10, 5, 110, 105)); + ASSERT_EQ(r.Shift(Point(-10, -5)), Rect::MakeLTRB(-10, -5, 90, 95)); +} + TEST(GeometryTest, RectGetTransformedPoints) { Rect r(100, 200, 300, 400); auto points = r.GetTransformedPoints(Matrix::MakeTranslation({10, 20})); diff --git a/impeller/geometry/rect.h b/impeller/geometry/rect.h index 4dd4107107144..afeb68620d9a2 100644 --- a/impeller/geometry/rect.h +++ b/impeller/geometry/rect.h @@ -238,6 +238,12 @@ struct TRect { return *this; } + + /// @brief Returns a new rectangle translated by the given offset. + constexpr TRect Shift(TPoint offset) const { + return TRect(origin.x + offset.x, origin.y + offset.y, size.width, + size.height); + } }; using Rect = TRect; diff --git a/impeller/renderer/compute_subgroup_unittests.cc b/impeller/renderer/compute_subgroup_unittests.cc index 1b93ae66ec243..e0f6b86dfecd1 100644 --- a/impeller/renderer/compute_subgroup_unittests.cc +++ b/impeller/renderer/compute_subgroup_unittests.cc @@ -136,7 +136,7 @@ TEST_P(ComputeTest, HeartCubicsToStrokeVertices) { pass->SetThreadGroupSize(ISize(1024, 1)); ComputeCommand cmd; - cmd.label = "Draw Stroke"; + cmd.label = "Compute Stroke"; cmd.pipeline = compute_pipeline; SS::Config config{.width = 1.0f, .cap = 1, .join = 1, .miter_limit = 4.0f}; @@ -161,7 +161,7 @@ TEST_P(ComputeTest, HeartCubicsToStrokeVertices) { quads->AsBufferView().contents); EXPECT_EQ(q->count, golden_heart_quads.size()); - for (size_t i = 0; i < golden_heart_quads.size(); i++) { + for (size_t i = 0; i < q->count; i++) { EXPECT_LT(std::abs(golden_heart_quads[i].p1.x - q->data[i].p1.x), 1e-3); EXPECT_LT(std::abs(golden_heart_quads[i].p1.y - q->data[i].p1.y), 1e-3); @@ -185,7 +185,7 @@ TEST_P(ComputeTest, HeartCubicsToStrokeVertices) { auto* v_count = reinterpret_cast( vertex_buffer_count->AsBufferView().contents); EXPECT_EQ(v_count->count, golden_heart_vertices.size()); - for (size_t i = 0; i < golden_heart_vertices.size(); i += 1) { + for (size_t i = 0; i < v_count->count; i += 1) { EXPECT_LT(std::abs(golden_heart_vertices[i].x - v->position[i].x), 1e-3); EXPECT_LT(std::abs(golden_heart_vertices[i].y - v->position[i].y), 1e-3); } @@ -221,7 +221,9 @@ TEST_P(ComputeTest, HeartCubicsToStrokeVertices) { cmd.pipeline = renderer.GetSolidFillPipeline(options); - auto count = golden_heart_vertices.size(); + auto count = reinterpret_cast( + vertex_buffer_count->AsBufferView().contents) + ->count; auto& host_buffer = pass.GetTransientsBuffer(); std::vector indices(count); std::iota(std::begin(indices), std::end(indices), 0); diff --git a/impeller/renderer/vertex_buffer_builder.h b/impeller/renderer/vertex_buffer_builder.h index 61cfd3156ec17..4d0e29df9e0f9 100644 --- a/impeller/renderer/vertex_buffer_builder.h +++ b/impeller/renderer/vertex_buffer_builder.h @@ -91,6 +91,12 @@ class VertexBufferBuilder { return buffer; }; + void IterateVertices(const std::function& iterator) { + for (auto& vertex : vertices_) { + iterator(vertex); + } + } + private: std::vector vertices_; std::vector indices_; diff --git a/impeller/tools/malioc.json b/impeller/tools/malioc.json index 2e3f6a5bf195a..f2e92393ea583 100644 --- a/impeller/tools/malioc.json +++ b/impeller/tools/malioc.json @@ -1 +1,7427 @@ -{"flutter/impeller/entity/gles/advanced_blend.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend.vert.gles", "has_uniform_computation": true, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 16, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.0625, 0.03125, 0.0625, 0.0, 4.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.0625, 0.03125, 0.0625, 0.0, 4.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.0625, 0.03125, 0.0625, 0.0, 4.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 8}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [3.299999952316284, 7.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [3.299999952316284, 7.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [3.3333332538604736, 7.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 3}}}}, "flutter/impeller/entity/gles/advanced_blend_color.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend_color.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 82, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_fma"], "longest_path_cycles": [0.65625, 0.65625, 0.53125, 0.625, 0.0, 0.5, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt"], "shortest_path_cycles": [0.375, 0.328125, 0.375, 0.25, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_fma"], "total_cycles": [0.65625, 0.65625, 0.578125, 0.625, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 12, "work_registers_used": 20}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend_color.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [9.899999618530273, 2.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [5.940000057220459, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [11.0, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 3}}}}, "flutter/impeller/entity/gles/advanced_blend_colorburn.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend_colorburn.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_sfu"], "longest_path_cycles": [0.6875, 0.265625, 0.675000011920929, 0.6875, 0.0, 0.5, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt"], "shortest_path_cycles": [0.515625, 0.234375, 0.515625, 0.4375, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_cvt"], "total_cycles": [0.71875, 0.265625, 0.71875, 0.6875, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 26}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend_colorburn.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [10.5600004196167, 2.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [8.25, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [11.333333015441895, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 3}}}}, "flutter/impeller/entity/gles/advanced_blend_colordodge.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend_colordodge.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_sfu"], "longest_path_cycles": [0.6875, 0.234375, 0.675000011920929, 0.6875, 0.0, 0.5, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt"], "shortest_path_cycles": [0.515625, 0.203125, 0.515625, 0.4375, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_cvt"], "total_cycles": [0.71875, 0.234375, 0.71875, 0.6875, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 26}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend_colordodge.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [10.229999542236328, 2.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [7.920000076293945, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [11.0, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 3}}}}, "flutter/impeller/entity/gles/advanced_blend_darken.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend_darken.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_sfu", "varying", "texture"], "longest_path_cycles": [0.5, 0.171875, 0.4375, 0.5, 0.0, 0.5, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt"], "shortest_path_cycles": [0.28125, 0.140625, 0.28125, 0.25, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_sfu", "varying", "texture"], "total_cycles": [0.5, 0.171875, 0.484375, 0.5, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 20}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend_darken.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [5.940000057220459, 2.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [3.299999952316284, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [6.666666507720947, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/advanced_blend_difference.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend_difference.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_sfu", "varying", "texture"], "longest_path_cycles": [0.5, 0.203125, 0.40625, 0.5, 0.0, 0.5, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt", "arith_sfu", "varying"], "shortest_path_cycles": [0.25, 0.171875, 0.25, 0.25, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_sfu", "varying", "texture"], "total_cycles": [0.5, 0.203125, 0.453125, 0.5, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 20}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend_difference.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [5.940000057220459, 2.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [3.299999952316284, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [6.666666507720947, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/advanced_blend_exclusion.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend_exclusion.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_sfu", "varying", "texture"], "longest_path_cycles": [0.5, 0.265625, 0.40625, 0.5, 0.0, 0.5, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt", "arith_sfu", "varying"], "shortest_path_cycles": [0.25, 0.234375, 0.25, 0.25, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_sfu", "varying", "texture"], "total_cycles": [0.5, 0.265625, 0.453125, 0.5, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 21}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend_exclusion.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [6.599999904632568, 2.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [3.9600000381469727, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [7.333333492279053, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 3}}}}, "flutter/impeller/entity/gles/advanced_blend_hardlight.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend_hardlight.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_sfu", "varying", "texture"], "longest_path_cycles": [0.5, 0.453125, 0.46875, 0.5, 0.0, 0.5, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_fma"], "shortest_path_cycles": [0.421875, 0.421875, 0.3125, 0.25, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_cvt"], "total_cycles": [0.515625, 0.453125, 0.515625, 0.5, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 25}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend_hardlight.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [7.590000152587891, 2.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [4.949999809265137, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [8.333333015441895, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 4}}}}, "flutter/impeller/entity/gles/advanced_blend_hue.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend_hue.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 86, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_fma"], "longest_path_cycles": [0.762499988079071, 0.762499988079071, 0.6875, 0.6875, 0.0, 0.5, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt"], "shortest_path_cycles": [0.515625, 0.328125, 0.515625, 0.25, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_cvt"], "total_cycles": [0.78125, 0.762499988079071, 0.78125, 0.6875, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 12, "work_registers_used": 21}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend_hue.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [11.880000114440918, 2.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [6.269999980926514, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [13.0, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 3}}}}, "flutter/impeller/entity/gles/advanced_blend_lighten.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend_lighten.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_sfu", "varying", "texture"], "longest_path_cycles": [0.5, 0.171875, 0.4375, 0.5, 0.0, 0.5, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt"], "shortest_path_cycles": [0.28125, 0.140625, 0.28125, 0.25, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_sfu", "varying", "texture"], "total_cycles": [0.5, 0.171875, 0.484375, 0.5, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 20}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend_lighten.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [5.940000057220459, 2.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [3.299999952316284, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [6.666666507720947, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/advanced_blend_luminosity.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend_luminosity.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 82, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_fma"], "longest_path_cycles": [0.65625, 0.65625, 0.53125, 0.625, 0.0, 0.5, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt"], "shortest_path_cycles": [0.375, 0.328125, 0.375, 0.25, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_fma"], "total_cycles": [0.65625, 0.65625, 0.578125, 0.625, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 12, "work_registers_used": 20}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend_luminosity.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [9.899999618530273, 2.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [5.940000057220459, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [11.0, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 3}}}}, "flutter/impeller/entity/gles/advanced_blend_multiply.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend_multiply.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_sfu", "varying", "texture"], "longest_path_cycles": [0.5, 0.203125, 0.40625, 0.5, 0.0, 0.5, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt", "arith_sfu", "varying"], "shortest_path_cycles": [0.25, 0.171875, 0.25, 0.25, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_sfu", "varying", "texture"], "total_cycles": [0.5, 0.203125, 0.453125, 0.5, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 20}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend_multiply.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [6.269999980926514, 2.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [3.630000114440918, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [7.0, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/advanced_blend_overlay.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend_overlay.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_sfu", "varying", "texture"], "longest_path_cycles": [0.5, 0.453125, 0.46875, 0.5, 0.0, 0.5, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_fma"], "shortest_path_cycles": [0.421875, 0.421875, 0.3125, 0.25, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_cvt"], "total_cycles": [0.515625, 0.453125, 0.515625, 0.5, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 25}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend_overlay.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [7.260000228881836, 2.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [4.949999809265137, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [8.0, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 4}}}}, "flutter/impeller/entity/gles/advanced_blend_saturation.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend_saturation.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 86, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_fma"], "longest_path_cycles": [0.762499988079071, 0.762499988079071, 0.6875, 0.6875, 0.0, 0.5, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt"], "shortest_path_cycles": [0.515625, 0.328125, 0.515625, 0.25, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_cvt"], "total_cycles": [0.78125, 0.762499988079071, 0.78125, 0.6875, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 12, "work_registers_used": 21}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend_saturation.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [12.210000038146973, 2.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [6.599999904632568, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [13.333333015441895, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 3}}}}, "flutter/impeller/entity/gles/advanced_blend_screen.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend_screen.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_sfu", "varying", "texture"], "longest_path_cycles": [0.5, 0.234375, 0.40625, 0.5, 0.0, 0.5, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt", "arith_sfu", "varying"], "shortest_path_cycles": [0.25, 0.203125, 0.25, 0.25, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_sfu", "varying", "texture"], "total_cycles": [0.5, 0.234375, 0.453125, 0.5, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 21}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend_screen.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [6.269999980926514, 2.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [3.630000114440918, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [7.0, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/advanced_blend_softlight.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/advanced_blend_softlight.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_fma"], "longest_path_cycles": [0.71875, 0.71875, 0.609375, 0.6875, 0.0, 0.5, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_fma"], "shortest_path_cycles": [0.6875, 0.6875, 0.453125, 0.4375, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_fma"], "total_cycles": [0.71875, 0.71875, 0.65625, 0.6875, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 12, "work_registers_used": 32}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/advanced_blend_softlight.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [10.5600004196167, 2.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [8.25, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [11.333333015441895, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 4}}}}, "flutter/impeller/entity/gles/blend.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/blend.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["texture"], "longest_path_cycles": [0.09375, 0.046875, 0.09375, 0.0, 0.0, 0.125, 0.25], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["texture"], "shortest_path_cycles": [0.0625, 0.046875, 0.0625, 0.0, 0.0, 0.125, 0.25], "total_bound_pipelines": ["texture"], "total_cycles": [0.09375, 0.046875, 0.09375, 0.0, 0.0, 0.125, 0.25]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 19}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/blend.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic", "load_store", "texture"], "longest_path_cycles": [1.0, 1.0, 1.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_cycles": [1.0, 1.0, 1.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [1.3333333730697632, 1.0, 1.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/blend.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/blend.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 14, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": null, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.0, 0.0, 0.0, 0.0, 3.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.0, 0.0, 0.0, 0.0, 3.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.0, 0.0, 0.0, 0.0, 3.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 6}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/blend.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [2.640000104904175, 5.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [2.640000104904175, 5.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [2.6666667461395264, 5.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/border_mask_blur.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/border_mask_blur.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 10, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_fma"], "longest_path_cycles": [0.8125, 0.8125, 0.234375, 0.25, 0.0, 0.25, 0.25], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_fma"], "shortest_path_cycles": [0.8125, 0.8125, 0.203125, 0.25, 0.0, 0.25, 0.25], "total_bound_pipelines": ["arith_total", "arith_fma"], "total_cycles": [0.8125, 0.8125, 0.234375, 0.25, 0.0, 0.25, 0.25]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 32}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/border_mask_blur.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [8.90999984741211, 1.0, 1.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [8.90999984741211, 1.0, 1.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [9.333333015441895, 1.0, 1.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 3}}}}, "flutter/impeller/entity/gles/border_mask_blur.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/border_mask_blur.vert.gles", "has_uniform_computation": true, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 16, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 7}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/border_mask_blur.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [2.9700000286102295, 5.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [2.9700000286102295, 5.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [3.0, 5.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/color_matrix_color_filter.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/color_matrix_color_filter.frag.gles", "has_side_effects": false, "has_uniform_computation": false, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_fma", "varying", "texture"], "longest_path_cycles": [0.25, 0.25, 0.09375, 0.0625, 0.0, 0.25, 0.25], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_fma", "varying", "texture"], "shortest_path_cycles": [0.25, 0.25, 0.0625, 0.0625, 0.0, 0.25, 0.25], "total_bound_pipelines": ["arith_total", "arith_fma", "varying", "texture"], "total_cycles": [0.25, 0.25, 0.09375, 0.0625, 0.0, 0.25, 0.25]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 14, "work_registers_used": 21}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/color_matrix_color_filter.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [2.640000104904175, 1.0, 1.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [2.640000104904175, 1.0, 1.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [3.0, 1.0, 1.0]}, "thread_occupancy": 100, "uniform_registers_used": 3, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/color_matrix_color_filter.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/color_matrix_color_filter.vert.gles", "has_uniform_computation": true, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 16, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 7}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/color_matrix_color_filter.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [2.9700000286102295, 4.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [2.9700000286102295, 4.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [3.0, 4.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/gaussian_blur.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/gaussian_blur.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 76, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": [null], "longest_path_cycles": [null, null, null, null, null, null, null], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["varying", "texture"], "shortest_path_cycles": [0.109375, 0.109375, 0.09375, 0.0625, 0.0, 0.25, 0.25], "total_bound_pipelines": ["varying", "texture"], "total_cycles": [0.3125, 0.3125, 0.21875, 0.125, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 12, "work_registers_used": 21}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/gaussian_blur.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": [null], "longest_path_cycles": [null, null, null], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [2.9700000286102295, 2.0, 1.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [5.0, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 2, "work_registers_used": 3}}}}, "flutter/impeller/entity/gles/gaussian_blur.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/gaussian_blur.vert.gles", "has_uniform_computation": true, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 16, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.0625, 0.03125, 0.0625, 0.0, 4.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.0625, 0.03125, 0.0625, 0.0, 4.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.0625, 0.03125, 0.0625, 0.0, 4.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 8}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/gaussian_blur.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [3.299999952316284, 7.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [3.299999952316284, 7.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [3.3333332538604736, 7.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 3}}}}, "flutter/impeller/entity/gles/gaussian_blur_decal.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/gaussian_blur_decal.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 79, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": [null], "longest_path_cycles": [null, null, null, null, null, null, null], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_sfu", "varying"], "shortest_path_cycles": [0.25, 0.109375, 0.1875, 0.25, 0.0, 0.25, 0.0], "total_bound_pipelines": ["arith_total", "arith_sfu", "varying", "texture"], "total_cycles": [0.5, 0.3125, 0.421875, 0.5, 0.0, 0.5, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 12, "work_registers_used": 21}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/gaussian_blur_decal.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": [null], "longest_path_cycles": [null, null, null], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [4.289999961853027, 2.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [8.333333015441895, 2.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 2, "work_registers_used": 4}}}}, "flutter/impeller/entity/gles/glyph_atlas.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/glyph_atlas.frag.gles", "has_side_effects": false, "has_uniform_computation": false, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["varying"], "longest_path_cycles": [0.09375, 0.03125, 0.09375, 0.0, 0.0, 0.375, 0.25], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["varying"], "shortest_path_cycles": [0.0625, 0.03125, 0.0625, 0.0, 0.0, 0.375, 0.25], "total_bound_pipelines": ["varying"], "total_cycles": [0.09375, 0.03125, 0.09375, 0.0, 0.0, 0.375, 0.25]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 6, "work_registers_used": 19}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/glyph_atlas.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic", "load_store", "texture"], "longest_path_cycles": [1.0, 1.0, 1.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_cycles": [1.0, 1.0, 1.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [1.3333333730697632, 1.0, 1.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/glyph_atlas.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/glyph_atlas.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 88, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.140625, 0.140625, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.140625, 0.140625, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.140625, 0.140625, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 16, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": null, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.03125, 0.0, 0.03125, 0.0, 4.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.03125, 0.0, 0.03125, 0.0, 4.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.03125, 0.0, 0.03125, 0.0, 4.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 9}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/glyph_atlas.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [2.9700000286102295, 7.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [2.9700000286102295, 7.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [3.0, 7.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/glyph_atlas_sdf.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/glyph_atlas_sdf.frag.gles", "has_side_effects": false, "has_uniform_computation": false, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 77, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_fma", "arith_sfu"], "longest_path_cycles": [0.3125, 0.3125, 0.046875, 0.3125, 0.0, 0.25, 0.25], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_fma", "arith_sfu"], "shortest_path_cycles": [0.3125, 0.3125, 0.015625, 0.3125, 0.0, 0.25, 0.25], "total_bound_pipelines": ["arith_total", "arith_fma", "arith_sfu"], "total_cycles": [0.3125, 0.3125, 0.046875, 0.3125, 0.0, 0.25, 0.25]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 20}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/glyph_atlas_sdf.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [3.299999952316284, 1.0, 3.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [3.299999952316284, 1.0, 3.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [3.6666667461395264, 1.0, 3.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/glyph_atlas_sdf.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/glyph_atlas_sdf.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 88, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.140625, 0.140625, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.140625, 0.140625, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.140625, 0.140625, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 16, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": null, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.0, 0.0, 0.0, 0.0, 3.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.0, 0.0, 0.0, 0.0, 3.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.0, 0.0, 0.0, 0.0, 3.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 6}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/glyph_atlas_sdf.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [2.9700000286102295, 5.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [2.9700000286102295, 5.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [3.0, 5.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/gradient_fill.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/gradient_fill.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 24, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": 0, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.125, 0.125, 0.0, 0.0625, 3.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.125, 0.125, 0.0, 0.0625, 3.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.125, 0.125, 0.0, 0.0625, 3.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 18, "work_registers_used": 9}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/gradient_fill.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [3.299999952316284, 4.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [3.299999952316284, 4.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [3.3333332538604736, 4.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 5, "work_registers_used": 3}}}}, "flutter/impeller/entity/gles/linear_gradient_fill.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/linear_gradient_fill.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 70, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_cvt"], "longest_path_cycles": [0.40625, 0.28125, 0.40625, 0.125, 0.0, 0.125, 0.25], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt"], "shortest_path_cycles": [0.1875, 0.171875, 0.1875, 0.125, 0.0, 0.125, 0.0], "total_bound_pipelines": ["arith_total", "arith_cvt"], "total_cycles": [0.484375, 0.3125, 0.484375, 0.125, 0.0, 0.125, 0.25]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 12, "work_registers_used": 20}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/linear_gradient_fill.frag.gles", "has_uniform_computation": true, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [6.929999828338623, 1.0, 1.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [2.309999942779541, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [7.666666507720947, 1.0, 1.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/linear_to_srgb_filter.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/linear_to_srgb_filter.frag.gles", "has_side_effects": false, "has_uniform_computation": false, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 40, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_cvt", "arith_sfu"], "longest_path_cycles": [0.4375, 0.328125, 0.4375, 0.4375, 0.0, 0.25, 0.25], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_sfu"], "shortest_path_cycles": [0.4375, 0.328125, 0.40625, 0.4375, 0.0, 0.25, 0.25], "total_bound_pipelines": ["arith_total", "arith_cvt", "arith_sfu"], "total_cycles": [0.4375, 0.328125, 0.4375, 0.4375, 0.0, 0.25, 0.25]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 30}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/linear_to_srgb_filter.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [4.949999809265137, 1.0, 1.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [4.949999809265137, 1.0, 1.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [5.333333492279053, 1.0, 1.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/linear_to_srgb_filter.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/linear_to_srgb_filter.vert.gles", "has_uniform_computation": true, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 16, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 7}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/linear_to_srgb_filter.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [2.9700000286102295, 4.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [2.9700000286102295, 4.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [3.0, 4.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/morphology_filter.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/morphology_filter.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 83, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": [null], "longest_path_cycles": [null, null, null, null, null, null, null], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt"], "shortest_path_cycles": [0.0625, 0.0, 0.0625, 0.0, 0.0, 0.0, 0.0], "total_bound_pipelines": ["arith_total", "arith_cvt"], "total_cycles": [0.328125, 0.078125, 0.328125, 0.1875, 0.0, 0.25, 0.25]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 20}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/morphology_filter.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": [null], "longest_path_cycles": [null, null, null], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [1.9800000190734863, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [5.333333492279053, 1.0, 1.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 4}}}}, "flutter/impeller/entity/gles/morphology_filter.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/morphology_filter.vert.gles", "has_uniform_computation": true, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 16, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 7}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/morphology_filter.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [2.9700000286102295, 5.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [2.9700000286102295, 5.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [3.0, 5.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/position.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/position.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 16, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": null, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.03125, 0.0, 0.03125, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.03125, 0.0, 0.03125, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.03125, 0.0, 0.03125, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 5}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/position.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [2.640000104904175, 4.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [2.640000104904175, 4.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [2.6666667461395264, 4.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/position_color.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/position_color.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 14, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": null, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.0, 0.0, 0.0, 0.0, 3.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.0, 0.0, 0.0, 0.0, 3.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.0, 0.0, 0.0, 0.0, 3.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 7}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/position_color.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [2.640000104904175, 5.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [2.640000104904175, 5.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [2.6666667461395264, 5.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/position_uv.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/position_uv.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 20, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": 0, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.125, 0.125, 0.0, 0.0625, 4.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.125, 0.125, 0.0, 0.0625, 4.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.125, 0.125, 0.0, 0.0625, 4.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 18, "work_registers_used": 10}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/position_uv.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [3.299999952316284, 6.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [3.299999952316284, 6.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [3.3333332538604736, 6.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 3}}}}, "flutter/impeller/entity/gles/radial_gradient_fill.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/radial_gradient_fill.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 55, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_cvt"], "longest_path_cycles": [0.40625, 0.3125, 0.40625, 0.1875, 0.0, 0.125, 0.25], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_fma"], "shortest_path_cycles": [0.203125, 0.203125, 0.1875, 0.1875, 0.0, 0.125, 0.0], "total_bound_pipelines": ["arith_total", "arith_cvt"], "total_cycles": [0.484375, 0.34375, 0.484375, 0.1875, 0.0, 0.125, 0.25]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 20}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/radial_gradient_fill.frag.gles", "has_uniform_computation": true, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [6.929999828338623, 1.0, 1.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [2.309999942779541, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [7.666666507720947, 1.0, 1.0]}, "thread_occupancy": 100, "uniform_registers_used": 2, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/rrect_blur.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/rrect_blur.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 33, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_fma"], "longest_path_cycles": [1.5125000476837158, 1.5125000476837158, 0.546875, 1.5, 0.0, 0.125, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_fma"], "shortest_path_cycles": [0.203125, 0.203125, 0.046875, 0.0625, 0.0, 0.125, 0.0], "total_bound_pipelines": ["arith_total", "arith_fma"], "total_cycles": [1.6375000476837158, 1.6375000476837158, 0.578125, 1.5625, 0.0, 0.125, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 20, "work_registers_used": 32}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/rrect_blur.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": [null], "longest_path_cycles": [null, null, null], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [2.640000104904175, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [10.666666984558105, 1.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 4}}}}, "flutter/impeller/entity/gles/rrect_blur.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/rrect_blur.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 14, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": null, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.0, 0.0, 0.0, 0.0, 3.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.0, 0.0, 0.0, 0.0, 3.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.0, 0.0, 0.0, 0.0, 3.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 6}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/rrect_blur.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [2.640000104904175, 4.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [2.640000104904175, 4.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [2.6666667461395264, 4.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/runtime_effect.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/runtime_effect.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 14, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": null, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.0, 0.0, 0.0, 0.0, 3.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.0, 0.0, 0.0, 0.0, 3.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.0, 0.0, 0.0, 0.0, 3.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 6}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/runtime_effect.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [2.640000104904175, 4.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [2.640000104904175, 4.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [2.6666667461395264, 4.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/solid_fill.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/solid_fill.frag.gles", "has_side_effects": false, "has_uniform_computation": false, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": null, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_cvt"], "longest_path_cycles": [0.0625, 0.0, 0.0625, 0.0, 0.0, 0.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt"], "shortest_path_cycles": [0.03125, 0.0, 0.03125, 0.0, 0.0, 0.0, 0.0], "total_bound_pipelines": ["arith_total", "arith_cvt"], "total_cycles": [0.0625, 0.0, 0.0625, 0.0, 0.0, 0.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 2, "work_registers_used": 18}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/solid_fill.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [1.0, 0.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [1.0, 0.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [0.6666666865348816, 0.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/solid_fill.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/solid_fill.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 14, "work_registers_used": 32}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/solid_fill.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [2.640000104904175, 3.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [2.640000104904175, 3.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [2.6666667461395264, 3.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/srgb_to_linear_filter.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/srgb_to_linear_filter.frag.gles", "has_side_effects": false, "has_uniform_computation": false, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 40, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_cvt"], "longest_path_cycles": [0.484375, 0.328125, 0.484375, 0.4375, 0.0, 0.25, 0.25], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_cvt"], "shortest_path_cycles": [0.453125, 0.328125, 0.453125, 0.4375, 0.0, 0.25, 0.25], "total_bound_pipelines": ["arith_total", "arith_cvt"], "total_cycles": [0.484375, 0.328125, 0.484375, 0.4375, 0.0, 0.25, 0.25]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 28}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/srgb_to_linear_filter.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [4.949999809265137, 1.0, 1.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [4.949999809265137, 1.0, 1.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [5.333333492279053, 1.0, 1.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 3}}}}, "flutter/impeller/entity/gles/srgb_to_linear_filter.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/srgb_to_linear_filter.vert.gles", "has_uniform_computation": true, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 16, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 7}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/srgb_to_linear_filter.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [2.9700000286102295, 4.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [2.9700000286102295, 4.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [3.0, 4.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/sweep_gradient_fill.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/sweep_gradient_fill.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 15, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_cvt"], "longest_path_cycles": [0.5, 0.453125, 0.5, 0.375, 0.0, 0.125, 0.25], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["arith_total", "arith_sfu"], "shortest_path_cycles": [0.375, 0.34375, 0.28125, 0.375, 0.0, 0.125, 0.0], "total_bound_pipelines": ["arith_total", "arith_cvt"], "total_cycles": [0.59375, 0.484375, 0.59375, 0.375, 0.0, 0.125, 0.25]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 18, "work_registers_used": 24}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/sweep_gradient_fill.frag.gles", "has_uniform_computation": true, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [7.920000076293945, 1.0, 1.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [2.9700000286102295, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [8.666666984558105, 1.0, 1.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/texture_fill.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/texture_fill.frag.gles", "has_side_effects": false, "has_uniform_computation": false, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["varying", "texture"], "longest_path_cycles": [0.03125, 0.03125, 0.03125, 0.0, 0.0, 0.25, 0.25], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["varying", "texture"], "shortest_path_cycles": [0.03125, 0.03125, 0.0, 0.0, 0.0, 0.25, 0.25], "total_bound_pipelines": ["varying", "texture"], "total_cycles": [0.03125, 0.03125, 0.03125, 0.0, 0.0, 0.25, 0.25]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 19}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/texture_fill.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic", "load_store", "texture"], "longest_path_cycles": [1.0, 1.0, 1.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_cycles": [1.0, 1.0, 1.0], "total_bound_pipelines": ["load_store", "texture"], "total_cycles": [0.6666666865348816, 1.0, 1.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/texture_fill.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/texture_fill.vert.gles", "has_uniform_computation": true, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 16, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 7}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/texture_fill.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [2.9700000286102295, 5.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [2.9700000286102295, 5.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [3.0, 5.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/tiled_texture_fill.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/tiled_texture_fill.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 33, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arith_total", "arith_cvt"], "longest_path_cycles": [0.265625, 0.03125, 0.265625, 0.0, 0.0, 0.25, 0.25], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["varying", "texture"], "shortest_path_cycles": [0.0625, 0.03125, 0.0625, 0.0, 0.0, 0.25, 0.25], "total_bound_pipelines": ["arith_total", "arith_cvt"], "total_cycles": [0.265625, 0.03125, 0.265625, 0.0, 0.0, 0.25, 0.25]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 19}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/tiled_texture_fill.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [3.299999952316284, 1.0, 1.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [1.3200000524520874, 1.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [3.6666667461395264, 1.0, 1.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/tiled_texture_fill.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/tiled_texture_fill.vert.gles", "has_uniform_computation": true, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 22, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.125, 0.125, 0.03125, 0.0625, 3.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.125, 0.125, 0.03125, 0.0625, 3.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.125, 0.125, 0.03125, 0.0625, 3.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 16, "work_registers_used": 8}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/tiled_texture_fill.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [3.9600000381469727, 4.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [3.9600000381469727, 4.0, 0.0], "total_bound_pipelines": ["arithmetic", "load_store"], "total_cycles": [4.0, 4.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 6, "work_registers_used": 3}}}}, "flutter/impeller/entity/gles/vertices.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/vertices.frag.gles", "has_side_effects": false, "has_uniform_computation": false, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["varying"], "longest_path_cycles": [0.03125, 0.03125, 0.03125, 0.0, 0.0, 0.25, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["varying"], "shortest_path_cycles": [0.03125, 0.03125, 0.0, 0.0, 0.0, 0.25, 0.0], "total_bound_pipelines": ["varying"], "total_cycles": [0.03125, 0.03125, 0.03125, 0.0, 0.0, 0.25, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 2, "work_registers_used": 19}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/vertices.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic", "load_store"], "longest_path_cycles": [1.0, 1.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic", "load_store"], "shortest_path_cycles": [1.0, 1.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.6666666865348816, 1.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 1, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/yuv_to_rgb_filter.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/yuv_to_rgb_filter.frag.gles", "has_side_effects": false, "has_uniform_computation": true, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["texture"], "longest_path_cycles": [0.15625, 0.15625, 0.046875, 0.0, 0.0, 0.25, 0.5], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["texture"], "shortest_path_cycles": [0.15625, 0.15625, 0.015625, 0.0, 0.0, 0.25, 0.5], "total_bound_pipelines": ["texture"], "total_cycles": [0.15625, 0.15625, 0.046875, 0.0, 0.0, 0.25, 0.5]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 12, "work_registers_used": 19}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/yuv_to_rgb_filter.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [2.309999942779541, 1.0, 2.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["arithmetic"], "shortest_path_cycles": [2.309999942779541, 1.0, 2.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [2.6666667461395264, 1.0, 2.0]}, "thread_occupancy": 100, "uniform_registers_used": 3, "work_registers_used": 2}}}}, "flutter/impeller/entity/gles/yuv_to_rgb_filter.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/entity/gles/yuv_to_rgb_filter.vert.gles", "has_uniform_computation": true, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 80, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.078125, 0.078125, 0.046875, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 16, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": 100, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.03125, 0.015625, 0.03125, 0.0, 3.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 10, "work_registers_used": 7}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/entity/gles/yuv_to_rgb_filter.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [2.9700000286102295, 4.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [2.9700000286102295, 4.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [3.0, 4.0, 0.0]}, "thread_occupancy": 100, "uniform_registers_used": 4, "work_registers_used": 2}}}}, "flutter/impeller/scene/shaders/gles/skinned.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/scene/shaders/gles/skinned.vert.gles", "has_uniform_computation": true, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 0, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store", "texture"], "longest_path_cycles": [3.075000047683716, 3.075000047683716, 0.09375, 0.0, 4.0, 4.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [1.2625000476837158, 1.2625000476837158, 0.296875, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store", "texture"], "total_cycles": [3.075000047683716, 3.075000047683716, 0.359375, 0.0, 4.0, 4.0]}, "stack_spill_bytes": 0, "thread_occupancy": 50, "uniform_registers_used": 30, "work_registers_used": 64}, "Varying": {"fp16_arithmetic": 0, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [3.59375, 3.59375, 0.09375, 0.0, 13.0, 4.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [1.78125, 1.78125, 0.296875, 0.0, 11.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [3.59375, 3.59375, 0.359375, 0.0, 13.0, 4.0]}, "stack_spill_bytes": 0, "thread_occupancy": 50, "uniform_registers_used": 26, "work_registers_used": 64}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/scene/shaders/gles/skinned.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": true, "performance": {"longest_path_bound_pipelines": ["arithmetic"], "longest_path_cycles": [23.43000030517578, 17.0, 16.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [12.210000038146973, 13.0, 0.0], "total_bound_pipelines": ["arithmetic"], "total_cycles": [20.0, 17.0, 16.0]}, "thread_occupancy": 50, "uniform_registers_used": 7, "work_registers_used": 8}}}}, "flutter/impeller/scene/shaders/gles/unlit.frag.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/scene/shaders/gles/unlit.frag.gles", "has_side_effects": false, "has_uniform_computation": false, "modifies_coverage": false, "reads_color_buffer": false, "type": "Fragment", "uses_late_zs_test": false, "uses_late_zs_update": false, "variants": {"Main": {"fp16_arithmetic": 0, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["varying"], "longest_path_cycles": [0.25, 0.25, 0.03125, 0.0, 0.0, 0.75, 0.25], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "varying", "texture"], "shortest_path_bound_pipelines": ["varying"], "shortest_path_cycles": [0.25, 0.25, 0.0, 0.0, 0.0, 0.75, 0.25], "total_bound_pipelines": ["varying"], "total_cycles": [0.25, 0.25, 0.03125, 0.0, 0.0, 0.75, 0.25]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 8, "work_registers_used": 19}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/scene/shaders/gles/unlit.frag.gles", "has_uniform_computation": false, "type": "Fragment", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [1.0, 2.0, 1.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [1.0, 2.0, 1.0], "total_bound_pipelines": ["load_store"], "total_cycles": [1.3333333730697632, 2.0, 1.0]}, "thread_occupancy": 100, "uniform_registers_used": 2, "work_registers_used": 2}}}}, "flutter/impeller/scene/shaders/gles/unskinned.vert.gles": {"Mali-G78": {"core": "Mali-G78", "filename": "flutter/impeller/scene/shaders/gles/unskinned.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Position": {"fp16_arithmetic": 0, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.265625, 0.265625, 0.0, 0.0, 2.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.265625, 0.265625, 0.0, 0.0, 2.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.265625, 0.265625, 0.0, 0.0, 2.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 24, "work_registers_used": 32}, "Varying": {"fp16_arithmetic": 0, "has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [0.75, 0.75, 0.0, 0.0, 11.0, 0.0], "pipelines": ["arith_total", "arith_fma", "arith_cvt", "arith_sfu", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [0.75, 0.75, 0.0, 0.0, 11.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [0.75, 0.75, 0.0, 0.0, 11.0, 0.0]}, "stack_spill_bytes": 0, "thread_occupancy": 100, "uniform_registers_used": 20, "work_registers_used": 32}}}, "Mali-T880": {"core": "Mali-T880", "filename": "flutter/impeller/scene/shaders/gles/unskinned.vert.gles", "has_uniform_computation": false, "type": "Vertex", "variants": {"Main": {"has_stack_spilling": false, "performance": {"longest_path_bound_pipelines": ["load_store"], "longest_path_cycles": [5.28000020980835, 13.0, 0.0], "pipelines": ["arithmetic", "load_store", "texture"], "shortest_path_bound_pipelines": ["load_store"], "shortest_path_cycles": [5.28000020980835, 13.0, 0.0], "total_bound_pipelines": ["load_store"], "total_cycles": [5.333333492279053, 13.0, 0.0]}, "thread_occupancy": 50, "uniform_registers_used": 7, "work_registers_used": 6}}}}} \ No newline at end of file +{ + "flutter/impeller/entity/gles/advanced_blend.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend.vert.gles", + "has_uniform_computation": true, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 16, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.0625, + 0.03125, + 0.0625, + 0.0, + 4.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.0625, + 0.03125, + 0.0625, + 0.0, + 4.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.0625, + 0.03125, + 0.0625, + 0.0, + 4.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 8 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 3.299999952316284, + 7.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 3.299999952316284, + 7.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 3.3333332538604736, + 7.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 3 + } + } + } + }, + "flutter/impeller/entity/gles/advanced_blend_color.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend_color.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 82, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "longest_path_cycles": [ + 0.65625, + 0.65625, + 0.53125, + 0.625, + 0.0, + 0.5, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "shortest_path_cycles": [ + 0.375, + 0.328125, + 0.375, + 0.25, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "total_cycles": [ + 0.65625, + 0.65625, + 0.578125, + 0.625, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 12, + "work_registers_used": 20 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend_color.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 9.899999618530273, + 2.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 5.940000057220459, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 11.0, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 3 + } + } + } + }, + "flutter/impeller/entity/gles/advanced_blend_colorburn.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend_colorburn.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_sfu" + ], + "longest_path_cycles": [ + 0.6875, + 0.265625, + 0.675000011920929, + 0.6875, + 0.0, + 0.5, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "shortest_path_cycles": [ + 0.515625, + 0.234375, + 0.515625, + 0.4375, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "total_cycles": [ + 0.71875, + 0.265625, + 0.71875, + 0.6875, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 26 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend_colorburn.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 10.5600004196167, + 2.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 8.25, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 11.333333015441895, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 3 + } + } + } + }, + "flutter/impeller/entity/gles/advanced_blend_colordodge.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend_colordodge.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_sfu" + ], + "longest_path_cycles": [ + 0.6875, + 0.234375, + 0.675000011920929, + 0.6875, + 0.0, + 0.5, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "shortest_path_cycles": [ + 0.515625, + 0.203125, + 0.515625, + 0.4375, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "total_cycles": [ + 0.71875, + 0.234375, + 0.71875, + 0.6875, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 26 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend_colordodge.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 10.229999542236328, + 2.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 7.920000076293945, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 11.0, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 3 + } + } + } + }, + "flutter/impeller/entity/gles/advanced_blend_darken.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend_darken.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying", + "texture" + ], + "longest_path_cycles": [ + 0.5, + 0.171875, + 0.4375, + 0.5, + 0.0, + 0.5, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "shortest_path_cycles": [ + 0.28125, + 0.140625, + 0.28125, + 0.25, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying", + "texture" + ], + "total_cycles": [ + 0.5, + 0.171875, + 0.484375, + 0.5, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 20 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend_darken.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 5.940000057220459, + 2.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 3.299999952316284, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 6.666666507720947, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/advanced_blend_difference.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend_difference.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying", + "texture" + ], + "longest_path_cycles": [ + 0.5, + 0.203125, + 0.40625, + 0.5, + 0.0, + 0.5, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt", + "arith_sfu", + "varying" + ], + "shortest_path_cycles": [ + 0.25, + 0.171875, + 0.25, + 0.25, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying", + "texture" + ], + "total_cycles": [ + 0.5, + 0.203125, + 0.453125, + 0.5, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 20 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend_difference.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 5.940000057220459, + 2.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 3.299999952316284, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 6.666666507720947, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/advanced_blend_exclusion.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend_exclusion.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying", + "texture" + ], + "longest_path_cycles": [ + 0.5, + 0.265625, + 0.40625, + 0.5, + 0.0, + 0.5, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt", + "arith_sfu", + "varying" + ], + "shortest_path_cycles": [ + 0.25, + 0.234375, + 0.25, + 0.25, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying", + "texture" + ], + "total_cycles": [ + 0.5, + 0.265625, + 0.453125, + 0.5, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 21 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend_exclusion.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 6.599999904632568, + 2.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 3.9600000381469727, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 7.333333492279053, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 3 + } + } + } + }, + "flutter/impeller/entity/gles/advanced_blend_hardlight.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend_hardlight.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying", + "texture" + ], + "longest_path_cycles": [ + 0.5, + 0.453125, + 0.46875, + 0.5, + 0.0, + 0.5, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "shortest_path_cycles": [ + 0.421875, + 0.421875, + 0.3125, + 0.25, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "total_cycles": [ + 0.515625, + 0.453125, + 0.515625, + 0.5, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 25 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend_hardlight.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 7.590000152587891, + 2.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 4.949999809265137, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 8.333333015441895, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 4 + } + } + } + }, + "flutter/impeller/entity/gles/advanced_blend_hue.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend_hue.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 86, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "longest_path_cycles": [ + 0.762499988079071, + 0.762499988079071, + 0.6875, + 0.6875, + 0.0, + 0.5, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "shortest_path_cycles": [ + 0.515625, + 0.328125, + 0.515625, + 0.25, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "total_cycles": [ + 0.78125, + 0.762499988079071, + 0.78125, + 0.6875, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 12, + "work_registers_used": 21 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend_hue.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 11.880000114440918, + 2.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 6.269999980926514, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 13.0, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 3 + } + } + } + }, + "flutter/impeller/entity/gles/advanced_blend_lighten.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend_lighten.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying", + "texture" + ], + "longest_path_cycles": [ + 0.5, + 0.171875, + 0.4375, + 0.5, + 0.0, + 0.5, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "shortest_path_cycles": [ + 0.28125, + 0.140625, + 0.28125, + 0.25, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying", + "texture" + ], + "total_cycles": [ + 0.5, + 0.171875, + 0.484375, + 0.5, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 20 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend_lighten.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 5.940000057220459, + 2.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 3.299999952316284, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 6.666666507720947, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/advanced_blend_luminosity.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend_luminosity.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 82, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "longest_path_cycles": [ + 0.65625, + 0.65625, + 0.53125, + 0.625, + 0.0, + 0.5, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "shortest_path_cycles": [ + 0.375, + 0.328125, + 0.375, + 0.25, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "total_cycles": [ + 0.65625, + 0.65625, + 0.578125, + 0.625, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 12, + "work_registers_used": 20 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend_luminosity.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 9.899999618530273, + 2.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 5.940000057220459, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 11.0, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 3 + } + } + } + }, + "flutter/impeller/entity/gles/advanced_blend_multiply.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend_multiply.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying", + "texture" + ], + "longest_path_cycles": [ + 0.5, + 0.203125, + 0.40625, + 0.5, + 0.0, + 0.5, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt", + "arith_sfu", + "varying" + ], + "shortest_path_cycles": [ + 0.25, + 0.171875, + 0.25, + 0.25, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying", + "texture" + ], + "total_cycles": [ + 0.5, + 0.203125, + 0.453125, + 0.5, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 20 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend_multiply.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 6.269999980926514, + 2.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 3.630000114440918, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 7.0, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/advanced_blend_overlay.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend_overlay.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying", + "texture" + ], + "longest_path_cycles": [ + 0.5, + 0.453125, + 0.46875, + 0.5, + 0.0, + 0.5, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "shortest_path_cycles": [ + 0.421875, + 0.421875, + 0.3125, + 0.25, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "total_cycles": [ + 0.515625, + 0.453125, + 0.515625, + 0.5, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 25 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend_overlay.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 7.260000228881836, + 2.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 4.949999809265137, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 8.0, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 4 + } + } + } + }, + "flutter/impeller/entity/gles/advanced_blend_saturation.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend_saturation.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 86, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "longest_path_cycles": [ + 0.762499988079071, + 0.762499988079071, + 0.6875, + 0.6875, + 0.0, + 0.5, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "shortest_path_cycles": [ + 0.515625, + 0.328125, + 0.515625, + 0.25, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "total_cycles": [ + 0.78125, + 0.762499988079071, + 0.78125, + 0.6875, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 12, + "work_registers_used": 21 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend_saturation.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 12.210000038146973, + 2.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 6.599999904632568, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 13.333333015441895, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 3 + } + } + } + }, + "flutter/impeller/entity/gles/advanced_blend_screen.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend_screen.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying", + "texture" + ], + "longest_path_cycles": [ + 0.5, + 0.234375, + 0.40625, + 0.5, + 0.0, + 0.5, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt", + "arith_sfu", + "varying" + ], + "shortest_path_cycles": [ + 0.25, + 0.203125, + 0.25, + 0.25, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying", + "texture" + ], + "total_cycles": [ + 0.5, + 0.234375, + 0.453125, + 0.5, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 21 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend_screen.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 6.269999980926514, + 2.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 3.630000114440918, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 7.0, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/advanced_blend_softlight.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/advanced_blend_softlight.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "longest_path_cycles": [ + 0.71875, + 0.71875, + 0.609375, + 0.6875, + 0.0, + 0.5, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "shortest_path_cycles": [ + 0.6875, + 0.6875, + 0.453125, + 0.4375, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "total_cycles": [ + 0.71875, + 0.71875, + 0.65625, + 0.6875, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 12, + "work_registers_used": 32 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/advanced_blend_softlight.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 10.5600004196167, + 2.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 8.25, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 11.333333015441895, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 4 + } + } + } + }, + "flutter/impeller/entity/gles/blend.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/blend.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "texture" + ], + "longest_path_cycles": [ + 0.09375, + 0.046875, + 0.09375, + 0.0, + 0.0, + 0.125, + 0.25 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "texture" + ], + "shortest_path_cycles": [ + 0.0625, + 0.046875, + 0.0625, + 0.0, + 0.0, + 0.125, + 0.25 + ], + "total_bound_pipelines": [ + "texture" + ], + "total_cycles": [ + 0.09375, + 0.046875, + 0.09375, + 0.0, + 0.0, + 0.125, + 0.25 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 19 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/blend.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "longest_path_cycles": [ + 1.0, + 1.0, + 1.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_cycles": [ + 1.0, + 1.0, + 1.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 1.3333333730697632, + 1.0, + 1.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/blend.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/blend.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 14, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": null, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.0, + 0.0, + 0.0, + 0.0, + 3.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.0, + 0.0, + 0.0, + 0.0, + 3.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.0, + 0.0, + 0.0, + 0.0, + 3.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 6 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/blend.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 2.640000104904175, + 5.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 2.640000104904175, + 5.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 2.6666667461395264, + 5.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/border_mask_blur.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/border_mask_blur.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 10, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "longest_path_cycles": [ + 0.8125, + 0.8125, + 0.234375, + 0.25, + 0.0, + 0.25, + 0.25 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "shortest_path_cycles": [ + 0.8125, + 0.8125, + 0.203125, + 0.25, + 0.0, + 0.25, + 0.25 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "total_cycles": [ + 0.8125, + 0.8125, + 0.234375, + 0.25, + 0.0, + 0.25, + 0.25 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 32 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/border_mask_blur.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 8.90999984741211, + 1.0, + 1.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 8.90999984741211, + 1.0, + 1.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 9.333333015441895, + 1.0, + 1.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 3 + } + } + } + }, + "flutter/impeller/entity/gles/border_mask_blur.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/border_mask_blur.vert.gles", + "has_uniform_computation": true, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 16, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 7 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/border_mask_blur.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 2.9700000286102295, + 5.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 2.9700000286102295, + 5.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 3.0, + 5.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/color_matrix_color_filter.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/color_matrix_color_filter.frag.gles", + "has_side_effects": false, + "has_uniform_computation": false, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_fma", + "varying", + "texture" + ], + "longest_path_cycles": [ + 0.25, + 0.25, + 0.09375, + 0.0625, + 0.0, + 0.25, + 0.25 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_fma", + "varying", + "texture" + ], + "shortest_path_cycles": [ + 0.25, + 0.25, + 0.0625, + 0.0625, + 0.0, + 0.25, + 0.25 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_fma", + "varying", + "texture" + ], + "total_cycles": [ + 0.25, + 0.25, + 0.09375, + 0.0625, + 0.0, + 0.25, + 0.25 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 14, + "work_registers_used": 21 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/color_matrix_color_filter.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 2.640000104904175, + 1.0, + 1.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 2.640000104904175, + 1.0, + 1.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 3.0, + 1.0, + 1.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 3, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/color_matrix_color_filter.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/color_matrix_color_filter.vert.gles", + "has_uniform_computation": true, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 16, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 7 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/color_matrix_color_filter.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 2.9700000286102295, + 4.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 2.9700000286102295, + 4.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 3.0, + 4.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/gaussian_blur.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/gaussian_blur.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 76, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + null + ], + "longest_path_cycles": [ + null, + null, + null, + null, + null, + null, + null + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "varying", + "texture" + ], + "shortest_path_cycles": [ + 0.109375, + 0.109375, + 0.09375, + 0.0625, + 0.0, + 0.25, + 0.25 + ], + "total_bound_pipelines": [ + "varying", + "texture" + ], + "total_cycles": [ + 0.3125, + 0.3125, + 0.21875, + 0.125, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 12, + "work_registers_used": 21 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/gaussian_blur.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + null + ], + "longest_path_cycles": [ + null, + null, + null + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 2.9700000286102295, + 2.0, + 1.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 5.0, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 2, + "work_registers_used": 3 + } + } + } + }, + "flutter/impeller/entity/gles/gaussian_blur.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/gaussian_blur.vert.gles", + "has_uniform_computation": true, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 16, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.0625, + 0.03125, + 0.0625, + 0.0, + 4.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.0625, + 0.03125, + 0.0625, + 0.0, + 4.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.0625, + 0.03125, + 0.0625, + 0.0, + 4.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 8 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/gaussian_blur.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 3.299999952316284, + 7.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 3.299999952316284, + 7.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 3.3333332538604736, + 7.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 3 + } + } + } + }, + "flutter/impeller/entity/gles/gaussian_blur_decal.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/gaussian_blur_decal.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 79, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + null + ], + "longest_path_cycles": [ + null, + null, + null, + null, + null, + null, + null + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying" + ], + "shortest_path_cycles": [ + 0.25, + 0.109375, + 0.1875, + 0.25, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_sfu", + "varying", + "texture" + ], + "total_cycles": [ + 0.5, + 0.3125, + 0.421875, + 0.5, + 0.0, + 0.5, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 12, + "work_registers_used": 21 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/gaussian_blur_decal.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + null + ], + "longest_path_cycles": [ + null, + null, + null + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 4.289999961853027, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 8.333333015441895, + 2.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 2, + "work_registers_used": 4 + } + } + } + }, + "flutter/impeller/entity/gles/glyph_atlas.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/glyph_atlas.frag.gles", + "has_side_effects": false, + "has_uniform_computation": false, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "varying" + ], + "longest_path_cycles": [ + 0.09375, + 0.03125, + 0.09375, + 0.0, + 0.0, + 0.375, + 0.25 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "varying" + ], + "shortest_path_cycles": [ + 0.0625, + 0.03125, + 0.0625, + 0.0, + 0.0, + 0.375, + 0.25 + ], + "total_bound_pipelines": [ + "varying" + ], + "total_cycles": [ + 0.09375, + 0.03125, + 0.09375, + 0.0, + 0.0, + 0.375, + 0.25 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 6, + "work_registers_used": 19 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/glyph_atlas.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "longest_path_cycles": [ + 1.0, + 1.0, + 1.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_cycles": [ + 1.0, + 1.0, + 1.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 1.3333333730697632, + 1.0, + 1.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/glyph_atlas.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/glyph_atlas.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 88, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.140625, + 0.140625, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.140625, + 0.140625, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.140625, + 0.140625, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 16, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": null, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.03125, + 0.0, + 0.03125, + 0.0, + 4.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.03125, + 0.0, + 0.03125, + 0.0, + 4.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.03125, + 0.0, + 0.03125, + 0.0, + 4.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 9 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/glyph_atlas.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 2.9700000286102295, + 7.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 2.9700000286102295, + 7.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 3.0, + 7.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/glyph_atlas_sdf.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/glyph_atlas_sdf.frag.gles", + "has_side_effects": false, + "has_uniform_computation": false, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 77, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_fma", + "arith_sfu" + ], + "longest_path_cycles": [ + 0.3125, + 0.3125, + 0.046875, + 0.3125, + 0.0, + 0.25, + 0.25 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_fma", + "arith_sfu" + ], + "shortest_path_cycles": [ + 0.3125, + 0.3125, + 0.015625, + 0.3125, + 0.0, + 0.25, + 0.25 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_fma", + "arith_sfu" + ], + "total_cycles": [ + 0.3125, + 0.3125, + 0.046875, + 0.3125, + 0.0, + 0.25, + 0.25 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 20 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/glyph_atlas_sdf.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 3.299999952316284, + 1.0, + 3.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 3.299999952316284, + 1.0, + 3.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 3.6666667461395264, + 1.0, + 3.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/glyph_atlas_sdf.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/glyph_atlas_sdf.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 88, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.140625, + 0.140625, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.140625, + 0.140625, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.140625, + 0.140625, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 16, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": null, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.0, + 0.0, + 0.0, + 0.0, + 3.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.0, + 0.0, + 0.0, + 0.0, + 3.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.0, + 0.0, + 0.0, + 0.0, + 3.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 6 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/glyph_atlas_sdf.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 2.9700000286102295, + 5.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 2.9700000286102295, + 5.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 3.0, + 5.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/gradient_fill.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/gradient_fill.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 24, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": 0, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.125, + 0.125, + 0.0, + 0.0625, + 3.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.125, + 0.125, + 0.0, + 0.0625, + 3.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.125, + 0.125, + 0.0, + 0.0625, + 3.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 18, + "work_registers_used": 9 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/gradient_fill.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 3.299999952316284, + 4.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 3.299999952316284, + 4.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 3.3333332538604736, + 4.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 5, + "work_registers_used": 3 + } + } + } + }, + "flutter/impeller/entity/gles/linear_gradient_fill.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/linear_gradient_fill.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 70, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "longest_path_cycles": [ + 0.40625, + 0.28125, + 0.40625, + 0.125, + 0.0, + 0.125, + 0.25 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "shortest_path_cycles": [ + 0.1875, + 0.171875, + 0.1875, + 0.125, + 0.0, + 0.125, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "total_cycles": [ + 0.484375, + 0.3125, + 0.484375, + 0.125, + 0.0, + 0.125, + 0.25 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 12, + "work_registers_used": 20 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/linear_gradient_fill.frag.gles", + "has_uniform_computation": true, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 6.929999828338623, + 1.0, + 1.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 2.309999942779541, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 7.666666507720947, + 1.0, + 1.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/linear_to_srgb_filter.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/linear_to_srgb_filter.frag.gles", + "has_side_effects": false, + "has_uniform_computation": false, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 40, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_cvt", + "arith_sfu" + ], + "longest_path_cycles": [ + 0.4375, + 0.328125, + 0.4375, + 0.4375, + 0.0, + 0.25, + 0.25 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_sfu" + ], + "shortest_path_cycles": [ + 0.4375, + 0.328125, + 0.40625, + 0.4375, + 0.0, + 0.25, + 0.25 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_cvt", + "arith_sfu" + ], + "total_cycles": [ + 0.4375, + 0.328125, + 0.4375, + 0.4375, + 0.0, + 0.25, + 0.25 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 30 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/linear_to_srgb_filter.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 4.949999809265137, + 1.0, + 1.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 4.949999809265137, + 1.0, + 1.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 5.333333492279053, + 1.0, + 1.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/linear_to_srgb_filter.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/linear_to_srgb_filter.vert.gles", + "has_uniform_computation": true, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 16, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 7 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/linear_to_srgb_filter.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 2.9700000286102295, + 4.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 2.9700000286102295, + 4.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 3.0, + 4.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/morphology_filter.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/morphology_filter.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 83, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + null + ], + "longest_path_cycles": [ + null, + null, + null, + null, + null, + null, + null + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "shortest_path_cycles": [ + 0.0625, + 0.0, + 0.0625, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "total_cycles": [ + 0.328125, + 0.078125, + 0.328125, + 0.1875, + 0.0, + 0.25, + 0.25 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 20 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/morphology_filter.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + null + ], + "longest_path_cycles": [ + null, + null, + null + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 1.9800000190734863, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 5.333333492279053, + 1.0, + 1.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 4 + } + } + } + }, + "flutter/impeller/entity/gles/morphology_filter.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/morphology_filter.vert.gles", + "has_uniform_computation": true, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 16, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 7 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/morphology_filter.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 2.9700000286102295, + 5.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 2.9700000286102295, + 5.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 3.0, + 5.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/position_color.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/position_color.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 14, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": null, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.0, + 0.0, + 0.0, + 0.0, + 3.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.0, + 0.0, + 0.0, + 0.0, + 3.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.0, + 0.0, + 0.0, + 0.0, + 3.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 7 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/position_color.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 2.640000104904175, + 5.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 2.640000104904175, + 5.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 2.6666667461395264, + 5.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/position_uv.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/position_uv.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 20, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": 0, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.125, + 0.125, + 0.0, + 0.0625, + 4.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.125, + 0.125, + 0.0, + 0.0625, + 4.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.125, + 0.125, + 0.0, + 0.0625, + 4.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 18, + "work_registers_used": 10 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/position_uv.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 3.299999952316284, + 6.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 3.299999952316284, + 6.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 3.3333332538604736, + 6.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 3 + } + } + } + }, + "flutter/impeller/entity/gles/radial_gradient_fill.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/radial_gradient_fill.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 55, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "longest_path_cycles": [ + 0.40625, + 0.3125, + 0.40625, + 0.1875, + 0.0, + 0.125, + 0.25 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "shortest_path_cycles": [ + 0.203125, + 0.203125, + 0.1875, + 0.1875, + 0.0, + 0.125, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "total_cycles": [ + 0.484375, + 0.34375, + 0.484375, + 0.1875, + 0.0, + 0.125, + 0.25 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 20 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/radial_gradient_fill.frag.gles", + "has_uniform_computation": true, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 6.929999828338623, + 1.0, + 1.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 2.309999942779541, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 7.666666507720947, + 1.0, + 1.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 2, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/rrect_blur.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/rrect_blur.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 33, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "longest_path_cycles": [ + 1.5125000476837158, + 1.5125000476837158, + 0.546875, + 1.5, + 0.0, + 0.125, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "shortest_path_cycles": [ + 0.203125, + 0.203125, + 0.046875, + 0.0625, + 0.0, + 0.125, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_fma" + ], + "total_cycles": [ + 1.6375000476837158, + 1.6375000476837158, + 0.578125, + 1.5625, + 0.0, + 0.125, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 20, + "work_registers_used": 32 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/rrect_blur.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + null + ], + "longest_path_cycles": [ + null, + null, + null + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 2.640000104904175, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 10.666666984558105, + 1.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 4 + } + } + } + }, + "flutter/impeller/entity/gles/rrect_blur.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/rrect_blur.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 14, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": null, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.0, + 0.0, + 0.0, + 0.0, + 3.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.0, + 0.0, + 0.0, + 0.0, + 3.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.0, + 0.0, + 0.0, + 0.0, + 3.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 6 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/rrect_blur.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 2.640000104904175, + 4.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 2.640000104904175, + 4.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 2.6666667461395264, + 4.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/runtime_effect.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/runtime_effect.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 14, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": null, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.0, + 0.0, + 0.0, + 0.0, + 3.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.0, + 0.0, + 0.0, + 0.0, + 3.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.0, + 0.0, + 0.0, + 0.0, + 3.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 6 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/runtime_effect.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 2.640000104904175, + 4.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 2.640000104904175, + 4.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 2.6666667461395264, + 4.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/solid_fill.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/solid_fill.frag.gles", + "has_side_effects": false, + "has_uniform_computation": false, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": null, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "longest_path_cycles": [ + 0.0625, + 0.0, + 0.0625, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "shortest_path_cycles": [ + 0.03125, + 0.0, + 0.03125, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "total_cycles": [ + 0.0625, + 0.0, + 0.0625, + 0.0, + 0.0, + 0.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 2, + "work_registers_used": 18 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/solid_fill.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 1.0, + 0.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 1.0, + 0.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 0.6666666865348816, + 0.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/solid_fill.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/solid_fill.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 14, + "work_registers_used": 32 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/solid_fill.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 2.640000104904175, + 3.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 2.640000104904175, + 3.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 2.6666667461395264, + 3.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/srgb_to_linear_filter.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/srgb_to_linear_filter.frag.gles", + "has_side_effects": false, + "has_uniform_computation": false, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 40, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "longest_path_cycles": [ + 0.484375, + 0.328125, + 0.484375, + 0.4375, + 0.0, + 0.25, + 0.25 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "shortest_path_cycles": [ + 0.453125, + 0.328125, + 0.453125, + 0.4375, + 0.0, + 0.25, + 0.25 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "total_cycles": [ + 0.484375, + 0.328125, + 0.484375, + 0.4375, + 0.0, + 0.25, + 0.25 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 28 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/srgb_to_linear_filter.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 4.949999809265137, + 1.0, + 1.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 4.949999809265137, + 1.0, + 1.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 5.333333492279053, + 1.0, + 1.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 3 + } + } + } + }, + "flutter/impeller/entity/gles/srgb_to_linear_filter.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/srgb_to_linear_filter.vert.gles", + "has_uniform_computation": true, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 16, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 7 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/srgb_to_linear_filter.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 2.9700000286102295, + 4.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 2.9700000286102295, + 4.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 3.0, + 4.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/sweep_gradient_fill.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/sweep_gradient_fill.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 15, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "longest_path_cycles": [ + 0.5, + 0.453125, + 0.5, + 0.375, + 0.0, + 0.125, + 0.25 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arith_total", + "arith_sfu" + ], + "shortest_path_cycles": [ + 0.375, + 0.34375, + 0.28125, + 0.375, + 0.0, + 0.125, + 0.0 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "total_cycles": [ + 0.59375, + 0.484375, + 0.59375, + 0.375, + 0.0, + 0.125, + 0.25 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 18, + "work_registers_used": 24 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/sweep_gradient_fill.frag.gles", + "has_uniform_computation": true, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 7.920000076293945, + 1.0, + 1.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 2.9700000286102295, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 8.666666984558105, + 1.0, + 1.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/texture_fill.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/texture_fill.frag.gles", + "has_side_effects": false, + "has_uniform_computation": false, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "varying", + "texture" + ], + "longest_path_cycles": [ + 0.03125, + 0.03125, + 0.03125, + 0.0, + 0.0, + 0.25, + 0.25 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "varying", + "texture" + ], + "shortest_path_cycles": [ + 0.03125, + 0.03125, + 0.0, + 0.0, + 0.0, + 0.25, + 0.25 + ], + "total_bound_pipelines": [ + "varying", + "texture" + ], + "total_cycles": [ + 0.03125, + 0.03125, + 0.03125, + 0.0, + 0.0, + 0.25, + 0.25 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 19 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/texture_fill.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "longest_path_cycles": [ + 1.0, + 1.0, + 1.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_cycles": [ + 1.0, + 1.0, + 1.0 + ], + "total_bound_pipelines": [ + "load_store", + "texture" + ], + "total_cycles": [ + 0.6666666865348816, + 1.0, + 1.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/texture_fill.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/texture_fill.vert.gles", + "has_uniform_computation": true, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 16, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 7 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/texture_fill.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 2.9700000286102295, + 5.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 2.9700000286102295, + 5.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 3.0, + 5.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/tiled_texture_fill.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/tiled_texture_fill.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 33, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "longest_path_cycles": [ + 0.265625, + 0.03125, + 0.265625, + 0.0, + 0.0, + 0.25, + 0.25 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "varying", + "texture" + ], + "shortest_path_cycles": [ + 0.0625, + 0.03125, + 0.0625, + 0.0, + 0.0, + 0.25, + 0.25 + ], + "total_bound_pipelines": [ + "arith_total", + "arith_cvt" + ], + "total_cycles": [ + 0.265625, + 0.03125, + 0.265625, + 0.0, + 0.0, + 0.25, + 0.25 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 19 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/tiled_texture_fill.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 3.299999952316284, + 1.0, + 1.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 1.3200000524520874, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 3.6666667461395264, + 1.0, + 1.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/tiled_texture_fill.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/tiled_texture_fill.vert.gles", + "has_uniform_computation": true, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 16, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 7 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/tiled_texture_fill.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 2.9700000286102295, + 5.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 2.9700000286102295, + 5.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 3.0, + 5.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/vertices.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/vertices.frag.gles", + "has_side_effects": false, + "has_uniform_computation": false, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "varying" + ], + "longest_path_cycles": [ + 0.03125, + 0.03125, + 0.03125, + 0.0, + 0.0, + 0.25, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "varying" + ], + "shortest_path_cycles": [ + 0.03125, + 0.03125, + 0.0, + 0.0, + 0.0, + 0.25, + 0.0 + ], + "total_bound_pipelines": [ + "varying" + ], + "total_cycles": [ + 0.03125, + 0.03125, + 0.03125, + 0.0, + 0.0, + 0.25, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 2, + "work_registers_used": 19 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/vertices.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic", + "load_store" + ], + "longest_path_cycles": [ + 1.0, + 1.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic", + "load_store" + ], + "shortest_path_cycles": [ + 1.0, + 1.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.6666666865348816, + 1.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 1, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/yuv_to_rgb_filter.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/yuv_to_rgb_filter.frag.gles", + "has_side_effects": false, + "has_uniform_computation": true, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "texture" + ], + "longest_path_cycles": [ + 0.15625, + 0.15625, + 0.046875, + 0.0, + 0.0, + 0.25, + 0.5 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "texture" + ], + "shortest_path_cycles": [ + 0.15625, + 0.15625, + 0.015625, + 0.0, + 0.0, + 0.25, + 0.5 + ], + "total_bound_pipelines": [ + "texture" + ], + "total_cycles": [ + 0.15625, + 0.15625, + 0.046875, + 0.0, + 0.0, + 0.25, + 0.5 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 12, + "work_registers_used": 19 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/yuv_to_rgb_filter.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 2.309999942779541, + 1.0, + 2.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "arithmetic" + ], + "shortest_path_cycles": [ + 2.309999942779541, + 1.0, + 2.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 2.6666667461395264, + 1.0, + 2.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 3, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/entity/gles/yuv_to_rgb_filter.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/entity/gles/yuv_to_rgb_filter.vert.gles", + "has_uniform_computation": true, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 80, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.078125, + 0.078125, + 0.046875, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 16, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": 100, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.03125, + 0.015625, + 0.03125, + 0.0, + 3.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 10, + "work_registers_used": 7 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/entity/gles/yuv_to_rgb_filter.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 2.9700000286102295, + 4.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 2.9700000286102295, + 4.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 3.0, + 4.0, + 0.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 4, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/scene/shaders/gles/skinned.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/scene/shaders/gles/skinned.vert.gles", + "has_uniform_computation": true, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 0, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store", + "texture" + ], + "longest_path_cycles": [ + 3.075000047683716, + 3.075000047683716, + 0.09375, + 0.0, + 4.0, + 4.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 1.2625000476837158, + 1.2625000476837158, + 0.296875, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store", + "texture" + ], + "total_cycles": [ + 3.075000047683716, + 3.075000047683716, + 0.359375, + 0.0, + 4.0, + 4.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 50, + "uniform_registers_used": 30, + "work_registers_used": 64 + }, + "Varying": { + "fp16_arithmetic": 0, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 3.59375, + 3.59375, + 0.09375, + 0.0, + 13.0, + 4.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 1.78125, + 1.78125, + 0.296875, + 0.0, + 11.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 3.59375, + 3.59375, + 0.359375, + 0.0, + 13.0, + 4.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 50, + "uniform_registers_used": 26, + "work_registers_used": 64 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/scene/shaders/gles/skinned.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": true, + "performance": { + "longest_path_bound_pipelines": [ + "arithmetic" + ], + "longest_path_cycles": [ + 23.43000030517578, + 17.0, + 16.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 12.210000038146973, + 13.0, + 0.0 + ], + "total_bound_pipelines": [ + "arithmetic" + ], + "total_cycles": [ + 20.0, + 17.0, + 16.0 + ] + }, + "thread_occupancy": 50, + "uniform_registers_used": 7, + "work_registers_used": 8 + } + } + } + }, + "flutter/impeller/scene/shaders/gles/unlit.frag.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/scene/shaders/gles/unlit.frag.gles", + "has_side_effects": false, + "has_uniform_computation": false, + "modifies_coverage": false, + "reads_color_buffer": false, + "type": "Fragment", + "uses_late_zs_test": false, + "uses_late_zs_update": false, + "variants": { + "Main": { + "fp16_arithmetic": 0, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "varying" + ], + "longest_path_cycles": [ + 0.25, + 0.25, + 0.03125, + 0.0, + 0.0, + 0.75, + 0.25 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "varying", + "texture" + ], + "shortest_path_bound_pipelines": [ + "varying" + ], + "shortest_path_cycles": [ + 0.25, + 0.25, + 0.0, + 0.0, + 0.0, + 0.75, + 0.25 + ], + "total_bound_pipelines": [ + "varying" + ], + "total_cycles": [ + 0.25, + 0.25, + 0.03125, + 0.0, + 0.0, + 0.75, + 0.25 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 8, + "work_registers_used": 19 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/scene/shaders/gles/unlit.frag.gles", + "has_uniform_computation": false, + "type": "Fragment", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 1.0, + 2.0, + 1.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 1.0, + 2.0, + 1.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 1.3333333730697632, + 2.0, + 1.0 + ] + }, + "thread_occupancy": 100, + "uniform_registers_used": 2, + "work_registers_used": 2 + } + } + } + }, + "flutter/impeller/scene/shaders/gles/unskinned.vert.gles": { + "Mali-G78": { + "core": "Mali-G78", + "filename": "flutter/impeller/scene/shaders/gles/unskinned.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Position": { + "fp16_arithmetic": 0, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.265625, + 0.265625, + 0.0, + 0.0, + 2.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.265625, + 0.265625, + 0.0, + 0.0, + 2.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.265625, + 0.265625, + 0.0, + 0.0, + 2.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 24, + "work_registers_used": 32 + }, + "Varying": { + "fp16_arithmetic": 0, + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 0.75, + 0.75, + 0.0, + 0.0, + 11.0, + 0.0 + ], + "pipelines": [ + "arith_total", + "arith_fma", + "arith_cvt", + "arith_sfu", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 0.75, + 0.75, + 0.0, + 0.0, + 11.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 0.75, + 0.75, + 0.0, + 0.0, + 11.0, + 0.0 + ] + }, + "stack_spill_bytes": 0, + "thread_occupancy": 100, + "uniform_registers_used": 20, + "work_registers_used": 32 + } + } + }, + "Mali-T880": { + "core": "Mali-T880", + "filename": "flutter/impeller/scene/shaders/gles/unskinned.vert.gles", + "has_uniform_computation": false, + "type": "Vertex", + "variants": { + "Main": { + "has_stack_spilling": false, + "performance": { + "longest_path_bound_pipelines": [ + "load_store" + ], + "longest_path_cycles": [ + 5.28000020980835, + 13.0, + 0.0 + ], + "pipelines": [ + "arithmetic", + "load_store", + "texture" + ], + "shortest_path_bound_pipelines": [ + "load_store" + ], + "shortest_path_cycles": [ + 5.28000020980835, + 13.0, + 0.0 + ], + "total_bound_pipelines": [ + "load_store" + ], + "total_cycles": [ + 5.333333492279053, + 13.0, + 0.0 + ] + }, + "thread_occupancy": 50, + "uniform_registers_used": 7, + "work_registers_used": 6 + } + } + } + } +} \ No newline at end of file diff --git a/impeller/tools/malioc_diff.py b/impeller/tools/malioc_diff.py index b861ed381e069..309d8bd2e607f 100755 --- a/impeller/tools/malioc_diff.py +++ b/impeller/tools/malioc_diff.py @@ -119,6 +119,8 @@ def read_malioc_file(malioc_tree, json_file): filename = os.path.relpath(shader['filename'], build_gen_dir) if filename.startswith('../..'): filename = filename[6:] + if filename.startswith('../'): + filename = filename[3:] result['filename'] = filename result['core'] = shader['hardware']['core'] result['type'] = shader['shader']['type'] @@ -266,7 +268,7 @@ def main(argv): if args.update: # Write the new results to the file given by --before, then exit. with open(args.before, 'w') as file: - json.dump(after_json, file, sort_keys=True) + json.dump(after_json, file, sort_keys=True, indent=2) return 0 with open(args.before, 'r') as file: diff --git a/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart b/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart index c5f739dca7326..d588da5a54c39 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart @@ -1911,12 +1911,12 @@ extension SkParagraphBuilderExtension on SkParagraphBuilder { // into a utf16 string. String getText() => utf8.decode(getTextUtf8().codeUnits); - external void setWordsUtf8(SkUint32List words); - external void setWordsUtf16(SkUint32List words); - external void setGraphemeBreaksUtf8(SkUint32List graphemes); - external void setGraphemeBreaksUtf16(SkUint32List graphemes); - external void setLineBreaksUtf8(SkUint32List lineBreaks); - external void setLineBreaksUtf16(SkUint32List lineBreaks); + external void setWordsUtf8(Uint32List words); + external void setWordsUtf16(Uint32List words); + external void setGraphemeBreaksUtf8(Uint32List graphemes); + external void setGraphemeBreaksUtf16(Uint32List graphemes); + external void setLineBreaksUtf8(Uint32List lineBreaks); + external void setLineBreaksUtf16(Uint32List lineBreaks); external SkParagraph build(); external void delete(); diff --git a/lib/web_ui/lib/src/engine/canvaskit/fonts.dart b/lib/web_ui/lib/src/engine/canvaskit/fonts.dart index 234d7908b99e6..84475d4f82a28 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/fonts.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/fonts.dart @@ -184,15 +184,12 @@ class SkiaFontCollection implements FontCollection { } } final List completedPendingFonts = await Future.wait(pendingFonts); - final List fonts = [ - UnregisteredFont( + completedPendingFonts.add(UnregisteredFont( EmbeddedTestFont.flutterTest.data.buffer, '', EmbeddedTestFont.flutterTest.fontFamily, - ), - ...completedPendingFonts.whereType(), - ]; - _unregisteredFonts.addAll(fonts); + )); + _unregisteredFonts.addAll(completedPendingFonts.whereType()); // Ahem must be added to font fallbacks list regardless of where it was // downloaded from. diff --git a/lib/web_ui/lib/src/engine/canvaskit/text_fragmenter.dart b/lib/web_ui/lib/src/engine/canvaskit/text_fragmenter.dart index 762b617885751..dabee617230b0 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/text_fragmenter.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/text_fragmenter.dart @@ -43,7 +43,7 @@ final Map _intlSegmenters = fragments = breakLinesUsingV8BreakIterator(text, _v8LineBreaker); final int size = (fragments.length + 1) * 2; - final SkUint32List mallocedList = mallocUint32List(size); - final Uint32List typedArray = mallocedList.toTypedArray(); + final Uint32List typedArray = Uint32List(size); typedArray[0] = 0; // start index typedArray[1] = _kSoftLineBreak; // break type @@ -87,5 +83,5 @@ SkUint32List fragmentUsingV8LineBreaker(String text) { : _kSoftLineBreak; } - return mallocedList; + return typedArray; } diff --git a/lib/web_ui/lib/src/engine/configuration.dart b/lib/web_ui/lib/src/engine/configuration.dart index 1307073277d44..e153286f711f8 100644 --- a/lib/web_ui/lib/src/engine/configuration.dart +++ b/lib/web_ui/lib/src/engine/configuration.dart @@ -46,11 +46,14 @@ library configuration; import 'package:js/js.dart'; import 'package:meta/meta.dart'; -import 'package:web_sdk_version/web_sdk_version.dart'; - import 'canvaskit/renderer.dart'; import 'dom.dart'; +/// The version of CanvasKit used by the web engine by default. +// DO NOT EDIT THE NEXT LINE OF CODE MANUALLY +// See `lib/web_ui/README.md` for how to roll CanvasKit to a new version. +const String _canvaskitVersion = '0.38.0'; + /// The Web Engine configuration for the current application. FlutterConfiguration get configuration => _configuration ??= FlutterConfiguration.legacy(_jsConfiguration); @@ -179,7 +182,7 @@ class FlutterConfiguration { String get canvasKitBaseUrl => _configuration?.canvasKitBaseUrl ?? _defaultCanvasKitBaseUrl; static const String _defaultCanvasKitBaseUrl = String.fromEnvironment( 'FLUTTER_WEB_CANVASKIT_URL', - defaultValue: 'https://gstatic.com/flutter-canvaskit/$flutterWebSdkVersion/' + defaultValue: 'https://unpkg.com/canvaskit-wasm@$_canvaskitVersion/bin/', ); /// The variant of CanvasKit to download. diff --git a/lib/web_ui/lib/src/engine/dom.dart b/lib/web_ui/lib/src/engine/dom.dart index 034899755f56c..01b9da8199174 100644 --- a/lib/web_ui/lib/src/engine/dom.dart +++ b/lib/web_ui/lib/src/engine/dom.dart @@ -2053,7 +2053,7 @@ extension DomListExtension on _DomList { js_util.callMethod(this, 'item', [index.toDouble()]); } -class _DomListIterator extends Iterator { +class _DomListIterator implements Iterator { _DomListIterator(this.list); final _DomList list; @@ -2101,7 +2101,7 @@ extension DomTouchListExtension on _DomTouchList { js_util.callMethod(this, 'item', [index.toDouble()]); } -class _DomTouchListIterator extends Iterator { +class _DomTouchListIterator implements Iterator { _DomTouchListIterator(this.list); final _DomTouchList list; diff --git a/lib/web_ui/lib/src/engine/text/font_collection.dart b/lib/web_ui/lib/src/engine/text/font_collection.dart index 3865deb3343ea..7c863d5e87c2e 100644 --- a/lib/web_ui/lib/src/engine/text/font_collection.dart +++ b/lib/web_ui/lib/src/engine/text/font_collection.dart @@ -76,13 +76,13 @@ class HtmlFontCollection implements FontCollection { @override Future debugDownloadTestFonts() async { final FontManager fontManager = _testFontManager = FontManager(); + for (final MapEntry fontEntry in testFontUrls.entries) { + fontManager.downloadAsset(fontEntry.key, 'url(${fontEntry.value})', const {}); + } fontManager._downloadedFonts.add(createDomFontFace( EmbeddedTestFont.flutterTest.fontFamily, EmbeddedTestFont.flutterTest.data, )); - for (final MapEntry fontEntry in testFontUrls.entries) { - fontManager.downloadAsset(fontEntry.key, 'url(${fontEntry.value})', const {}); - } await fontManager.downloadAllFonts(); } diff --git a/lib/web_ui/pubspec.yaml b/lib/web_ui/pubspec.yaml index f3f239f86e55c..f35dafac5ca0f 100644 --- a/lib/web_ui/pubspec.yaml +++ b/lib/web_ui/pubspec.yaml @@ -17,9 +17,6 @@ dependencies: web_test_fonts: path: ../../third_party/web_test_fonts - web_sdk_version: - path: ../../third_party/web_sdk_version - dev_dependencies: analyzer: 5.2.0 archive: 3.1.2 diff --git a/lib/web_ui/test/canvaskit/skia_font_collection_test.dart b/lib/web_ui/test/canvaskit/skia_font_collection_test.dart index 75764a8c35f4f..2650e586fa864 100644 --- a/lib/web_ui/test/canvaskit/skia_font_collection_test.dart +++ b/lib/web_ui/test/canvaskit/skia_font_collection_test.dart @@ -181,14 +181,5 @@ void testMain() { expect(fontCollection.debugRegisteredFonts, isNotEmpty); expect(warnings, isEmpty); }); - - test('FlutterTest is the default test font', () async { - final SkiaFontCollection fontCollection = SkiaFontCollection(); - - await fontCollection.debugDownloadTestFonts(); - fontCollection.registerDownloadedFonts(); - expect(fontCollection.debugRegisteredFonts, isNotEmpty); - expect(fontCollection.debugRegisteredFonts!.first.family, 'FlutterTest'); - }); }); } diff --git a/lib/web_ui/test/canvaskit/text_fragmenter_test.dart b/lib/web_ui/test/canvaskit/text_fragmenter_test.dart index e444321062b67..7d44c3bc9dd29 100644 --- a/lib/web_ui/test/canvaskit/text_fragmenter_test.dart +++ b/lib/web_ui/test/canvaskit/text_fragmenter_test.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:typed_data'; + import 'package:test/bootstrap/browser.dart'; import 'package:test/test.dart'; import 'package:ui/src/engine.dart'; @@ -15,33 +17,25 @@ void main() { void testMain() { setUpCanvasKitTest(); - late SkUint32List breaks; - - tearDown(() { - if (browserSupportsCanvaskitChromium) { - free(breaks); - } - }); - group('$fragmentUsingIntlSegmenter', () { test('fragments text into words', () { - breaks = fragmentUsingIntlSegmenter( + final Uint32List breaks = fragmentUsingIntlSegmenter( 'Hello world 你好世界', IntlSegmenterGranularity.word, ); expect( - breaks.toTypedArray(), + breaks, orderedEquals([0, 5, 6, 11, 12, 14, 16]), ); }); test('fragments multi-line text into words', () { - breaks = fragmentUsingIntlSegmenter( + final Uint32List breaks = fragmentUsingIntlSegmenter( 'Lorem ipsum\ndolor 你好世界 sit\namet', IntlSegmenterGranularity.word, ); expect( - breaks.toTypedArray(), + breaks, orderedEquals([ 0, 5, 6, 11, 12, // "Lorem ipsum\n" 17, 18, 20, 22, 23, 26, 27, // "dolor 你好世界 sit\n" @@ -53,12 +47,12 @@ void testMain() { test('fragments text into grapheme clusters', () { // The smiley emoji has a length of 2. // The family emoji has a length of 11. - breaks = fragmentUsingIntlSegmenter( + final Uint32List breaks = fragmentUsingIntlSegmenter( 'Lorem🙂ipsum👨‍👩‍👧‍👦', IntlSegmenterGranularity.grapheme, ); expect( - breaks.toTypedArray(), + breaks, orderedEquals([ 0, 1, 2, 3, 4, 5, 7, // "Lorem🙂" 8, 9, 10, 11, 12, 23, // "ipsum👨‍👩‍👧‍👦" @@ -69,12 +63,12 @@ void testMain() { test('fragments multi-line text into grapheme clusters', () { // The smiley emojis have a length of 2 each. // The family emoji has a length of 11. - breaks = fragmentUsingIntlSegmenter( + final Uint32List breaks = fragmentUsingIntlSegmenter( 'Lorem🙂\nipsum👨‍👩‍👧‍👦dolor\n😄', IntlSegmenterGranularity.grapheme, ); expect( - breaks.toTypedArray(), + breaks, orderedEquals([ 0, 1, 2, 3, 4, 5, 7, 8, // "Lorem🙂\n" 9, 10, 11, 12, 13, 24, // "ipsum👨‍👩‍👧‍👦" @@ -89,11 +83,11 @@ void testMain() { const int kHard = 1; test('fragments text into soft and hard line breaks', () { - breaks = fragmentUsingV8LineBreaker( + final Uint32List breaks = fragmentUsingV8LineBreaker( 'Lorem-ipsum 你好🙂\nDolor sit', ); expect( - breaks.toTypedArray(), + breaks, orderedEquals([ 0, kSoft, 6, kSoft, // "Lorem-" diff --git a/runtime/test_font_data.cc b/runtime/test_font_data.cc index 9389079a8bbd1..9f86698dab1f1 100644 --- a/runtime/test_font_data.cc +++ b/runtime/test_font_data.cc @@ -1621,19 +1621,19 @@ namespace flutter { std::vector> GetTestFontData() { std::vector> typefaces; #if EMBED_TEST_FONT_DATA - typefaces.push_back(SkTypeface::MakeFromStream( - SkMemoryStream::MakeDirect(kFlutterTestFont, kFlutterTestFontLength))); typefaces.push_back(SkTypeface::MakeFromStream( SkMemoryStream::MakeDirect(kAhemFont, kAhemFontLength))); typefaces.push_back(SkTypeface::MakeFromStream( SkMemoryStream::MakeDirect(kCoughFont, kCoughFontLength))); + typefaces.push_back(SkTypeface::MakeFromStream( + SkMemoryStream::MakeDirect(kFlutterTestFont, kFlutterTestFontLength))); #endif // EMBED_TEST_FONT_DATA return typefaces; } std::vector GetTestFontFamilyNames() { #if EMBED_TEST_FONT_DATA - std::vector names = {"FlutterTest", "Ahem", "Cough"}; + std::vector names = {"Ahem", "Cough", "FlutterTest"}; #else // EMBED_TEST_FONT_DATA std::vector names; #endif // EMBED_TEST_FONT_DATA diff --git a/shell/common/BUILD.gn b/shell/common/BUILD.gn index 7fa0c1b23ae70..d0255379bd84a 100644 --- a/shell/common/BUILD.gn +++ b/shell/common/BUILD.gn @@ -328,5 +328,13 @@ if (enable_unittests) { deps += [ "//third_party/swiftshader" ] } } + + if (shell_enable_gl) { + deps += [ + "//third_party/angle:libEGL_static", + "//third_party/angle:libGLESv2_static", + "//third_party/swiftshader", + ] + } } } diff --git a/shell/common/fixtures/shell_test.dart b/shell/common/fixtures/shell_test.dart index b88289a093f74..5f953fd64823d 100644 --- a/shell/common/fixtures/shell_test.dart +++ b/shell/common/fixtures/shell_test.dart @@ -354,6 +354,9 @@ void scene_with_red_box() { PlatformDispatcher.instance.scheduleFrame(); } +@pragma('vm:external-name', 'NativeOnBeforeToImageSync') +external void onBeforeToImageSync(); + @pragma('vm:entry-point') Future toImageSync() async { @@ -362,6 +365,7 @@ Future toImageSync() async { canvas.drawPaint(Paint()..color = const Color(0xFFAAAAAA)); final Picture picture = recorder.endRecording(); + onBeforeToImageSync(); final Image image = picture.toImageSync(20, 25); void expect(Object? a, Object? b) { if (a != b) { diff --git a/shell/common/rasterizer.cc b/shell/common/rasterizer.cc index 478e5d0309393..d4a43e66b32da 100644 --- a/shell/common/rasterizer.cc +++ b/shell/common/rasterizer.cc @@ -289,17 +289,12 @@ std::unique_ptr Rasterizer::MakeSkiaGpuImage( TRACE_EVENT0("flutter", "Rasterizer::MakeGpuImage"); FML_DCHECK(display_list); -// TODO(dnfield): the Linux embedding is in a rough state right now and -// I can't seem to get the GPU path working on it. -// https://github.com/flutter/flutter/issues/108835 -#if FML_OS_LINUX - return MakeBitmapImage(display_list, image_info); -#endif - std::unique_ptr result; delegate_.GetIsGpuDisabledSyncSwitch()->Execute( fml::SyncSwitch::Handlers() .SetIfTrue([&result, &image_info, &display_list] { + // TODO(dnfield): This isn't safe if display_list contains any GPU + // resources like an SkImage_gpu. result = MakeBitmapImage(display_list, image_info); }) .SetIfFalse([&result, &image_info, &display_list, @@ -307,6 +302,14 @@ std::unique_ptr Rasterizer::MakeSkiaGpuImage( gpu_image_behavior = gpu_image_behavior_] { if (!surface || gpu_image_behavior == MakeGpuImageBehavior::kBitmap) { + // TODO(dnfield): This isn't safe if display_list contains any GPU + // resources like an SkImage_gpu. + result = MakeBitmapImage(display_list, image_info); + return; + } + + auto context_switch = surface->MakeRenderContextCurrent(); + if (!context_switch->GetResult()) { result = MakeBitmapImage(display_list, image_info); return; } diff --git a/shell/common/shell_unittests.cc b/shell/common/shell_unittests.cc index 36c86463d8534..2d1b4f01f9259 100644 --- a/shell/common/shell_unittests.cc +++ b/shell/common/shell_unittests.cc @@ -11,6 +11,10 @@ #include #include +#if SHELL_ENABLE_GL +#include +#endif // SHELL_ENABLE_GL + #include "assets/directory_asset_bundle.h" #include "common/graphics/persistent_cache.h" #include "flutter/flow/layers/backdrop_filter_layer.h" @@ -3890,6 +3894,11 @@ TEST_F(ShellTest, PictureToImageSync) { ShellTestPlatformView::BackendType::kGLBackend // ); + AddNativeCallback("NativeOnBeforeToImageSync", + CREATE_NATIVE_ENTRY([&](auto args) { + // nop + })); + fml::CountDownLatch latch(2); AddNativeCallback("NotifyNative", CREATE_NATIVE_ENTRY([&](auto args) { // Teardown and set up rasterizer again. @@ -3912,6 +3921,58 @@ TEST_F(ShellTest, PictureToImageSync) { DestroyShell(std::move(shell)); } +#if SHELL_ENABLE_GL +// This test uses the GL backend and refers to symbols in egl.h +TEST_F(ShellTest, PictureToImageSyncWithTrampledContext) { + // make it easier to trample the GL context by running on a single task + // runner. + ThreadHost thread_host("io.flutter.test." + GetCurrentTestName() + ".", + ThreadHost::Type::Platform); + auto task_runner = thread_host.platform_thread->GetTaskRunner(); + TaskRunners task_runners("test", task_runner, task_runner, task_runner, + task_runner); + + auto settings = CreateSettingsForFixture(); + std::unique_ptr shell = + CreateShell(settings, // + task_runners, // + false, // + nullptr, // + false, // + ShellTestPlatformView::BackendType::kGLBackend // + ); + + AddNativeCallback( + "NativeOnBeforeToImageSync", CREATE_NATIVE_ENTRY([&](auto args) { + // Trample the GL context. If the rasterizer fails + // to make the right one current again, test will + // fail. + ::eglMakeCurrent(::eglGetCurrentDisplay(), NULL, NULL, NULL); + })); + + fml::CountDownLatch latch(2); + AddNativeCallback("NotifyNative", CREATE_NATIVE_ENTRY([&](auto args) { + // Teardown and set up rasterizer again. + PlatformViewNotifyDestroyed(shell.get()); + PlatformViewNotifyCreated(shell.get()); + latch.CountDown(); + })); + + ASSERT_NE(shell, nullptr); + ASSERT_TRUE(shell->IsSetup()); + auto configuration = RunConfiguration::InferFromSettings(settings); + PlatformViewNotifyCreated(shell.get()); + configuration.SetEntrypoint("toImageSync"); + RunEngine(shell.get(), std::move(configuration)); + PumpOneFrame(shell.get()); + + latch.Wait(); + + PlatformViewNotifyDestroyed(shell.get()); + DestroyShell(std::move(shell), task_runners); +} +#endif // SHELL_ENABLE_GL + TEST_F(ShellTest, PluginUtilitiesCallbackHandleErrorHandling) { auto settings = CreateSettingsForFixture(); std::unique_ptr shell = diff --git a/shell/platform/darwin/macos/framework/Source/FlutterViewController.mm b/shell/platform/darwin/macos/framework/Source/FlutterViewController.mm index ace1e145c1e17..b9999c0cfae01 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterViewController.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterViewController.mm @@ -278,6 +278,34 @@ - (NSArray*)accessibilityChildren { return @[ _flutterView ]; } +- (void)mouseDown:(NSEvent*)event { + // Work around an AppKit bug where mouseDown/mouseUp are not called on the view controller if the + // view is the content view of an NSPopover AND macOS's Reduced Transparency accessibility setting + // is enabled. + // + // This simply calls mouseDown on the next responder in the responder chain as the default + // implementation on NSResponder is documented to do. + // + // See: https://github.com/flutter/flutter/issues/115015 + // See: http://www.openradar.me/FB12050037 + // See: https://developer.apple.com/documentation/appkit/nsresponder/1524634-mousedown + [self.nextResponder mouseDown:event]; +} + +- (void)mouseUp:(NSEvent*)event { + // Work around an AppKit bug where mouseDown/mouseUp are not called on the view controller if the + // view is the content view of an NSPopover AND macOS's Reduced Transparency accessibility setting + // is enabled. + // + // This simply calls mouseUp on the next responder in the responder chain as the default + // implementation on NSResponder is documented to do. + // + // See: https://github.com/flutter/flutter/issues/115015 + // See: http://www.openradar.me/FB12050037 + // See: https://developer.apple.com/documentation/appkit/nsresponder/1535349-mouseup + [self.nextResponder mouseUp:event]; +} + @end #pragma mark - FlutterViewController implementation. diff --git a/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm index ea96d6914d872..b48953923a38f 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTest.mm @@ -18,6 +18,8 @@ #include "flutter/shell/platform/embedder/test_utils/key_codes.g.h" #import "flutter/testing/testing.h" +#pragma mark - Test Helper Classes + // A wrap to convert FlutterKeyEvent to a ObjC class. @interface KeyEventWrapper : NSObject @property(nonatomic) FlutterKeyEvent* data; @@ -36,6 +38,23 @@ - (void)dealloc { } @end +// A FlutterViewController subclass for testing that mouseDown/mouseUp get called when +// mouse events are sent to the associated view. +@interface MouseEventFlutterViewController : FlutterViewController +@property(nonatomic, assign) BOOL mouseDownCalled; +@property(nonatomic, assign) BOOL mouseUpCalled; +@end + +@implementation MouseEventFlutterViewController +- (void)mouseDown:(NSEvent*)event { + self.mouseDownCalled = YES; +} + +- (void)mouseUp:(NSEvent*)event { + self.mouseUpCalled = YES; +} +@end + @interface FlutterViewControllerTestObjC : NSObject - (bool)testKeyEventsAreSentToFramework; - (bool)testKeyEventsArePropagatedIfNotHandled; @@ -43,6 +62,7 @@ - (bool)testKeyEventsAreNotPropagatedIfHandled; - (bool)testFlagsChangedEventsArePropagatedIfNotHandled; - (bool)testKeyboardIsRestartedOnEngineRestart; - (bool)testTrackpadGesturesAreSentToFramework; +- (bool)testMouseDownUpEventsSentToNextResponder; - (bool)testModifierKeysAreSynthesizedOnMouseMove; - (bool)testViewWillAppearCalledMultipleTimes; - (bool)testFlutterViewIsConfigured; @@ -52,6 +72,8 @@ + (void)respondFalseForSendEvent:(const FlutterKeyEvent&)event userData:(nullable void*)userData; @end +#pragma mark - Static helper functions + using namespace ::flutter::testing::keycodes; namespace flutter::testing { @@ -108,6 +130,8 @@ id MockGestureEvent(NSEventType type, NSEventPhase phase, double magnification, } // namespace +#pragma mark - gtest tests + TEST(FlutterViewController, HasViewThatHidesOtherViewsInAccessibility) { FlutterViewController* viewControllerMock = CreateMockViewController(); @@ -196,6 +220,10 @@ id MockGestureEvent(NSEventType type, NSEventPhase phase, double magnification, ASSERT_TRUE([[FlutterViewControllerTestObjC alloc] testTrackpadGesturesAreSentToFramework]); } +TEST(FlutterViewControllerTest, TestMouseDownUpEventsSentToNextResponder) { + ASSERT_TRUE([[FlutterViewControllerTestObjC alloc] testMouseDownUpEventsSentToNextResponder]); +} + TEST(FlutterViewControllerTest, TestModifierKeysAreSynthesizedOnMouseMove) { ASSERT_TRUE([[FlutterViewControllerTestObjC alloc] testModifierKeysAreSynthesizedOnMouseMove]); } @@ -210,6 +238,8 @@ id MockGestureEvent(NSEventType type, NSEventPhase phase, double magnification, } // namespace flutter::testing +#pragma mark - FlutterViewControllerTestObjC + @implementation FlutterViewControllerTestObjC - (bool)testKeyEventsAreSentToFramework { @@ -802,6 +832,51 @@ - (bool)testViewWillAppearCalledMultipleTimes { return true; } +static void SwizzledNoop(id self, SEL _cmd) {} + +// Verify workaround an AppKit bug where mouseDown/mouseUp are not called on the view controller if +// the view is the content view of an NSPopover AND macOS's Reduced Transparency accessibility +// setting is enabled. +// +// See: https://github.com/flutter/flutter/issues/115015 +// See: http://www.openradar.me/FB12050037 +// See: https://developer.apple.com/documentation/appkit/nsresponder/1524634-mousedown +- (bool)testMouseDownUpEventsSentToNextResponder { + // The root cause of the above bug is NSResponder mouseDown/mouseUp methods that don't correctly + // walk the responder chain calling the appropriate method on the next responder under certain + // conditions. Simulate this by swizzling out the default implementations and replacing them with + // no-ops. + Method mouseDown = class_getInstanceMethod([NSResponder class], @selector(mouseDown:)); + Method mouseUp = class_getInstanceMethod([NSResponder class], @selector(mouseUp:)); + IMP noopImp = (IMP)SwizzledNoop; + IMP origMouseDown = method_setImplementation(mouseDown, noopImp); + IMP origMouseUp = method_setImplementation(mouseUp, noopImp); + + // Verify that mouseDown/mouseUp trigger mouseDown/mouseUp calls on FlutterViewController. + id engineMock = flutter::testing::CreateMockFlutterEngine(@""); + MouseEventFlutterViewController* viewController = + [[MouseEventFlutterViewController alloc] initWithEngine:engineMock nibName:@"" bundle:nil]; + FlutterView* view = (FlutterView*)[viewController view]; + + EXPECT_FALSE(viewController.mouseDownCalled); + EXPECT_FALSE(viewController.mouseUpCalled); + + NSEvent* mouseEvent = flutter::testing::CreateMouseEvent(0x00); + [view mouseDown:mouseEvent]; + EXPECT_TRUE(viewController.mouseDownCalled); + EXPECT_FALSE(viewController.mouseUpCalled); + + viewController.mouseDownCalled = NO; + [view mouseUp:mouseEvent]; + EXPECT_FALSE(viewController.mouseDownCalled); + EXPECT_TRUE(viewController.mouseUpCalled); + + // Restore the original NSResponder mouseDown/mouseUp implementations. + method_setImplementation(mouseDown, origMouseDown); + method_setImplementation(mouseUp, origMouseUp); + return true; +} + - (bool)testModifierKeysAreSynthesizedOnMouseMove { id engineMock = flutter::testing::CreateMockFlutterEngine(@""); // Need to return a real renderer to allow view controller to load. diff --git a/sky/packages/sky_engine/LICENSE b/sky/packages/sky_engine/LICENSE index 7cf2b9fd55629..d7a37ca940523 100644 --- a/sky/packages/sky_engine/LICENSE +++ b/sky/packages/sky_engine/LICENSE @@ -25614,6 +25614,7 @@ engine spring_animation tonic txt +web_sdk_version web_test_fonts web_unicode diff --git a/testing/dart/canvas_test.dart b/testing/dart/canvas_test.dart index 451beaf243af5..c230382017025 100644 --- a/testing/dart/canvas_test.dart +++ b/testing/dart/canvas_test.dart @@ -331,7 +331,6 @@ void main() { builder.pushStyle(TextStyle( decoration: TextDecoration.underline, decorationColor: const Color(0xFF0000FF), - fontFamily: 'Ahem', fontSize: 10, color: const Color(0xFF000000), decorationStyle: style, diff --git a/testing/dart/paragraph_builder_test.dart b/testing/dart/paragraph_builder_test.dart index 14761f17f9c83..37e27a758147a 100644 --- a/testing/dart/paragraph_builder_test.dart +++ b/testing/dart/paragraph_builder_test.dart @@ -7,6 +7,9 @@ import 'dart:ui'; import 'package:litetest/litetest.dart'; void main() { + // The actual values for font measurements will vary by platform slightly. + const double epsillon = 0.0001; + test('Should be able to build and layout a paragraph', () { final ParagraphBuilder builder = ParagraphBuilder(ParagraphStyle()); builder.addText('Hello'); @@ -37,10 +40,10 @@ void main() { final List boxes = paragraph.getBoxesForRange(0, 3); expect(boxes.length, 1); - expect(boxes.first.left, 0.0); - expect(boxes.first.top, 0.0); - expect(boxes.first.right, 42.0); - expect(boxes.first.bottom, 14.0); + expect(boxes.first.left, 0); + expect(boxes.first.top, closeTo(0, epsillon)); + expect(boxes.first.right, closeTo(42, epsillon)); + expect(boxes.first.bottom, closeTo(14, epsillon)); expect(boxes.first.direction, TextDirection.ltr); }); @@ -57,13 +60,13 @@ void main() { final List metrics = paragraph.computeLineMetrics(); expect(metrics.length, 1); expect(metrics.first.hardBreak, true); - expect(metrics.first.ascent, 10.5); - expect(metrics.first.descent, 3.5); - expect(metrics.first.unscaledAscent, 10.5); + expect(metrics.first.ascent, closeTo(11.200042724609375, epsillon)); + expect(metrics.first.descent, closeTo(2.799957275390625, epsillon)); + expect(metrics.first.unscaledAscent, closeTo(11.200042724609375, epsillon)); expect(metrics.first.height, 14.0); expect(metrics.first.width, 70.0); expect(metrics.first.left, 0.0); - expect(metrics.first.baseline, 10.5); + expect(metrics.first.baseline, closeTo(11.200042724609375, epsillon)); expect(metrics.first.lineNumber, 0); }); } diff --git a/third_party/web_sdk_version/BUILD.gn b/third_party/web_sdk_version/BUILD.gn deleted file mode 100644 index 5cb367593894b..0000000000000 --- a/third_party/web_sdk_version/BUILD.gn +++ /dev/null @@ -1,43 +0,0 @@ -import("//flutter/shell/version.gni") -import("//third_party/dart/build/dart/dart_action.gni") - -dart_sdk_package_config = "//third_party/dart/.dart_tool/package_config.json" - -prebuilt_dart_action("web_sdk_version") { - packages = dart_sdk_package_config - pool = "//flutter/build/dart:dart_pool" - - script = "version_writer.dart" - inputs = [ "version_writer.dart" ] - - stamp_location = "$target_gen_dir/$target_name.stamp" - outputs = [ - stamp_location, - invoker.output_dir, - ] - - input_dir = rebase_path(invoker.input_dir) - output_dir = rebase_path(invoker.output_dir) - - args = [ - "--output-dir=$output_dir", - "--input-dir=$input_dir", - "--stamp", - rebase_path(stamp_location, root_build_dir), - ] - if (ui) { - args += [ "--ui" ] - } else { - library_name = invoker.library_name - api_file = rebase_path(invoker.api_file) - args += [ - "--library-name=$library_name", - "--api-file=$api_file", - ] - } - - foreach(source_file, source_dart_files) { - path = rebase_path(source_file) - args += [ "--source-file=$path" ] - } -} diff --git a/third_party/web_sdk_version/lib/web_sdk_version.dart b/third_party/web_sdk_version/lib/web_sdk_version.dart deleted file mode 100644 index fe6c9c5ebe5e0..0000000000000 --- a/third_party/web_sdk_version/lib/web_sdk_version.dart +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2013 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. - -library web_sdk_version; - -export 'web_sdk_version/web_sdk_version.dart'; diff --git a/third_party/web_sdk_version/lib/web_sdk_version/web_sdk_version.dart b/third_party/web_sdk_version/lib/web_sdk_version/web_sdk_version.dart deleted file mode 100644 index b4b52c57d5ab9..0000000000000 --- a/third_party/web_sdk_version/lib/web_sdk_version/web_sdk_version.dart +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2013 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. - -// NOTE: This file is just a stub. The actual file is generated at build time -// with the actual current Git commit SHA. This stub is just here for local -// development. - -/// The Git SHA of the Flutter Engine. -const String flutterWebSdkVersion = 'IF YOU SEE THIS, FILE A BUG: https://github.com/flutter/flutter/issues/new?assignees=&labels=&template=2_bug.md&title='; diff --git a/third_party/web_sdk_version/pubspec.yaml b/third_party/web_sdk_version/pubspec.yaml deleted file mode 100644 index 102ae4aef7f27..0000000000000 --- a/third_party/web_sdk_version/pubspec.yaml +++ /dev/null @@ -1,6 +0,0 @@ -name: web_sdk_version - -publish_to: none - -environment: - sdk: ">=2.12.0-0 <3.0.0" diff --git a/tools/gn b/tools/gn index b893752780775..072a6d289b272 100755 --- a/tools/gn +++ b/tools/gn @@ -264,7 +264,9 @@ def to_gn_args(args): gn_args['full_dart_sdk'] = args.full_dart_sdk if args.enable_unittests: - gn_args['enable_unittests'] = args.enable_unittests + gn_args['enable_unittests'] = True + if args.no_enable_unittests: + gn_args['enable_unittests'] = False # Skia GN args. gn_args['skia_enable_flutter_defines' @@ -323,6 +325,9 @@ def to_gn_args(args): gn_args['target_cpu'] = get_target_cpu(args) gn_args['dart_target_arch'] = gn_args['target_cpu'] + if not args.build_engine_artifacts: + gn_args['flutter_build_engine_artifacts'] = False + # We cannot cross-compile for 32 bit arm on a Windows host. We work around # this by leaving 'target_cpu' and 'dart_target_arch' set to 'arm' so that # Dart tools such as gen_snapshot that are built for the host will correctly @@ -660,7 +665,18 @@ def parse_args(args): parser.add_argument('--unoptimized', default=False, action='store_true') - parser.add_argument('--enable-unittests', action='store_true', default=False) + parser.add_argument( + '--enable-unittests', + action='store_true', + default=False, + help='Force enable building unit test binaries.' + ) + parser.add_argument( + '--no-enable-unittests', + default=False, + action='store_true', + help='Force disable building unit test binaries.' + ) parser.add_argument( '--runtime-mode', @@ -755,6 +771,19 @@ def parse_args(args): '--arm-float-abi', type=str, choices=['hard', 'soft', 'softfp'] ) + parser.add_argument( + '--build-engine-artifacts', + default=True, + action='store_true', + help='Build the host-side development artifacts.' + ) + parser.add_argument( + '--no-build-engine-artifacts', + dest='build_engine_artifacts', + action='store_false', + help='Do not build the host-side development artifacts.' + ) + parser.add_argument('--goma', default=True, action='store_true') parser.add_argument('--no-goma', dest='goma', action='store_false') parser.add_argument( diff --git a/web_sdk/BUILD.gn b/web_sdk/BUILD.gn index 86931fd239b29..957510f08ef93 100644 --- a/web_sdk/BUILD.gn +++ b/web_sdk/BUILD.gn @@ -4,7 +4,6 @@ import("//flutter/build/zip_bundle.gni") import("//flutter/common/config.gni") -import("//flutter/shell/version/version.gni") import("//third_party/dart/build/dart/dart_action.gni") dart_sdk_package_config = "//third_party/dart/.dart_tool/package_config.json" @@ -25,7 +24,6 @@ web_engine_libraries = [ ":web_unicode_library", ":web_test_fonts_library", ":web_locale_keymap_library", - ":web_sdk_version_library", ] group("web_sdk") { @@ -153,14 +151,6 @@ sdk_rewriter("web_locale_keymap_library") { output_dir = "$root_out_dir/flutter_web_sdk/lib/_web_locale_keymap/" } -generated_file("web_sdk_version_library") { - outputs = [ - "$root_out_dir/flutter_web_sdk/lib/_web_sdk_version/web_sdk_version.dart", - ] - - contents = "// Copyright 2013 The Flutter Authors. All rights reserved.$0x0A// Use of this source code is governed by a BSD-style license that can be$0x0A// found in the LICENSE file.$0x0A$0x0A@JS()$0x0Alibrary dart._web_sdk_version;$0x0A$0x0Aimport 'dart:_js_annotations';$0x0A$0x0Aconst String flutterWebSdkVersion = '$engine_version';$0x0A" -} - copy("web_ui_library") { sources = [ "//flutter/web_sdk/libraries.json" ] @@ -324,8 +314,6 @@ template("_compile_platform") { "dart:_web_unicode", "--source", "dart:_web_locale_keymap", - "--source", - "dart:_web_sdk_version", ] if (flutter_prebuilt_dart_sdk) { args += [ diff --git a/web_sdk/libraries.json b/web_sdk/libraries.json index 66e04eb053801..b55cd2bac65eb 100644 --- a/web_sdk/libraries.json +++ b/web_sdk/libraries.json @@ -26,9 +26,6 @@ }, "_web_test_fonts": { "uri": "lib/_web_test_fonts/web_test_fonts.dart" - }, - "_web_sdk_version": { - "uri": "lib/_web_sdk_version/web_sdk_version.dart" } } }, @@ -57,9 +54,6 @@ }, "_web_test_fonts": { "uri": "lib/_web_test_fonts/web_test_fonts.dart" - }, - "_web_sdk_version": { - "uri": "lib/_web_sdk_version/web_sdk_version.dart" } } }, @@ -88,9 +82,6 @@ }, "_web_test_fonts": { "uri": "lib/_web_test_fonts/web_test_fonts.dart" - }, - "_web_sdk_version": { - "uri": "lib/_web_sdk_version/web_sdk_version.dart" } } } diff --git a/web_sdk/libraries.yaml b/web_sdk/libraries.yaml index 765068efde506..d447436aea738 100644 --- a/web_sdk/libraries.yaml +++ b/web_sdk/libraries.yaml @@ -36,9 +36,6 @@ dartdevc: _web_test_fonts: uri: "lib/_web_test_fonts/web_test_fonts.dart" - _web_sdk_version: - uri: "lib/_web_sdk_version/web_sdk_version.dart" - dart2js: include: - {path: "../dart-sdk/lib/libraries.json", target: dart2js} @@ -62,9 +59,6 @@ dart2js: _web_test_fonts: uri: "lib/_web_test_fonts/web_test_fonts.dart" - _web_sdk_version: - uri: "lib/_web_sdk_version/web_sdk_version.dart" - wasm: include: - {path: "../dart-sdk/lib/libraries.json", target: wasm} @@ -87,6 +81,3 @@ wasm: _web_test_fonts: uri: "lib/_web_test_fonts/web_test_fonts.dart" - - _web_sdk_version: - uri: "lib/_web_sdk_version/web_sdk_version.dart" diff --git a/web_sdk/sdk_rewriter.dart b/web_sdk/sdk_rewriter.dart index 421fd037b81c8..77339f913667f 100644 --- a/web_sdk/sdk_rewriter.dart +++ b/web_sdk/sdk_rewriter.dart @@ -96,7 +96,6 @@ final Map extraImportsMap = { 'web_unicode': "import 'dart:_web_unicode';", 'web_test_fonts': "import 'dart:_web_test_fonts';", 'web_locale_keymap': "import 'dart:_web_locale_keymap' as locale_keymap;", - 'web_sdk_version': "import 'dart:_web_sdk_version';", }; // Rewrites the "package"-style web ui library into a dart:ui implementation. diff --git a/web_sdk/test/sdk_rewriter_test.dart b/web_sdk/test/sdk_rewriter_test.dart index fc65627ff0532..5602bb5679f41 100644 --- a/web_sdk/test/sdk_rewriter_test.dart +++ b/web_sdk/test/sdk_rewriter_test.dart @@ -132,21 +132,18 @@ void printSomething() { "import 'dart:_web_unicode';", "import 'dart:_web_test_fonts';", "import 'dart:_web_locale_keymap' as locale_keymap;", - "import 'dart:_web_sdk_version';", ]); expect(getExtraImportsForLibrary('skwasm_stub'), [ "import 'dart:_engine';", "import 'dart:_web_unicode';", "import 'dart:_web_test_fonts';", "import 'dart:_web_locale_keymap' as locale_keymap;", - "import 'dart:_web_sdk_version';", ]); expect(getExtraImportsForLibrary('skwasm_impl'), [ "import 'dart:_engine';", "import 'dart:_web_unicode';", "import 'dart:_web_test_fonts';", "import 'dart:_web_locale_keymap' as locale_keymap;", - "import 'dart:_web_sdk_version';", "import 'dart:ffi';", ]); @@ -154,6 +151,5 @@ void printSomething() { expect(getExtraImportsForLibrary('web_unicode'), isEmpty); expect(getExtraImportsForLibrary('web_test_fonts'), isEmpty); expect(getExtraImportsForLibrary('web_locale_keymap'), isEmpty); - expect(getExtraImportsForLibrary('web_sdk_version'), isEmpty); }); }