)]}'
{
  "commit": "7152f2b3147f224f819d17d4301c21517c0a176b",
  "tree": "dfbab2d404feb986e7c25dd3bc975a4eed3d171f",
  "parents": [
    "3c5c58d1cfd5304cc247ee7045bf0841706e782e"
  ],
  "author": {
    "name": "zhongliugo",
    "email": "zhongliu88889@gmail.com",
    "time": "Thu Jul 09 09:56:37 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Jul 09 16:56:37 2026 +0000"
  },
  "message": "[web] Avoid absolute positioning for base CanvasKit canvas (#188337)\n\nfix for #176327\nPartial fix for #181511\n\n**Problem**\n\nWith CanvasKit and semantics enabled, scrolling regular Flutter Web\ncontent on iPhone WebKit browsers can be very janky. The base CanvasKit\ncanvas was always styled with `position:absolute`, which is expensive\nfor WebKit to scroll together with the semantics DOM.\n\n**Fix**\n\nOnly platform-view overlay canvases keep `position:absolute`. The normal\nbase CanvasKit canvas now uses regular positioning, which fixes the\nplain Flutter scroll case while preserving `HtmlElementView` stacking.\n\nOne limitation: mixed Flutter and `HtmlElementView` scenes may still\nshow iOS WebKit scroll jank because platform-view overlays still require\n`position:absolute`.\n\n**Demo**\n\n| Before | After |\n|---|---|\n| https://flutter-demo-09-before.web.app |\nhttps://flutter-demo-09-after.web.app |\n\nSteps: open the page on iPhone Chrome or Safari, keep semantics enabled,\nthen scroll the page continuously.\n\nBefore: the on-screen jank log shows severe scroll jank, including runs\nover 100 janky frames per 5 seconds.\n\nAfter: the same regular Flutter content stays smooth, with low jank\nsummaries around 1 to 10 janky frames per 5 seconds in validation runs.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f6b6d2f8b3456ff6540ae8dc3f16f51e546072fa",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/surface.dart",
      "new_id": "ab26a7a82e177b8cd81252d7cfeb23d82081e5df",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/surface.dart"
    },
    {
      "type": "modify",
      "old_id": "b9f55e0230ba9ac67a5dd27fd5d97b02bb94c94a",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/compositing/canvas_provider.dart",
      "new_id": "f48fa59be086bcfe24a09ba4930bb2b34ad9bede",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/compositing/canvas_provider.dart"
    },
    {
      "type": "modify",
      "old_id": "8ee65ca65b7bcf04b0b9da67d4c08155c8d5b58d",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/compositing/rasterizer.dart",
      "new_id": "4a7f35c7af600af067d1e76c81bf84cbd46a7ab2",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/compositing/rasterizer.dart"
    },
    {
      "type": "modify",
      "old_id": "7cdb05936905383197615cad513e1ccd45cf3ced",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/platform_views/embedder.dart",
      "new_id": "dddbb02efac5e7d7a1442ea48fadcf9c6dc0d876",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/platform_views/embedder.dart"
    },
    {
      "type": "modify",
      "old_id": "f01ff23e11f48bb90dbb699d1acb2eb47eb965e8",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/test/ui/platform_view_position_test.dart",
      "new_id": "170c4c7883c27ab5fbb2199b6f5c3ffa0189378e",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/test/ui/platform_view_position_test.dart"
    }
  ]
}
