)]}'
{
  "commit": "8064eaccb49ffccdb1edc938ae413d87e16219c9",
  "tree": "ec03fdf336821688350846152a6daafa56338fe9",
  "parents": [
    "bb0a61b40921991a23ab2aec62e9528d9904f52e"
  ],
  "author": {
    "name": "Ikram Gabiyev",
    "email": "gabiyev@google.com",
    "time": "Fri Feb 27 11:53:24 2026 +0000"
  },
  "committer": {
    "name": "Ikram Gabiyev",
    "email": "gabiyev@google.com",
    "time": "Fri Feb 27 12:06:40 2026 +0000"
  },
  "message": "Consider doFrames when extending frame timeline\n\nFor blocking calls per frame duration metrics\nwe extend the frame timeline to cover cases\nwhere blocking calls starting within a certain frame\nextend beyond it.\n\n- Problem:\n\nUntil now frames were extended till the next available frame\nin the actual frametine. This however can be problematic when\nUI thread gets vsync updates and makes blocking calls for\na period of time where no draws actually happen.\nThis means the next actual frame might be much later. This leads\nto skewed metrics that collect blocking calls way into the future\nafter a specific frame had already ended.\n\n- Solution:\n\nA better approach could be to consider both the next actual frame\nand the next Choreographer#doFrame slice, picking the earliest option.\nThis updated definition of extended frame should make the metric\nmore meaningful and stable.\n\nTest: tools/diff_test_trace_processor.py --name-filter \".*android.*\"\nout/android/trace_processor_shell\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6c6fb8b4a7b6021af71b23280595915140a2f92c",
      "old_mode": 33188,
      "old_path": "src/trace_processor/perfetto_sql/stdlib/android/frame_blocking_calls/blocking_calls_aggregation.sql",
      "new_id": "625953ea4e40dbc81c397967423e940fa730939b",
      "new_mode": 33188,
      "new_path": "src/trace_processor/perfetto_sql/stdlib/android/frame_blocking_calls/blocking_calls_aggregation.sql"
    }
  ]
}
