)]}'
{
  "commit": "119684c92d5b257f9173b1eeb79fd7eb0ea6fe14",
  "tree": "f9f70fefe72a8966c485da119e833aa9f4476275",
  "parents": [
    "14543db987baebd1179b63e90e7e971be6c0d09a"
  ],
  "author": {
    "name": "Parker Lougheed",
    "email": "parlough@gmail.com",
    "time": "Fri Jul 25 14:31:46 2025 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Jul 25 14:31:46 2025 +0800"
  },
  "message": "Avoid conflating concept of duration in `TimeRange` util class (#9325)\n\n`TimeRange` represents the range between two `start` and `end` times marked in microseconds (so a duration). However, it stored `start` and `end` as `Duration` as well, resulting in the existence of three durations which was a bit confusing as I worked to understand code using `TimeRange`.\n\nBeyond that, `TimeRange` was not immutable so had a concept of being \"well formed\" (or having both a start and end), resulting in multiple checks for that state and many not-null assertion operations. To maintain the intermediate status and also reduce the necessity of the not-null assertions, split out the intermediate state to a new `TimeRangeBuilder` class with a `build` method that consolidates the not-null assertions to that singular function.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f89496389287bc296c08f2c8219e41326d4a5cb3",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/screens/network/network_request_inspector_views.dart",
      "new_id": "00d2da0fb9de15476214785dce004329e448cbfa",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/screens/network/network_request_inspector_views.dart"
    },
    {
      "type": "modify",
      "old_id": "ee3e547b5a8588e79e23456f96b7a7d1066893b2",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frame_model.dart",
      "new_id": "9b199dbea872702a502f8f04c959c078f8b52008",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frame_model.dart"
    },
    {
      "type": "modify",
      "old_id": "0c83414cf280b72971924522808037a241d6ff99",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frames_controller.dart",
      "new_id": "ff970282c2c38b26b47f599939d3d218cea38e66",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frames_controller.dart"
    },
    {
      "type": "modify",
      "old_id": "eaa84ac5c1cec0f77c4200e96d7557b8047766d8",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/screens/performance/panes/frame_analysis/frame_analysis_model.dart",
      "new_id": "d1316e41ad01ff3a5056cd57a31da058f0104b59",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/screens/performance/panes/frame_analysis/frame_analysis_model.dart"
    },
    {
      "type": "modify",
      "old_id": "6cfcc20e35940081a877eb3ffbb09f29e4a4f1c8",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_web.dart",
      "new_id": "2d5cafa0c846cbe601f2b6bb32b2faa3d15422f0",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_web.dart"
    },
    {
      "type": "modify",
      "old_id": "a6b4e4ce1a4962395426408068330f71a9282428",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/screens/performance/panes/timeline_events/timeline_event_processor.dart",
      "new_id": "8e9daae4e9ad5e082ee2ef934df5dde902258d72",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/screens/performance/panes/timeline_events/timeline_event_processor.dart"
    },
    {
      "type": "modify",
      "old_id": "8c12811da55b18388e56a749f4e8f4c51682ce35",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/screens/performance/panes/timeline_events/timeline_events_controller.dart",
      "new_id": "53830788d5d6b883f2628ac8142799814efd2df5",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/screens/performance/panes/timeline_events/timeline_events_controller.dart"
    },
    {
      "type": "modify",
      "old_id": "fbd4b4eaee8a3bab3cdbb9b2535e1cdf32e9645f",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/screens/performance/performance_model.dart",
      "new_id": "637eae39969722273b654944e2c2216d13a3e8e7",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/screens/performance/performance_model.dart"
    },
    {
      "type": "modify",
      "old_id": "33413d7fb2250c026a5251d19ee790e2bbc01adc",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/screens/profiler/cpu_profile_model.dart",
      "new_id": "f3c42975d6e5acb9c9471b9a66a0e18989681531",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/screens/profiler/cpu_profile_model.dart"
    },
    {
      "type": "modify",
      "old_id": "e0eab3812b7cd9b4b9f5987851945774d194ac15",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/shared/charts/flame_chart.dart",
      "new_id": "37200e06ffd730c5d6d3574acd34a6ce216a0a25",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/shared/charts/flame_chart.dart"
    },
    {
      "type": "modify",
      "old_id": "7b6c505a6a255402f6b1e695ceca8833aa9671ae",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/shared/http/http_request_data.dart",
      "new_id": "8be9458d23f1e4a943dc63bff3b3f7dc72c3929d",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/shared/http/http_request_data.dart"
    },
    {
      "type": "modify",
      "old_id": "b25709c84e2b249847cd554b712ab2b66fce5f62",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/shared/primitives/utils.dart",
      "new_id": "3da354092a51b0e27c6b87447e2b36342137ef01",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/shared/primitives/utils.dart"
    },
    {
      "type": "modify",
      "old_id": "18601f5b98ebe6fca83a36e03063769331eee03b",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/test/screens/cpu_profiler/cpu_profile_model_test.dart",
      "new_id": "4f4759ab7039bd6782aee32f51045084970f1e6a",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/test/screens/cpu_profiler/cpu_profile_model_test.dart"
    },
    {
      "type": "modify",
      "old_id": "81853625c788f93744cdd936adf8b24c65d36d11",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/test/screens/cpu_profiler/cpu_profiler_test.dart",
      "new_id": "65ef96b5b658bd3091c8fe89485a2c8bb04aab80",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/test/screens/cpu_profiler/cpu_profiler_test.dart"
    },
    {
      "type": "modify",
      "old_id": "ebe54bde1fc687c901f586b42fbcc87e9327c482",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/test/screens/cpu_profiler/method_table/method_table_model_test.dart",
      "new_id": "5645be9f7c5bbbb50dc4f7fd218a0848fa65f2db",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/test/screens/cpu_profiler/method_table/method_table_model_test.dart"
    },
    {
      "type": "modify",
      "old_id": "267b22f7c3f2b587f015bc934b4e30a9a50e6100",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/test/shared/primitives/utils_test.dart",
      "new_id": "3fe14a5dd13075036e3561fbcabd0ad52389bc28",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/test/shared/primitives/utils_test.dart"
    },
    {
      "type": "modify",
      "old_id": "df193d74eceb922c3f6f7a87774c766416569bfe",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/test/test_infra/test_data/cpu_profiler/cpu_profile.dart",
      "new_id": "7e13acf7ce2aea0242cfc791b52179e97d5b2017",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/test/test_infra/test_data/cpu_profiler/cpu_profile.dart"
    }
  ]
}
