)]}'
{
  "commit": "5c01d1627ed218cbb80b352a45cc7f6b2c3554db",
  "tree": "15b4680e2953893ef8017713a0011353445f30f8",
  "parents": [
    "27f4fae5b1983200550a0dcbb2cf46d21d84d931"
  ],
  "author": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Mon Jun 08 20:54:56 2026 +0000"
  },
  "committer": {
    "name": "Zimuzo Ezeozue",
    "email": "zezeozue@google.com",
    "time": "Wed Jun 10 20:38:37 2026 +0100"
  },
  "message": "audio: android.audio data source support (trace_processor + UI)\n\nAdd support for the android.audio data source, which captures the device\noutput mix as a per-stream encoded elementary stream (AAC-LC access units\nplus a one-time codec_config) in top-level TracePacket.audio_frame /\naudio_frame_error packets (extension fields 1002/1003).\n\ntrace_processor: a new audio_frame_importer plugin parses AudioFrame into\n__intrinsic_audio_frames (ts, stream_id, stream_name, codec_string,\nframe_number, codec, pts_us, is_config, sample_rate, channels, peak), with\nthe raw au_data kept in a parallel side-vector exposed via the\n__intrinsic_audio_frame_au_data(id) SQL function. An encoded frame with no\npeak field reads as 0 (a zero amplitude is dropped on the wire), so silence\nis a flat zero rather than a NULL gap. A per-stream byte cap and\nAudioFrameError reasons are surfaced as stats.\n\nUI: the dev.perfetto.Audio plugin renders each stream as an amplitude\n(waveform) counter track from the per-frame peak, one track per stream under\nan Audio group (as VideoFrames does per display). Each track has its own\nplay/pause button on the shell (play/resume the whole stream) and draws its\nown playhead, so streams play independently; selecting a range plays just\nthat part; playback speed is adjustable (0.5x-2x). Playback reconstructs an\nADTS stream from the AAC access units and decodes it with\nAudioContext.decodeAudioData.\n\nChange-Id: I0000000000000000000000000000000000000000\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c9371ca41f1a8b95179bf5c2691ab28c28843282",
      "old_mode": 33188,
      "old_path": "Android.bp",
      "new_id": "0e1cbfecf961353ff0d085cd8de2b98ca72936f1",
      "new_mode": 33188,
      "new_path": "Android.bp"
    },
    {
      "type": "modify",
      "old_id": "e159936ac5c17fac6bb8ce60146974d9910df67f",
      "old_mode": 33188,
      "old_path": "BUILD",
      "new_id": "47845c6d630a24426443672fa5b2cb197c493520",
      "new_mode": 33188,
      "new_path": "BUILD"
    },
    {
      "type": "modify",
      "old_id": "9104e6e788406ff59a273f0ee3862ee178964963",
      "old_mode": 33188,
      "old_path": "protos/third_party/android/frameworks/base/proto/tracing/frameworks_base_trace_packet.proto",
      "new_id": "982e400227b4cefcdc071497b92cfff78bc3e294",
      "new_mode": 33188,
      "new_path": "protos/third_party/android/frameworks/base/proto/tracing/frameworks_base_trace_packet.proto"
    },
    {
      "type": "modify",
      "old_id": "f7389733d5ca4ac3d98b34ecb058e03e2976fe95",
      "old_mode": 33188,
      "old_path": "src/trace_processor/BUILD.gn",
      "new_id": "72570ee04fab09bf18ff8cf2f9212878af921768",
      "new_mode": 33188,
      "new_path": "src/trace_processor/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "368386eb0f2729bc0d79f49f47e23b5a6177f556",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/audio_frame_importer/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7f39812953b6238d4afe50fc6799650556d95938",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/audio_frame_importer/audio_frame_importer.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a304135ef73a7ac1510438654098c406f332a649",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/audio_frame_importer/audio_frame_importer.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "868a17bf54bb95ca3c2316ddae0eb0833f0c46c2",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/audio_frame_importer/audio_frame_module.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "fc4c13ed7930683424b30eed9a378312e4d8d3f0",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/audio_frame_importer/audio_frame_module.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "567bf047259609484daaa32da9af448c1d895e03",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/audio_frame_importer/audio_frame_module_unittest.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "80234bd3aa64bebb92feec4bd37df4287c03c7c2",
      "new_mode": 33188,
      "new_path": "src/trace_processor/plugins/audio_frame_importer/tables.py"
    },
    {
      "type": "modify",
      "old_id": "5248be12cb8f999f27155753b367581cd6941c2d",
      "old_mode": 33188,
      "old_path": "src/trace_processor/storage/stats.h",
      "new_id": "93e1751584a5808780ea3820385e3b1193238f9e",
      "new_mode": 33188,
      "new_path": "src/trace_processor/storage/stats.h"
    },
    {
      "type": "modify",
      "old_id": "a4a63f47dbc925d10beac339b582e5bd9bc772a6",
      "old_mode": 33188,
      "old_path": "src/trace_processor/trace_processor_impl.cc",
      "new_id": "4a71ede9546b225382bddf31141e524becb1e82e",
      "new_mode": 33188,
      "new_path": "src/trace_processor/trace_processor_impl.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1dec64c9db313de8d878f3cc0315d187e12968e2",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.Audio/audio_player.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e70f3fe35304780cc43533484f2e3aed918d66af",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.Audio/audio_selection_tab.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b12ce221b55ab8e17b348ae7ae2331ee5a878581",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.Audio/audio_waveform_track.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2017e1bf3aefce57be0898939271373759b51cd6",
      "new_mode": 33188,
      "new_path": "ui/src/plugins/dev.perfetto.Audio/index.ts"
    }
  ]
}
