)]}'
{
  "commit": "874461ef070aef943be04fe8aa30183768b9d9ae",
  "tree": "6f5e68792269650f0c5aa8ec494cfab496ff964d",
  "parents": [
    "2e5fb95f637f9342ce424aeba2139db0bf913f0b"
  ],
  "author": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Fri Jul 24 17:22:17 2026 +0100"
  },
  "committer": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Fri Jul 24 17:22:17 2026 +0100"
  },
  "message": "ui: keep flamegraph path hash matchable without making it frame identity\n\nAdd `isMatchable` to aggregatable flamegraph properties: a column can then be\ntargeted by filters and pivots (it joins `matchingColumns`) without becoming\npart of frame identity. Filters are evaluated per source row, so a pivot still\nmatches an individual row\u0027s value even though merged nodes aggregate it.\n\nMake the Heap Dump Explorer\u0027s `path_hash_stable` aggregatable + matchable\ninstead of unaggregatable. Bottom-up now merges same-class frames that sit on\ndifferent paths (matching the timeline heap-graph flamegraph), while the object\ntab\u0027s \"View in Flamegraph\" pivot still targets a single instance\u0027s path.\n\nChange-Id: I3f5701f8171eff2cc50b2a092608f767408f3262\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bf895fc88046d9d8b7fdce138f1d17de794e77aa",
      "old_mode": 33188,
      "old_path": "ui/src/components/query_flamegraph.ts",
      "new_id": "ff513c13633a9c0f6c40607afd0da4a213788822",
      "new_mode": 33188,
      "new_path": "ui/src/components/query_flamegraph.ts"
    },
    {
      "type": "modify",
      "old_id": "a233617a6b026ba9cbf3e42dcb94dcd70eb6c3e6",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/com.android.HeapDumpExplorer/views/flamegraph_view.ts",
      "new_id": "caf5d51f65bd09b6dc019886f637d32a52d891ad",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/com.android.HeapDumpExplorer/views/flamegraph_view.ts"
    }
  ]
}
