)]}'
{
  "commit": "ad95d2571c6ea6aadbcdd095d9d801618fbba09d",
  "tree": "96a59c97da725c54bfe90592f9fde465c149a43d",
  "parents": [
    "afe7a30f57545e9da99f3741757861767274f3df"
  ],
  "author": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Sat May 02 20:07:43 2026 +0100"
  },
  "committer": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Sat May 02 20:07:43 2026 +0100"
  },
  "message": "tp: split critical-path walk into layered + flatten\n\nThe C++ walker emits multi-depth attribution; the SQL pipeline\ncollapsed it to one blocker per `(root_id, ts)` immediately, which\nhid the chain layers above the leaf.\n\nSplit `_critical_path_by_roots!` into:\n\n- `_critical_path_layered_by_roots!` — the layered walker output,\n  one row per `(root_id, depth, ts, dur, id, parent_id)`.\n- `_critical_path_flatten!` — collapse layered rows to one blocker\n  per `(root_id, ts)`. Deeper-wins falls out of `_intervals_flatten!`\n  using `parent_id`.\n\n`_critical_path_by_roots!` is now the composition; output is\nbit-identical (existing diff tests pass unchanged). Adds\n`_critical_path_layered_by_intervals!` and a\n`_thread_executing_span_critical_path_layered` SQL function for\ncallers that need every layer.\n\nUI: `dev.perfetto.CriticalPathLayered` command pins one debug slice\ntrack per active layer (`\u003cthread\u003e ◀ layer N`), and the thread-state\ndetails panel grows a \"Critical path layered\" button next to the\nexisting \"Critical path lite\" one.\n\nChange-Id: I66ef38fdc9e07b38e5f75e0d0db41ae107ef2a08\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3a4826403aab24209c7b6b956636aede79009cdc",
      "old_mode": 33188,
      "old_path": "src/trace_processor/perfetto_sql/stdlib/sched/thread_executing_span.sql",
      "new_id": "c293dd71bd9284da0e57b8c31c8573877f8ab760",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/stdlib/sched/thread_executing_span.sql"
    },
    {
      "type": "modify",
      "old_id": "11b80a5a43fb31152c33221b669d6c7f88a3824c",
      "old_mode": 33188,
      "old_path": "test/trace_processor/diff_tests/tables/tests_sched.py",
      "new_id": "5bde78c3d7a9a6131cea068bd0dc15cd048a4de7",
      "new_mode": 33188,
      "new_path": "test/trace_processor/diff_tests/tables/tests_sched.py"
    },
    {
      "type": "modify",
      "old_id": "03aac09dbf68b8dd0cba0bbcc127840c10bf0142",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.CriticalPath/index.ts",
      "new_id": "d9f3b79bbe5779c261289aa567eabb0c1f6df091",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.CriticalPath/index.ts"
    },
    {
      "type": "modify",
      "old_id": "a56abc6c6f494cad84c7a528e5320efb85048f41",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.Sched/thread_state_details_panel.ts",
      "new_id": "e2fdc9f514a37ce85a33ab6e77017b8cba349860",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.Sched/thread_state_details_panel.ts"
    },
    {
      "type": "modify",
      "old_id": "683cfabf5226ed491f7db3a64b1e8e7e5c6efb62",
      "old_mode": 33188,
      "old_path": "ui/src/public/exposed_commands.ts",
      "new_id": "4847a48ca688865cde7e7aee95c0a190c21aa431",
      "new_mode": 33188,
      "new_path": "ui/src/public/exposed_commands.ts"
    }
  ]
}
