)]}'
{
  "commit": "ad9e4fef451a73427285826455db5fbdde502bd7",
  "tree": "51615919ab03e2150eda0b2180e9ebcbf8999697",
  "parents": [
    "76d310e42c0696c469fe77387c95f9b35a597f02"
  ],
  "author": {
    "name": "Jonah Williams",
    "email": "jonahwilliams@google.com",
    "time": "Fri Oct 18 08:38:34 2024 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Oct 18 15:38:34 2024 +0000"
  },
  "message": "[Impeller] add mechanism for sharing bdf inputs. (#55701)\n\nIntroduces a mechanism to allow backdrop filters to 1) share backdrop inputs and 2) fuse filter applications for faster blurs.\r\n\r\nThis is a proposed solution to https://github.com/flutter/flutter/issues/131568\r\n\r\nImplemented:\r\n* Developer can specify a \"backdrop id\" which indicates that a backdrop layer should share the input texture and potentially cached filter for a layer.\r\n* Removes second save layer for each backdrop filter\r\n* Removes save layer trace event for backdrop filter\r\n* Can fuse backdrop filters if there is more than one identical filter\r\n\r\nTBD:\r\n* Adjust heruristic to avoid applying bdf filter to entire screen\r\n\r\nSuggestions: applying a bdf should be a distinct operation from a save layer in the DL builder/dispatcher. The saveLayer implmenentation in the impeller dispatcher is super convoluted because it needs to handle both.\r\n\r\n### Video\r\n\r\nVideo starts with normal bdf then I hot reload to specify that the bdfs share inputs/filters. This is running on a pixel 8 pro\r\n\r\nChange to the macrobenchmark app is just:\r\n```dart\r\n  Widget build(BuildContext context) {\r\n    Widget addBlur(Widget child, bool shouldBlur) {\r\n      if (shouldBlur) {\r\n        return ClipRect(\r\n          child: BackdropFilter(\r\n            filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5),\r\n            backdropId: 1, // Added ID\r\n            child: child,\r\n          ),\r\n        );\r\n      } else {\r\n        return child;\r\n      }\r\n    }\r\n```\r\n\r\nhttps://github.com/user-attachments/assets/22707f97-5825-43f1-91b4-1a02a43437f5\r\n\r\nRequires framework changes in https://github.com/jonahwilliams/flutter/pull/new/backdrop_id",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "44f658bb99146e975f8a92e7250cb9c38bd75504",
      "old_mode": 33188,
      "old_path": "display_list/benchmarking/dl_complexity_gl.cc",
      "new_id": "5da3703b7fbb27360a0e91cab02c9a733f2aba51",
      "new_mode": 33188,
      "new_path": "display_list/benchmarking/dl_complexity_gl.cc"
    },
    {
      "type": "modify",
      "old_id": "d0fcbb98a3bf41dabc979a75e1b8a48b31af4ff5",
      "old_mode": 33188,
      "old_path": "display_list/benchmarking/dl_complexity_gl.h",
      "new_id": "3041f9014102f57a6f19459a559b067801d13a72",
      "new_mode": 33188,
      "new_path": "display_list/benchmarking/dl_complexity_gl.h"
    },
    {
      "type": "modify",
      "old_id": "82f641e6cc12323c925727e97e8208c7c2138760",
      "old_mode": 33188,
      "old_path": "display_list/benchmarking/dl_complexity_metal.cc",
      "new_id": "25fa25a4912a2fb3cbd1dad75d1722656a5b860c",
      "new_mode": 33188,
      "new_path": "display_list/benchmarking/dl_complexity_metal.cc"
    },
    {
      "type": "modify",
      "old_id": "d11d0ff2a7b0239a9b9f93737efe6ee5104209ea",
      "old_mode": 33188,
      "old_path": "display_list/benchmarking/dl_complexity_metal.h",
      "new_id": "79dd5c3155be35e0b732444c740be83435bf5e4e",
      "new_mode": 33188,
      "new_path": "display_list/benchmarking/dl_complexity_metal.h"
    },
    {
      "type": "modify",
      "old_id": "0477bf2ae20511491d5609b4d107d4c70d427434",
      "old_mode": 33188,
      "old_path": "display_list/display_list_unittests.cc",
      "new_id": "524a5aabf2d87d1b049160af7c920c09ea9196f5",
      "new_mode": 33188,
      "new_path": "display_list/display_list_unittests.cc"
    },
    {
      "type": "modify",
      "old_id": "7db556f4afa6f5a476c56f2e6c0ab8f3eb624971",
      "old_mode": 33188,
      "old_path": "display_list/dl_builder.cc",
      "new_id": "39953dfd3c54f34f075b521b7321ced3747891d0",
      "new_mode": 33188,
      "new_path": "display_list/dl_builder.cc"
    },
    {
      "type": "modify",
      "old_id": "c7ac9693d084758426433cc4d29108a785e19a1e",
      "old_mode": 33188,
      "old_path": "display_list/dl_builder.h",
      "new_id": "58d343d92ab6a86aa2017c065588d7b1d2501040",
      "new_mode": 33188,
      "new_path": "display_list/dl_builder.h"
    },
    {
      "type": "modify",
      "old_id": "ff0ea7e6896f6c536ef1d3ed157c2a6d6b140714",
      "old_mode": 33188,
      "old_path": "display_list/dl_canvas.h",
      "new_id": "80076fc0012b33190c554275a14c4bada9e985ef",
      "new_mode": 33188,
      "new_path": "display_list/dl_canvas.h"
    },
    {
      "type": "modify",
      "old_id": "091ed6f655ec6e15e1e830a66df0d8cde4b3b94a",
      "old_mode": 33188,
      "old_path": "display_list/dl_op_receiver.h",
      "new_id": "79d5d28dcd5a4fb4a73eb129aaf561b138678062",
      "new_mode": 33188,
      "new_path": "display_list/dl_op_receiver.h"
    },
    {
      "type": "modify",
      "old_id": "592c31e914ca2901e19a6f4e918b71f4d39ebe63",
      "old_mode": 33188,
      "old_path": "display_list/dl_op_records.h",
      "new_id": "189038b37a5fb89d3b6f9c8802d2c1cb83a04297",
      "new_mode": 33188,
      "new_path": "display_list/dl_op_records.h"
    },
    {
      "type": "modify",
      "old_id": "f98010f56f0bc2afc5d3f90afd75d3e85847c330",
      "old_mode": 33188,
      "old_path": "display_list/effects/dl_image_filter.h",
      "new_id": "1e6b01529429cfa467dffcc1e3169c779285af47",
      "new_mode": 33188,
      "new_path": "display_list/effects/dl_image_filter.h"
    },
    {
      "type": "modify",
      "old_id": "8b19d74c2124fc71ba1fb99f7156ba9b18f76f77",
      "old_mode": 33188,
      "old_path": "display_list/skia/dl_sk_canvas.cc",
      "new_id": "a190519925af5f5034a7fa2650ff7576c46e3b80",
      "new_mode": 33188,
      "new_path": "display_list/skia/dl_sk_canvas.cc"
    },
    {
      "type": "modify",
      "old_id": "804752c7f8c56f9a0107857f55c4a996e482ed9e",
      "old_mode": 33188,
      "old_path": "display_list/skia/dl_sk_canvas.h",
      "new_id": "7047f41a37625492d8503b1cee5d9e42489bf24f",
      "new_mode": 33188,
      "new_path": "display_list/skia/dl_sk_canvas.h"
    },
    {
      "type": "modify",
      "old_id": "33b11166cd5aed0b1c9446ceaa3250d8ea24f5a4",
      "old_mode": 33188,
      "old_path": "display_list/skia/dl_sk_dispatcher.cc",
      "new_id": "45066eb22305faa2cbb054350986f000fda35de5",
      "new_mode": 33188,
      "new_path": "display_list/skia/dl_sk_dispatcher.cc"
    },
    {
      "type": "modify",
      "old_id": "fa5fbdd21259be9412e2d459eede22d3fc4c5c07",
      "old_mode": 33188,
      "old_path": "display_list/skia/dl_sk_dispatcher.h",
      "new_id": "1455479a8b22c8897f898246881606cc607124de",
      "new_mode": 33188,
      "new_path": "display_list/skia/dl_sk_dispatcher.h"
    },
    {
      "type": "modify",
      "old_id": "05ca54dbd38ae6b4ef696e0a5b0a08832d1b84c1",
      "old_mode": 33188,
      "old_path": "display_list/testing/dl_test_snippets.cc",
      "new_id": "64ce2a0fef0a008da1d8e9774e97de1a349ea2ce",
      "new_mode": 33188,
      "new_path": "display_list/testing/dl_test_snippets.cc"
    },
    {
      "type": "modify",
      "old_id": "257d276657b86df5212c4734134c6e1f6c8572cb",
      "old_mode": 33188,
      "old_path": "display_list/utils/dl_receiver_utils.h",
      "new_id": "fccc04c6ffcee8d1527c5e0d49600a3de366ce59",
      "new_mode": 33188,
      "new_path": "display_list/utils/dl_receiver_utils.h"
    },
    {
      "type": "modify",
      "old_id": "32707c4f77e6d15b42e7cf56965fb3affae2f3bf",
      "old_mode": 33188,
      "old_path": "flow/layers/backdrop_filter_layer.cc",
      "new_id": "aec04bafae872149599d5dd423f70707b768c2a8",
      "new_mode": 33188,
      "new_path": "flow/layers/backdrop_filter_layer.cc"
    },
    {
      "type": "modify",
      "old_id": "d17fed110d5e9bffb9094c83ae9f1ed9e9613107",
      "old_mode": 33188,
      "old_path": "flow/layers/backdrop_filter_layer.h",
      "new_id": "180c5a641341ae896a466b6d48a0282e3ef84dfe",
      "new_mode": 33188,
      "new_path": "flow/layers/backdrop_filter_layer.h"
    },
    {
      "type": "modify",
      "old_id": "a3908df25bcbf2a759fff71a97732f5352f15df1",
      "old_mode": 33188,
      "old_path": "flow/layers/layer_state_stack.cc",
      "new_id": "15cf79548eddea668ebc9919126faea954c3842a",
      "new_mode": 33188,
      "new_path": "flow/layers/layer_state_stack.cc"
    },
    {
      "type": "modify",
      "old_id": "c9e606e86e245a1590b1b621c990fab17c744cbb",
      "old_mode": 33188,
      "old_path": "flow/layers/layer_state_stack.h",
      "new_id": "a5cec34ed1cc4b83ac393bfdba3f63d0d321a22c",
      "new_mode": 33188,
      "new_path": "flow/layers/layer_state_stack.h"
    },
    {
      "type": "modify",
      "old_id": "c224ac7dee3db08ea320b968b963272dadbfb78d",
      "old_mode": 33188,
      "old_path": "impeller/display_list/aiks_dl_blur_unittests.cc",
      "new_id": "96f852b49f65b096bae7861768ae0dc620d274fc",
      "new_mode": 33188,
      "new_path": "impeller/display_list/aiks_dl_blur_unittests.cc"
    },
    {
      "type": "modify",
      "old_id": "ae42bf9d69078313ecebf5021ceaff535afccc28",
      "old_mode": 33188,
      "old_path": "impeller/display_list/aiks_playground.cc",
      "new_id": "6b2ac34a9f315c3214c7d7bfb3e39a2e448e68c1",
      "new_mode": 33188,
      "new_path": "impeller/display_list/aiks_playground.cc"
    },
    {
      "type": "modify",
      "old_id": "dedb9c31cf27cb5921808465020627aa93331a3f",
      "old_mode": 33188,
      "old_path": "impeller/display_list/canvas.cc",
      "new_id": "f052634de5b58c45f94a48d2e24fe44ffd5188b8",
      "new_mode": 33188,
      "new_path": "impeller/display_list/canvas.cc"
    },
    {
      "type": "modify",
      "old_id": "387cb5c81dc33e948bc919957e1179a46b08b227",
      "old_mode": 33188,
      "old_path": "impeller/display_list/canvas.h",
      "new_id": "f856c8caa47cbdcb042fb0c19b7b09a25ff29b9e",
      "new_mode": 33188,
      "new_path": "impeller/display_list/canvas.h"
    },
    {
      "type": "modify",
      "old_id": "ffdd0c6eca9f8aa57e50bfa006aa2f09f3c385d0",
      "old_mode": 33188,
      "old_path": "impeller/display_list/dl_dispatcher.cc",
      "new_id": "895a4eb103cadb97fdcefccee13e824b7b479c1f",
      "new_mode": 33188,
      "new_path": "impeller/display_list/dl_dispatcher.cc"
    },
    {
      "type": "modify",
      "old_id": "1418229430bf0285579f26cc577c1c0605838994",
      "old_mode": 33188,
      "old_path": "impeller/display_list/dl_dispatcher.h",
      "new_id": "8302a1f6b436bfed03b844f06e5c4a9502602bc3",
      "new_mode": 33188,
      "new_path": "impeller/display_list/dl_dispatcher.h"
    },
    {
      "type": "modify",
      "old_id": "eab910d1f73e4e0ac54f45c66235d13219d8f665",
      "old_mode": 33188,
      "old_path": "impeller/display_list/dl_playground.cc",
      "new_id": "9a0561230d5549833b18a120745946278e854cf8",
      "new_mode": 33188,
      "new_path": "impeller/display_list/dl_playground.cc"
    },
    {
      "type": "modify",
      "old_id": "c92a84a76a718fa85b7b4d82763f5bd5fd916af6",
      "old_mode": 33188,
      "old_path": "impeller/entity/entity_pass_target.cc",
      "new_id": "712645a61339f134a620db32a5cc0b45dd0fb889",
      "new_mode": 33188,
      "new_path": "impeller/entity/entity_pass_target.cc"
    },
    {
      "type": "modify",
      "old_id": "e82bad573874ababd13940e0c2eb4921efc47b6c",
      "old_mode": 33188,
      "old_path": "impeller/entity/entity_pass_target.h",
      "new_id": "2adf4ecaeb50a5cf577954e5052b291b07a76efd",
      "new_mode": 33188,
      "new_path": "impeller/entity/entity_pass_target.h"
    },
    {
      "type": "modify",
      "old_id": "da23f53f06043bf1b16aec20f2a11f29c5a02dc8",
      "old_mode": 33188,
      "old_path": "lib/ui/compositing.dart",
      "new_id": "d8684270486e6e3a1e0e4a9c4fd687abbb704028",
      "new_mode": 33188,
      "new_path": "lib/ui/compositing.dart"
    },
    {
      "type": "modify",
      "old_id": "b89a7f7cde99c41a2e7606eb7d3e5ac08be51087",
      "old_mode": 33188,
      "old_path": "lib/ui/compositing/scene_builder.cc",
      "new_id": "a8e3a29f854351158f3819fe8863a50531ba9e8f",
      "new_mode": 33188,
      "new_path": "lib/ui/compositing/scene_builder.cc"
    },
    {
      "type": "modify",
      "old_id": "d13f4d0117564bfadbef72b974a571c4e0052b87",
      "old_mode": 33188,
      "old_path": "lib/ui/compositing/scene_builder.h",
      "new_id": "717129a6fd27fa779651d1aaa176ec4d39fc0ce0",
      "new_mode": 33188,
      "new_path": "lib/ui/compositing/scene_builder.h"
    },
    {
      "type": "modify",
      "old_id": "702d83bf61417fac090f4503e717d98ab3f5e566",
      "old_mode": 33188,
      "old_path": "lib/ui/compositing/scene_builder_unittests.cc",
      "new_id": "cbd2a3bfbb94652a9d56a380ec2b93025547dc47",
      "new_mode": 33188,
      "new_path": "lib/ui/compositing/scene_builder_unittests.cc"
    },
    {
      "type": "modify",
      "old_id": "09a4d25300be29a7377ed3b916902628cd6f1ea4",
      "old_mode": 33188,
      "old_path": "lib/web_ui/lib/compositing.dart",
      "new_id": "2f0d558f5bb340537461d429b5d8b10c34b58189",
      "new_mode": 33188,
      "new_path": "lib/web_ui/lib/compositing.dart"
    },
    {
      "type": "modify",
      "old_id": "183180e8a21d259e588a61fd3af8021f8486cadb",
      "old_mode": 33188,
      "old_path": "lib/web_ui/lib/src/engine/canvaskit/layer_scene_builder.dart",
      "new_id": "d2f34bc6a01c8d67dfedb8d4de51d810d5464df0",
      "new_mode": 33188,
      "new_path": "lib/web_ui/lib/src/engine/canvaskit/layer_scene_builder.dart"
    },
    {
      "type": "modify",
      "old_id": "ff63108231e6e78c8d5071ec4db9be05357e7bc3",
      "old_mode": 33188,
      "old_path": "lib/web_ui/lib/src/engine/html/scene_builder.dart",
      "new_id": "88644adc0529a4be1f6bf6f71a7936140fe1c1e5",
      "new_mode": 33188,
      "new_path": "lib/web_ui/lib/src/engine/html/scene_builder.dart"
    },
    {
      "type": "modify",
      "old_id": "af84cb00990c62be2f2c071be191433a63e28ce0",
      "old_mode": 33188,
      "old_path": "lib/web_ui/lib/src/engine/scene_builder.dart",
      "new_id": "37d29e66f7fdd9612631484cc9c5b6707a51f89c",
      "new_mode": 33188,
      "new_path": "lib/web_ui/lib/src/engine/scene_builder.dart"
    },
    {
      "type": "modify",
      "old_id": "19f54d104768fc4332fed604d024183d23a5bdcb",
      "old_mode": 33188,
      "old_path": "shell/common/dl_op_spy.cc",
      "new_id": "77fb2092a549a490a0e93b0418d710bc87f93b3b",
      "new_mode": 33188,
      "new_path": "shell/common/dl_op_spy.cc"
    },
    {
      "type": "modify",
      "old_id": "6d3d9c9587f245f69e3ca27293589f2a9e3aa680",
      "old_mode": 33188,
      "old_path": "shell/common/dl_op_spy.h",
      "new_id": "82c2dfc55684b865420812baa03f98ce06568231",
      "new_mode": 33188,
      "new_path": "shell/common/dl_op_spy.h"
    },
    {
      "type": "modify",
      "old_id": "d21b58664451b2ec1ae121398cd6987cdc1ae0e6",
      "old_mode": 33188,
      "old_path": "testing/display_list_testing.cc",
      "new_id": "4f9065178cbf3a03b844eadc73d5912175adacfc",
      "new_mode": 33188,
      "new_path": "testing/display_list_testing.cc"
    },
    {
      "type": "modify",
      "old_id": "8dcaa7de5151d5a7cf7b5f005a500673879edb91",
      "old_mode": 33188,
      "old_path": "testing/display_list_testing.h",
      "new_id": "33fcd6b039dc343e4fe0828c689d3513b09afac1",
      "new_mode": 33188,
      "new_path": "testing/display_list_testing.h"
    },
    {
      "type": "modify",
      "old_id": "ef3b466533e9d2fe7fddc412e84ecd4232ccecd1",
      "old_mode": 33188,
      "old_path": "testing/impeller_golden_tests_output.txt",
      "new_id": "60d7faf3a16e84767bb59cd80a8a9b3941c5a3c4",
      "new_mode": 33188,
      "new_path": "testing/impeller_golden_tests_output.txt"
    }
  ]
}
