)]}'
{
  "commit": "0b686276fcfac4e8b5c2030df40106d662cba909",
  "tree": "a73ef86eec38ce713872ec4a5f1f3c9fcdc0cd6a",
  "parents": [
    "a0afe1ebc2b0c9b0901ed2e18e22dc36c2586185"
  ],
  "author": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Fri May 01 15:44:27 2026 +0100"
  },
  "committer": {
    "name": "fiveapplesonthetable",
    "email": "fiveapplesonthetable@gmail.com",
    "time": "Mon May 18 13:51:03 2026 +0000"
  },
  "message": "tp,ui: add PROFILE_FROM_TREE aggregate and expose it in flamegraphs\n\nPROFILE_FROM_TREE(id, parent_id, frame_name, self_value, sample_type,\nunit) is a new SQL aggregate that converts any tree-shaped table into\na serialized pprof Profile. The stdlib module `pprof.from_tree`\nexposes it as `_pprof_from_tree!`, composing on top of the\n`std.trees.*` operators so users can filter, propagate, and emit\npprof through the same primitives.\n\nThe Flamegraph widget gains a \"Download as pprof\" toolbar button.\nEncoding lives in the engine; the widget delegates via a callback so\nthe bytes always match the SQL surface.\n\nThe SQL query results panel and SQL table tab gain an \"Add Flamegraph\"\ncontrol mirroring \"Add debug track\": the user picks the\nid/parent_id/name/value columns of any query, optionally overrides\nsample type and unit, and the result opens as an ephemeral flamegraph\ntab that inherits the toolbar Download button.\n\nDocumentation under analysis/pprof-from-tree.md describes the SQL\nsurface and walks through recipes for heap dumps, callstack samples,\nmessage-queue stacks, and Java heap dominator trees. Diff tests cover\nthe aggregate and the stdlib macro.\n\nChange-Id: I27106469fc9c74dc45f494ed87a70c3b76f9c089\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0f522059dd9593c7055e6ce09cf0186b1cb2bad6",
      "old_mode": 33188,
      "old_path": "Android.bp",
      "new_id": "58fb4b0bda8201cf03b1d2be939bfc2fbe907bd2",
      "new_mode": 33188,
      "new_path": "Android.bp"
    },
    {
      "type": "modify",
      "old_id": "4afa527012107431eeac3018260684fc2885f9ad",
      "old_mode": 33188,
      "old_path": "BUILD",
      "new_id": "0d15165cabeabf6e558ceb3eb3e46825d35af8d9",
      "new_mode": 33188,
      "new_path": "BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2428d497db70fa58e9597b702aced496ffe3897c",
      "new_mode": 33188,
      "new_path": "docs/analysis/pprof-from-tree.md"
    },
    {
      "type": "modify",
      "old_id": "4e2a8587ffbc9a60935780ae22a6b9c724d302ee",
      "old_mode": 33188,
      "old_path": "docs/toc.md",
      "new_id": "8994ef6cefedb3a08ef8c4d2ac6121a2cb78731b",
      "new_mode": 33188,
      "new_path": "docs/toc.md"
    },
    {
      "type": "modify",
      "old_id": "db575b4c8789544298fcb210ad23bf1a26311566",
      "old_mode": 33188,
      "old_path": "src/trace_processor/perfetto_sql/stdlib/BUILD.gn",
      "new_id": "fa4dbaf84b3ac315648108a0fa17f04edb5228f2",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/stdlib/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "33c7c44968e87cedf35686b22ce9d288fec2d2a4",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/stdlib/pprof/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "56b7b6cef5549039ae8756877e7b11c808b92c09",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/stdlib/pprof/from_tree.sql"
    },
    {
      "type": "modify",
      "old_id": "4b407391acd5a78f43039db1c72234c40a3d7f03",
      "old_mode": 33188,
      "old_path": "src/trace_processor/plugins/pprof_functions/BUILD.gn",
      "new_id": "ed0002b9181879168ff05c50337396f8926799a1",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/pprof_functions/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "f89c28cb16c4dbb63c5a6c8ac8803fcff1715db7",
      "old_mode": 33188,
      "old_path": "src/trace_processor/plugins/pprof_functions/pprof_functions.cc",
      "new_id": "09acaa225073f97d7bf367e5fb1253e40cc94da2",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/pprof_functions/pprof_functions.cc"
    },
    {
      "type": "modify",
      "old_id": "032849e1f592171a3dfd109e538eb60d7b267565",
      "old_mode": 33188,
      "old_path": "test/trace_processor/diff_tests/stdlib/prelude/pprof_functions_tests.py",
      "new_id": "3a7cb478a4fd1fbcf6256e6c7c401d1ec2555fca",
      "new_mode": 33188,
      "new_path": "test/trace_processor/diff_tests/stdlib/prelude/pprof_functions_tests.py"
    },
    {
      "type": "modify",
      "old_id": "fc6db29a01b567a7726d4143d12885f28ab698d0",
      "old_mode": 33188,
      "old_path": "ui/src/assets/widgets/flamegraph.scss",
      "new_id": "6ce2aad35a68ef136850e9bc2c186b89cd478d96",
      "new_mode": 33188,
      "new_path": "ui/src/assets/widgets/flamegraph.scss"
    },
    {
      "type": "modify",
      "old_id": "13dabd9dd7b7030d066f1652dec5b7a1f65030f4",
      "old_mode": 33188,
      "old_path": "ui/src/components/details/sql_table_tab.ts",
      "new_id": "aadea914afea931e47947f8b27fd899b9d298818",
      "new_mode": 33188,
      "new_path": "ui/src/components/details/sql_table_tab.ts"
    },
    {
      "type": "modify",
      "old_id": "e89111360abc763d420ffa24065d7474b0b4a834",
      "old_mode": 33188,
      "old_path": "ui/src/components/query_flamegraph.ts",
      "new_id": "8bfb29ed6a8f742625ecbfb08bece5100bc4152d",
      "new_mode": 33188,
      "new_path": "ui/src/components/query_flamegraph.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "18e70c8d9f50c2ab0738e6059206866d4e3afe7b",
      "new_mode": 33188,
      "new_path": "ui/src/components/tracks/add_flamegraph_menu.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a35e6ee994614ba19ecef2e13552577115150845",
      "new_mode": 33188,
      "new_path": "ui/src/components/tracks/query_flamegraph_tab.ts"
    },
    {
      "type": "modify",
      "old_id": "d63f4a85fcd11a3ba6d4592001f28c22691aefba",
      "old_mode": 33188,
      "old_path": "ui/src/plugins/dev.perfetto.QueryPage/results_table.ts",
      "new_id": "8a38f1886e75e3d2d5adf0172ffc504c6492cb6f",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.QueryPage/results_table.ts"
    },
    {
      "type": "modify",
      "old_id": "73b83acdc14d6cc3d6822cbf6b77cb45c1ee173e",
      "old_mode": 33188,
      "old_path": "ui/src/widgets/flamegraph.ts",
      "new_id": "50a38a2e36dc47d42ca2cea188c7996c0eb193a1",
      "new_mode": 33188,
      "new_path": "ui/src/widgets/flamegraph.ts"
    }
  ]
}
