)]}'
{
  "commit": "da43067bee0d711e08c2ac39de6e6b40c784be5a",
  "tree": "a1edacab571f64fd3ce2db803a43210f9c4b26e2",
  "parents": [
    "267027985ed2ee669d815e573eaa73d40858d4d0"
  ],
  "author": {
    "name": "gords2",
    "email": "lolfanlol123456@gmail.com",
    "time": "Thu Jun 25 17:16:59 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Jun 25 17:16:59 2026 -0700"
  },
  "message": "Preserve selected feature tab in Performance page exports (#9861)\n\n* Preserve selected feature tab in Performance page exports\n\nThe Performance page tracked the selected feature tab via\n`selectedFeatureTabIndex`, but it was never persisted to offline exports,\nso loading exported data always reset to the first tab.\n\nMirror the Memory page\u0027s existing behavior: serialize the selected tab\nindex into `OfflinePerformanceData` and restore it when loading offline\ndata so the user lands on the tab they exported from.\n\nCloses #5150\n\n* Honor and clamp the restored tab index when loading offline data\n\nAddress review feedback on the offline tab restoration:\n\n- The restored selectedFeatureTabIndex was immediately reset to 0 by the\n  default-feature activation in TabbedPerformanceView. Use the restored\n  index (clamped to the available tabs) when activating the default\n  feature instead of hardcoding 0.\n- The number of visible tabs can be smaller when loading offline data\n  than when it was exported, so an out-of-range index could be passed to\n  AnalyticsTabbedView. Clamp the index passed as initialSelectedIndex.\n- Add a round-trip test for a non-zero selectedTab.\n\n* Add release note for performance export tab fix",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8bed01cc5485ffacf51d0e9b6c3fead1c807281f",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/screens/performance/performance_controller.dart",
      "new_id": "591e86a46aab3b2d7d481cfdfb757060c63b1aa5",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/screens/performance/performance_controller.dart"
    },
    {
      "type": "modify",
      "old_id": "637eae39969722273b654944e2c2216d13a3e8e7",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/screens/performance/performance_model.dart",
      "new_id": "a965879822c381a5c54a1d8950abea91dff55471",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/screens/performance/performance_model.dart"
    },
    {
      "type": "modify",
      "old_id": "05eef54cd1c0bdb1e9d76803f12fe707b8df3647",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/screens/performance/tabbed_performance_view.dart",
      "new_id": "52096fe6517b4e3e7664b661270c52363338428c",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/screens/performance/tabbed_performance_view.dart"
    },
    {
      "type": "modify",
      "old_id": "504c0bbd7a1d1da930752790d51b32e90d2b379b",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md",
      "new_id": "37c1e05672fb815d23ff00fa4600afda349deaf0",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md"
    },
    {
      "type": "modify",
      "old_id": "84f1f061a98d57517d3530b9039c79325932c24c",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/test/screens/performance/performance_model_test.dart",
      "new_id": "7dade0fd72fe82b53b9eb6052068a8c933d3b9fe",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/test/screens/performance/performance_model_test.dart"
    },
    {
      "type": "modify",
      "old_id": "88403e32399cfd427ed8cc7e17a2a89aaee0edfe",
      "old_mode": 33188,
      "old_path": "packages/devtools_test/lib/src/test_data/_performance_data.dart",
      "new_id": "d2f0f4903770df10704787f5373464de796cf097",
      "new_mode": 33188,
      "new_path": "packages/devtools_test/lib/src/test_data/_performance_data.dart"
    }
  ]
}
