)]}'
{
  "commit": "d5cb884ec02c14bad876acbc1704369fa9914b93",
  "tree": "b897254824639be39b79da7ed3867a0de548705d",
  "parents": [
    "a1c97b9eb9926f13c39d8a48a17700127584fbf3"
  ],
  "author": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Wed Jul 29 13:15:52 2026 +0100"
  },
  "committer": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Wed Jul 29 13:15:52 2026 +0100"
  },
  "message": "tp+ui: filter and merge multi-pprof archives in AggregateProfiles\n\nAn archive with dozens of pprofs currently imports as an undifferentiated\nblob: every profile lands on the hard-coded \"pprof_file\" scope. Scope each\nprofile by its source file instead: TraceFileTracker gains a CurrentFile()\naccessor and the pprof reader walks the file-nesting chain past the gzip\nlayer to the nearest named ancestor.\n\nLocations without a pprof mapping each allocated a fresh dummy mapping, so\nidentical frames never interned across profiles and callsites multiplied by\nthe profile count: a 32 MB / 1000-profile archive peaked at 1.8 GB and OOMed\nthe Wasm heap. Intern the shared fallback mapping and skip re-symbolizing\ninterned frames; the same archive now peaks at 647 MB.\n\nIn the UI, AggregateProfiles keeps its single-profile page and adds a merge\npage to organize archives: a DataGrid with one row per profile over a\nflamegraph. The grid\u0027s filters select the working set; merge on sums the\nselection into one flamegraph (callsites are interned globally, so a single\nquery merges same-stack samples across profiles), merge off steps through\nthe profiles in grid order. Only the selected subset touches the callstack\ntables, so the page scales to thousands of profiles. Profile-only traces\nland on the page directly via initialPage.\n\nChange-Id: I540938ba4393fa2f209e2b39d9fe668ad05ea7ad\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "aaef80443d56f4d863490fdc5ebed7f7139c99e7",
      "old_mode": 33188,
      "old_path": "src/trace_processor/importers/common/trace_file_tracker.h",
      "new_id": "37e67f854bae68cfde0a479bad89aeb4fb15f456",
      "new_mode": 33188,
      "new_path": "src/trace_processor/importers/common/trace_file_tracker.h"
    },
    {
      "type": "modify",
      "old_id": "38f6b8d801e556055823c8be6c05ebadd28f3871",
      "old_mode": 33188,
      "old_path": "src/trace_processor/importers/pprof/pprof_trace_reader.cc",
      "new_id": "2f1ab72350cca6eb8e16e79f628aeaf74c985035",
      "new_mode": 33188,
      "new_path": "src/trace_processor/importers/pprof/pprof_trace_reader.cc"
    },
    {
      "type": "modify",
      "old_id": "4d6b91eeccebe602ce7abb20950385b029080183",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.AggregateProfiles/index.ts",
      "new_id": "7658623d56644ec8d94dbdaec7d5fbeee11b4bed",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.AggregateProfiles/index.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bc1cdd6dab0a69cd85789e3b24a5c4748e1429c7",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.AggregateProfiles/merge_page.scss"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "91176f4f60ba6ac933e7fcc4689abd78863a2f7f",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.AggregateProfiles/merge_page.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d3802b9b7ed7e214e203d028f698b71c65862afd",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.AggregateProfiles/metrics.ts"
    },
    {
      "type": "modify",
      "old_id": "805831d63a05082ecb306a447c2be79f7c1abfbd",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.AggregateProfiles/types.ts",
      "new_id": "16a10b4aa5a29241041e713b6e9bb14aa57336a6",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.AggregateProfiles/types.ts"
    },
    {
      "type": "modify",
      "old_id": "46b29dab38864699ae6e9bf671da2cc069c20c9b",
      "old_mode": 33188,
      "old_path": "ui/src/widgets/flamegraph.ts",
      "new_id": "c3fe18c4e6c0b1bf0db9adef1a56573a41051237",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/flamegraph.ts"
    }
  ]
}
