)]}'
{
  "commit": "e11a3423eb7ccd7e4ed0782929152c75cdc1736c",
  "tree": "b973d69bd30bbcb3a4b574aabcdc96fbd3fc0a5a",
  "parents": [
    "3527084dcf6b9c2151577e461af5fcca221b32df"
  ],
  "author": {
    "name": "Jon Ihlas",
    "email": "j.ihlas@betclicgroup.com",
    "time": "Tue Aug 18 06:24:08 2026 +0000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Aug 18 06:24:08 2026 +0000"
  },
  "message": "Only render views that need to be rendered (with external texture \u0026 platform view support) (#179874)\n\nFixes https://github.com/flutter/flutter/issues/164320\nBased on @knopp work in https://github.com/flutter/flutter/pull/164322\n\nThis PR adds a dirty-view compositing optimization that skips\ncompositing for views that don\u0027t have any dirty render objects, so it\nshould improves performance in multi-view scenarios by avoiding\nunnessacery work.\n\nWhen a texture has new content, the framework now gets notified via a\nnew onTextureFrameAvailable callback from the engine. This marks the\ntexture\u0027s render object as needing paint, so its view is included in\ncompositing even when nothing else changed.\n\nOn Android, texture callbacks now use `markTextureFrameAvailable`\ninstead of `scheduleEngineFrame`. This is actually more efficient since\nit reuses the existing layer tree rather than regenerating it. Other\nplatforms already used the correct path.\n\nIt also forces all views to composite when returning from background,\nensuring the display is properly refreshed after the app was paused.\n\nOn MacOS:\n\n\n\nhttps://github.com/user-attachments/assets/9d8b21b5-0c61-40d9-aadc-8c5a4b76f20c\n\n\n\n## Pre-launch Checklist\n\n- [X] I read the [Contributor Guide] and followed the process outlined\nthere for submitting PRs.\n- [X] I read the [Tree Hygiene] wiki page, which explains my\nresponsibilities.\n- [X] I read and followed the [Flutter Style Guide], including [Features\nwe expect every widget to implement].\n- [X] I signed the [CLA].\n- [X] I listed at least one issue that this PR fixes in the description\nabove.\n- [X] I updated/added relevant documentation (doc comments with `///`).\n- [X] I added new tests to check the change I am making, or this PR is\n[test-exempt].\n- [X] I followed the [breaking change policy] and added [Data Driven\nFixes] where supported.\n- [X] All existing and new tests are passing.\n\n---------\n\nCo-authored-by: Matej Knopp \u003cmatej.knopp@gmail.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "10c7b82056ddf9f13992959ddc9e293b8275312b",
      "old_mode": 33188,
      "old_path": "dev/tracing_tests/test/timeline_test.dart",
      "new_id": "25298941b6f85c835bc6393202783f15b5c2cd09",
      "new_mode": 33188,
      "new_path": "dev/tracing_tests/test/timeline_test.dart"
    },
    {
      "type": "modify",
      "old_id": "8c72af128573e4d23b4909d2adcf739fba9db34d",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/fixtures/ui_test.dart",
      "new_id": "5a6f515364064e01a301dcb5135d276f17f6a503",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/fixtures/ui_test.dart"
    },
    {
      "type": "modify",
      "old_id": "cd08aca0c207a64f71d66f620b064bf0652ff881",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/hooks.dart",
      "new_id": "89033d06764d89c2cb380b02406e2b88d4cf10d0",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/hooks.dart"
    },
    {
      "type": "modify",
      "old_id": "c7881853484e970a8bba17152cdf5406fd0fb57f",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/platform_dispatcher.dart",
      "new_id": "b610780c58adbb7b4d1acf21387f4d598036e12c",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/platform_dispatcher.dart"
    },
    {
      "type": "modify",
      "old_id": "032657900c8b6373a05de81b0d57762e6673f83b",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/window/platform_configuration.cc",
      "new_id": "84fd31976e1af883f4e8f544ee68fc1f7b70f2c0",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/window/platform_configuration.cc"
    },
    {
      "type": "modify",
      "old_id": "682a7a4e4c8014f5f9f0582906183800e88eefed",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/window/platform_configuration.h",
      "new_id": "0008f2e154afa2d3773b16f6e44f02efc918c77d",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/window/platform_configuration.h"
    },
    {
      "type": "modify",
      "old_id": "0ffa4fb95edb8a3c44366fee20e14c9d8feff756",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/platform_dispatcher.dart",
      "new_id": "a09fba031dbd2436626cc2d2761205d811502021",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/platform_dispatcher.dart"
    },
    {
      "type": "modify",
      "old_id": "c33ed63787c41f2b506aa2881fece725212cfab3",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart",
      "new_id": "d79914838a0b34d28a45c41f8ff57f598e9b6196",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart"
    },
    {
      "type": "modify",
      "old_id": "8f8dd7e354e1efdda11d42b29b47f220dcf549d7",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/runtime/runtime_controller.cc",
      "new_id": "ca249388d6296c2bdd9cccddcf28658b71b693ec",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/runtime/runtime_controller.cc"
    },
    {
      "type": "modify",
      "old_id": "1c4818d1475a9e7ee3dd39ac55d44871f1ad4a38",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/runtime/runtime_controller.h",
      "new_id": "e6a5873f3e96e9161f58c2d3aac485c5bde0a729",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/runtime/runtime_controller.h"
    },
    {
      "type": "modify",
      "old_id": "f501b8a89e5e96689b5f21e561ab24777f8ac98b",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/common/engine.cc",
      "new_id": "291fbb7ce8c39ac4923b15b7c8353652fcea253d",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/common/engine.cc"
    },
    {
      "type": "modify",
      "old_id": "655ad8c54b4c90da98f732554b8226aa8d37e6e0",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/common/engine.h",
      "new_id": "2c528a1de37f9f0efb41612c21ebff459e057d79",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/common/engine.h"
    },
    {
      "type": "modify",
      "old_id": "a4414c6cb095353c43c784f314ef63a9369106ed",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/common/shell.cc",
      "new_id": "19c55c9a866285563398db310cc1c25a372814cc",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/common/shell.cc"
    },
    {
      "type": "modify",
      "old_id": "1dd3b78dfe4cc0d1ca2d03f4965b8ad36ea49f74",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/android/io/flutter/embedding/engine/renderer/FlutterRenderer.java",
      "new_id": "e505dc27dda0847bf2a028de78efb0c9a00238e1",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/android/io/flutter/embedding/engine/renderer/FlutterRenderer.java"
    },
    {
      "type": "modify",
      "old_id": "fabceff7c3e79328d5c5fa0523bdb104a541e5a0",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/shell/platform/android/test/io/flutter/embedding/engine/renderer/FlutterRendererTest.java",
      "new_id": "f4ebb34c7dccb6d8e121d0163e1a270aa471dd05",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/shell/platform/android/test/io/flutter/embedding/engine/renderer/FlutterRendererTest.java"
    },
    {
      "type": "modify",
      "old_id": "843a3b8bf83deb5e6ff8c03e144807d583bc99c1",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/rendering/binding.dart",
      "new_id": "f73ad03b8581afaf3bc8130e686cfbe96094aa4d",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/rendering/binding.dart"
    },
    {
      "type": "modify",
      "old_id": "620d8ec105837c91b6b182047022866069ccecf6",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/rendering/object.dart",
      "new_id": "cc12d21e821e12a271b4c6cb9e62e69fc383c430",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/rendering/object.dart"
    },
    {
      "type": "modify",
      "old_id": "2f29be4a86460e1cbe5af69dd7f2e12de90538a0",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/rendering/texture.dart",
      "new_id": "50333c4342854cdb4f602184eeafcbf3bd7ae56c",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/rendering/texture.dart"
    },
    {
      "type": "modify",
      "old_id": "4c1aa150add0af462bd17a083c2195329150c612",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/rendering/view.dart",
      "new_id": "f7d639f1fadde7cf85e4f472360de8530f3805bd",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/rendering/view.dart"
    },
    {
      "type": "modify",
      "old_id": "859d46e5cfc8b5b46c567b33a8c525e4a6066f33",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/scheduler/binding.dart",
      "new_id": "cdd0084db192b1faa61370a7d120d61a1614a2df",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/scheduler/binding.dart"
    },
    {
      "type": "modify",
      "old_id": "b2629e3c9757d8939ec9da8b618dac9a8e0eef53",
      "old_mode": 33188,
      "old_path": "packages/flutter/lib/src/widgets/view.dart",
      "new_id": "56d1ca1ff29c6439d246281528ae02938c9955cb",
      "new_mode": 33188,
      "new_path": "packages/flutter/lib/src/widgets/view.dart"
    },
    {
      "type": "modify",
      "old_id": "81725e007110785a79eb18a5a8b1ee831d4e24af",
      "old_mode": 33188,
      "old_path": "packages/flutter/test/rendering/binding_pipeline_manifold_test.dart",
      "new_id": "2c2357c8a119a2306f62f82a2d0161cec328da9b",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/rendering/binding_pipeline_manifold_test.dart"
    },
    {
      "type": "modify",
      "old_id": "fd9fb6edb27a3fbc8ec5488d3d1030bb8eb126b4",
      "old_mode": 33188,
      "old_path": "packages/flutter/test/rendering/binding_test.dart",
      "new_id": "0f529ce7f8125ba4533df193c1addd2b3bbad00e",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/rendering/binding_test.dart"
    },
    {
      "type": "modify",
      "old_id": "9ebb4a8a8f64b2253c878eb3c9b8fe99f93a076f",
      "old_mode": 33188,
      "old_path": "packages/flutter/test/rendering/multi_view_binding_test.dart",
      "new_id": "cf773fa7cc7aa9425718900963961ec4651ea921",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/rendering/multi_view_binding_test.dart"
    },
    {
      "type": "modify",
      "old_id": "560cd47219cf05b387465556f9e20aa4b04bf3d3",
      "old_mode": 33188,
      "old_path": "packages/flutter/test/rendering/rendering_tester.dart",
      "new_id": "cf5b969ad8504873436b38334a2799b8df97b27f",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/rendering/rendering_tester.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "eab37dc3f0ad8b35001028fdf882e3201497c30f",
      "new_mode": 33188,
      "new_path": "packages/flutter/test/rendering/texture_test.dart"
    }
  ]
}
