)]}'
{
  "commit": "dcae0c4ca0c3ee3317ed3198a2141184e949fb03",
  "tree": "71522a47024f0523a5371949d933bf18b9d7c7b4",
  "parents": [
    "c381cc52e5227d7b055d403e7d327e52d3711244"
  ],
  "author": {
    "name": "Tong Mu",
    "email": "dkwingsmt@users.noreply.github.com",
    "time": "Fri Jul 11 22:43:32 2025 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sat Jul 12 05:43:32 2025 +0000"
  },
  "message": "Add RSuperellipse support to Web (global cache) (#171489)\n\nThis PR adds `RSuperellipse` support to Web, so that these ops will\nactually draw `RSuperellipse`s instead of falling back to `RRect`s,\nexcept for platform views.\n* (I was told in some earlier comments that RSuperellipses should fall\nback to RRects for platform views but I can\u0027t remember where for now. If\nreviewers think otherwise I can implement them right away or make this a\nTODO in the future.)\n\nThe `RSuperellipse`s are drawn after being converted to paths. The\nalgorithm is nothing new, but already used in\n`round_superellipse_param.cc`.\n\nFor performance optimization, `RSuperellipse`s that have uniform radii\nwill have their paths cached in a global cache after offset\nnormalization.\n\nThis PR does not add any new public APIs. (Although, I\u0027m planning to\nalso implement this to the main `dart:ui` in the future to support\nnon-Impeller-nor-Web platforms, which will need\n`RSuperellipse.toPathOffset` public.)\n\nFixes https://github.com/flutter/flutter/issues/163718\n\n## Pre-launch Checklist\n\n- [ ] I read the [Contributor Guide] and followed the process outlined\nthere for submitting PRs.\n- [ ] I read the [Tree Hygiene] wiki page, which explains my\nresponsibilities.\n- [ ] I read and followed the [Flutter Style Guide], including [Features\nwe expect every widget to implement].\n- [ ] I signed the [CLA].\n- [ ] I listed at least one issue that this PR fixes in the description\nabove.\n- [ ] I updated/added relevant documentation (doc comments with `///`).\n- [ ] I added new tests to check the change I am making, or this PR is\n[test-exempt].\n- [ ] I followed the [breaking change policy] and added [Data Driven\nFixes] where supported.\n- [ ] All existing and new tests are passing.\n\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8080ca9901e15949388dece555ba465d2f84bc7d",
      "new_mode": 33188,
      "new_path": "dev/benchmarks/macrobenchmarks/lib/src/web/bench_draw_rrect_rsuperellipse.dart"
    },
    {
      "type": "modify",
      "old_id": "f85960f6a78ea19ea43141179f5751be4c28ccb6",
      "old_mode": 33188,
      "old_path": "dev/benchmarks/macrobenchmarks/lib/web_benchmarks.dart",
      "new_id": "03e52097f4cabd2387fb1084bbbfb7e22e2942fa",
      "new_mode": 33188,
      "new_path": "dev/benchmarks/macrobenchmarks/lib/web_benchmarks.dart"
    },
    {
      "type": "modify",
      "old_id": "0e9526d2402526543e7beaf8ac5a2c58e3ebcc69",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/ci/licenses_golden/licenses_flutter",
      "new_id": "be8fc563e2c3ea909a756895844e38e48e5957d5",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/ci/licenses_golden/licenses_flutter"
    },
    {
      "type": "modify",
      "old_id": "274a450022cc37217c6c3307858c6c44bbe0a7a4",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/impeller/geometry/round_superellipse_unittests.cc",
      "new_id": "3752bc5c6541de4bcd3906bd372db9a13008e16b",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/impeller/geometry/round_superellipse_unittests.cc"
    },
    {
      "type": "modify",
      "old_id": "9f5e6946c18fb1dcd692d9a508aebe6f92523329",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/geometry.dart",
      "new_id": "ea4140e167a6071c9e9e3951c8b5e1d7a89b15a2",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/geometry.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d376e952b92459155c3135cb3322c2a77dd43aeb",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/rsuperellipse_param.dart"
    },
    {
      "type": "modify",
      "old_id": "7b3a99cc5b2bd81f4f6652c5ebc8d9f23cbd638f",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/canvas.dart",
      "new_id": "b52283e2ed8bef6fbc0ba4394e39b1182008f91c",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/canvas.dart"
    },
    {
      "type": "modify",
      "old_id": "e78dcf842b7569197abd4c9d0caaeb5ab2eb9d1c",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/canvaskit_canvas.dart",
      "new_id": "8ca9e39c0ec6192755f5e9e00175cc244b8ccdeb",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/canvaskit_canvas.dart"
    },
    {
      "type": "modify",
      "old_id": "7fbcc269af3928f8b2477325f490878872e4c45a",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/embedded_views.dart",
      "new_id": "2d3c551d7f54d81df369fa4920d2362839fe6fe6",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/embedded_views.dart"
    },
    {
      "type": "modify",
      "old_id": "c5936575158b52176c6ca1e5d50223088699fe03",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/layer.dart",
      "new_id": "f5d8c5ed0aa424c9e0568c2d3772370b2f463404",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/layer.dart"
    },
    {
      "type": "modify",
      "old_id": "f1e14b2c761f1a184ac0a6de68eeee0aa5bae798",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/layer_visitor.dart",
      "new_id": "e12f536a3ba12e6d8545a6c1e11011221390ccec",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/layer_visitor.dart"
    },
    {
      "type": "modify",
      "old_id": "d494ba167c608abaec0e643fd260fc012f95f183",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/n_way_canvas.dart",
      "new_id": "74886017a67d39983cef273a6a6338cf3e7f9582",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/n_way_canvas.dart"
    },
    {
      "type": "modify",
      "old_id": "014126a60b3f0a92864c47173c1c31e8ebf1b7e6",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/path.dart",
      "new_id": "e5fbc5dc9573f281e50d22ae8721c58acb7aa362",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/path.dart"
    },
    {
      "type": "modify",
      "old_id": "e83a64246a47a7a3f4ddfc5985445862f9fbe808",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/layers.dart",
      "new_id": "d94077256ae6e389cc66117299dea4d6ba365330",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/layers.dart"
    },
    {
      "type": "modify",
      "old_id": "8e494e02d0935cff5fd1ad4e0c45cf0f81115d43",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/canvas.dart",
      "new_id": "9da4ca69e1871100a94d73f18dda6a2894604970",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/canvas.dart"
    },
    {
      "type": "modify",
      "old_id": "5323e5d0439ea70146b1a583b763697e1dc3e71b",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/path.dart",
      "new_id": "0486f450ed8c159012e50463f0e39c4b013ff486",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/path.dart"
    },
    {
      "type": "modify",
      "old_id": "bd53947ba81cca6987df191343fc0c99a67da639",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/ui.dart",
      "new_id": "3d4addf48ebba224282c293ddac1f8187be82bf6",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/ui.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "27cfd6a32110162b8511d294b7a590b097a0dbde",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/test/canvaskit/rsuperellipse_contains_test.dart"
    },
    {
      "type": "modify",
      "old_id": "e9c794393b195abeda274190130bbd0d74ab53ed",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/testing/dart/geometry_test.dart",
      "new_id": "2c0cf509bb07fd4d753c73b0bedf36dd20fe4239",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/testing/dart/geometry_test.dart"
    },
    {
      "type": "modify",
      "old_id": "8ae3c8324a5c20454d3cf35169acef7e465fa122",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/testing/dart/path_test.dart",
      "new_id": "299ccd3ad72ee4d7a5404f5eb59738be09bb8aa2",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/testing/dart/path_test.dart"
    }
  ]
}
