)]}'
{
  "commit": "0a9d51eb11a075b60e201e2f7617b6dccdf0ea64",
  "tree": "6a4cfdcfba32f4685e6079fae77bd6996c2ff7d8",
  "parents": [
    "3fb76c41b3b654cc27ec71ca9436d1bea2f4fd47"
  ],
  "author": {
    "name": "Lalit Maganti",
    "email": "lalitm@google.com",
    "time": "Wed Apr 01 14:40:21 2026 +0100"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Apr 01 13:40:21 2026 +0000"
  },
  "message": "tp: add tree_propagate_down operator for tree transformations (#5257)\n\n## Summary\n- Add `PropagateDown()` method to TreeTransformer for root-to-leaf BFS\npropagation\n- Support SUM, MIN, MAX, FIRST, LAST aggregate operations\n- Propagated columns become real columns enabling\nfilter→propagate→filter chains\n- PropagateTreeDown bytecode takes spec_start/spec_count with separate\nsource/dest columns\n\n## Stack\n- #5262 tp: introduce TreeColumns and refactor TreeTransformer to use it\n- **#5257 tp: add tree_propagate_down operator for tree\ntransformations** (this PR)\n\n## Test plan\n- 13 new propagate diff tests including chained propagation and\nfilter→propagate→filter\n- All 23 tree tests pass",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ff488f4b406b33c020f7af56d9a1624ad7ed46da",
      "old_mode": 33188,
      "old_path": "Android.bp",
      "new_id": "7493b53899eb4feeb9361e255a629eada33bdb40",
      "new_mode": 33188,
      "new_path": "Android.bp"
    },
    {
      "type": "modify",
      "old_id": "9f593d0f43cb9bb41ca1f159ce8bba475f087d04",
      "old_mode": 33188,
      "old_path": "BUILD",
      "new_id": "aa15dee6bcd0683add34ee4ba8cf427056b8598a",
      "new_mode": 33188,
      "new_path": "BUILD"
    },
    {
      "type": "modify",
      "old_id": "5a0622d04282a3f25312bfdd89ccf679625a1cc8",
      "old_mode": 33188,
      "old_path": "src/trace_processor/core/common/tree_types.h",
      "new_id": "5bd9b0cd8d637a302c732fc62f6424fd533aed04",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/common/tree_types.h"
    },
    {
      "type": "modify",
      "old_id": "e57b667b8501af8995fb82a39f5e0e13f8a5aa04",
      "old_mode": 33188,
      "old_path": "src/trace_processor/core/interpreter/bytecode_instructions.h",
      "new_id": "5014364c75bbca4ba67ae9953249011c3b17f4df",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/interpreter/bytecode_instructions.h"
    },
    {
      "type": "modify",
      "old_id": "4095fdc4906305a2c4d797829561ef0e7346e532",
      "old_mode": 33188,
      "old_path": "src/trace_processor/core/interpreter/bytecode_interpreter_impl.cc",
      "new_id": "10da636af77860ea0392a1733f1584916c80da2b",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/interpreter/bytecode_interpreter_impl.cc"
    },
    {
      "type": "modify",
      "old_id": "863a3418ae732e3cb74a5b7cb9042d53a2b46d09",
      "old_mode": 33188,
      "old_path": "src/trace_processor/core/interpreter/bytecode_interpreter_impl.h",
      "new_id": "efb8bb18c94e57a863eca207569036ec49e269fc",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/interpreter/bytecode_interpreter_impl.h"
    },
    {
      "type": "modify",
      "old_id": "8b7ec73d2758f4b8566780ba5e9c8191ab39e048",
      "old_mode": 33188,
      "old_path": "src/trace_processor/core/interpreter/interpreter_types.h",
      "new_id": "500298e20cd7d8b96a12deec442450ee0331e839",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/interpreter/interpreter_types.h"
    },
    {
      "type": "modify",
      "old_id": "af7fb37310cf32439d9a4d34d74aaebce0b83fd1",
      "old_mode": 33188,
      "old_path": "src/trace_processor/core/tree/BUILD.gn",
      "new_id": "676b16cd780cf8fdd481f8c22d495b9d8e51f432",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/tree/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "dd9208d1433f5235e180fbc3c06e3e64c8e5a320",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/tree/propagate_spec.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f6bdec92edcb0063da11b0063096661f739f795f",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/tree/propagate_spec.h"
    },
    {
      "type": "modify",
      "old_id": "393b61d7ed965dee2b782951f58d1be940ff9ea0",
      "old_mode": 33188,
      "old_path": "src/trace_processor/core/tree/tree_transformer.cc",
      "new_id": "faac5ccb3379bc053922b4d46f67d816b1a7d5fb",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/tree/tree_transformer.cc"
    },
    {
      "type": "modify",
      "old_id": "a4db801528a34530499a2dd8759017ed81b89763",
      "old_mode": 33188,
      "old_path": "src/trace_processor/core/tree/tree_transformer.h",
      "new_id": "9f9ce85c63ed7a8223680baef8b67a79f588c7b2",
      "new_mode": 33188,
      "new_path": "src/trace_processor/core/tree/tree_transformer.h"
    },
    {
      "type": "modify",
      "old_id": "18ef2e2e58188353c7af21bc80a053a2113df3d3",
      "old_mode": 33188,
      "old_path": "src/trace_processor/perfetto_sql/intrinsics/functions/trees/BUILD.gn",
      "new_id": "b733f6d9bbbd756b514e5dd33287a16127832cb9",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/intrinsics/functions/trees/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "305a70d57a25382437b77eee0b90799cae16f9a3",
      "old_mode": 33188,
      "old_path": "src/trace_processor/perfetto_sql/intrinsics/functions/trees/tree_functions.cc",
      "new_id": "6f8d1eb4988497ae8b327a34b0d315ea0070f025",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/intrinsics/functions/trees/tree_functions.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e0d112c503123f0f534dbb9389974a119a235c51",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/intrinsics/functions/trees/tree_propagate.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6726f4df4dfc38e45d48bf5e5c78a6d8955ccdec",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/intrinsics/functions/trees/tree_propagate.h"
    },
    {
      "type": "modify",
      "old_id": "f40448f0b0fce19657a19d230aa6e79218af0e81",
      "old_mode": 33188,
      "old_path": "src/trace_processor/perfetto_sql/stdlib/std/trees/BUILD.gn",
      "new_id": "882d6d1ce2e612dadfc3cb03da005d48551ebdba",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/stdlib/std/trees/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d0d5cae7dacd7a8d3a2dc625b7736e5627ab311b",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/stdlib/std/trees/propagate.sql"
    },
    {
      "type": "modify",
      "old_id": "4d7d45abff88c9cbe359725c9c7a315e364d911b",
      "old_mode": 33188,
      "old_path": "test/trace_processor/diff_tests/include_index.py",
      "new_id": "094de9650b83f4f81537555980a52e5f1fc4a3f8",
      "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": "8cf908b52b976f5b416f523bc79431f3d5e7aef3",
      "new_mode": 33188,
      "new_path": "test/trace_processor/diff_tests/stdlib/trees/tree_propagate_tests.py"
    }
  ]
}
