)]}'
{
  "commit": "43657f3baa17bc1df6cc15da8b0fea2290c2c4fd",
  "tree": "6d54fa84899a8545bb162ca9a2d26baafcb5fe1b",
  "parents": [
    "8f34ca20cae3ac238ab19854942da05bbc68d9cd"
  ],
  "author": {
    "name": "Kostia Sokolovskyi",
    "email": "sokolovskyi.konstantin@gmail.com",
    "time": "Thu Jul 10 14:43:30 2025 +0200"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Jul 10 12:43:30 2025 +0000"
  },
  "message": "[web] Add frame number support. (#171592)\n\nFixes https://github.com/flutter/flutter/issues/170972\n\n### Description\n- Adds `frameData` with `frameNumber` value to `FrameService`\n- Adds non-mock `frameData` to `EngineFlutterWindow` and\n`EnginePlatformDispatcher`\n- Adds `frameNumber` value to `FrameTimingRecorder`\u0027s recorded timings\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\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": "modify",
      "old_id": "2e2dbf1cb46c28d8c6496570eee5dea93f08531b",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/frame_service.dart",
      "new_id": "613e3a6b362a2f1bacabcbba81570a83c030fa61",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/frame_service.dart"
    },
    {
      "type": "modify",
      "old_id": "0f329ab21158d59324b7fa4fb8be8087f4129f96",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/frame_timing_recorder.dart",
      "new_id": "0833dd3c305abbe429c31fba1aa28c975b7f8dfb",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/frame_timing_recorder.dart"
    },
    {
      "type": "modify",
      "old_id": "d7f87a34ff2e068e884c1af6f62863f1632df8b7",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart",
      "new_id": "73db50763e7c16ceb148376884b59242c3e62c44",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart"
    },
    {
      "type": "modify",
      "old_id": "badd6dc086a94cd970baad4699e5c55e80d6f16f",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/window.dart",
      "new_id": "efb9ae434b483a8a3d46811f793de11742695d7f",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/window.dart"
    },
    {
      "type": "modify",
      "old_id": "5564cb5678248f593f528732308fe271b62ece3c",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/window.dart",
      "new_id": "3412e6a8cc0cc914ec004d47c356784bc88d3fc9",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/window.dart"
    },
    {
      "type": "modify",
      "old_id": "261bd4312c3a8da64c65c45d3c637474097b96f3",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/test/engine/frame_service_test.dart",
      "new_id": "e99e0e212af654233f730f8b62c30e4007198b37",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/test/engine/frame_service_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "10c1d427e4f95e8399200757c167e06e01338570",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/test/engine/frame_timing_recorder_test.dart"
    },
    {
      "type": "modify",
      "old_id": "bef2e092f9c9a3fe5cd85f3c55b696625c4dab9e",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/test/engine/window_test.dart",
      "new_id": "33c8c4c1fbe2842fa24d8683f20e11ecaa3a4be2",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/test/engine/window_test.dart"
    }
  ]
}
