)]}'
{
  "commit": "c7b436451a48ccd264cd8abe4e968ca6a191c88f",
  "tree": "c33e6650308d983a689fa5876561238ea27719df",
  "parents": [
    "c9864eab64afdf051ea17a797bd285e13764b6ed"
  ],
  "author": {
    "name": "ilkos",
    "email": "ilkos@google.com",
    "time": "Mon Oct 19 23:50:20 2026 +0100"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Oct 19 23:50:20 2026 +0100"
  },
  "message": "tp: pre-aggregate by path_hash in _heap_graph_path_hash_aggregate (#8071)\n\nIn `_heap_graph_path_hash_aggregate`\n(`android.memory.heap_graph.helpers`), joining `$tab` to\n`heap_graph_object` and `heap_graph_class` and projecting string columns\nbefore `GROUP BY path_hash` forced SQLite to decode string and class\ncolumns for every reachable object (`1.7M-4.1M` rows) and build a\nmulti-column temporary B-tree for the `GROUP BY`.\n\nPre-aggregate the integer size and count columns by `path_hash` first\nusing `FROM $tab CROSS JOIN heap_graph_object USING (id) GROUP BY\npath_hash` so `Dataframe` consumes the `GROUP BY` sort on `path_hash`\ndirectly in C++ and probes `heap_graph_object.id` via `O(1)` `IdSorted`\nlookup. Then join `heap_graph_object` and `heap_graph_class` once per\ndistinct `path_hash` group (`335K-450K` rows, 5x-12x fewer lookups), and\nremove the redundant second `GROUP BY path_hash` on the `[native]`\nbranch. This speeds up `_heap_graph_path_hash_aggregate` by 1.6x-2.4x.\n\nChange-Id: Ia97e29f876d1e10cfd6e370de1d1d88dcf056b85",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b89cc378a877d946a80f8d4a051efa7ac763dab5",
      "old_mode": 33188,
      "old_path": "src/trace_processor/perfetto_sql/stdlib/android/memory/heap_graph/helpers.sql",
      "new_id": "1696d19af9ce1700c19b90a70ff11c8937fc2dd6",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/stdlib/android/memory/heap_graph/helpers.sql"
    },
    {
      "type": "modify",
      "old_id": "8265121b1e6f2c4d139957486b61582b55dfd9e7",
      "old_mode": 33188,
      "old_path": "test/trace_processor/diff_tests/stdlib/android/heap_graph_tests.py",
      "new_id": "3dc49fd248b30bd93cc4097cf9c48a6668103d75",
      "new_mode": 33188,
      "new_path": "test/trace_processor/diff_tests/stdlib/android/heap_graph_tests.py"
    }
  ]
}
