)]}'
{
  "log": [
    {
      "commit": "40643eb44a2c50d11c31a1f116a239f5cc6c8eaf",
      "tree": "f5315175864f67fe7a728be0e505740735edf803",
      "parents": [
        "9c7ce42050379be8c24a270f395e00c7347965cb"
      ],
      "author": {
        "name": "sashwinbalaji",
        "email": "sashwinbalaji@google.com",
        "time": "Mon Jul 27 19:43:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 19:43:01 2026"
      },
      "message": "perfetto: don\u0027t count aborted packets as ABI violations (#6902)\n\nA TraceWriter can abort a packet by writing kPacketSizeDropPacket in the\nfragment header.\n\nFragIterator already treats this as expected behaviour, but\nCopyChunkUntrusted counted the resulting missing fragment as an ABI\nviolation.\n\nSkip the counter (and the client DCHECK) when the fragment iterator\nreports a writer abort, which is already tracked separately by\ntrace_writer_packet_loss."
    },
    {
      "commit": "9c7ce42050379be8c24a270f395e00c7347965cb",
      "tree": "10b6f5e6b1264ed61591b5906441fe19eb85b370",
      "parents": [
        "704829f0abd42e7069ecb820b693140b2f7a3778"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Mon Jul 27 17:31:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 17:31:27 2026"
      },
      "message": "tp: extract reusable core row operations (#6891)\n\nMove distinct estimation, deduplication, and row-layout sorting into\nshared span-based kernels. Reuse them from Dataframe and the bytecode\ninterpreter to remove duplicate implementations."
    },
    {
      "commit": "704829f0abd42e7069ecb820b693140b2f7a3778",
      "tree": "500490a1d58b33086db62a41cf51bd91e9ebb05f",
      "parents": [
        "de6fcc18eff75540f0449c4246b8c21e9424d933"
      ],
      "author": {
        "name": "Nicolò Mazzucato",
        "email": "nicomazz@google.com",
        "time": "Mon Jul 27 16:53:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 16:53:59 2026"
      },
      "message": "Migrate remaining CUJ SF slices metric to stdlib (#6899)"
    },
    {
      "commit": "de6fcc18eff75540f0449c4246b8c21e9424d933",
      "tree": "9912c7ddfd3464d0ca0e8d290cf7eefa226ca502",
      "parents": [
        "e4190e56b000c422b6fafcbbfbcf3b2f80a9e463"
      ],
      "author": {
        "name": "sashwinbalaji",
        "email": "sashwinbalaji@google.com",
        "time": "Mon Jul 27 16:29:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 16:29:08 2026"
      },
      "message": "perfetto: don\u0027t reference nonexistent zstd targets in embedder builds (#6897)\n\n- //gn:zstd pointed embedders at //third_party/zstd{,:zstd_config},\n  which doesn\u0027t exist in Chromium-derived trees. Merely defining the\n  group broke `gn gen` in WebRTC.\n- enable_perfetto_zstd now defaults on only where buildtools/zstd is\n  defines, so embedders no longer need enable_perfetto_zstd\u003dfalse \n  as a workaround. Chromium stays off, same as before.\n\nBug: 539472184"
    },
    {
      "commit": "e4190e56b000c422b6fafcbbfbcf3b2f80a9e463",
      "tree": "853289379ae1a369b273369ece7fab3394f55c0a",
      "parents": [
        "a8bc446e17e3e39b5bf77e864598e16e4fc743a3"
      ],
      "author": {
        "name": "Nicolò Mazzucato",
        "email": "nicomazz@google.com",
        "time": "Mon Jul 27 16:24:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 16:24:18 2026"
      },
      "message": "Migrate CUJ SF slice metric to stdlib (#6896)"
    },
    {
      "commit": "a8bc446e17e3e39b5bf77e864598e16e4fc743a3",
      "tree": "bcc35b92ac35e10e76808f27035c3630397f9f8e",
      "parents": [
        "5d5fbe384396e983f7251536d9b8f5ca9a95cd58"
      ],
      "author": {
        "name": "zezeozue",
        "email": "zezeozue@google.com",
        "time": "Mon Jul 27 14:36:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 14:36:31 2026"
      },
      "message": "tp: add __intrinsic_zstd(X) to compress a blob/string in SQL (#6873)\n\nCompresses a string or blob into a zstd frame and returns it as a BLOB,\nthe compression counterpart of the existing zstd decompression. Intended\nfor compressing a payload generated in SQL (e.g. Chrome JSON assembled\nfrom the tables) before storing it; the frame is understood by the trace\nimporter, so the blob re-opens as a trace. Uses zstd level 9, a good\nratio/speed balance for the compressible text this targets.\n\nTest: diff test PerfettoFunction:zstd asserts the zstd frame magic,\nnon-empty output and NULL passthrough; verified a Chrome JSON compresses\nto a frame that zstd -d restores byte-for-byte and trace_processor\nre-opens as a trace."
    },
    {
      "commit": "5d5fbe384396e983f7251536d9b8f5ca9a95cd58",
      "tree": "024fc86ce769d9824ef1daf0b43d29d6e71bbcf2",
      "parents": [
        "60efdc64365176ff6e402eaefe0d02a3ee3d78e7"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Mon Jul 27 13:56:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 13:56:17 2026"
      },
      "message": "tp: base: use saturating multiple to handle timestamp overflows (#6890)\n\nNegative timestamps were overflying and wrapping back round to being\npositive numbers causing crashes in the UI.\n\nUse saturating multiple instead which preserve the sign meaning that\nwe accurately drop these events as negative timestamps ."
    },
    {
      "commit": "60efdc64365176ff6e402eaefe0d02a3ee3d78e7",
      "tree": "1e4d6498d107075696ed25a30862a6e03b972d17",
      "parents": [
        "7ec81c4390419786626b86ea534de616f4a80c80"
      ],
      "author": {
        "name": "Nicolò Mazzucato",
        "email": "nicomazz@google.com",
        "time": "Mon Jul 27 12:54:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 12:54:21 2026"
      },
      "message": "Migrate CUJ slices metric to stdlib (#6882)\n\nAnd remove a few columns that were coming from `slice.*` but we were not\nusing, and very likely nobody was using."
    },
    {
      "commit": "7ec81c4390419786626b86ea534de616f4a80c80",
      "tree": "00c9d92bd854e67536d8913cf3655f1bccc930ea",
      "parents": [
        "3babdfbba1f84310b364a96383deae6c27548bf5"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Mon Jul 27 11:53:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 11:53:49 2026"
      },
      "message": "ui: improve flamegraph controls and filtering (#6870)\n\nReorganize controls and add frame highlighting and case-insensitive\nfilters."
    },
    {
      "commit": "3babdfbba1f84310b364a96383deae6c27548bf5",
      "tree": "97f7c28b8592d63a61574cf3e46994d44373bd02",
      "parents": [
        "bd153cb9c843f35cce632e2f21b8cd04b551576e"
      ],
      "author": {
        "name": "junov-google",
        "email": "junov@google.com",
        "time": "Fri Jul 24 20:27:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 20:27:11 2026"
      },
      "message": "[tracing] Emit dev.perfetto.clock_sync events on all Apple platforms (#6886)\n\nThe clock_sync signpost events are required for synchronizing\nInstruments traces with perfetto traces. These events are currently only\nemitted on MacOS and not on iOS. This change fixes the issue.\n\nFixes https://issuetracker.google.com/issues/538624965\n\nCo-authored-by: Justin Novosad \u003cjunov@chromium.org\u003e"
    },
    {
      "commit": "bd153cb9c843f35cce632e2f21b8cd04b551576e",
      "tree": "a88186d2a3de1c1039e2f9e7c0cac2e74442f1f0",
      "parents": [
        "a1ab1ce95a2e2659dd23b5e1a3fd208f4d41de59"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Fri Jul 24 16:07:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 16:07:52 2026"
      },
      "message": "ui: Improve memscope page performance (#6828)\n\nReplace per-object recursive dominator walks with a single top-down\ngraph scan that propagates each object\u0027s nearest app-side retainer.\n\nRelative performance: 145s -\u003e 4s\n\nFixes: https://github.com/google/perfetto/issues/6814"
    },
    {
      "commit": "a1ab1ce95a2e2659dd23b5e1a3fd208f4d41de59",
      "tree": "bba2ca996e1297d0a7979afc0ef03257b8d0529b",
      "parents": [
        "210b39aa34219ab987c6681e876a3b8f5d3e56c2"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Fri Jul 24 14:48:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 14:48:49 2026"
      },
      "message": "ui: Select Memscope native profile range (#6879)\n\nSelect the complete native heap profile range represented by the\nMemscope summary when navigating to the timeline, so aggregation tabs\nmatch what we see in the memory overview page."
    },
    {
      "commit": "210b39aa34219ab987c6681e876a3b8f5d3e56c2",
      "tree": "8250d887b17d8fee36232b7b1104cb9f7852d5c8",
      "parents": [
        "093d5387b461e2d92179560adcdcbe76779a2227"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Fri Jul 24 14:33:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 14:33:10 2026"
      },
      "message": "ui: Prioritize populated Memscope sections (#6878)\n\nGrey out unpopulated memscope sections and move them to the bottom. This\nmake the page much more useful if we only have for example java heap\ndump(s), not smaps or native profiling."
    },
    {
      "commit": "093d5387b461e2d92179560adcdcbe76779a2227",
      "tree": "ff466a7a3ceac19554c3024c456dd68ed54c041e",
      "parents": [
        "91c46db94204adb47252b52b2582f2c4f6825b5e"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Fri Jul 24 12:05:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 12:05:18 2026"
      },
      "message": "ui: Clean up memoization primitives (#6877)\n\n- Rename `QuerySlot` to `AsyncMemo` because it has nothing to do with\nqueries and everything to do with memoization with async tasks.\n- Add `Memo` for synchronous memoization.\n- Rename `SerialTaskQueue` to `AtomicTaskQueue` because it is used to\nmake tasks run atomically without interleaving one another.\n\nWhile in the area, do some cleanup:\n- Remove `isFresh` from `AsyncMemo.use()` because the value wasn\u0027t\nconsumed anywhere.\n- Enforce `data` field returned by `AsyncMemo.use()` to be defined when\n`isPending` is false at the type system level. This avoids double\nchecking.\n- Move shared JSON types and disposable type predicates to base utility\nfiles."
    },
    {
      "commit": "91c46db94204adb47252b52b2582f2c4f6825b5e",
      "tree": "791cfecd43e12c353858128597c057f9849ddba3",
      "parents": [
        "531d3fac09c69d10d182ba2f8df4882bd2261c18"
      ],
      "author": {
        "name": "zezeozue",
        "email": "zezeozue@google.com",
        "time": "Fri Jul 24 11:45:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 11:45:15 2026"
      },
      "message": "docs: document the Heap Dump Explorer Callstack tab and OOM overview (#6876)\n\nAdd a Callstack section covering the OutOfMemoryError allocation stack\nand the failed-allocation breakdown (allocation size, free until OOM,\nerror message), and note the same Out of Memory Error card on the\nOverview. Screenshots are from an OOM dump."
    },
    {
      "commit": "531d3fac09c69d10d182ba2f8df4882bd2261c18",
      "tree": "6ffbce04b84cfacc375ef9c08f1a8581bb9987da",
      "parents": [
        "3a4e9e4a50bd123380caa52a5d112fef0abd564c"
      ],
      "author": {
        "name": "zezeozue",
        "email": "zezeozue@google.com",
        "time": "Fri Jul 24 08:46:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 08:46:12 2026"
      },
      "message": "ui: don\u0027t crash the flamegraph measure picker when no metric is selected (#6868)\n\nDuring the loading state the metric list can be empty, so ensureExists\non the selected metric threw. Render nothing instead. Hit by opening the\nHeap Dump Explorer callstack tab for an OutOfMemoryError with no\nrecorded callstack (data loss)."
    },
    {
      "commit": "3a4e9e4a50bd123380caa52a5d112fef0abd564c",
      "tree": "8a91cfd42098aa2823f4b104e70a0dfba864a501",
      "parents": [
        "25d21c1674bc6bc8b82d273c31268b299848780a"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Jul 23 21:14:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 21:14:14 2026"
      },
      "message": "tp: support case-insensitive regexp matching (#6869)\n\nAdd i/c flags without slowing the existing regexp operator path."
    },
    {
      "commit": "25d21c1674bc6bc8b82d273c31268b299848780a",
      "tree": "50c8c1213934c0dd1a64f4e1e96a64698dfe0255",
      "parents": [
        "d11063fc8fe4a9601d5a1f7fe5a63de5914e8f80"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Jul 23 19:56:28 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 19:56:28 2026"
      },
      "message": "tp: fix crash due to inability to access urandom in wasm (#6867)\n\nWith WASM we cannot access the filesystem anymore - this includes\nurandom\nwhich expat tries to access.\n\nFix this by explicitly setting a salt."
    },
    {
      "commit": "d11063fc8fe4a9601d5a1f7fe5a63de5914e8f80",
      "tree": "3673f05a0b76c09ed8cbc3432db630eda0a5394f",
      "parents": [
        "3de54819a149967643a977d476ee58d0fa04dfd5"
      ],
      "author": {
        "name": "Ryan Zuklie",
        "email": "rzuklie@google.com",
        "time": "Thu Jul 23 19:44:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 19:44:17 2026"
      },
      "message": "Use sparse counters in kernel wakelock module. (#6864)\n\nThis intelligently skips emitting unnecessary counter values to reduce\nthe size of the kernel wakelock counter table. It speeds up queries and\nreduces memory usage."
    },
    {
      "commit": "3de54819a149967643a977d476ee58d0fa04dfd5",
      "tree": "b15d7db3043ece30abe3f0b1e7dcfc0b67a0263f",
      "parents": [
        "03654d90c606dfb3b85b1931e7b1fece7def0948"
      ],
      "author": {
        "name": "Ryan Zuklie",
        "email": "rzuklie@google.com",
        "time": "Thu Jul 23 19:43:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 19:43:52 2026"
      },
      "message": "Fix trace_bounds when last event is unfinished. (#6863)\n\nWhen the last event is unfinished, the duration is -1. Trace bounds end\nis computed as ts + dur, which caused the trace end bounds being before\nthe last event.\n\nNote: for ftrace-based slices, this was never an issue since those were\ncovered by the ftrace table scan. This is why the test uses track\nevents."
    },
    {
      "commit": "03654d90c606dfb3b85b1931e7b1fece7def0948",
      "tree": "38de8d5b2064633c685cabcccf0b5fb4f815989b",
      "parents": [
        "2e5fb95f637f9342ce424aeba2139db0bf913f0b"
      ],
      "author": {
        "name": "Samuel Wu",
        "email": "wusamuel@google.com",
        "time": "Thu Jul 23 18:54:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 18:54:38 2026"
      },
      "message": "ui: Toggle task colors based on niceness (#6846)\n\nAdd a hotkey (shift + C) to toggle color of task slices based on their\nniceness. This distinguishes tasks based on realtime, high-priority CFS\ntasks (usually foreground tasks), and low priority tasks.\n\nThe task slice visualization Perfetto UI offers is invaluable, as the\ncolor representation helps to easily spot patterns or trends with tasks\nbeing run or scheduled. By color coding different priority tasks, it\u0027s\nsignificantly easier to visualize how different priority tasks are being\nscheduled, which is especially helpful when developing new scheduling\nfeatures, or debugging scheduling issues.\n\nBug: 537887463\nTest: ui/run-unittests --no-build\nSigned-off-by: Samuel Wu \u003cwusamuel@google.com\u003e"
    },
    {
      "commit": "2e5fb95f637f9342ce424aeba2139db0bf913f0b",
      "tree": "cc7fa0ec45389643572130be2a0fc78ac0d1fbe5",
      "parents": [
        "c6287b2d8ed7c93648498c01b74b40ec5d607cf3"
      ],
      "author": {
        "name": "zezeozue",
        "email": "zezeozue@google.com",
        "time": "Thu Jul 23 18:27:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 18:27:03 2026"
      },
      "message": "ui: show OOME heap-dump metadata as a key-value grid (#6865)\n\nRender the OutOfMemoryError summary shown above the heap-dump callstack\nflamegraph as a Property/Value grid (allocation size, free until OOM,\nand the raw error message) instead of just the raw string.\n\nThe same grid is reused in the HeapProfile details panel, the Heap Dump\nExplorer callstack page, and a new\n\"Out of Memory Error\" section in the overview"
    },
    {
      "commit": "c6287b2d8ed7c93648498c01b74b40ec5d607cf3",
      "tree": "89e0c5dfe4409fc9d74436aa8cdb37c0cee61295",
      "parents": [
        "c69e8539f556c78b88cc8bdc894d8039c7d352ca"
      ],
      "author": {
        "name": "David Reveman",
        "email": "reveman@meta.com",
        "time": "Thu Jul 23 16:50:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 16:50:59 2026"
      },
      "message": "ui: Relayout merged GPU-by-process tracks (#6845)\n\nGPU-by-process leaves merge slices from multiple global hardware queue\ntracks. Recompute shared layout depths so slices from different source\ntracks do not overlap."
    },
    {
      "commit": "c69e8539f556c78b88cc8bdc894d8039c7d352ca",
      "tree": "af6426b9a216fc40db4f7206b2c7a8591714b412",
      "parents": [
        "161c970f0da55b25f791ef86ba626bd9e84f31e8"
      ],
      "author": {
        "name": "Primiano Tucci",
        "email": "primiano@google.com",
        "time": "Thu Jul 23 16:42:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 16:42:11 2026"
      },
      "message": "tp: drop the atrace_apps wildcard trace_diagnostics rule (#6824)\n\nThe atrace_wildcard_apps rule warned whenever atrace_apps: \"*\" was\ncombined with more than a few atrace categories. In practice\natrace_apps:\n\"*\" is used legitimately by many tracing setups and the warning fires\nfar\ntoo often to be useful, so remove the rule and its two diff tests."
    },
    {
      "commit": "161c970f0da55b25f791ef86ba626bd9e84f31e8",
      "tree": "8008e795b51d69efe529e3100bee83182ea11c49",
      "parents": [
        "78c38b72516e8f34c42d5d401858530b9c4b12a8"
      ],
      "author": {
        "name": "Primiano Tucci",
        "email": "primiano@google.com",
        "time": "Thu Jul 23 16:28:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 16:28:56 2026"
      },
      "message": "ui: fix circular dependency build error printing (#6669)\n\nThe Rollup onwarn handler that turns circular-dependency warnings into\nbuild errors read `warning.importer` and `warning.cycle`. Those fields\nexisted in older Rollup, but Rollup 4.x emits the CIRCULAR_DEPENDENCY\nwarning with `warning.ids` (the cycle path) and a pre-formatted\n`warning.message` instead. As a result the error printed as:\n\n    Circular dependency: undefined\n\nThe detection itself worked; only the message construction referenced\nthe now-undefined fields. Use `warning.message` (which already contains\nthe \"a -\u003e b -\u003e a\" chain) and read the cycle from `warning.ids`, keeping\n`warning.cycle` as a fallback for older Rollup.\n\nBug: b/533388309"
    },
    {
      "commit": "78c38b72516e8f34c42d5d401858530b9c4b12a8",
      "tree": "6cf406833b7f0dc6bd3200851833074420ddbdf5",
      "parents": [
        "f27278403b2aa36e609127de08b56f6f9b5954d7"
      ],
      "author": {
        "name": "Parth Sane",
        "email": "parthsane@gmail.com",
        "time": "Thu Jul 23 15:46:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 15:46:59 2026"
      },
      "message": "tp: parse start_seq_id for Android process lifecycle events (#6818)\n\nAdd optional int64 start_seq_id to AndroidProcessStartEvent,\nAndroidProcessDiedEvent, and AndroidBinderDiedEvent messages in\nframeworks_base_track_event.proto to match upstream Android\nframeworks/base.\n\nExpose start_seq_id in __intrinsic_android_track_event_process table and\npopulate it when handling process start track events in the\nandroid_framework_track_event plugin. Also add missing \u003ccstdint\u003e include\nin src/traceconv/utils.h for GCC builds."
    },
    {
      "commit": "f27278403b2aa36e609127de08b56f6f9b5954d7",
      "tree": "8342850e4506aafb3fb74c2414949ef870efa7b5",
      "parents": [
        "464274e954b254f67297b3c21745daeccd8819da"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Jul 23 15:46:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 15:46:20 2026"
      },
      "message": "tp: add streaming table export (#6839)\n\nAdd a bounded-memory Export API for statically registered Trace\nProcessor\ntables. ExportOutput is a virtual streaming interface with an optional\nfile\npath alternative for formats which need direct random-access output\nlater.\nRuntime SQL tables and views are deliberately outside this API.\n\nSupport two explicit tar formats. kArrowTar is a stable,\nforwards-compatible,\nexport-only archive containing standard Arrow files, including implicit\nID\ncolumns and empty static tables for external consumers. kPerfetto is a\nversion-coupled archive with an internal manifest which can restore\ntables\ninto a compatible fresh Trace Processor instance; its representation\ncarries\nno cross-version compatibility guarantee.\n\nExpose export through RPC, HTTP, the shell export subcommand, and\nPython. Keep\nthe existing SQLite export path unchanged; moving it behind this API\nwaits for\nthe separate file-I/O abstraction work."
    },
    {
      "commit": "464274e954b254f67297b3c21745daeccd8819da",
      "tree": "ebe2f7d01b8ae3029b963f883e158c55958217ff",
      "parents": [
        "44e8803fb1043aae0fee5272046a2670e096f2f2"
      ],
      "author": {
        "name": "zezeozue",
        "email": "zezeozue@google.com",
        "time": "Thu Jul 23 15:15:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 15:15:22 2026"
      },
      "message": "ui: fix Heap Dump Explorer deeplink class filter being dropped (#6843)\n\nDeeplinking to the Objects tab filtered by class (a Memscope class link)\ndropped the filter: the class was a query param, but the router parses\neverything after \u0027?\u0027 as global route args and discards unknown keys, so\nit never reached the explorer.\n\nEncode the class in the path (objects_\u003cclass\u003e) like the object and\nbitmaps views, so the raw link survives the router, and update\nMemscope\u0027s link to match. The class is still consumed as a one-shot grid\nfilter via the existing clearNavParam, which now also drops the param\nfrom the URL — it only edited the store before, relying on the router to\nstrip the query, but path-encoded params aren\u0027t stripped."
    },
    {
      "commit": "44e8803fb1043aae0fee5272046a2670e096f2f2",
      "tree": "3311a45b25f864bbbd4a116364fdd788824c870f",
      "parents": [
        "d89cb59548670fd9520706de2b9fd6fe6e616eee"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Jul 23 15:12:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 15:12:43 2026"
      },
      "message": "tp: remove prototype tree operators (#6861)\n\nRemove the unused TreeTransformer-based filter and propagation APIs\nwhile\nretaining the passive TreeColumns interchange format.\n\nSimplify generic table conversion by collecting columns directly with\nAdhocDataframeBuilder and isolating tree relationship validation and\nparent\nnormalization in BuildTreeColumns."
    },
    {
      "commit": "d89cb59548670fd9520706de2b9fd6fe6e616eee",
      "tree": "6a53f97fdcc99bdd83a3947cd3c112a6eb6dd6e2",
      "parents": [
        "3c7a01897e0a77f4ce79ea7e44b65b2e5cf18c8b"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Jul 23 14:47:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 14:47:04 2026"
      },
      "message": "ui: normalize unknown flamegraph node names (#6860)\n\nUse the canonical lowercase \u0027unknown\u0027 sentinel for unnamed frames and\nheap graph classes. The flamegraph widget recognizes this value and\nrenders it with the neutral color instead of hashing \u0027[Unknown]\u0027 like an\nordinary name.\n\nCover unnamed stack frames with a diff test."
    },
    {
      "commit": "3c7a01897e0a77f4ce79ea7e44b65b2e5cf18c8b",
      "tree": "20869392dc8cfdb212452431a1a271a35ef191f6",
      "parents": [
        "d08db71bd72091cbddebd138aea8649e21724a4c"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Jul 23 13:41:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 13:41:23 2026"
      },
      "message": "ui: fix integration tests with rootless Docker (#6859)\n\nRun Playwright containers as container root when Docker\nuses rootless user namespacing, keeping owner-only build\ndependencies accessible through bind mounts. Also pass an\nexplicit snapshot update mode for current Playwright versions."
    },
    {
      "commit": "d08db71bd72091cbddebd138aea8649e21724a4c",
      "tree": "38eca96a70c5ba77bb88e66df6e06cb3526ebc0f",
      "parents": [
        "2c6c22f1d0740957312d0f7896066d7a5aa4ef89"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Thu Jul 23 13:39:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 13:39:01 2026"
      },
      "message": "ui: Fix fuzzy search matching by replacing MiniSearch with fuzzysort (#6852)\n\nFix odd fuzzy search behavior where search terms like \u0027gpucompute\u0027 did\nnot match \u0027GpuCompute\u0027. Replace MiniSearch with fuzzysort, which is\nbuilt for omniboxes, and adds some better support for other things such\nas multi key seraching.\n\nSummary of changes:\n- Switch MiniSearch for fuzzysort (0 deps, bundle size reduced by 35K).\n- Modify the interface to allow multiple key lookup functions to be\npassed which is now handled natively by fuzzysort.\n- Add fuzzy demo page in the widgets page (#!/widgets/fuzzy-search)\n- Sprinkly readonly on arrays liberally where appropriate.\n\nUpdate FuzzyFinder to support single and multi-key lookups, allowing\nOmnibox command search to filter across both command names and sources\nwith per-field match highlights. Add a Fuzzy Search demo to WidgetsPage."
    },
    {
      "commit": "2c6c22f1d0740957312d0f7896066d7a5aa4ef89",
      "tree": "87bb5b67d34dfa23efcd4bf93e106cd3234c6e7f",
      "parents": [
        "3e17ffa1f9ff3853c24fac18e8ca40b165b3312d"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Jul 23 13:09:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 13:09:18 2026"
      },
      "message": "ui: unify stack sample tracks and flamegraphs (#6840)\n\nMove CPU profile and Instruments sample handling into StackSamples,\nwhich\nuses stack_sample to discover and separate exact profiler sources. Share\ntrack rendering, details panels, area flamegraphs, session splitting,\nand\ncounter-weighted metrics across sources.\n\nKeep LinuxPerf responsible only for raw perf counter tracks, including\ncounters without callstacks."
    },
    {
      "commit": "3e17ffa1f9ff3853c24fac18e8ca40b165b3312d",
      "tree": "d29d8dc320fe311ebc4336842006f13b6a9f6bfb",
      "parents": [
        "51b612f55c517771d5f3e4a20b32f685d89ad59f"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Jul 23 12:35:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 12:35:42 2026"
      },
      "message": "tp: add C++ flamegraph computation library (#6851)\n\nA flamegraph is the trie of key-paths: every path through the input\nforest with the same sequence of merge keys collapses into one merged\nnode. The library computes that trie and returns it as a tree plus a\nflat dataframe (id, parentId, depth, name and per-metric value\ncolumns). Presentation (sibling ordering, x layout) is deliberately\nabsent: it is cheap to compute over the far smaller merged output and\nbelongs to the consumer, which can also skip it entirely.\n\nThe three views are one algorithm parameterized by anchors, the frames\nthe merged trees grow from and re-root at: top-down anchors at the kept\nroots, bottom-up at every counted frame, pivot at frames matching the\npivot pattern. Downward, one forward scan drives a cursor through an\nexact (parent node, key) hash map; upward, each anchor\u0027s caller chain\nis walked carrying the anchor\u0027s weight: its counted subtree total\nstopping at other anchors, which for bottom-up reduces to the frame\u0027s\nown values. Nodes whose subtree is zero on every metric are dropped,\nwhich is also what gives show-stack filters their effect on the output.\n\nFilters (show/hide-stack, show-from-frame, hide-frame and the pivot\npattern) are regexes evaluated once per distinct frame name through the\ninput\u0027s name dictionary, then folded into per-frame kept/counted flags\nand a nearest-kept-ancestor index in a single pass along the paths.\nHidden frames fold their values into the nearest kept ancestor.\n\nFrames carry any number of metrics, flattened row-major with a constant\nstride; every accumulation is metric-wide. Each output node retains its\nconstituent input frames, so consumers can aggregate arbitrary\nper-frame properties without the library knowing about them (the\nbenchmark exercises a ONE_OR_SUMMARY aggregation this way). Input\nframes may arrive in any order: parents-before-children is detected and\nused directly, anything else costs one reverse-index and DFS pass.\nFlexVector gains reserve() for the pre-sized node columns.\n\nOn 1M-frame callstack-shaped forests (see flamegraph_benchmark.cc),\ntop-down computes in ~90ms, ~120ms including the dataframe; with\nfilters ~77ms, bottom-up ~200ms, pivot ~18ms. At 100k frames every\nview is below 10ms."
    },
    {
      "commit": "51b612f55c517771d5f3e4a20b32f685d89ad59f",
      "tree": "c63809e72e2822c94ee4ee6c647d6bc41ac09015",
      "parents": [
        "908ea2bfa13c2b97adb9b16d30b3ce41dfcaebca"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Jul 23 12:02:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 12:02:50 2026"
      },
      "message": "ui: fix traceconv filesystem calls (#6854)\n\nExport and call Emscripten filesystem functions directly so Closure\ncannot rename methods such as FS.mkdir and break trace conversion at\nruntime."
    },
    {
      "commit": "908ea2bfa13c2b97adb9b16d30b3ce41dfcaebca",
      "tree": "b296631ad76579c45b64f1e510c402911e36ab11",
      "parents": [
        "b5b1a3b239ae49c40185eb9ad3a1a073d8af5da9"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Jul 23 11:54:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 11:54:58 2026"
      },
      "message": "ui: add flamegraph download menu (#6855)\n\nReplace the flamegraph download icon with a labeled dropdown and expose\npprof download as a menu option."
    },
    {
      "commit": "b5b1a3b239ae49c40185eb9ad3a1a073d8af5da9",
      "tree": "f4dad2803ca1f31ec960fdc5d30b240ccf48a443",
      "parents": [
        "38c8bde490545de252ae26fc0a6bbd6aa5498e1f"
      ],
      "author": {
        "name": "perfetto-automation[bot]",
        "email": "278437629+perfetto-automation[bot]@users.noreply.github.com",
        "time": "Thu Jul 23 11:44:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 11:44:15 2026"
      },
      "message": "Sync generated proto files (#6848)\n\nThis PR automatically synchronizes generated proto files with their\n`.proto` definitions.\n\n## Generated files updated\n- `.gen.cc` and `.gen.h` files\n- `.pcz.h` files\n- Binary descriptors\n- Python proto bindings\n\nThis is an automated PR generated by the `sync-protos` workflow.\n\nCo-authored-by: perfetto-automation[bot] \u003cperfetto-automation-github-app@google.com\u003e"
    },
    {
      "commit": "38c8bde490545de252ae26fc0a6bbd6aa5498e1f",
      "tree": "6ed953ebf6ef5424362d3d7a339963fcb9257d6e",
      "parents": [
        "da563164292eb64c980ef1edcce4b1edf3ae2380"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Jul 23 11:28:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 11:28:15 2026"
      },
      "message": "docs: clean up the converting and synthetic track event pages (#6853)\n\nGive every Python example a unique heading (duplicate headings broke\nthe quick-jump sidebar) and regroup the synthetic track event\nreference page into cleaner sections."
    },
    {
      "commit": "da563164292eb64c980ef1edcce4b1edf3ae2380",
      "tree": "a84a128dac7039a4edf30256eb2b5ae02ff09c67",
      "parents": [
        "9a18f62cb0d4c45322d8d6652192ab494f564263"
      ],
      "author": {
        "name": "sashwinbalaji",
        "email": "sashwinbalaji@google.com",
        "time": "Thu Jul 23 10:03:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 10:03:17 2026"
      },
      "message": "tp: fix FlatBufferWriter crash on empty writes (#6850)\n\nFlatBufferWriter writes back-to-front, so head_ starts at buf_.size()\nand moves down. Before anything is written head_ \u003d\u003d buf_.size(), and\nthen:\n\n  memcpy(\u0026buf_[head_], src, len);   // buf_[buf_.size()]\n\nWe never touch that reference when len is 0, but operator[] asserts the\nindex is in range before returning it. Chromium enables libc++\nhardening, so the Arrow tests abort there while passing for us:\n\n  https://chromium-review.googlesource.com/c/chromium/src/+/8129407\n\nlen is 0 whenever WriteVecStruct() gets count \u003d\u003d 0, which happens for a\ndataframe whose only column is the implicit id column: no field nodes,\nno buffers. So return early. That also avoids passing a null src to\nmemcpy, which the footer\u0027s empty dictionaries vector already does.\n\nGrowIfNeeded() can hit the same thing on an empty buffer, so index it\nwith buf_.data() + n instead. No caller reaches it today."
    },
    {
      "commit": "9a18f62cb0d4c45322d8d6652192ab494f564263",
      "tree": "d11168eb833619bf218a304d7376f86245016a96",
      "parents": [
        "f3c18a8a5711a2f4bd12bb00613cdc23996293b0"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Jul 23 09:34:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 09:34:52 2026"
      },
      "message": "tp: add generic stack sample prelude tables (#6841)\n\nNormalize profiler samples onto task, execution, and asynchronous\ncontext\ntables, preserving async parent relationships. Expose shared stack\nsample\nsessions, contexts, counters, and counter tracks while keeping\nsource-specific\nviews compatible, including counter-only Linux perf samples."
    },
    {
      "commit": "f3c18a8a5711a2f4bd12bb00613cdc23996293b0",
      "tree": "39d23cc25d768cb0a25586f09a5b563f9648868e",
      "parents": [
        "64d9617e6dd2280e5aad1f10533643d7076bd381"
      ],
      "author": {
        "name": "Jernej Virag",
        "email": "jernej@google.com",
        "time": "Thu Jul 23 08:08:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 08:08:10 2026"
      },
      "message": "Fix query for application startup (#6844)\n\nOn platform side we added names of views that are animating to the\nObjectAnimator slices.\n\nThe previous naming had a format of `animator:translationZ` while the\nnew names have a format of `animator:View(id/status_bar):translationZ`.\n\nThis fixes the query to find those animation slices by adding a glob\npattern which will match old and new styles."
    },
    {
      "commit": "64d9617e6dd2280e5aad1f10533643d7076bd381",
      "tree": "b0d59d8e3e9d21c51a196e0d27c655c098249e54",
      "parents": [
        "d1d1f16c51f74e89143462e280903116d953da1c"
      ],
      "author": {
        "name": "adyabr",
        "email": "adyabr@google.com",
        "time": "Wed Jul 22 23:39:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 23:39:29 2026"
      },
      "message": "Add jank tooltip descriptions.  (#6727)\n\nProvide users with jank type description when hovering over janky frames"
    },
    {
      "commit": "d1d1f16c51f74e89143462e280903116d953da1c",
      "tree": "827b0652f5a5af02f25de85518cea48fef0ee78f",
      "parents": [
        "ad0b91a934fc3cba719642e8d148f6ffd27992f0"
      ],
      "author": {
        "name": "zezeozue",
        "email": "zezeozue@google.com",
        "time": "Wed Jul 22 20:13:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 20:13:12 2026"
      },
      "message": "android: add bitrate to DisplayVideoConfig (#6842)\n\nAdd an optional bitrate_bps field to the android.display.video data\nsource config so a trace can set the video encoder\u0027s target bitrate\n(bits per second). This trades quality against trace size at a fixed\nresolution -- a knob separate from `scale` (which lowers resolution) and\nmax_stream_size_bytes (a hard byte cap). Unset keeps the producer\u0027s\ndefault. Maps to MediaFormat.KEY_BIT_RATE on the encoder."
    },
    {
      "commit": "ad0b91a934fc3cba719642e8d148f6ffd27992f0",
      "tree": "554b8ce3d7975cee46f8d0e57a471ce1f0219d8c",
      "parents": [
        "eba30e54c73f0ec80c9003b2619c15a16adf6f92"
      ],
      "author": {
        "name": "sashwinbalaji",
        "email": "sashwinbalaji@google.com",
        "time": "Wed Jul 22 18:24:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 18:24:42 2026"
      },
      "message": "perfetto: keep TrackEvent\u0027s inline callstack out of the profiling package (#6838)\n\ntop-level InlineCallstack in a new profiling/inline_callstack.proto, so\nboth TrackEvent and StackSample could use it. That made\ntrack_event.proto import a file outside its own directory for the first\ntime, which broke out-of-tree Android.bp genrules that only depended on\nthe narrow, self-contained track_event proto filegroup (e.g. vendor\nconsumers and frameworks/native/tracing), since Soong\u0027s sbox sandboxes\nonly see explicitly listed srcs.\n\nRevert TrackEvent\u0027s side: restore its own nested TrackEvent.Callstack\nmessage (same field numbers, wire-compatible) instead of importing\nInlineCallstack. StackSample keeps using the shared InlineCallstack from\nprofiling/inline_callstack.proto, since that\u0027s a same-package dependency\nand was never the problem."
    },
    {
      "commit": "eba30e54c73f0ec80c9003b2619c15a16adf6f92",
      "tree": "1f4ecc6c0ed37955fb9ea141c03e40dc6029b787",
      "parents": [
        "a77a3e375c5609ad6053202205b6e205586ee3f4"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Wed Jul 22 17:46:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 17:46:42 2026"
      },
      "message": "tp: rationalize sample stdlib onto the stack_sample view (#6836)\n\ncpu_profiling_samples was a UNION ALL over the three legacy sample\ntables with a synthetic row_number id, and the viz thread summaries\nscanned each table separately. With every source now writing\nprofiler_sample, both collapse onto the stack_sample view:\n\n- cpu_profiling_samples becomes a single projection, covering all\n  sources including the StackSample packet. Its id is now the real\n  sample id (joinable with stack_sample) and it gained a source column.\n  It now only keeps samples from sessions sampling on time, cycles or\n  instructions, i.e. what is generally considered CPU profiling: other\n  sampling types (off-cpu sampling, tracepoint-based sampling, ...) are\n  excluded via the session\u0027s timebase unit.\n- The viz thread summary computes one per-(thread, source) count table,\n  so any new sample source gets thread tracks without further plumbing."
    },
    {
      "commit": "a77a3e375c5609ad6053202205b6e205586ee3f4",
      "tree": "67eb8f2649a6029e5f386e77d340447d07debd38",
      "parents": [
        "4f526094930ee967a51a8b4b11b6280900fb7cfd"
      ],
      "author": {
        "name": "zezeozue",
        "email": "zezeozue@google.com",
        "time": "Wed Jul 22 17:35:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 17:35:48 2026"
      },
      "message": "java_sdk: add weighted overload to expensiveDebugCallStack (#6834)\n\nAdd an expensiveDebugCallStack overload taking a callstackWeight,\nwritten to TrackEvent.callstack_weight (field 57) alongside the inline\ncallstack. This attaches an additive per-event measure (e.g. bytes\nallocated) for weighted flamegraph aggregation; weighted and unweighted\nsamples are never mixed. The frame-writing is factored into a shared\nhelper so both overloads use it."
    },
    {
      "commit": "4f526094930ee967a51a8b4b11b6280900fb7cfd",
      "tree": "50a24c056ddd4b94af3adb9d04835ef5b6a0daa0",
      "parents": [
        "01fcf8139bb4d8ba2945494c10a7db5157b1d468"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Wed Jul 22 17:28:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 17:28:40 2026"
      },
      "message": "tp: add Arrow support for dataframes (#6827)\n\nProvide an Arrow serializer and deserializer for Dataframes using a\nstandard Arrow file containing one record batch. Primitive columns map\nto Arrow numeric arrays, strings map to Utf8, nullable columns carry\nvalidity bitmaps, and sparse storage uses Arrow\u0027s logical row layout.\n\nThe serializer computes metadata and variable-width sizes before\nstreaming column contents with bounded scratch memory. The deserializer\nvalidates file framing, record batch metadata, and buffer extents before\nrebuilding column storage, null state, implicit Id columns, and strings\nin the target StringPool."
    },
    {
      "commit": "01fcf8139bb4d8ba2945494c10a7db5157b1d468",
      "tree": "34a4e83a9a7cbee89e26cb0b8ac6424aa8b935a2",
      "parents": [
        "0d4e2ae8791ff0bcfe3ea3619649383767e92d32"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Wed Jul 22 17:10:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 17:10:59 2026"
      },
      "message": "tp: migrate macOS instruments samples onto profiler_sample (#6832)\n\nThe macOS Instruments importer wrote its samples into a dedicated\ninstruments_sample table. Write them into the generic profiler_sample\ntable instead, tagged with the instruments source and with the core id\nmapped to a ucpu. instruments_sample keeps its exact schema as a view\nover profiler_sample."
    },
    {
      "commit": "0d4e2ae8791ff0bcfe3ea3619649383767e92d32",
      "tree": "93f1f9ba01f292e651e9e819319196b8e56affae",
      "parents": [
        "5ef59a6941059614e1fcd9f8b1d2f01c6f0f1eba"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Wed Jul 22 15:39:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 15:39:09 2026"
      },
      "message": "tp: migrate the cpu_profile sample sources onto profiler_sample (#6822)\n\nChrome streaming profiles, legacy V8 cpu profiles, gecko profiles,\nsimpleperf proto traces and perf script text all wrote their samples\ninto the cpu_profile_stack_sample table. Write them into the generic\nprofiler_sample table instead, tagged with their source and with process\nattribution where the importer knows the pid.\n\ncpu_profile_stack_sample keeps its exact schema as a view over\nprofiler_sample; the chrome-only process_priority column moves to a slim\nextras table keyed by sample, populated only for samples with a\nnon-default priority."
    },
    {
      "commit": "5ef59a6941059614e1fcd9f8b1d2f01c6f0f1eba",
      "tree": "18d2492be5b1475189e5a353d22bd9a46ee72d1b",
      "parents": [
        "3d0a46c7e5fa7d39b4cb2bdf9c9ac9011199712f"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Wed Jul 22 12:09:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 12:09:27 2026"
      },
      "message": "docs: document weighted TrackEvent callstack measures (#6826)\n\nAdd a section to the synthetic track event reference covering the\ncallstack_weight field, the rule that weighted aggregations never mix\nweighted and unweighted samples, and the ability to add any numeric\nTrackEvent argument (debug annotations or proto extension fields) as an\nextra flamegraph measure via the measure picker.\n\nIncludes a runnable allocation-profiler example emitting all three\nmeasure sources and UI screenshots of the resulting flamegraphs, plus a\ncross-link from the getting-started callstacks guide.\n\nBug: https://github.com/google/perfetto/issues/3285"
    },
    {
      "commit": "3d0a46c7e5fa7d39b4cb2bdf9c9ac9011199712f",
      "tree": "f7cd8285318f36f69d6c30b8fcd6daf30450b8db",
      "parents": [
        "2a00fddf82049af7ae5bd3f6bc18fb7e0658d47a"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Wed Jul 22 11:47:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 11:47:10 2026"
      },
      "message": "protozero: add support for multi-line string literals in textpb (#6821)\n\ntextproto supports multi-line strings by continuiation using \"\" on\nmultiple lines. This fixes workarounds people are adding before\nthey get to us"
    },
    {
      "commit": "2a00fddf82049af7ae5bd3f6bc18fb7e0658d47a",
      "tree": "8852d53a92987bd79bd3322ef08360d5a1edcaa0",
      "parents": [
        "d9713911f3aabaf508e64ea74d7b3fd63d49c38b"
      ],
      "author": {
        "name": "Abhilash Menchithara",
        "email": "abhilash.menchithara@arm.com",
        "time": "Wed Jul 22 10:18:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 10:18:49 2026"
      },
      "message": "ui: arm telemetry pmu recording page (#5286)\n\nui: Arm telemetry plugin - add PMU recording page.\nAdd a PMU recording page to com.arm.ArmTelemetry and register it as a\n    \"PMU\" subpage in the recording page when the ArmTelemetry plugin is\n    activated.\n\nThis page lets users configure captures by selecting events, metrics,\nand sampling options. It uses the loaded Arm CPU telemetry specs as the\nsource for available PMU events and metrics. For convenience, specs can\nalso be loaded directly from the recording page without navigating to\n    the Arm CPU page.\n\n    The current capture configuration supports:\n    - selecting raw PMU events\n    - selecting telemetry metrics, with corresponding events selected\n      automatically\n    - choosing a leader event\n    - configuring target CPUs\n    - choosing frequency- or period-based sampling\n    - setting the frequency/count\n    - enabling callstack capture\n    - configuring multiple PMU capture groups using tabs"
    },
    {
      "commit": "d9713911f3aabaf508e64ea74d7b3fd63d49c38b",
      "tree": "a7356ec19e9fda902afda151b3f10a4f711064c8",
      "parents": [
        "6fc8965c6a35cb5c7168e0023203684c81ad3845"
      ],
      "author": {
        "name": "copybara-service[bot]",
        "email": "56741989+copybara-service[bot]@users.noreply.github.com",
        "time": "Wed Jul 22 09:57:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 09:57:15 2026"
      },
      "message": "Copybara import from Chromium: proto and stdlib changes (#6825)\n\nCopybara import from Chromium: proto and stdlib changes\n\n- 913875fa4bde3b5ca76dee281b81d89a8e1a3748 Webview Cross Origin\nAllowlist Boundary Interfaces by Traian Dobrescu \u003ctraiand@google.com\u003e\n\nCOPYBARA_IMPORT\u003dProject import generated by Copybara.\n\nGitOrigin-RevId: 913875fa4bde3b5ca76dee281b81d89a8e1a3748\n\nCo-authored-by: Perfetto Team \u003ccopybara-servicebot@google.com\u003e"
    },
    {
      "commit": "6fc8965c6a35cb5c7168e0023203684c81ad3845",
      "tree": "ca478b5fd5dbfeac75694bdb474cc05ddf2db634",
      "parents": [
        "c9c41a78a08195beff477feb1402967c514a88b6"
      ],
      "author": {
        "name": "copybara-service[bot]",
        "email": "56741989+copybara-service[bot]@users.noreply.github.com",
        "time": "Wed Jul 22 09:35:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 09:35:20 2026"
      },
      "message": "Copybara import from Chromium: proto and stdlib changes (#6765)\n\nCopybara import from Chromium: proto and stdlib changes\n\n- 95da04f73f186dba3bfbf57c2945f5b7321830a3 Sync feature protos. by\nGoogler \u003cnoreply@google.com\u003e\n\nCOPYBARA_IMPORT\u003dProject import generated by Copybara.\n\nGitOrigin-RevId: 95da04f73f186dba3bfbf57c2945f5b7321830a3\n\nCo-authored-by: Perfetto Team \u003ccopybara-servicebot@google.com\u003e"
    },
    {
      "commit": "c9c41a78a08195beff477feb1402967c514a88b6",
      "tree": "c33ecb60257d0b382adf3bdf43101a7b571ac43c",
      "parents": [
        "2b4a154a1d095e03cd20358c09b8fd7950ee9734"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Wed Jul 22 09:34:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 09:34:51 2026"
      },
      "message": "tp: allow TarWriter to write to an abstract sink (#6808)\n\nTarWriter could only write to a file descriptor, which makes it\nunusable for streaming an archive over an RPC connection. Introduce a\nTarWriterSink interface with buffer- and callback-backed\nimplementations; the existing path/fd constructors keep working via an\ninternal fd sink.\n\nAlso make the error handling suitable for streaming consumers: a\nfailing callback aborts the write and propagates its status,\nfinalization is an explicit Status-returning operation (the destructor\nonly finalizes best-effort and never crashes on a broken pipe), and\nthe new StreamFile API streams a member\u0027s content into the archive\nwithout buffering it in memory first."
    },
    {
      "commit": "2b4a154a1d095e03cd20358c09b8fd7950ee9734",
      "tree": "6d15e71063e9d605498042997e89bbb5abc21368",
      "parents": [
        "03aac4d2f700890e37572b07fdade1a5c4f24706"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Tue Jul 21 18:34:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 18:34:15 2026"
      },
      "message": "tp: introduce the generic profiler_sample table (#6809)\n\nCallstack samples were spread across four parallel tables (perf_sample,\ncpu_profile_stack_sample, instruments_sample and the plugin-owned\nstack_sample family), each with its own flavour of the same schema and,\nin the StackSample case, a parallel reinvention of counters. This is the\nfirst step of collapsing them onto one model.\n\nIntroduce __intrinsic_profiler_sample: one row per sample from any\nprofiler source, with flat context columns (utid, upid, async context,\nucpu, cpu_mode), an optional callstack, a session and an optional\ncounter set. The perf mechanisms become the generic ones:\n\n- perf_session generalizes to profiler_session, one row per sampling\n  data source instance of any source. Each session records its source\n  and the unit of the timebase counter it sampled on, so the per-source\n  views stay well formed (perf_session only exposes linux perf\n  sessions) and consumers can tell time/cycle/instruction sampling\n  apart from other sampling types. StackSample streams allocate one\n  session per packet sequence.\n- perf_counter_set generalizes to profiler_counter_set, linking each\n  sample to the counter rows (timebase and followers) recorded at its\n  sample point.\n\nThe linux perf importers (traced_perf proto and perf.data) write\nprofiler_sample directly; the perf_sample and perf_session views keep\ntheir exact schemas, and the perf counter tracks, counter sets, stdlib\nfunctions and the perf_counter plugin keep working unchanged.\n\nThe StackSample packet\u0027s counter descriptors now materialize as counter\ntracks instead of a bespoke descriptor table. A counter track models a\ncounter instance, so the proto gains an explicit scope on\nCounterDescriptor: SCOPE_GLOBAL (a single instance, one track per\nsampling stream) and SCOPE_CPU (one instance per cpu, one track per\nstream and cpu). Other scopes are added on demand via feature requests.\nPer-sample values are pushed as counter rows and linked via the counter\nset, exactly like perf.\n\nA new stack_sample view exposes every sample which captured a\ncallstack, across all sources; per-source views (perf_sample today, the\ncpu_profile and instruments tables in follow-ups) select their slice of\nthe same table. Samples which did not capture a callstack (e.g.\ncounter-only perf samples) stay visible through the per-source views."
    },
    {
      "commit": "03aac4d2f700890e37572b07fdade1a5c4f24706",
      "tree": "70606846613fbc3db1af58377af83186e49f78d7",
      "parents": [
        "6059947a19c9d2305264dfeecf9251c467c2e591"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Tue Jul 21 16:45:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 16:45:08 2026"
      },
      "message": "ui: massively improve performance of callstack flamegraph (#6820)\n\nThe join here was not O(1) when it ideally would be, adding materialized\nhere is a cheap workaround\n\nSeparately we should ideally make the track event callstack table\nindexed in some way but that requires more thinking"
    },
    {
      "commit": "6059947a19c9d2305264dfeecf9251c467c2e591",
      "tree": "8cba79051905f90491c31243754e7059eff2abfe",
      "parents": [
        "eed487125f1783a29c0f40eede66e548b592681c"
      ],
      "author": {
        "name": "Ryan",
        "email": "rsavitski@google.com",
        "time": "Tue Jul 21 14:22:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 14:22:13 2026"
      },
      "message": "tperf: remove references to the now-obsolete LSM sysprop (#6816)\n\nThis system property was used to detect whether a running kernel had LSM\nsupport for the perf_event_open syscall. Since the pre-v5.5 kernels are\nnow EOL in Android, the hooks are always assumed to be present, and the\nplatform always sets the sysprop for existing scripts [1].\n\nThis patch cleans up traced_perf\u0027s references to the sysprop entirely.\n\n[1] system/core/rootdir/init-perfetto.rc"
    },
    {
      "commit": "eed487125f1783a29c0f40eede66e548b592681c",
      "tree": "64b5b7392aae59dae99efe1591c2bf4c98bcc79e",
      "parents": [
        "615cdf970bccb1984241dcd7c40dfb49a50652db"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Tue Jul 21 13:21:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 13:21:20 2026"
      },
      "message": "ui: Bump echarts (#6813)\n\nFixes: https://github.com/google/perfetto/security/dependabot/326"
    },
    {
      "commit": "615cdf970bccb1984241dcd7c40dfb49a50652db",
      "tree": "0fc297440d7d7f71bcec35965ec9a974c5b0af92",
      "parents": [
        "f73078b6a95b0061b74eca83713ab32e9de357fb"
      ],
      "author": {
        "name": "Ryan",
        "email": "rsavitski@google.com",
        "time": "Tue Jul 21 12:34:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 12:34:21 2026"
      },
      "message": "tp: rename import logs tracker methods to be less error-centric (#6812)\n\nThere are cases where it\u0027s useful to record import-time observations\nthat are not outright errors (e.g. #6363), and the tracker fully\nsupports that since the severity is part of the \"stats\" key.\n\nMake the import logs tracker naming vague enough to cover such\npossibilities."
    },
    {
      "commit": "f73078b6a95b0061b74eca83713ab32e9de357fb",
      "tree": "9f22a02baf97723a77f10801bb2b69162fece70e",
      "parents": [
        "3d551a2d796d4ec3a206a0946cf8844425348f02"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Tue Jul 21 12:15:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 12:15:48 2026"
      },
      "message": "ui: fix infinite refetch in track event callstack flamegraph (#6810)\n\nThe Track Event Callstacks area selection tab recomputed\nFlamegraph.updateState() on every render. updateState always returned a\nnew object, and QueryFlamegraph\u0027s Monitor compares state by reference,\nso every redraw restarted the flamegraph query and reset the data: the\ntab was permanently stuck on \"Computing graph ...\".\n\nMake updateState return the input state unchanged (same reference) when\nit is already valid, and have the tab persist the state whenever\nupdateState had to change it, so the reference is stable on the next\nrender.\n\nAlso add UI integration tests for weighted callstack measures: the\nWeight default measure, switching to Samples, and adding a debug\nannotation (debug.objects) and a proto extension field\n(alloc_stats.latency_us) as measures via the searchable picker."
    },
    {
      "commit": "3d551a2d796d4ec3a206a0946cf8844425348f02",
      "tree": "f6dacd13cfebc6f33b7591e9121427300c27f9c8",
      "parents": [
        "1e727d749ee662b15a0f75a7ac6699e2dee26333"
      ],
      "author": {
        "name": "Zijie Zhou",
        "email": "zzj523439346@126.com",
        "time": "Tue Jul 21 09:54:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 09:54:12 2026"
      },
      "message": "traced_probes: Add missing sde_evtlog data fields (#6804)\n\nAdd d00-d14 fields to SdeSdeEvtlogFtraceEvent proto to capture all data\nparameters from the sde_evtlog ftrace event.\n\nChange-Id: I8a37c06bf93f2c525d7413bf23f189ab5adf74c5\n\nThe issue occurs during Perfetto trace conversion/export. The original\nPerfetto trace contains sde_evtlog events captured from Qualcomm device,\nbut the conversion step drops\nor omits some fields. This change ensures that the missing sde_evtlog\nfields\nare populated in the converted trace.\n\nSTEPS TO REPRODUCE:\n1. Capture a Perfetto trace on an Qualcomm Android device that includes\nsde_evtlog events.\n2. Pull the generated .perfetto-trace file from the device to the host.\n3. Convert the trace using traceconv.\n\none screenshot show missed field log,\nother one shows the log after fix\n\nREPRODUCE RATE:\nAlways (100%)\n\nOBSERVED RESULTS:\nThe converted Perfetto trace contains sde_evtlog events, but some\nexpected\nfields are missing. As a result, the sde_evtlog information in the\nconverted\ntrace is incomplete and cannot fully reflect the original event data.\n\u003cimg width\u003d\"1427\" height\u003d\"47\" alt\u003d\"image\"\nsrc\u003d\"https://github.com/user-attachments/assets/eb39dc41-4a83-463e-8de3-1550362b3e71\"\n/\u003e\n\nEXPECTED RESULTS:\nAll expected sde_evtlog fields should be present in the converted\nPerfetto\ntrace, so that the trace output contains complete and accurate\nsde_evtlog\ninformation for analysis.\n\u003cimg width\u003d\"1744\" height\u003d\"50\" alt\u003d\"image\"\nsrc\u003d\"https://github.com/user-attachments/assets/784d2260-5d36-4097-bdf1-f2ab2fad08c1\"\n/\u003e\n\nFor more details please see\nhttps://partnerissuetracker.corp.google.com/u/0/issues/503212248\n\nSigned-off-by: Zijie Zhou \u003czijizhou@qti.qualcomm.com\u003e"
    },
    {
      "commit": "1e727d749ee662b15a0f75a7ac6699e2dee26333",
      "tree": "23b7a34ea062f1963c552c762f07ebabfebb2ec8",
      "parents": [
        "e1312a169b2d327316f5ff614b4004eb19287bd6"
      ],
      "author": {
        "name": "perfetto-automation[bot]",
        "email": "278437629+perfetto-automation[bot]@users.noreply.github.com",
        "time": "Tue Jul 21 09:23:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 09:23:11 2026"
      },
      "message": "Sync generated proto files (#6805)\n\nThis PR automatically synchronizes generated proto files with their\n`.proto` definitions.\n\n## Generated files updated\n- `.gen.cc` and `.gen.h` files\n- `.pcz.h` files\n- Binary descriptors\n- Python proto bindings\n\nThis is an automated PR generated by the `sync-protos` workflow.\n\nCo-authored-by: perfetto-automation[bot] \u003cperfetto-automation-github-app@google.com\u003e"
    },
    {
      "commit": "e1312a169b2d327316f5ff614b4004eb19287bd6",
      "tree": "24813467a3f40187d58f9493df7f28dd1be741b6",
      "parents": [
        "31b01d26ba5245164a8cfec8b4f4089eb4a0a7d6"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Tue Jul 21 08:58:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 08:58:53 2026"
      },
      "message": "tp: add minimal flatbuffer reader and writer (#6795)\n\nTrace processor needs to emit and parse small flatbuffer-encoded\nmetadata (Arrow IPC framing) without taking a dependency on the\nflatbuffers library, which would have to be vendored for every\nembedder including the Wasm and Android builds.\n\nThe writer builds buffers back-to-front so offsets are naturally\nforward-pointing. It tracks the maximum requested alignment and pads\nthe final size to a multiple of it: element positions are aligned\nrelative to the buffer end, so an aligned total size is what makes\nthem aligned relative to the start, which is what strict flatbuffers\nverifiers check. String length prefixes are padded the same way.\n\nThe reader is designed for untrusted input: every table, vtable,\nstring and vector access is bounds-checked in 64-bit offset arithmetic\nand malformed or absent data uniformly reads back as defaults."
    },
    {
      "commit": "31b01d26ba5245164a8cfec8b4f4089eb4a0a7d6",
      "tree": "5643dddb00c7fa1988daa0f1f60416f7bae6ac11",
      "parents": [
        "b11e34e0cfed558eff70c3a9edbb0c60a32cba80"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Tue Jul 21 08:53:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 08:53:59 2026"
      },
      "message": "tp: ui: add weighted TrackEvent callstack measures (#6752)\n\nAdd an optional additive weight to TrackEvent callstacks and expose\nweighted callstack aggregation in Trace Processor and the UI.\n\nThe flamegraph defaults to Weight when weighted samples exist and\notherwise falls back to Samples. Users can add numeric TrackEvent\narguments as additional measures through the searchable measure picker.\nWeighted measures only include samples which provide that value;\nweighted and unweighted samples are not mixed.\n\nDepends on #6754.\n\nBug: https://github.com/google/perfetto/issues/3285"
    },
    {
      "commit": "b11e34e0cfed558eff70c3a9edbb0c60a32cba80",
      "tree": "8d2009adc9ec6630a449af4cbe67cc71ec22cf9b",
      "parents": [
        "62477bf2b4741130b7dc2723c584a11cd579c408"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Tue Jul 21 08:19:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 08:19:15 2026"
      },
      "message": "tp: add support for multiple statements in query (#6794)\n\nSeparate the queries by a single blank line. This has become necessary\nbecause AI these days really loves doing N queries simultaneously\nwhen gaining context."
    },
    {
      "commit": "62477bf2b4741130b7dc2723c584a11cd579c408",
      "tree": "36466e0df1899e10c1e91c2ff96a455918c06359",
      "parents": [
        "862ce6d0d6b3ce901219d8b932ece4f06a669d9b"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Tue Jul 21 08:00:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 08:00:07 2026"
      },
      "message": "tp: sort chrome streaming profile samples individually (#6800)\n\nStreamingProfilePacket was forwarded through the sorter as a whole\npacket at its root timestamp, with per-sample delta timestamps applied\nonly at parse time. As a result the samples were inserted out of global\ntimestamp order, which is why cpu_profile_stack_sample is the only\nsample table whose ts column cannot be marked sorted.\n\nResolve each sample\u0027s timestamp at tokenization time (where the sequence\nclock must be read anyway) and push one sorter event per sample, the\nsame way legacy V8 cpu profile samples already work. Thread resolution\nand callstack interning stay at parse time via the sequence state\ncarried on the event. This is a prerequisite for migrating these\nsamples into the stack_sample table, whose ts column is sorted."
    },
    {
      "commit": "862ce6d0d6b3ce901219d8b932ece4f06a669d9b",
      "tree": "7aedfb6736c848c3711b33e5656af290991a82ee",
      "parents": [
        "83732e8f4ab27cad25343778f333257bfb0b719e"
      ],
      "author": {
        "name": "zezeozue",
        "email": "zezeozue@google.com",
        "time": "Tue Jul 21 07:33:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 07:33:00 2026"
      },
      "message": "tools: fix trace_video_conv on ring-buffer traces (#6803)\n\nLatest android builds re-emits the codec config (SPS/PPS) before every\nkey frame, so build_stream stacked every copy at the front of the\nelementary stream and libav rejected it. Prepend only one."
    },
    {
      "commit": "83732e8f4ab27cad25343778f333257bfb0b719e",
      "tree": "893094463f0c49ef5db23c87d3efb70d62169c27",
      "parents": [
        "c1c7ae44259cbe432375b56f656c600b83f1ec4a"
      ],
      "author": {
        "name": "sashwinbalaji",
        "email": "sashwinbalaji@google.com",
        "time": "Mon Jul 20 18:03:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 18:03:08 2026"
      },
      "message": "tp: fix Fuchsia build of shell_utils_unittest (#6802)\n\nGTEST_SKIP() expands to a return statement, so guarding it with #if left\nthe rest of the test body unreachable on Fuchsia and Chromium\u0027s build\nfailed with -Werror,-Wunreachable-code."
    },
    {
      "commit": "c1c7ae44259cbe432375b56f656c600b83f1ec4a",
      "tree": "d95caef4d97a7618ff5c3d5ba07fea8b1470d48b",
      "parents": [
        "c11d995801e8db06f3795dc974cdf275676eafe7"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Mon Jul 20 17:51:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 17:51:03 2026"
      },
      "message": "perfetto: make the StackSample inline callstack fully inline (#6793)\n\nThe inline callstack variant of StackSample reused the profiling\nCallstack message, whose frames are interning references. That defeats\nthe point of an inline variant: a producer should be able to emit a\nsample without setting up interned data, matching the intent behind\nthe original TrackEvent inline callstack discussion.\n\nHoist TrackEvent\u0027s nested Callstack message to a top-level\nInlineCallstack in its own inline_callstack.proto and use it for both\nTrackEvent and StackSample. Inline stack sample frames are interned\ninto a dummy mapping, the same way TrackEvent inline callstacks are.\n\nThis is a breaking change for code referencing the generated\nTrackEvent.Callstack types; the wire format is unchanged. Add changelog\nentries for this and for the transport-neutral stack sampling work."
    },
    {
      "commit": "c11d995801e8db06f3795dc974cdf275676eafe7",
      "tree": "b59c8b44d1ce1dcfa28505979030927e4fa77dee",
      "parents": [
        "167b028b88ef0dc4f989c8bcff5aef6a1466e8e1"
      ],
      "author": {
        "name": "Ryan",
        "email": "rsavitski@google.com",
        "time": "Mon Jul 20 17:46:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 17:46:23 2026"
      },
      "message": "tp: process_tracker: treat parent pid changes as reparenting (#6363)\n\nRight now, the process_tracker always assumes that the same pid under a\ndifferent parent must mean that this is a new process reusing the pid, and\ntherefore creates a new process to track. There is another underlying\npossibility - the process\u0027 parent has exited and the original process got\nreparented. Note that the reparenting isn\u0027t always to pid\u003d1 (init), since things\nlike PR_SET_CHILD_SUBREAPER exist.\n\nIn retrospect, this heuristic is the wrong way around. Reparenting is way more\nfrequent than pid reuse, and the latter can be cleanly detected via\nsched_process_free. (Note: the reverse isn\u0027t true, because sched_process_exit is\nwhen a thread becomes reparentable, and only the most recent kernels include the\ngroup_dead tracepoint field.)\n\nHence this patch makes the process_tracker assume reparenting instead. We also\ndiscard the new parent pid since the original is more informative.\n\nPS: I have considered merging the SetProcessParent with SetProcessMetadata, but\ndecided to keep them separate for readability."
    },
    {
      "commit": "167b028b88ef0dc4f989c8bcff5aef6a1466e8e1",
      "tree": "d5ab6f0e571072275d8210c1ae0550b35f246161",
      "parents": [
        "8fc48103e04b550d9956c04592815e71d7f99943"
      ],
      "author": {
        "name": "sashwinbalaji",
        "email": "sashwinbalaji@google.com",
        "time": "Mon Jul 20 17:38:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 17:38:42 2026"
      },
      "message": "perfetto: allow mmapping files that others have open for writing (#6801)\n\nOn Windows, OpenFileForMmap() passed FILE_SHARE_READ only, so\nCreateFileA failed with ERROR_SHARING_VIOLATION whenever another handle\nhad the file open with GENERIC_WRITE. That is stricter than the POSIX\nopen(O_RDONLY) this is meant to mirror, and it means a trace file still\nheld open by its writer cannot be mapped at all: callers either fail\noutright, as TraceRedactor does, or silently degrade to read(), as\nReadTraceUnfinalized does."
    },
    {
      "commit": "8fc48103e04b550d9956c04592815e71d7f99943",
      "tree": "973c1f6cd9f993ef28c604799f839d8f85cb3f68",
      "parents": [
        "16043a52dd3eaf2dcc782bbd5298a19c19e117f0"
      ],
      "author": {
        "name": "sashwinbalaji",
        "email": "sashwinbalaji@google.com",
        "time": "Mon Jul 20 16:54:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 16:54:39 2026"
      },
      "message": "tp: fix perfetto_unittests failures on Fuchsia (#6798)\n\nbase::ScopedMmap has no implementation outside\nLinux/Android/FreeBSD/Apple/ Windows, so on Fuchsia\nTraceRedactor::Redact() bailed out on every trace with \"failed to map\npages\". Load the trace through a helper that falls back on\nbase::ReadFile() when PERFETTO_HAS_MMAP() is 0 or the mapping fails,\nmirroring what ReadTraceUnfinalized() does.\n\nShellUtilsTest.ExportTraceToDatabaseWritesToDisk attaches an on-disk\nSQLite database, which fails on Fuchsia; skip it there. Also unlink the\nexported file on every path out of the test: gtest returns early on a\nfailed assertion, which left the file behind and made ~TempDir() CHECK\non a non-empty directory, taking down the whole test binary.\n\nBug: 536803974"
    },
    {
      "commit": "16043a52dd3eaf2dcc782bbd5298a19c19e117f0",
      "tree": "390e7cfe4326d0a9c9d4d3184bafa451aa33ce72",
      "parents": [
        "d0c223270378902a721829612798ff0edca0d1ed"
      ],
      "author": {
        "name": "gignat-dev",
        "email": "gignat@google.com",
        "time": "Mon Jul 20 15:52:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 15:52:44 2026"
      },
      "message": "tp: add flags_enum annotation to broadcast_type (#6797)\n\nThis updates `frameworks_base_track_event.proto` to add the\n`.com.android.internal.BroadcastType` proto flags_enum annotation to the\n`broadcast_type` field."
    },
    {
      "commit": "d0c223270378902a721829612798ff0edca0d1ed",
      "tree": "d7f6ff63b9e6020f0d12f82468f35d31be514146",
      "parents": [
        "4be66e0c389f4c798b782729b0ac38f63aa36765"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Mon Jul 20 12:56:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 12:56:36 2026"
      },
      "message": "tp: add interned callstacks to stack sampling (#6791)\n\nAdd callstack_iid to the StackSample callstack oneof so a sample can\nreference a callstack interned in InternedData.callstacks instead of\ninlining it. The parser resolves the iid via StackProfileSequenceState."
    },
    {
      "commit": "4be66e0c389f4c798b782729b0ac38f63aa36765",
      "tree": "3ffa1e010271deba88d8382d461d24d49d202b49",
      "parents": [
        "66e22c7ea274167831505b6763219dc82b643a6b"
      ],
      "author": {
        "name": "sashwinbalaji",
        "email": "sashwinbalaji@google.com",
        "time": "Mon Jul 20 12:51:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 12:51:29 2026"
      },
      "message": "tp: look up the default SQLite VFS name for export (#6792)\n\nThe export path hardcoded the OS-backed VFS name as \"win32\" on Windows\nand \"unix\" everywhere else. SQLite does not register a VFS named \"unix\"\non every platform, so on Fuchsia the \"?vfs\u003d\" URI parameter failed to\nresolve and both ExportTraceToDatabase and its unit test broke.\n\nAsk SQLite for the default VFS instead. It is always the OS-backed one\n(memdb is registered non-default), and its name is correct on every\nplatform."
    },
    {
      "commit": "66e22c7ea274167831505b6763219dc82b643a6b",
      "tree": "dae7fad002b9caab70469579b598b40f67e22096",
      "parents": [
        "5fe765faf9193fcdb32e8e6be12326679dc13011"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Mon Jul 20 12:21:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 12:21:16 2026"
      },
      "message": "tp: add async attribution to stack sampling (#6775)\n\nAdd TaskContext.async_id for attributing a sample to a stackful async\ncontext (goroutine, fiber, ...), described by an AsyncContextDescriptor\ninterned via the StackSampleInternedData extension.\n\nThe descriptor\u0027s name and kind fold onto\n__intrinsic_stack_sample_task_context\nas async_name / async_kind. Generate the extension descriptor and\nregister\nit with the diff-test harness so interned extension fields can be used\nin\ntextproto traces."
    },
    {
      "commit": "5fe765faf9193fcdb32e8e6be12326679dc13011",
      "tree": "a173f6b51a4075750f9adeacc68012380e46d32c",
      "parents": [
        "983d239e10b811fac5123757ed4dee5132dda78f"
      ],
      "author": {
        "name": "elrakadm",
        "email": "elrakadm@google.com",
        "time": "Mon Jul 20 10:54:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 10:54:44 2026"
      },
      "message": "Revert \"tp: improve performance of jank_cuj metric (#6650)\" (#6790)\n\nThis reverts commit 0e26c4745eeb5c4f35843c5817fc322f8083fd83.\n\nCauses failures with` CREATE PERFETTO\nTABLE(android_jank_cuj_sf_main_thread_slice): SQLite error while\ncreating body: Interval intersect only works on intervals with non\nnegative duration.`"
    },
    {
      "commit": "983d239e10b811fac5123757ed4dee5132dda78f",
      "tree": "44be5d84351c1cbe6cd157b6f050ba845b7079b8",
      "parents": [
        "9a3b57b65d403271b3883375025be9330f7593db"
      ],
      "author": {
        "name": "sashwinbalaji",
        "email": "sashwinbalaji@google.com",
        "time": "Mon Jul 20 09:27:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 09:27:43 2026"
      },
      "message": "tp: Fix TraceRedactorTest.EmptyTimelineReturnsError on Windows (#6787)\n\nbase::TempFile::Create() creates the file via CreateFileA() with only\nFILE_SHARE_DELETE | FILE_SHARE_READ and keeps it open.\n\nRe-opening the same path with O_RDWR therefore fails with a sharing\nviolation on Windows, making ASSERT_TRUE(fd) fail.\n\nOn POSIX the reopen is harmless, so the breakage was Windows-only.\n\nWrite the serialized trace through the fd the TempFile already owns\ninstead of reopening the path. The redactor\u0027s read-only mmap of the\ninput is still allowed by FILE_SHARE_READ, and it returns the empty\ntimeline error before it ever opens the output file."
    },
    {
      "commit": "9a3b57b65d403271b3883375025be9330f7593db",
      "tree": "0f69c51b3e00ecf6205801ee5ff55911a343da5d",
      "parents": [
        "ad760430935a90c7961b34127ed4f10ccddcd654"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Mon Jul 20 07:50:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 07:50:16 2026"
      },
      "message": "ui: Fix WebGL context leak (#6782)\n\nRemove event listener on component unmount, which was preventing the\nWebGL context from being GC\u0027d.\n\nFixes: https://buganizer.corp.google.com/issues/535560884"
    },
    {
      "commit": "ad760430935a90c7961b34127ed4f10ccddcd654",
      "tree": "e51007500e6be64368767437701bc4b2ecdf3e92",
      "parents": [
        "8bd40a7c631a40f1afd2f04295bc0fd2d10841b2"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Mon Jul 20 07:35:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 07:35:23 2026"
      },
      "message": "ui: Format UI codebase with Prettier 3.9.5 (#6781)\n\nUpgrade formatting across UI source files following Prettier 3.9.5\nrules.\nThe Prettier 3.9 update introduces changes to default formatting (such\nas\nsingle implements/extends clauses and union types) that are not\nconfigurable\nin Prettier, but the updated formatting is generally reasonable.\n\nTODO: After landing - add the resulting squash commit to\n`.git-blame-ignore-revs`"
    },
    {
      "commit": "8bd40a7c631a40f1afd2f04295bc0fd2d10841b2",
      "tree": "0a926ec2504cb06556000bb6750ee35d8e629aa7",
      "parents": [
        "dfa6f0e5f01ce2162dc9f3e9be3539d01797a0cf"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Mon Jul 20 07:26:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 07:26:24 2026"
      },
      "message": "ui: Remove inlineDynamicImports from vite.config.mjs (#6784)\n\nSquashes the warning encountered when running the build with the new\nversion of vite"
    },
    {
      "commit": "dfa6f0e5f01ce2162dc9f3e9be3539d01797a0cf",
      "tree": "d7a4522c55bb770f8d2389ee89f807d915b223d8",
      "parents": [
        "3a572c5bb945f05b3352f9fc3d6361a432b865ed"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Mon Jul 20 07:23:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 07:23:02 2026"
      },
      "message": "ui: Fix bigtrace and open_perfetto_trace tsconfig settings (#6783)\n\nSet rootDir to parent directory, include vite.d.ts for SCSS module\ndeclarations, and update lib to es2024 to support Symbol.dispose."
    },
    {
      "commit": "3a572c5bb945f05b3352f9fc3d6361a432b865ed",
      "tree": "461897d40fc88066ebb45c4e17f14b74df166dce",
      "parents": [
        "e97d7bd8f30d52c1c5d02dcc1c7926d89544802a"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Sun Jul 19 09:19:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 19 09:19:16 2026"
      },
      "message": "ui: Update sass to 1.101.0 (#6766)"
    },
    {
      "commit": "e97d7bd8f30d52c1c5d02dcc1c7926d89544802a",
      "tree": "c3e55e5bca2d694ee5fcb6983c0da0ee1b5efeaf",
      "parents": [
        "b4dba00bbaee4a6391663469169993f3eaccf9c4"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Sun Jul 19 07:26:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 19 07:26:40 2026"
      },
      "message": "ui: Add note about vite \u0026 typescript bumps (#6778)"
    },
    {
      "commit": "b4dba00bbaee4a6391663469169993f3eaccf9c4",
      "tree": "9908a2fe3b84637642a1229ba84ccc3d78f7c91a",
      "parents": [
        "b3fbe3a627ea048ff4c233a4b2252ae5d2878d96"
      ],
      "author": {
        "name": "zezeozue",
        "email": "zezeozue@google.com",
        "time": "Sun Jul 19 00:43:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 19 00:43:57 2026"
      },
      "message": "tools: fix trace_video_conv playback timing (#6780)\n\nScreen recordings capture frames at an uneven rate, but trace_video_conv\nassumed a fixed rate, so clips played back with the wrong timing.\n\nBuild the .mp4 with PyAV, which keeps each frame\u0027s real time. Clips now\nplay back exactly like the trace, with no quality loss, for both H.264\nand HEVC (previously H.264 only). PyAV is imported lazily, only to write\nthe .mp4, so it stays an optional extra (pip install av) rather than a\ndependency of the perfetto package. Dimensions and duration are read via\nlibav too, so a plain lossless export needs no ffmpeg binary; ffmpeg is\nonly required for the re-encode paths below.\n\nAn output covers the exact requested range; any part with no frames --\nbefore the first frame or after the last -- shows a \"No video frames\"\ncard, so a clip fills its whole range and two --compare clips fill the\nsame span even if one starts late or ends early. Drawing that card (and\nthe --compare composite) re-encodes via ffmpeg.\n\nAlso starts a clip on the frame on screen at --start, and fixes the\nimport path so the tool runs without perfetto pip-installed."
    },
    {
      "commit": "b3fbe3a627ea048ff4c233a4b2252ae5d2878d96",
      "tree": "7d37c13ee3bbdb8756164ce27516f417d2dc101a",
      "parents": [
        "f9aaf6ace81b4a73411b2d6055e4ba2f63e6ca21"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Sat Jul 18 10:59:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 18 10:59:03 2026"
      },
      "message": "ui: Remove unused packages (#6773)\n\nRemove `puppeteer` and `events` as they are no longer used."
    },
    {
      "commit": "f9aaf6ace81b4a73411b2d6055e4ba2f63e6ca21",
      "tree": "d128a127a360d2f320d36d0c5a7a3554b06b2647",
      "parents": [
        "672a79075b994dfe288125ff91e2693ae1937eaa"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Sat Jul 18 10:49:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 18 10:49:34 2026"
      },
      "message": "ui: Bump typescript to v7 (#6772)\n\nTypeScript 7 is rewritten from JavaScript to Go, it runs a lot faster -\n6s -\u003e 1s for the frontend code (M5 Macbook) - note, with the\nvite/rolldown updates as welll, a warm build now takes 9 seconds on an\nM5 Macbook - assets + protobufjs, + tsc + bundle.\n\nChanges: \n- Added typescript/native:7.0.2, but keep the typescript 6.0.2 library\nas eslint still depends on it.\n- Update tsconfig.json.\n- Scheduler API (window.scheduler) is now in Typescript\u0027s lib.dom.d.ts,\nso remove the ambient type declaration.\n- Fix some SAB/AB issues, as some types have changed in the lib.dom.d.ts\nagain."
    },
    {
      "commit": "672a79075b994dfe288125ff91e2693ae1937eaa",
      "tree": "ef031a5b411e5fd5a2b5141bb4c81f144fca05b0",
      "parents": [
        "79c009db535b7fba80cd4dfea8c81955fa1b6092"
      ],
      "author": {
        "name": "zezeozue",
        "email": "zezeozue@google.com",
        "time": "Sat Jul 18 10:20:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 18 10:20:34 2026"
      },
      "message": "tools: add trace_video_conv.py to extract display-video to mp4 (#6777)\n\nReads the android.display.video frames from a trace via the\ntrace_processor python API and muxes them into an .mp4 with ffmpeg: list\nthe video streams, convert the whole video, clip to a time range or a\nSQL-selected region, change playback speed, and lay two traces\u0027 videos\nside by side (captioned) to compare them. Documents it in the Screen\nRecording data-source page."
    },
    {
      "commit": "79c009db535b7fba80cd4dfea8c81955fa1b6092",
      "tree": "2ba7e5c67499747bd427e37c47e8187837b7095e",
      "parents": [
        "3acd516c55fb5da836f718ea743f9b06b4578004"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Fri Jul 17 20:28:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 20:28:45 2026"
      },
      "message": "ui: Update to vite 8.1.5 (#6763)\n\nVite v8 switches to rolldown which improves frontend bundling speed from\n7s -\u003e 2s (M5 Mac)"
    },
    {
      "commit": "3acd516c55fb5da836f718ea743f9b06b4578004",
      "tree": "7c3b9b6750c6d137035da4a16435a3387ff6ba08",
      "parents": [
        "a5a3ec8e9e7bcc48115e2ee5ae013875a78ce216"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Fri Jul 17 19:36:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 19:36:53 2026"
      },
      "message": "ui: Bump pnpm to version 10.34.5 (#6764)\n\n- Add a roll_pnpm.py script to grab a pnpm package and upload it,\nsimilar to roll_node and roll_emscripten.\n- Update pnpm to 10.34.5.\n- Recreate both pnpm-lock files due to version upgrade.\n- Sass was updated too which deprecated `@import` - migrate to `@use`\ninstead."
    },
    {
      "commit": "a5a3ec8e9e7bcc48115e2ee5ae013875a78ce216",
      "tree": "0b7f58275443527b2381c170e029162f5b8422ad",
      "parents": [
        "cfa174fad7e8ba7c40d210f0dfa904e83b1bc702"
      ],
      "author": {
        "name": "David Reveman",
        "email": "reveman@meta.com",
        "time": "Fri Jul 17 18:45:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 18:45:35 2026"
      },
      "message": "tp: fix export subcommand writing to in-memory database (#6768)\n\nThe trace processor connection is opened on the in-memory \"memdb\" VFS.\nATTACH DATABASE inherits the connection\u0027s VFS, so the export attached\nits output database in memory as well: every table was materialized in\nRAM and the on-disk file was left empty, while the command still\nreported success. This regressed in #5766, which moved the connection\nonto the memdb VFS; before that the connection used \":memory:\", so the\nplain-path ATTACH resolved to the on-disk VFS and worked.\n\nAttach the export database through a file: URI that selects the\nOS-backed VFS so the tables are streamed to disk instead. This fixes the\nempty output and roughly halves peak RSS, since the tables are no longer\nduplicated in memory. Also disable the rollback journal and fsync on the\nexport database (it is regenerated from the trace on failure) and fix\nthe detach statement never being stepped.\n\nAdd a unit test that exports and verifies the result reads back through\na standalone SQLite connection and reloads into a trace processor."
    },
    {
      "commit": "cfa174fad7e8ba7c40d210f0dfa904e83b1bc702",
      "tree": "38c4a44bf1598d623bf591830e8c19a876f1f2fa",
      "parents": [
        "7c52a2da8b8507d65e8b8c70e7e8fec89b69c480"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Fri Jul 17 18:28:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 18:28:20 2026"
      },
      "message": "ui: Speed up integration tests (#6769)\n\nSwitch to using normal `ui/build --serve` instead of the vite dev server\nwhen running integration tests. The dev server is not required as the\nsources don\u0027t change, and it just adds overhead."
    },
    {
      "commit": "7c52a2da8b8507d65e8b8c70e7e8fec89b69c480",
      "tree": "68f7358691f38f61c82114e9fd97738463bf16b0",
      "parents": [
        "29c572c0ac06cb971558bf8057dc7b7639e172f5"
      ],
      "author": {
        "name": "Edgar Arriaga",
        "email": "edgararriaga@google.com",
        "time": "Fri Jul 17 17:54:28 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 17:54:28 2026"
      },
      "message": "Report redactor error if no process timeline present (#6732)\n\nProcess timeline data is required for trace redaction, currently\nfinishes redaction and outputs an empty trace when a timeline cannot be\nestablished, this implies that the calling system assumes no error\noccurred and provides this empty trace which is useless, instead, lets\nemit an error when the process life cycle cannot be established as its a\nbasic requirement for redactor which will also allow calling systems to\nreact as needed."
    },
    {
      "commit": "29c572c0ac06cb971558bf8057dc7b7639e172f5",
      "tree": "837af65b5a03f477b4f0d77a5e1e37e30ca2b831",
      "parents": [
        "277268ad52c759c911f6db9853d1ac9ad1c6a77b"
      ],
      "author": {
        "name": "Ivan",
        "email": "99329845+ivan-chong@users.noreply.github.com",
        "time": "Fri Jul 17 12:52:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 12:52:14 2026"
      },
      "message": "ui: Add PixelInputLifecycle extension (#6670)\n\nRegisters the Pixel input lifecycle extension to support pixel-specific\ntouch stages in the Android Input Lifecycle plugin.\n\nBug: 454761692"
    },
    {
      "commit": "277268ad52c759c911f6db9853d1ac9ad1c6a77b",
      "tree": "c7576a52d1eeff88421981ada525a4614a71a1e3",
      "parents": [
        "85d950f3cf9965d8d9c92ce6b622474999b6f133"
      ],
      "author": {
        "name": "Ivan",
        "email": "99329845+ivan-chong@users.noreply.github.com",
        "time": "Fri Jul 17 12:32:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 12:32:42 2026"
      },
      "message": "tp: Add pixel.touch stdlib module for touch events (#6664)\n\nIntroduces the pixel.touch module to parse Pixel driver-level touch\nevents (IRQ top-half/bottom-half and Twoshay processing timestamps) from\nthe trace.\n\nBug: 454761692"
    },
    {
      "commit": "85d950f3cf9965d8d9c92ce6b622474999b6f133",
      "tree": "f73ab86c250d445a9806740647a31899f48e8c5c",
      "parents": [
        "3e14df8c1e4d8bbfa9fc25244a8f8f4a57312cd3"
      ],
      "author": {
        "name": "Ivan",
        "email": "99329845+ivan-chong@users.noreply.github.com",
        "time": "Fri Jul 17 09:55:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 09:55:38 2026"
      },
      "message": "ui: Add extensions framework to Android Input Lifecycle plugin (#6577)\n\nIntroduce the concept of extensions to allow registering custom input\nlifecycle stages. This allows the plugin to dynamically fetch stages and\njoin them to the lifecycle from registered extensions and integrate them\nchronologically into the UI.\n\nBug: 454761692"
    },
    {
      "commit": "3e14df8c1e4d8bbfa9fc25244a8f8f4a57312cd3",
      "tree": "2f5ef28f3e6eb371fdbb7f59b7230c485a65cf61",
      "parents": [
        "7589d97192a909870f79c4a3a05c9c81175ab5bc"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Fri Jul 17 08:03:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 08:03:05 2026"
      },
      "message": "ui: guard SharedArrayBuffer check in assertIsArrayBufferView (#6760)\n\nSharedArrayBuffer is only defined in cross-origin isolated contexts, so\nthe bare instanceof check threw a ReferenceError elsewhere. Check the\nglobal exists first - if it doesn\u0027t, the buffer can\u0027t be one anyway.\n\nFixes: b/535630867"
    },
    {
      "commit": "7589d97192a909870f79c4a3a05c9c81175ab5bc",
      "tree": "774dd6e521ab25d06122434138b631eae1833fad",
      "parents": [
        "fcb8135a1819b2b6064397a1fe3e7a13d2a07c5b"
      ],
      "author": {
        "name": "perfetto-automation[bot]",
        "email": "278437629+perfetto-automation[bot]@users.noreply.github.com",
        "time": "Fri Jul 17 07:40:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 07:40:03 2026"
      },
      "message": "Sync generated proto files (#6762)\n\nThis PR automatically synchronizes generated proto files with their\n`.proto` definitions.\n\n## Generated files updated\n- `.gen.cc` and `.gen.h` files\n- `.pcz.h` files\n- Binary descriptors\n- Python proto bindings\n\nThis is an automated PR generated by the `sync-protos` workflow.\n\nCo-authored-by: perfetto-automation[bot] \u003cperfetto-automation-github-app@google.com\u003e"
    },
    {
      "commit": "fcb8135a1819b2b6064397a1fe3e7a13d2a07c5b",
      "tree": "b7cce9dd6768e9a7c7d0c318cdc0f13fc63515f3",
      "parents": [
        "0621e92721ff5cc329df07ca5bd1b763651d506f"
      ],
      "author": {
        "name": "zezeozue",
        "email": "zezeozue@google.com",
        "time": "Thu Jul 16 18:46:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 18:46:49 2026"
      },
      "message": "tp: add (pid)/(tid) field options and annotate frameworks_base (#6756)\n\nAdds two custom field options (in field_options.proto) for integer\nfields that hold OS ids:\n\n- (perfetto.protos.pid): the field is a process id. Alongside the raw\nvalue, trace_processor emits two extra args keyed by replacing the\ntrailing \"pid\": \"\u003cname\u003eupid\" (the trace-unique upid) and\n\"\u003cname\u003eprocess_name\". e.g. caller_pid -\u003e caller_upid +\ncaller_process_name.\n- (perfetto.protos.tid): the same for thread ids, emitting \"\u003cname\u003eutid\"\nand \"\u003cname\u003ethread_name\".\n\nThe upid/utid come from GetProcessOrNull/GetThreadOrNull, which are\nplain lookups: if the pid/tid was never seen, no extra arg is emitted\nand no process/thread is created.\n\nAlso annotates the pid, caller_pid, sender_pid and receiver_pid fields\nin frameworks_base_track_event.proto."
    }
  ],
  "next": "0621e92721ff5cc329df07ca5bd1b763651d506f"
}
