)]}'
{
  "commit": "87c021981231ec6f0b0acd2e0bd2c603835c05a0",
  "tree": "e6ab44c5ccba8fdd1cfcf333326ba55fe88f8525",
  "parents": [
    "5b9af9af95650a7905e1268f57a8c5eced3f79f5"
  ],
  "author": {
    "name": "Jackson Gardner",
    "email": "jacksongardner@google.com",
    "time": "Tue Sep 01 21:27:20 2026 +0000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Sep 01 21:27:20 2026 +0000"
  },
  "message": "[wimp] Turn on multithreading for wimp. (#191747)\n\nThis turns multithreaded wimp on. This fixes a few issues that popped up\nwhen diagnosing problems related to multithreading:\n* Instead of directly transferring `VideoFrame` objects to the web\nworker, make an `ImageBitmap` out of it. This normalizes the EXIF\nrotation of the image so that we don\u0027t end up with problems\ntransferrring it to a texture.\n* Use globals for the raster thread rather than function-local statics.\nEmscripten uses some complex locking schemes for function-local statics\nthat can sometimes cause compilcations and deadlocks, and they are\noverkill for what we\u0027re doing here. Using globals simplifies any locking\nschemes.\n* Pass the `ContentContext` when generating the impeller texture. This\nmakes sure that paths like the picture-to-image code path can share\nresources like the typographer context and cached runtime effects.\n* Because we\u0027re sharing the `ContentContext` when rendering pictures to\nimages now, we do a pre-pass that renders pictures to their image\nrepresentations before starting the rendering of the frame and puts them\nin the image cache. This avoids having nested render passes inside of a\nframe, which can cause problems for the state of the glyph atlas in the\n`ContentContext`",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "acf2114f7a524c09fd194af1fbcef9c1c7d09bf6",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/impeller/display_list/aiks_dl_atlas_unittests.cc",
      "new_id": "69a4538ed656ea9bc2757affa4f8ffe4ce9a8d91",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/impeller/display_list/aiks_dl_atlas_unittests.cc"
    },
    {
      "type": "modify",
      "old_id": "10798c22eb48213a87157a6e0af8e2d547c473a6",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/impeller/display_list/aiks_dl_vertices_unittests.cc",
      "new_id": "8ae656f1da4f03132e4fb32d781f74db25e1d1b5",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/impeller/display_list/aiks_dl_vertices_unittests.cc"
    },
    {
      "type": "modify",
      "old_id": "265e65df7353afe6bd7969c422999cd285dedda6",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/impeller/display_list/canvas.cc",
      "new_id": "352e3db84ac5a3ca8a307f4def6cf563e64cb2f1",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/impeller/display_list/canvas.cc"
    },
    {
      "type": "modify",
      "old_id": "f6501c050c7ccfadc3b660eca2439663d6cf2d57",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/impeller/display_list/dl_dispatcher.cc",
      "new_id": "0a9c09bfd75d17e502ad085e1727645169984d16",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/impeller/display_list/dl_dispatcher.cc"
    },
    {
      "type": "modify",
      "old_id": "b1e035dfbaa812cd3bc54de26178d0ec73c6d3af",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/impeller/display_list/dl_dispatcher.h",
      "new_id": "e3bfb69b65e047a84fcf1bfa618f9b011806e5b6",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/impeller/display_list/dl_dispatcher.h"
    },
    {
      "type": "modify",
      "old_id": "749647350f11640afc8b1193d9fec783ba834e31",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/impeller/display_list/dl_image_impeller.cc",
      "new_id": "f31257cbe31032e80da2ef5094ec3f95b225a11b",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/impeller/display_list/dl_image_impeller.cc"
    },
    {
      "type": "modify",
      "old_id": "d1ca87518a901c4cd7528c5657a1b976903dc41b",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/impeller/display_list/dl_image_impeller.h",
      "new_id": "85a2dc5e42b29f9f1b13a0d126daa87e1e1db6cb",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/impeller/display_list/dl_image_impeller.h"
    },
    {
      "type": "modify",
      "old_id": "06981f432b57540a8c2ecd8e71c84a57f1beca60",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/impeller/display_list/image_filter.cc",
      "new_id": "acc08588d757ca9eac008fa6430cdec6dd34e2bf",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/impeller/display_list/image_filter.cc"
    },
    {
      "type": "modify",
      "old_id": "7f3c045a8300016ee21eba35dbcae5a34db093b2",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/impeller/display_list/image_filter.h",
      "new_id": "fe2b8d9f9d2d7f255192b442f631a1f810a25723",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/impeller/display_list/image_filter.h"
    },
    {
      "type": "modify",
      "old_id": "24b0afdc715ed54b337bdb8ba4ab2e6bec585ed5",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/impeller/display_list/paint.cc",
      "new_id": "fdfd370ba515564deef77ffdf1f4c0204cc35d71",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/impeller/display_list/paint.cc"
    },
    {
      "type": "modify",
      "old_id": "55a3c878f7f13e6646fd0905abd859afe570638e",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/impeller/display_list/paint.h",
      "new_id": "ab220dd9310b56b8f83daed9c09e59e0acaf6679",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/impeller/display_list/paint.h"
    },
    {
      "type": "modify",
      "old_id": "56f327ea4f1ef8a04aa6fc85a593fb9a00dcbf68",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/gpu/texture.cc",
      "new_id": "39a83e99f6699c1824cefe7e82a55bc4580fc2e3",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/gpu/texture.cc"
    },
    {
      "type": "modify",
      "old_id": "51e1b0d2a113b24fff90ea235332661a7a01badb",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/painting/display_list_deferred_image_gpu_impeller.cc",
      "new_id": "e5b9f84accf837ee696162bae3c96ef10c436efd",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/painting/display_list_deferred_image_gpu_impeller.cc"
    },
    {
      "type": "modify",
      "old_id": "a9f3d805b3d0751e8eee2a0fd86a6d2b6eb5938a",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/painting/display_list_deferred_image_gpu_impeller.h",
      "new_id": "98ab68b6555ca0d3057eea34e90a5c9bb8ad1f03",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/painting/display_list_deferred_image_gpu_impeller.h"
    },
    {
      "type": "modify",
      "old_id": "7827c74f483d5b02f22b439b6df3075e312cf472",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/painting/display_list_deferred_image_gpu_impeller_unittests.cc",
      "new_id": "4823b5879f036c3e0b08efa6cd19d9f033bf8b94",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/painting/display_list_deferred_image_gpu_impeller_unittests.cc"
    },
    {
      "type": "modify",
      "old_id": "4290b9808edd72e665163772215f4b55307aaa68",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/painting/image_decoder_no_gl_unittests.h",
      "new_id": "38d3836aea2ffd0f285e8c4d2805c8259ee15f9c",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/painting/image_decoder_no_gl_unittests.h"
    },
    {
      "type": "modify",
      "old_id": "deef4fa8658beda631508cf64f4e7fcf1fbc8ee8",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/painting/image_decoder_unittests.cc",
      "new_id": "7bb67ac4e5200c53794075242a7018107527dc8c",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/painting/image_decoder_unittests.cc"
    },
    {
      "type": "modify",
      "old_id": "1c8de619db1f5dc7642ca0bfbde00a935f4bc0eb",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/painting/image_encoding_impeller.cc",
      "new_id": "53d9bcb8a2d04791dc3afcf5d46711fd886a0673",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/painting/image_encoding_impeller.cc"
    },
    {
      "type": "modify",
      "old_id": "6e25cc784b86591c19a00db330a7591e189162c4",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/painting/pixel_deferred_image_gpu_impeller.cc",
      "new_id": "bbc866ae158475e799281c0de18972455d9cc3de",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/painting/pixel_deferred_image_gpu_impeller.cc"
    },
    {
      "type": "modify",
      "old_id": "93e279f0f3600ad54e89302eeff5251d9e85893d",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/painting/pixel_deferred_image_gpu_impeller.h",
      "new_id": "acfecd6d58c742f3b17be05b63a20ec52f15c178",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/painting/pixel_deferred_image_gpu_impeller.h"
    },
    {
      "type": "modify",
      "old_id": "d28460407062c09945a7b040a0176fd3c2a2c445",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/ui/painting/testing/mocks.h",
      "new_id": "f20cfb100f8950bace046027c2e4a9fb1b47e44f",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/ui/painting/testing/mocks.h"
    },
    {
      "type": "modify",
      "old_id": "7beba982fbca57f01ef53a7a849f19b85846cc42",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/flutter_js/src/skwasm_loader.js",
      "new_id": "d6067ec555f811ae5f29e69ccad33e4bb7b18056",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/flutter_js/src/skwasm_loader.js"
    },
    {
      "type": "modify",
      "old_id": "30876954d938bb17af8062483bb7f5fb043988b8",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/renderer.dart",
      "new_id": "7f5b66942351e07dadf4d04a5df2e1620a8b40c2",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/renderer.dart"
    },
    {
      "type": "modify",
      "old_id": "f5ec87622460befd0473bfef1e078bdcf96801d6",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/skwasm/BUILD.gn",
      "new_id": "ee9c4dba7c01d3b7c832b0d46df247800a7466c8",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/skwasm/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3fe6316339c642d66524c7b1e25b7950f0197207",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/skwasm/image_precache_impeller.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7b3e24159c9803fb5c354d3f74a736f3f67f47e9",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/skwasm/image_precache_impeller.h"
    },
    {
      "type": "modify",
      "old_id": "091765ab5219d0308f9988890929a5ea8186972f",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/skwasm/images_impeller.cc",
      "new_id": "064f851a83dd6a8e51dd5599059f6d7c8d9fb8d5",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/skwasm/images_impeller.cc"
    },
    {
      "type": "modify",
      "old_id": "c6d9488b8f1aeb0ef02719e2c81593c77ec41994",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/skwasm/library_skwasm_support.js",
      "new_id": "b9d9ac353a3ea711625ab8f647338bfaab6bccf8",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/skwasm/library_skwasm_support.js"
    },
    {
      "type": "modify",
      "old_id": "d2b3cd6a930c1784350502ecac306e7262d9e8e9",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/skwasm/render_context_impeller.cc",
      "new_id": "158e7eacf429773cd0f861ab941b8b75a87786ac",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/skwasm/render_context_impeller.cc"
    },
    {
      "type": "modify",
      "old_id": "11fcf1d47dbdef4b60a3ff030443b31b321409f8",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/skwasm/surface.cc",
      "new_id": "487c565e6a845c925dca143d35edfbd3a15464a4",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/skwasm/surface.cc"
    }
  ]
}
