)]}'
{
  "commit": "b11d90ccdc7fa8483a1364a185a7ff39f573e62a",
  "tree": "acac138ee11058e13cdc35c23058d39ce9ed18cc",
  "parents": [
    "6f78923bd6e6f9bfd9078155226f76df8e0a007c"
  ],
  "author": {
    "name": "Lalit Maganti",
    "email": "lalitm@google.com",
    "time": "Tue Aug 11 13:24:20 2026 +0100"
  },
  "committer": {
    "name": "Lalit Maganti",
    "email": "lalitm@google.com",
    "time": "Thu Sep 10 22:10:28 2026 +0100"
  },
  "message": "tp: add flamechart operator for sampled stack rendering\n\nTo render sampled call stacks as a flame chart over time, the UI needs\nthe maximal-run decomposition of a stream of (ts, leaf callsite)\nsamples: for each stack depth, the time ranges over which the same\nframe was continuously present. Computing this in SQL needs unbounded\nrecursive expansion and doing it in JS means shipping every sample to\nthe UI, so implement it as a C++ operator mirroring the flamegraph\nsplit: a pure sweep in flamechart.cc and a SQLite aggregate\n(__intrinsic_flamechart) wrapping it.\n\nThe sweep is a single streaming pass over ts-ordered points: points\nwhose stack shares a prefix with the previous one extend the open\nsegments at those depths; only divergent depths close and open\nsegments. Leaf ids resolve through the id -\u003e row index persisted on\nTree, and output rows stream straight into a dataframe.\n\nExpose the operator to SQL as _stack_sample_flamechart_runs! in the std.stack_sample.flamechart\nstdlib module, alongside sampling eligibility; mapping classification lives in std.stack_sample.mapping.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bc9d4893a077c09ab9e80356dcacaf755d264680",
      "old_mode": 33188,
      "old_path": "Android.bp",
      "new_id": "408686dbc928c165ba3e6922d2e2ae283ecd199f",
      "new_mode": 33188,
      "new_path": "Android.bp"
    },
    {
      "type": "modify",
      "old_id": "43be48b17412bbb1f4ef26f501e33e13c08f3237",
      "old_mode": 33188,
      "old_path": "BUILD",
      "new_id": "be3064ff5ebb0cfcae47943369bf2ae42ee26e8f",
      "new_mode": 33188,
      "new_path": "BUILD"
    },
    {
      "type": "modify",
      "old_id": "09c1de10e43a891c431150258f93c183bce5e058",
      "old_mode": 33188,
      "old_path": "src/trace_processor/BUILD.gn",
      "new_id": "2d8d980233219e86928fda37012d9dc81a47f033",
      "new_mode": 33188,
      "new_path": "src/trace_processor/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "732278727c448b74503f0110a1d5cb6cac7aae4b",
      "old_mode": 33188,
      "old_path": "src/trace_processor/perfetto_sql/stdlib/BUILD.gn",
      "new_id": "a98958e94ba085598df9a0976ab2aa16de290c7e",
      "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": "23f3c578111f2d27b8a62e595137c1376c728a05",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/stdlib/std/stack_sample/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "301e845c9e039c7fe7e8bf20fc420cd7df9f44c5",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/stdlib/std/stack_sample/flamechart.sql"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7bdcecbb623a0a1fc3e073ccb710f73c7fb88afe",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/stdlib/std/stack_sample/mapping.sql"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b2da3ecf2435960845aa46228e3125775d1c2e1e",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/flamechart/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bf88916cb824e9c9db70d786dd15d4666817ff51",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/flamechart/flamechart.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1a262937b0c27bf0f774fcee586effc4af599cc7",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/flamechart/flamechart.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "17e7e8f7b8078f5a260bcee788a47bbfedf5fc54",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/flamechart/flamechart_function.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9e2af3702a737f652957d25e3cce44cc839878eb",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/flamechart/flamechart_function.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7b3beb81eda02612fff563110e91c7a8a9a16658",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/flamechart/flamechart_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "35ee7973120c666dd1b21bbb47c05281202991ee",
      "old_mode": 33188,
      "old_path": "src/trace_processor/trace_processor_impl.cc",
      "new_id": "766a4d527349908f28e82ce9c435569fe6d77bdb",
      "new_mode": 33188,
      "new_path": "src/trace_processor/trace_processor_impl.cc"
    },
    {
      "type": "modify",
      "old_id": "3ffb076ef1e277ec0e8384c773ffafd5d56ca92d",
      "old_mode": 33188,
      "old_path": "test/trace_processor/diff_tests/include_index.py",
      "new_id": "5c39ee937cf57a6545881170ebd94ce06ec87b39",
      "new_mode": 33188,
      "new_path": "test/trace_processor/diff_tests/include_index.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6d7ce8b36b474e3dc732da058a2837107607c173",
      "new_mode": 33188,
      "new_path": "test/trace_processor/diff_tests/stdlib/stack_sample/flamechart_tests.py"
    }
  ]
}
