)]}'
{
  "log": [
    {
      "commit": "56b3c449c968296bda3831d7cd2e0d2140acc9e9",
      "tree": "3bb49a02612af4343e11cbd1e3b351442fbcbe7f",
      "parents": [
        "1f646294374f26a59bed4434a0ae25f94d855109"
      ],
      "author": {
        "name": "yforta",
        "email": "yforta@google.com",
        "time": "Tue Sep 01 18:45:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 18:45:41 2026"
      },
      "message": "trace_redaction: case-sensitive package matching (#7297)\n\nAndroid package names are case-sensitive identifiers. Using\ncase-insensitive comparison could cause mismatched package UID\nassociation in packages_list during trace redaction.\n\nBug: 554956547\nTest: perfetto_unittests --gtest_filter\u003d\"FindPackageUidTest.*\"\nTAG\u003dagy\nCONV\u003dbf6e2915-053a-48a9-8ed1-17ba5fbbbe2a"
    },
    {
      "commit": "1f646294374f26a59bed4434a0ae25f94d855109",
      "tree": "5c3f0acd2367c75a8935d18717ab142fb92cc2e7",
      "parents": [
        "c7fbd5a9b2bc0d9a298e5b0fa7a7dbb17cdb605b"
      ],
      "author": {
        "name": "Elliot Saba",
        "email": "staticfloat@gmail.com",
        "time": "Tue Sep 01 18:25:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 18:25:43 2026"
      },
      "message": "ui: Add slider to control GPU counters collection (#7285)\n\nOn some platforms (e.g. mesa\u0027s `pps-producer`) collection at 10KHz can\nhave a large CPU performance impact. Give the user an easy way to select\na reasonable GPU counter collection rate, expressed in Hz similar to\nother collection rates such as stack sampling.\n\nKeep the default at 10KHz to not disturb existing users, but at least\nerase the comment claiming it is 10Hz."
    },
    {
      "commit": "c7fbd5a9b2bc0d9a298e5b0fa7a7dbb17cdb605b",
      "tree": "0917fa99a60762fb444c7305fa7965cd9fb55ad5",
      "parents": [
        "24c4f197835183bfbf279b642380474ccbaca6cf"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Tue Sep 01 16:54:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 16:54:25 2026"
      },
      "message": "ui: fix flamegraph crash on heap profiles with negative sizes (#7290)\n\nThe heap profile flamegraph subquery passed raw per-row sizes through\n`iif(positive_alloc, size, 0)` without clamping. Individual rows within\na callsite with net-positive count can still have negative sizes\n(deallocations), causing the flamegraph intrinsic to reject them with\n\"value columns must be non-negative\".\n\nClamp with `max(..., 0)` to match the existing pattern already used for\n`alloc_size` and `alloc_count`.\n\nFixes: https://b.corp.google.com/issues/554195579"
    },
    {
      "commit": "24c4f197835183bfbf279b642380474ccbaca6cf",
      "tree": "26bd9014271e2dfe75f596a9887732dee118f4e7",
      "parents": [
        "a995d36a1e4a208300fae7e1b4eba44465dd0e98"
      ],
      "author": {
        "name": "copybara-service[bot]",
        "email": "56741989+copybara-service[bot]@users.noreply.github.com",
        "time": "Tue Sep 01 16:08:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 16:08:33 2026"
      },
      "message": "Copybara import from Chromium: proto and stdlib changes (#7288)\n\nCopybara import from Chromium: proto and stdlib changes\n\n- c58e0535873ecb7d50ad31c15899d1f89b3aa6df [AdTagging] Enforce one-way\ntagging and introduce FrameAd... by Yao Xiao \u003cyaoxia@chromium.org\u003e\n\nCOPYBARA_IMPORT\u003dProject import generated by Copybara.\n\nGitOrigin-RevId: c58e0535873ecb7d50ad31c15899d1f89b3aa6df\n\nCo-authored-by: Perfetto Team \u003ccopybara-servicebot@google.com\u003e"
    },
    {
      "commit": "a995d36a1e4a208300fae7e1b4eba44465dd0e98",
      "tree": "3592ab4bd60f4b394e4ca280591d5a451d0f933b",
      "parents": [
        "133776de173f956fd676edbdf0c415d7d8cb80cb"
      ],
      "author": {
        "name": "Safayat Ullah",
        "email": "safayat@google.com",
        "time": "Tue Sep 01 15:06:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 15:06:43 2026"
      },
      "message": "tp: fix trace processor unit tests for chromium (#7293)"
    },
    {
      "commit": "133776de173f956fd676edbdf0c415d7d8cb80cb",
      "tree": "119af50d3a3f5f42baf53887cb17fb9eafbfbc8f",
      "parents": [
        "8a5e83fb56b87c61d30b2564d507bdbaa23653a4"
      ],
      "author": {
        "name": "Mohanram",
        "email": "mohanram.meenakshisundaram@intel.com",
        "time": "Tue Sep 01 14:21:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 14:21:38 2026"
      },
      "message": "perfetto: Fix TracingMuxerImpl::Shutdown() crash (#7089)\n\nAt benchmark exit calls \"Tracing::Shutdown()\"\n(triggered via _util_perfetto_fini registered at exit process).\n\nthen DestroyStoppedTraceWritersForCurrentThread() function destroys\nTraceWriterImpl for data sources that have already been explicitly\nstopped. If any data source not stopped still active at shutdown time\nretains alive. Then muxer is deleted, which frees all shared memory.\n\nLater PlatformPosix-\u003eShutdown() -\u003e ~TraceWriterImpl() -\u003e Flush() -\u003e\nReturnCompletedChunk() which try to access the already freed memory and\ncauses SIGSEGV crash.\n\nFix: Added DestroyAllTraceWritersForCurrentThread() new helper function\nto reset all trace writer on the calling thread before shared memory\ndestoryed.\n\nBug: 534222391\n\nSigned-off-by: Mohanram Meenakshisundaram \u003cmohanram.meenakshisundaram@intel.com\u003e"
    },
    {
      "commit": "8a5e83fb56b87c61d30b2564d507bdbaa23653a4",
      "tree": "d3543d1259b500dcaf3f96746ca6a662470e7d94",
      "parents": [
        "6de9aef0fe145201c475538cd9d23c00a25b3044"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Tue Sep 01 11:34:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 11:34:09 2026"
      },
      "message": "ui: Intelletto: Register tools with Chrome\u0027s WebMCP API (#6883)\n\nRegister Intelletto tool calls with Chrome\u0027s experimental WebMCP API (if\navailable)."
    },
    {
      "commit": "6de9aef0fe145201c475538cd9d23c00a25b3044",
      "tree": "0bcdaf93d9cc2fad2bfe6e6d3a9b912c128a89f2",
      "parents": [
        "77c560edc3374d669967377c1a6c4121e54baaf1"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Tue Sep 01 11:26:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 11:26:16 2026"
      },
      "message": "ui: Consolidate flow events into single plugin and extract connected flows (#7030)\n\nInternal tidy up. Move all flow rendering and query logic into its own\nplugin making use of the timeline overlay extension point, instead of\nhaving it built into the timeline renderer."
    },
    {
      "commit": "77c560edc3374d669967377c1a6c4121e54baaf1",
      "tree": "241c801a166cead88bf803dda1c6f4b9052386c5",
      "parents": [
        "3abc8b5378d83a60ca1f190c1a9072612f9ab84c"
      ],
      "author": {
        "name": "andrabivolaru",
        "email": "andrabivolaru@google.com",
        "time": "Tue Sep 01 10:31:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 10:31:18 2026"
      },
      "message": "proto_merger: Keep reserved fields of deleted types in deleted_fields (#7208)\n\nWhen a field is reserved upstream and its type is a deleted nested\nmessage/enum (not present upstream), `proto_merger` previously moved it\nto `fields`, causing it to be serialized *before* its type definition.\n\nThis change keeps reserved fields of deleted types in `deleted_fields`\nwith `[deprecated \u003d true]` so they are serialized after their nested\ntype definitions.\n\nAdded unit test\n`ReservedUpstreamFieldWithDeletedTypeIsPlacedInDeletedFields` in\n`proto_file_serializer_unittest.cc`."
    },
    {
      "commit": "3abc8b5378d83a60ca1f190c1a9072612f9ab84c",
      "tree": "52a86b49af9a44c4ea8950b56af7e92d6a14d0cc",
      "parents": [
        "9729a7e863c7a8ecefeb9189338c55412fd4b672"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Tue Sep 01 09:34:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 09:34:31 2026"
      },
      "message": "ui: Bulk columnar decode for QueryResult (#7277)\n\nCurrently all queries must be iterated out row by row which involves\nmutating the row object for every iteration. On heavy queries with many\nrows (such as tracks) this overhead can add up. In addition, most tracks\nultimately require the data in columnar TypedArrays in order to load\ninto WebGL buffers, so round tripping to a row object is wasteful.\n\nThis patch introduces a new QueryResult API - `decodeColumns(spec)` -\nwhich takes the same spec object as `.iter(spec)` but returns all rows\nin one go as a set of columnar based `TypedArray`s. Building arrays\ndirectly allows certain shortcuts to be taken such as avoiding creating\nbigints and simply copying bytes.\n\n`decodeColumns()` runs around 2-4x faster than `iter()`, depending on\nthe row spec.\n\nThis patch also migrates SliceTrack, CounterTrack, GroupSummaryTrack,\nand CpuFreqTrack over to `decodeColumns()`. For compatibility, some row\noriented work is still done in SliceTrack which leaves some performance\non the table but changing this would involve changing track API, and\nthis is out of scope of this PR.\n\nAdded a benchmark utility to compare the relative performance of\n`iter()` and `decodeColumns()`, which can be run using the following\ncommand:\n\n```bash\nRUN_BENCH\u003d1 ui/run-unittests -f \u0027QueryResultBenchmark\u0027 -n\n```\n\nNote: Changes in unrelated parts of the codebase are related to the fact\nthat the type of the row spec has been decoupled from the type of the\nrow itself. This was a neat trick but doesn\u0027t work for decodeColumns as\nwe need to translate the spec to columnar TypedArrays - e.g. NUM -\u003e\nFloat64Array. Unfortunately Typescript cannot tell the difference\nbetween the NUM and NUM_NULL types in type based meta-programming.\n\nThe spec types (NUM, STR, LONG, etc...) how now been changed to objects\n- so that each one is distinct and can be translated to the equivalent\nTypedArray. Another advantage is we can make the various specs extend\none another properly so that spec subtyping works. E.g. `{foo: NUM}` can\nbe used where `{foo: UNKNOWN}` or `{foo: NUM_NULL}` is expected, but not\nwhere `{foo: STR}` is expected."
    },
    {
      "commit": "9729a7e863c7a8ecefeb9189338c55412fd4b672",
      "tree": "cc412216634dd39739a407ad8392421ba503e645",
      "parents": [
        "18d95ebddce53d4671fd2ed99dc45c39a458ef1d"
      ],
      "author": {
        "name": "dragosp95",
        "email": "dragosp@google.com",
        "time": "Mon Aug 31 09:28:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 09:28:56 2026"
      },
      "message": "proto_merger: Fix extensions order (#7287)\n\nFix extensions order. Before this PR all extension enums + messages\nmerged are added at the end of the file.\nWith this PR they are added in the right place, above the extension\ntargets"
    },
    {
      "commit": "18d95ebddce53d4671fd2ed99dc45c39a458ef1d",
      "tree": "48591bfb7c341d5f889fd5595b028746296c48e3",
      "parents": [
        "d5131808e2969b08a3438536b3bcf8c235dc2062"
      ],
      "author": {
        "name": "Runping Lai",
        "email": "runpinglai@google.com",
        "time": "Fri Aug 28 19:06:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 19:06:37 2026"
      },
      "message": "tp: Support dsu_target in linux_devfreq_dsu_counter (#7263)\n\nAdd pattern matching for `dsu_target` devfreq devices in\nlinux_devfreq_dsu_counter table. This allows capturing DSU frequency\nevents on newer platforms (e.g. Tensor G6) where the kernel devfreq node\nis named `dsu_target`.\n\nTest: UI test and SQL test\nBug: 553610666\n\nSigned-off-by: Runping Lai \u003crunpinglai@google.com\u003e"
    },
    {
      "commit": "d5131808e2969b08a3438536b3bcf8c235dc2062",
      "tree": "ef6cce077078b516b686e2889b7ef26a627f2556",
      "parents": [
        "6b7a01e18e974212c70ee15879dee93779676ec1"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Fri Aug 28 14:49:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 14:49:14 2026"
      },
      "message": "tools: remove all obsolete stacked PR tools (#7257)\n\nNow GitHub tools exist, no reason for these to exist anymore."
    },
    {
      "commit": "6b7a01e18e974212c70ee15879dee93779676ec1",
      "tree": "bbe95ab0ce2640fb8376448e277956f90d5e520b",
      "parents": [
        "c7ce22bb4d7a3793510289f414af912a31c1bee6"
      ],
      "author": {
        "name": "etiennep-chromium",
        "email": "etiennep@chromium.org",
        "time": "Fri Aug 28 14:09:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 14:09:40 2026"
      },
      "message": "Fix windows build (#7273)\n\nperfetto-\u003echromium is failing build on\n```\n..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\clang-cl.exe /c ../../third_party/perfetto/src/base/utils_unittest.cc /Foobj/third_party/perf...(too long)\n../../third_party/perfetto/src/base/utils_unittest.cc(455,14): error: declaration shadows a local variable [-Werror,-Wshadow]\n  455 |     TempFile file \u003d TempFile::Create();\n      |              ^\n../../third_party/perfetto/src/base/utils_unittest.cc(431,12): note: previous declaration is here\n  431 |   TempFile file \u003d TempFile::Create();\n```\n\nhttps://ci.chromium.org/ui/p/chromium/builders/try/win-arm64-compile-dbg/1051409/overview\n\nThis CL renames the other variable to fix the error."
    },
    {
      "commit": "c7ce22bb4d7a3793510289f414af912a31c1bee6",
      "tree": "7be5dca9701f28b951b4b807ebfac50a0208b180",
      "parents": [
        "4117ea3a9915a632ea756cd846a46d7fac97c6c7"
      ],
      "author": {
        "name": "sashwinbalaji",
        "email": "sashwinbalaji@google.com",
        "time": "Fri Aug 28 13:28:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 13:28:36 2026"
      },
      "message": "tbV2: relocate fully-read chunks when re-scraped (#7271)\n\nAfter a scrape, TraceBufferV2 retains the incomplete chunk so a later\nre-commit can add newly finalized fragments. If the visible payload has\nalready been read, the retained copy can remain at its original offset\nwhile\nthe write cursor advances around the ring.\n\nThe relocation path required chunk_complete, so it handled the\nproducer\u0027s\nfinal commit but not a later scrape of the same still-open chunk. Such a\nre-scrape grew the copy in place. After the ring wrapped, an ordinary\nwrite\ncould then evict the newly visible fragments before the next read.\n\nTreat any re-commit that increases the payload as adding new data. The\nexisting gates still limit relocation to a scraped, fully consumed copy\nat\nthe front of its sequence in an overwrite buffer. Previously consumed\nfragments remain consumed, while the newly visible data moves to the\ncurrent\nwrite position."
    },
    {
      "commit": "4117ea3a9915a632ea756cd846a46d7fac97c6c7",
      "tree": "831bed86cf0d0085f4315d1d01de17006c4627ff",
      "parents": [
        "3a190534163ae6726d41d4a865dacfc010ccc943"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Fri Aug 28 12:35:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 12:35:40 2026"
      },
      "message": "ui: improve performance of queryresult deser by 40% (#7272)\n\n* do varint including inline to avoid slow protobuf.js loop and\n  allocations on every cell\n* speed up the error handling checks by doing very simple ors per cell\n  and keeping the actual error chec itself per column at the end of the\n  cell loop"
    },
    {
      "commit": "3a190534163ae6726d41d4a865dacfc010ccc943",
      "tree": "e6022f3737ef443f373232ee51bd06f2d98cbbac",
      "parents": [
        "be8f4c7d267cd1ad2d6661805877ec099870a4b3"
      ],
      "author": {
        "name": "Ion",
        "email": "ivanterescheenko@gmail.com",
        "time": "Fri Aug 28 09:50:28 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 09:50:28 2026"
      },
      "message": "docs: fix the Instruments XML import docs and the export command (#7253)\n\nThree fixes to the macOS Instruments import path, all found by recording\na real\ntrace with `xctrace` 16.0 and feeding the export to\n`trace_processor_shell`.\nThe importer itself turned out to be healthy — the problems are in the\ndocs and\nin the comment that documents the export command.\n\n**1. The export command in the tokenizer comment cannot be\ncopy-pasted.**\n`instruments_xml_tokenizer.cc` documents the `xctrace export` invocation\nas\n`[@schema\u003d\"os-signpost and @category\u003d\"PointsOfInterest\"]` — the quote\nafter\n`os-signpost` is never closed. Running it verbatim:\n\n```\nExport failed: XQueryError:3 - \"invalid token (P) - @category\u003d\"PointsOfInterest\"] |\" at line:2\n```\n\nand no file is written. With the quote closed the export succeeds.\n\n**2. The docs name a table the Instruments importer never writes.**\n`other-formats.md` says samples are loaded into\n`cpu_profile_stack_sample`.\nThey are not — they go to `instruments_sample` (`id, ts, utid,\ncallsite_id,\ncpu`). On the repo\u0027s own fixture:\n\n| table | `test/data/instruments_trace.xml` | real 7.8 MB export |\n|---|---|---|\n| `instruments_sample` | 6 | 26168 |\n| `cpu_profile_stack_sample` | 0 | 0 |\n\nAs a control that the docs are not wrong systematically: the same\nsentence in\nthe `perf_text` section is correct\n(`test/data/trace_processor_perf_as_text.txt`\n→ 493 rows in `cpu_profile_stack_sample`).\n\n**3. \"How to Generate\" did not say how to generate.**\nThe section ended with \"the specific steps ... would need to be followed\nwithin\nthe Instruments tool itself\", even though a working `xctrace` command\nalready\nlived in the tokenizer comment. Both commands in the new block were run\nverbatim\non macOS 15 with Xcode 16.0; the resulting XML imports with 26k samples,\n1635\nframes and a 15.1 s span.\n\nThe new text also says that the points-of-interest signpost table is\nonly needed\nwhen a Perfetto trace was recorded in parallel: exporting the\n`cpu-profile`\ntable alone gives byte-for-byte the same sample count (26286 either way\nin my\nrun), so the simple one-table export is enough for a plain CPU profile.\n\n**Testing:** `tools/run_presubmit` — Succeeded. Both `xctrace export`\ncommands\nin the new docs block were extracted from the markdown by a script and\nexecuted\nverbatim, so the text and the tested commands cannot drift. No code\nchanges, so\nno unit tests are affected.\n\nCo-authored-by: sashwinbalaji \u003csashwinbalaji@google.com\u003e"
    },
    {
      "commit": "be8f4c7d267cd1ad2d6661805877ec099870a4b3",
      "tree": "d3050d469e510478445fcc93f22024a78ccb392d",
      "parents": [
        "844b0226f9405fbac97b7c4bb030e94035a3e8bb"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Fri Aug 28 09:37:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 09:37:30 2026"
      },
      "message": "ui: Add pprof export to HDE flamegraph (#7255)\n\nAdd a \u0027Pprof profile (.pb)\u0027 download option to the HeapDumpExplorer\nflamegraph view, and refactor the trace conversion infrastructure to\nsupport it from plugins.\n\n- Expose showStatusMessage on the public OmniboxManager so plugins can\nshow worker status without reaching into AppImpl.\n- Move trace_converter to base/ and replace hardcoded side effects with\na typed WorkerRequest + callback interface, making it usable from any\nlayer.\n- Merge convertTrace/convertTraceToPprof into a single convertTrace()\nwith a format-tagged opts union.\n- Add the pprof export menu item to the HeapDumpExplorer flamegraph\n(java-heap profile type)."
    },
    {
      "commit": "844b0226f9405fbac97b7c4bb030e94035a3e8bb",
      "tree": "bdcd68d0d86a47e57d62d0eb82f189da2cdabb41",
      "parents": [
        "42657bbd594b24ad58b8076fbc56e46121810512"
      ],
      "author": {
        "name": "copybara-service[bot]",
        "email": "56741989+copybara-service[bot]@users.noreply.github.com",
        "time": "Fri Aug 28 01:01:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 01:01:42 2026"
      },
      "message": "Copybara import from Chromium: proto and stdlib changes (#7262)\n\nCopybara import from Chromium: proto and stdlib changes\n\n- d8a28b900702e09e450ef92ea5a62c2c50a90f6f Sync feature protos. by\nGoogler \u003cnoreply@google.com\u003e\n- d4ac8f981a22e65ed5037c6f9c368f8e9d864932 Sync feature protos. by\nZachary Tan \u003ctanzachary@chromium.org\u003e\n- 50d2bd43453fa40cfaf91b401036536297e88117 Log correct VSync interval\n(and its type) in scroll jank ... by Petr Čermák\n\u003cpetrcermak@chromium.org\u003e\n- 3e7390c42d9e8856503f087d310ca71e2040eb6d Exclude same-site subframes\nof ad frames from origin isol... by Liam Brady \u003clbrady@google.com\u003e\n- b5252f8c63d0e7459ab5edc3bb01f4fa9f90a797 [chrome stdlib] Add\nis_fully_captured field to chrome_scr... by Kartar Singh\n\u003ckartarsingh@google.com\u003e\n- d1c37de3014dd36218e0ee882739c9140db94a1d [cc/metrics] Make the\nScrollUpdates scroll ID non-optional by Noam Helfman\n\u003cnoamh@microsoft.com\u003e\n\nCOPYBARA_IMPORT\u003dProject import generated by Copybara.\n\nGitOrigin-RevId: d8a28b900702e09e450ef92ea5a62c2c50a90f6f\n\nCo-authored-by: Perfetto Team \u003ccopybara-servicebot@google.com\u003e"
    },
    {
      "commit": "42657bbd594b24ad58b8076fbc56e46121810512",
      "tree": "303b4d6a8fc409b7465d55c62e99c986a1bb5998",
      "parents": [
        "929a452ccff5b1bc5ad3b8846107285ebaa20639"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Thu Aug 27 22:21:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 22:21:46 2026"
      },
      "message": "ui: Add v58.3 changelog entry (#7260)\n\nCopy changelog version bump onto main to keep branches in sync."
    },
    {
      "commit": "929a452ccff5b1bc5ad3b8846107285ebaa20639",
      "tree": "bf7b297d66235df534c9c752780a88fb4d62683d",
      "parents": [
        "c735cd562eebc658c302a4f14019b7a96677c202"
      ],
      "author": {
        "name": "Safayat Ullah",
        "email": "safayat@google.com",
        "time": "Thu Aug 27 21:17:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 21:17:45 2026"
      },
      "message": "tp: expose recovered trace info in metadata and trace_medata metric (#7258)\n\n- add `trace_recovery_reason` in metadata table\n- add `trace.metrics.trace_metrics.trace_metadata.trace_recovery_reason`\n   in trace summaries and telemetry pipelines\n\nTest: out/linux_clang_debug/perfetto_unittests \\\n      --gtest_filter\u003d\"ProtoTraceParserTest.RecoveredTraceInfo*\""
    },
    {
      "commit": "c735cd562eebc658c302a4f14019b7a96677c202",
      "tree": "ae0e4072cf5e5168405b14af0c89e53c5fa06994",
      "parents": [
        "24d85b7ef7123cb7a60fd04d2c3b4d84af4c0b9d"
      ],
      "author": {
        "name": "copybara-service[bot]",
        "email": "56741989+copybara-service[bot]@users.noreply.github.com",
        "time": "Thu Aug 27 20:04:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 20:04:50 2026"
      },
      "message": "Copybara import from Chromium: proto and stdlib changes (#7137)\n\nCopybara import from Chromium: proto and stdlib changes\n\n- 8f9573ac59e3298bbeeabbcad8fd30e4997ade22 Ignore FrameReplicationState\nupdates from speculative RFHs by Arthur Sonzogni\n\u003carthursonzogni@chromium.org\u003e\n\nCOPYBARA_IMPORT\u003dProject import generated by Copybara.\n\nGitOrigin-RevId: 8f9573ac59e3298bbeeabbcad8fd30e4997ade22\n\nCo-authored-by: Perfetto Team \u003ccopybara-servicebot@google.com\u003e"
    },
    {
      "commit": "24d85b7ef7123cb7a60fd04d2c3b4d84af4c0b9d",
      "tree": "d06db2cf011e0f83b3ab5b1443a9771234b0d44e",
      "parents": [
        "f63562679d5e80fb5b133ffbd68004b800107189"
      ],
      "author": {
        "name": "etiennep-chromium",
        "email": "etiennep@chromium.org",
        "time": "Thu Aug 27 17:24:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 17:24:58 2026"
      },
      "message": "Disable failing tests on windows (#7259)\n\nChromium-\u003eperfetto roll is failing:\nhttps://chromium-review.git.corp.google.com/c/chromium/src/+/8306119?tab\u003dchecks\n\nhttps://ci.chromium.org/ui/p/chromium/builders/try/win-rel/1667017/overview\nBecause these tests are failing on windows:\nTraceRedactorTest.MultiPassPipelineExecution\nTraceRedactorTest.SinglePassAppendsAugmentAtEnd\nTraceRedactorTest.ThreePassPipelineExecution\n\nThis PR disables the tests on Windows to unblock roll."
    },
    {
      "commit": "f63562679d5e80fb5b133ffbd68004b800107189",
      "tree": "a7d820aeef33f14182b03be308529e9a6d958ad7",
      "parents": [
        "51d2b374eb26b1f2d7edb9bc65d4cd87ac337c9d"
      ],
      "author": {
        "name": "Parth Sane",
        "email": "parthsane@gmail.com",
        "time": "Thu Aug 27 16:57:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 16:57:21 2026"
      },
      "message": "tp: add android process state and freezer dump parsing (#6907)\n\nUpdate frameworks_base_trace_packet.proto from upstream Android tree and\nadd Trace Processor parsing for trace-stop dumps.\n\nSpecifically, this adds:\n  - AndroidProcessStateSnapshot message and nested Record message:\n- pid (1), uid (2), proc_state (3), oom_score (4), capability_flags (5)\n  - AndroidFreezerStateSnapshot message and nested Record message:\n- pid (1), freeze_unfreeze_time (2), process_name (3), isFreezeSticky\n(4)\n  - FrameworksBaseTracePacket extensions:\n    - android_process_state (1003)\n    - android_freezer_state (1004)\n- AndroidProcessDumpModule to parse fields 1003 and 1004, handling\nProtoOutputStream zero-value omissions for proc_state and\ncapability_flags by defaulting to 0 when omitted."
    },
    {
      "commit": "51d2b374eb26b1f2d7edb9bc65d4cd87ac337c9d",
      "tree": "ab8010eddb25f8f4db1df38f560e2096d831940e",
      "parents": [
        "afe01734062520f912796a9feb134cbf43b587b2"
      ],
      "author": {
        "name": "Primiano Tucci",
        "email": "primiano@google.com",
        "time": "Thu Aug 27 15:39:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 15:39:22 2026"
      },
      "message": "docs: Replace GN+ninja with a build.mjs for perfetto.dev (#7256)\n\nThis is in preparation for RFC-0047.\n\ninfra/perfetto.dev builds the static perfetto.dev site.\nToday the entry points (run-dev-server → build → build.js)\nare a thin driver around gn gen --args\u003denable_perfetto_site\u003dtrue\n+ ninja site, with the real build graph in a 478-line\ninfra/perfetto.dev/BUILD.gn that expands to ~155 targets.\nAlmost all of them one node markdown_render.js process per\nmarkdown file: 127 docs + 14 redirect stubs + toc + index +\nreadme + 5 generated reference pages.\n\nThis has become annoying for concrete reasons:\n\n- A dead link kills the dev server: assertNoDeadLink() throws -\u003e\nexit(1).\n - ~155 node process spawns per build, each re-requireing\n    marked + highlight.js + ejs.\n - Every watch event runs a full gn gen (which parses the entire\n   Perfetto build graph, C++ included) plus ninja site.\n  No debounce, so a multi-file save fires several in a row.\n - build.js:44 rm -rfs the out dir on every invocation, so there\n   is no such thing as an incremental docs build today.\n - No live reload. Manual browser refresh after every edit.\n- Gen-time globbing in 3 places means adding/removing a doc needs a\nfresh gn gen (documented\n   as a WARNING in BUILD.gn).\n - gen_search_index globs target_gen_dir for generated .md it\ndoesn\u0027t declare as inputs, a documented stale-index bug (BUILD.gn:416).\n\n Three findings that make this tractable:\n\n 1. Zero C++/protoc/descriptor dependency. gen_proto_reference.js\n    parses .proto source text with protobufjs; gen_stats_reference.js\n    regexes stats.h; the two upstream JSON producers\n    (tools/gen_tp_table_docs.py, tools/gen_stdlib_docs_json.py)\n    are plain Python over source files.\n    GN is a task runner here, nothing more.\n 2. The one GN-specific mechanism is vestigial.\n    stdlib_json_docs uses a GN generated_file metadata walk over\n    49 BUILD.gn files to collect 257 .sql paths, but\n    tools/gen_stdlib_docs_json.py only uses that list for\n    os.path.commonpath(), then os.walks the directory itself.\n    ui/build.mjs:621 already calls it directly with a plain recursive\n    file listing.\n 3. ui/ already did this migration. ui/BUILD.gn is now a stub printing\n    a deprecation banner and shelling out to ui/build.mjs,\n    which has a working SSE /live_reload endpoint to copy.\n\nOutcome\nOne in-process Node build, no GN/ninja, content-hash incrementality,\nand a dev server with live reload and an error overlay.\n\nNon-goals\n - No change to URL shape.\n - No dependency bumps. marked@4 and highlight.js@10 stay pinned\n   so the migration can be verified byte-for-byte against the\n   current output.\n - No rewrite of the ~1,700 lines of Perfetto-specific rendering.\n   All 7 marked renderer hooks, the 5 generators, the BM25\n   indexer and the dead-link checker are moved, not rewritten.\n\nInterfaces that must not break\n- infra/perfetto.dev/build keeps its CLI (--out, --watch/-w, --serve/-s,\n   --verbose/-v) — used by run-dev-server, docs/run-dev-server, and\n   .github/workflows/repo-checks.yml:68.\n - It must keep producing out/perfetto.dev/site/ containing everything\n   deploy asserts before rsync\n - Dead links must remain a hard build failure in non-serve\n   mode (presubmit guarantee).\n\nTest:\n0 diffs in the generated out/perfetto.dev/ site other than the change i\ndid\nto swap cs.chromium with github links"
    },
    {
      "commit": "afe01734062520f912796a9feb134cbf43b587b2",
      "tree": "f1d9d8138d8e11f509fc812515c20d557869de45",
      "parents": [
        "6c7c42a9110efecf5a08ee481394106a469bdb34"
      ],
      "author": {
        "name": "Ion",
        "email": "ivanterescheenko@gmail.com",
        "time": "Thu Aug 27 14:40:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 14:40:56 2026"
      },
      "message": "docs: fix the pprof collection instructions (#7254)\n\nThe \"How to Generate\" steps for pprof end with:\n\n\u003e This will collect a 30-second CPU profile and open it in the pprof\ntool. You\n\u003e can then save the profile to a file using the `save` command in the\npprof\n\u003e tool.\n\n`save` is not a pprof command. On Go 1.26.2, against a real\n`net/http/pprof`\nserver:\n\n```\n(pprof) save\nunrecognized command: \"save\"\n```\n\nTwo things actually work, and the section now says both:\n\n* `curl -o cpu.pprof\n\u0027http://localhost:6060/debug/pprof/profile?seconds\u003d30\u0027` —\n  the file imports directly.\n* `go tool pprof \u003curl\u003e` already saves the profile before it drops into\n  interactive mode and prints where it put it\n(`Saved profile in\n/Users/…/pprof/pprof.\u003cbinary\u003e.samples.cpu.001.pb.gz`), so\n  no extra step is needed at all. If you want it somewhere specific, the\n  interactive command is `proto`, not `save`:\n  `(pprof) proto \u003ecpu.pprof`.\n\nAll three files were fed to `trace_processor_shell` and import fine\n(10-16\nsamples over a 5-30 s window, 36 callsites), which is also why the\nsection now\nmentions that the profile is gzip-compressed and needs no decompression\n— that\ntripped me up first.\n\nThe `perf_to_profile` invocation in the same section is correct —\nupstream\u0027s\nusage string is\n`Usage: perf_to_profile -i \u003cinput perf data\u003e -o \u003coutput profile\u003e [-f]` —\nso it\nis left untouched. Mentioning it as a control: this section is not wrong\nsystematically, just in that one sentence.\n\n**Testing:** `tools/run_presubmit` — Succeeded. Docs-only change."
    },
    {
      "commit": "6c7c42a9110efecf5a08ee481394106a469bdb34",
      "tree": "3f33c094a859787a4e284214e89b78074688175c",
      "parents": [
        "50152836fc4604e9ea488e360bb09d3970ab7ab9"
      ],
      "author": {
        "name": "dragosp95",
        "email": "dragosp@google.com",
        "time": "Thu Aug 27 14:08:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 14:08:13 2026"
      },
      "message": "proto_merger: Add a new extension merger tool (#7247)\n\nAs part of the automatization of support for the internal logs proto for\nextensions we are building a tool that can merge all extensions for\ntargets TracePacket, TrackEvent and InternedData.\n\n---------\n\nCo-authored-by: BogdanLionte \u003cbgdn@google.com\u003e"
    },
    {
      "commit": "50152836fc4604e9ea488e360bb09d3970ab7ab9",
      "tree": "ebc4655b1dc0c04711bb8f3b1c5c810d3610f665",
      "parents": [
        "15161eb3a987360eaf0bb8145222286da3ef0931"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Aug 27 12:33:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 12:33:25 2026"
      },
      "message": "ui: offer ART heap dumps as pprof from the flamegraph export menu (#7240)\n\ntraceconv can convert a Java heap graph to pprof, but the UI only ever\nasked it for allocator profiles, so ART heap dumps had no pprof export\nat all. Map each profile type to the flag traceconv expects rather than\nhardcoding --alloc.\n\nThe download also sat in a button of its own beside the snapshot time,\nleaving two unrelated download affordances in one panel. Fold it into\nthe flamegraph\u0027s Export menu, which grows a way for a host to contribute\na download the widget cannot build from the data it is showing.\n\nThat export comes from traceconv reading the whole trace, so nothing the\ntree explorer does to the displayed tree reaches it. Say so under the\nmenu entry. Drop the entry for area selections, whose time range does\nnot name a snapshot traceconv can convert."
    },
    {
      "commit": "15161eb3a987360eaf0bb8145222286da3ef0931",
      "tree": "159e86a86a0e1309a4745061ca3ea1550486adeb",
      "parents": [
        "48d9b9a0f6d6729dbb5a78033230c91c31bb769b"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitmaganti@gmail.com",
        "time": "Thu Aug 27 12:04:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 12:04:26 2026"
      },
      "message": "ui: read traceconv output through the exported FS entry points (#7239)\n\nClosure Compiler renames the properties of the emscripten filesystem\nnodes, so node.contents and node.usedBytes both read back undefined in a\nrelease build. Every conversion therefore threw while collecting its\nresult, after traceconv had already done the work and written the file\nout. The pprof download failed this way for every profile type.\n\nThe worker knew half of this already: it calls FS_mkdir rather than\nFS.mkdir because the methods of module.FS are renamed too. The nodes\nthose exported functions hand back are just as minified. Export\nFS_readFile and FS_readdir and read everything through them, so no\nminified property is reachable from here at all.\n\nProfiles also landed in a directory named after the wall clock plus a\nrandom suffix, which left the worker guessing at names under /tmp. Ask\ntraceconv for a directory we choose, create it up front so it can be\nlisted even when nothing matched the request, and keep the file names\ntraceconv gave the profiles."
    },
    {
      "commit": "48d9b9a0f6d6729dbb5a78033230c91c31bb769b",
      "tree": "74ee56fb6408f1e8560ff78cc87c61d952ce92a1",
      "parents": [
        "259f7dde1e2f78d32db9cda253a2466002172437"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitmaganti@gmail.com",
        "time": "Thu Aug 27 12:04:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 12:04:26 2026"
      },
      "message": "traceconv: fail loudly when profile conversion fails (#7238)\n\nTraceToProfile discarded TraceToPprof\u0027s return value, and the Java heap\npath had no way to report a failed query in the first place: it logged,\nreturned an empty location tracker, and let the caller build a profile\nout of nothing. A failed conversion therefore wrote a file holding only\nsample types and reported success.\n\nAn empty file that claims to be your heap dump is worse than an error,\nso propagate the failure instead."
    },
    {
      "commit": "259f7dde1e2f78d32db9cda253a2466002172437",
      "tree": "3ec524b86b4b7e53466c5311d48109d242a773eb",
      "parents": [
        "5906ced0f94b372d26471df34bb1f8248b7cecde"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitmaganti@gmail.com",
        "time": "Thu Aug 27 12:04:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 12:04:25 2026"
      },
      "message": "tp: build flamegraphs whose frames are all unnamed (#7237)\n\nA heap graph whose class names were all stripped yields a name column\nholding nothing but nulls. The tree layer types that column Null rather\nthan String, and the flamegraph builder demanded String, so the whole\nflamegraph was rejected as an invalid configuration.\n\nThe data is perfectly renderable: the UI already coalesces the missing\nnames to \"unknown\". Rejecting it instead silently reduced traceconv\u0027s\nJava heap pprof for those traces to a profile with no samples in it.\n\nAccept a Null name column, as aggregate columns already do. The builder\nand experimental_flamegraph must then both avoid reading the payload a\nNull column does not have."
    },
    {
      "commit": "5906ced0f94b372d26471df34bb1f8248b7cecde",
      "tree": "1c61e5b24e3619c4ffdb6ea79e7b3ce32dbcdc55",
      "parents": [
        "04e355b2a91c3e8808662b6f768c12bbb9ebafa5"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Aug 27 12:01:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 12:01:30 2026"
      },
      "message": "tp: remove recursive Perfetto SQL functions (#7244)\n\nThey were never used in practice and/or achieved popularity and slow\ndown non-recursive functions. There\u0027s also a subtle UAF (see\nb/552636369).\n\nFix it by just removing support for them altogether."
    },
    {
      "commit": "04e355b2a91c3e8808662b6f768c12bbb9ebafa5",
      "tree": "8e8fc42f3d74d3e26dd7f8c1961fdaa8d58dca54",
      "parents": [
        "3f5add45048c1380f2e52571aa16840bc6b70a3d"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Thu Aug 27 11:20:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 11:20:51 2026"
      },
      "message": "ui: Make widget attrs properties readonly (#7250)\n\nSmall code tidy-up - should be a no-op.\n\n- Prepend readonly to all members of *Attrs interfaces under\n  ui/src/widgets.\n- Convert embedded functions in *Attrs interfaces to arrow functions\n  so that they can also be marked readonly."
    },
    {
      "commit": "3f5add45048c1380f2e52571aa16840bc6b70a3d",
      "tree": "d79745396ae9f5e93c034c31ecccf1cfd8614744",
      "parents": [
        "614887373845835c853b5d8384237bb07bab1a9a"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Aug 27 11:03:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 11:03:59 2026"
      },
      "message": "perfetto: fix tempfile behavior on Windows tests (#7236)\n\nWe were manually doing unlink/remove before. Fix this properly by adding\nthe necessary flag to tempfile to prevent this once and for all"
    },
    {
      "commit": "614887373845835c853b5d8384237bb07bab1a9a",
      "tree": "d51eb5dfb8ef092a67bdf36d7610c3c5bbf85863",
      "parents": [
        "4afce7d4bcb9d36c1ed73d69f608f2967614a69a"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Thu Aug 27 11:03:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 11:03:36 2026"
      },
      "message": "ui: make a bunch of UI plugins multi-machine aware (#7243)\n\nThere\u0027s a lot of plugins which are not correctly dealing with\nmulti-machine traces. Update them all to deal with the machine\nlabels/indexes properly."
    },
    {
      "commit": "4afce7d4bcb9d36c1ed73d69f608f2967614a69a",
      "tree": "b51d43254815335a41c16b797ac64c75fa768ce5",
      "parents": [
        "517010ae5ee3812ec3be1be58c41b4d27c6cd878"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Thu Aug 27 09:48:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 09:48:09 2026"
      },
      "message": "uI: Fix permalinks failing to open when a single selection is present (#7248)\n\nDetails panel was marked as non-optional, but most selections don\u0027t\ninclude any details panel information.\n\nThis patch simply makes the details panel optional, and adds some unit\ntests to check for regressions.\n\nFixes: https://buganizer.corp.google.com/issues/553298786"
    },
    {
      "commit": "517010ae5ee3812ec3be1be58c41b4d27c6cd878",
      "tree": "29dfa3ef738d8e3ae8583f4df650e41b5c9e8aba",
      "parents": [
        "d3797cdf79540a73ba772cfdac91e63dd7622b7a"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Thu Aug 27 09:19:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 09:19:02 2026"
      },
      "message": "ui: Add setting to default to flamegraph tab in Heap Dump Explorer (#7246)\n\nAdd a boolean setting that makes the flamegraph tab open by default in\nthe heap dump explorer page"
    },
    {
      "commit": "d3797cdf79540a73ba772cfdac91e63dd7622b7a",
      "tree": "ec919eae41cd11f2d2a80672eb7dce86c1a30cb3",
      "parents": [
        "99202d6a27564aaafb1dce287908046a4202f41e"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Thu Aug 27 09:18:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 09:18:46 2026"
      },
      "message": "ui: Move Memscope settings registration to onActivate (#7245)\n\nThis makes these settings available before a trace is loaded so that\nlinks like\nhttps://ui.perfetto.dev/#!/settings/dev.perfetto.OpenMemoryOverviewByDefault\nactually work properly."
    },
    {
      "commit": "99202d6a27564aaafb1dce287908046a4202f41e",
      "tree": "149d37657a51cf5da235d57db0f76d201cb37506",
      "parents": [
        "dce739f560c55a201819c6613d5bcae97ff31fe2"
      ],
      "author": {
        "name": "sanath099",
        "email": "sanath099@gmail.com",
        "time": "Wed Aug 26 18:48:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 18:48:08 2026"
      },
      "message": "ui: Fix Day Explorer flamegraph root selection for selected tracks (#7187)\n\nPreviously, computeDayExplorerFlameGraph traversed recursively upwards\nthrough ancestors to top-level roots (`on`, `off`, `[Label] ...`). This\ncaused top-level table roots to always render at Depth 1 in the\nflamegraph, nesting the user\u0027s selected track deep within the hierarchy.\n\nThis patch removes the `ancestors` and `all_nodes` CTEs and restricts\nthe recursive hierarchy query to `descendants` only. As a result, the\nselected tracks correctly become the Depth 1 roots of the flamegraph\nwith their subtrees nested underneath. Also changes the descendants\nrecursive step from UNION ALL to UNION to prevent duplicate nodes on\noverlapping selections.\n\nBug: 482033855"
    },
    {
      "commit": "dce739f560c55a201819c6613d5bcae97ff31fe2",
      "tree": "619a61fbd91ad15629d8a20029c2d632b6eff6b8",
      "parents": [
        "c6df89399f57c0ec15cc029d88ce2218b1cd784e"
      ],
      "author": {
        "name": "Edgar Arriaga",
        "email": "edgararriaga@google.com",
        "time": "Wed Aug 26 17:47:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 17:47:10 2026"
      },
      "message": "Fix unit tests failing on windows when redactor writes into temporary files already created (#7234)\n\nMade the files be created by the redactor for the output file and used\nbase::TempDir which seems to be the standard way its done in other tests"
    },
    {
      "commit": "c6df89399f57c0ec15cc029d88ce2218b1cd784e",
      "tree": "67ff3901c70de062714d0f36aee0781a19d1da6c",
      "parents": [
        "4490570a846dc555becd0ef87e9a7dfde484dd08"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Wed Aug 26 17:00:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 17:00:29 2026"
      },
      "message": "ui: Drop legacy eslint-config-google and @eslint/eslintrc (#7232)\n\neslint-config-google is archived and in maintenance mode, and required\nthe @eslint/eslintrc FlatCompat shim to work with ESLint\u0027s flat config.\nThis legacy shim pulled in js-yaml, which has reported security\nvulnerabilities.\n\nAlmost all rules in eslint-config-google were formatting/whitespace\nrules that are already handled by Prettier or explicitly disabled. This\nchange inlines the relevant semantic Google rules directly into\neslint.config.js and removes @eslint/eslintrc, eslint-config-google, and\nthe transitive js-yaml dependency. Also bump eslint to latest.\n\nFixes: https://github.com/google/perfetto/security/dependabot/344"
    },
    {
      "commit": "4490570a846dc555becd0ef87e9a7dfde484dd08",
      "tree": "91e505166626ea9c3091841f3c51447d08710fe0",
      "parents": [
        "9f68be9823d46c2e252841ea68e8e587bc15b5e0"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Wed Aug 26 16:48:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 16:48:31 2026"
      },
      "message": "ui: memscope: Don\u0027t truncate frames in native callstack snippet table (#7231)\n\nRemove the aggressive 60-character truncation on individual stack frame\nnames in the top allocation call-stacks table in the memory overview\nlanding page.\n\nBefore:\n\u003cimg width\u003d\"976\" height\u003d\"322\" alt\u003d\"image\"\nsrc\u003d\"https://github.com/user-attachments/assets/ea3893cb-6d08-4317-b200-77f0b7b5ab73\"\n/\u003e\n\nAfter:\n\u003cimg width\u003d\"1079\" height\u003d\"322\" alt\u003d\"image\"\nsrc\u003d\"https://github.com/user-attachments/assets/a747d415-f96e-4d2a-97c5-72422563d3f9\"\n/\u003e"
    },
    {
      "commit": "9f68be9823d46c2e252841ea68e8e587bc15b5e0",
      "tree": "1253e7cbbe90bdfb651ef8d4d59036d0fe25c8d7",
      "parents": [
        "128d580b9fbd159fce0f34e4321236dc27c65e4a"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Wed Aug 26 16:18:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 16:18:18 2026"
      },
      "message": "perfetto_sql: add reusable semantic analysis (#7219)"
    },
    {
      "commit": "128d580b9fbd159fce0f34e4321236dc27c65e4a",
      "tree": "7001d3a0c96ab7a23868a265624566c54408a6a5",
      "parents": [
        "5739344741e4b881952a2786f67355eefe0a2c8d"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Wed Aug 26 14:47:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 14:47:46 2026"
      },
      "message": "ui: Fix memscope process profitability false negatives. (#7228)\n\nIn memscope, a process can be profiled if it has the profiled flag set\nin its manifest or the user is running a userdebug or eng build. However\nthe current way of detecting the build type is poorly implemented and\nmisses eng builds.\n\n- Improve Android fingerprint parser to improve userdebug detection and\nto detect eng builds too + add some unit tests.\n- Don\u0027t block the user from attempting to profile what we suspect are\nnon-profilable processes - just show a warning but still allow the user\nto click through and start profiling."
    },
    {
      "commit": "5739344741e4b881952a2786f67355eefe0a2c8d",
      "tree": "cdb99626c29fdb28cc0fc11141fd3ae398ea8a2a",
      "parents": [
        "0c0d907cba964ef101b64342a6f3976b731a237c"
      ],
      "author": {
        "name": "Antoine du Hamel",
        "email": "duhamelantoine1995@gmail.com",
        "time": "Wed Aug 26 14:03:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 14:03:49 2026"
      },
      "message": "build: add `perfetto_use_system_zstd` flag (#7220)\n\nSimilar to https://github.com/google/perfetto/pull/7217, I was working\non the 57.2 branch, and realized when trying to update to 58.2 that zstd\nneeds the same treatment."
    },
    {
      "commit": "0c0d907cba964ef101b64342a6f3976b731a237c",
      "tree": "413c5da3518eebe3898daa11419440a87c5308e5",
      "parents": [
        "189a0de0b72178cc3dd6af4b768ddcf2acae8331"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Wed Aug 26 14:02:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 14:02:17 2026"
      },
      "message": "tp: speed up ART hprof import and cut its peak memory (#7227)\n\nLoading a heap dump spends nearly all of its time after the last byte\nhas\nbeen read, which is why the UI sits at 100% for so long. Profiling an\n82MB dump (~1M objects, 1.9M references) showed the cost is not in\nparsing the file but in the object model built before anything reaches\nthe tables: a std::string for every field and reference name, copied per\nobject; a hash map keyed on hprof id whose values were ~250 byte\nobjects,\nso every probe and every rehash touched the whole payload; and several\ncopies of every instance and array payload.\n\nNames are now interned once per class and carried as StringId, so the\nreachability walk compares ids instead of strings and populating the\ntables interns nothing. Objects live in a flat vector with a side index,\nand references store the target\u0027s index, which turns following an edge\ninto an array lookup. Instance data and object array element ids are\nread\nas views onto the trace rather than copied, and field values are decoded\nfrom those bytes on demand instead of being materialised as a Field per\ninstance. Array payloads keep their own exactly sized buffer: they\noutlive the import, and a view would pin whichever trace chunk it points\ninto for the rest of the session.\n\nobject_data_id becomes a dense null column. It is set for almost every\nobject, and each write to a sparse null column memmoves the tail of the\ncolumn, which alone accounted for a fifth of the import.\n\nImport of the 82MB dump goes from 3.0s to 0.77s and peak RSS from 1.41GB\nto 590MB. Table contents are unchanged; object rows are now numbered in\ndump order rather than hash order."
    },
    {
      "commit": "189a0de0b72178cc3dd6af4b768ddcf2acae8331",
      "tree": "58cfba8f85f25cafc54707340fc263c475a8e206",
      "parents": [
        "265ab311159268f5ab8158159c93dc3130c29b7d"
      ],
      "author": {
        "name": "Nicolò Mazzucato",
        "email": "nicomazz@google.com",
        "time": "Wed Aug 26 13:20:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 13:20:32 2026"
      },
      "message": "Eliminate cuj_id remapping in android_jank_latency_cujs (#7216)\n\nIn android_jank_latency_cujs, remove the ROW_NUMBER() OVER (...)\nremapping and original_cuj_id column. Instead, make the table a direct\nUNION ALL of android_sysui_jank_cujs and android_sysui_latency_cujs,\npreserving the original cuj_id from the underlying jank and latency\nsources.\n\nThis ensures that only one place generates row_number() for Jank CUJs\n(_jank_cujs_slices) and only one place generates row_number() for\nLatency CUJs (android_sysui_latency_cujs). Duplicated cuj_id values\nacross jank and latency rows in android_jank_latency_cujs are permitted.\n\nIf anyone does join on the table containing both latency and jank cujs,\nthey are expected to also join on the cuj_type.\n\n---- \n\nfully human part: In practise, this was not really an issue for jank\ncujs, even if they were accessed from `android_jank_latency_cujs`.. What\nwas happening in `android_jank_latency_cujs` was that jank cuj were\nkeeping the existing id, while latency cujs were remapped after them. We\ndidn\u0027t really notice the problem as most of the infra we have is for\njank cujs, and not for latency ones. In the blocking calls, the cuj id\nwas not really used anywhere."
    },
    {
      "commit": "265ab311159268f5ab8158159c93dc3130c29b7d",
      "tree": "523e27f2728a52d7acb666b4be0658144352ec33",
      "parents": [
        "40fa6254ce5e83a5899ffd9e084f17548681e340"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Wed Aug 26 12:42:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 12:42:49 2026"
      },
      "message": "tp: avoid using heap_graph_object when heap_graph would do the job (#7225)\n\nSince we introduced the heap_graph table as the denormalized table to\nkeep track of information about heap graphs, we should just use it when\nlooking for information about the number/ts/upid etc of the heap dump."
    },
    {
      "commit": "40fa6254ce5e83a5899ffd9e084f17548681e340",
      "tree": "69445c75855ed85f8073e1d04b87fd0fa67a8a97",
      "parents": [
        "e698e3903870da0317511334ee21d3ae830ecd66"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Wed Aug 26 10:19:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 10:19:54 2026"
      },
      "message": "ui: split postMessage trace sharing/downloading into shareable + downloadable (#7045)\n\nSplit the postMessage `localOnly` flag into two independent properties:\n`shareable` and `downloadable`.\n\n- `shareable` gates **UI-side external sharing only**: whether the UI\nmay\n  re-share the trace to a third party (e.g. upload it to GCS as a\n  permalink). It says nothing about how the sender itself distributes\n  the trace.\n- `downloadable` gates whether the trace may be downloaded to disk.\n\nSenders can now opt into each capability separately. Backward compat:\n`localOnly` is still accepted on the wire and translated — `localOnly:\nfalse` sets both flags to true, anything else (or absent) sets both to\nfalse. Explicit `shareable`/`downloadable` fields take precedence over\nthe legacy field.\n\nChanges:\n- `PostedTrace` / `TraceArrayBufferSource`: `localOnly` → `shareable` +\n  `downloadable` (both default to true when unset for non-postMessage\n  sources such as recordings).\n- `TraceInfo`: new `shareable` field; `downloadable` now derives from\nthe\n  source flag.\n- Share flow (`isShareable`) gates on `shareable` instead of\n  `downloadable`.\n- Trace cache stores both flags, falling back to the legacy\n  `x-trace-local-only` header for entries written by older versions.\n- Error dialog no longer offers to upload traces the sender did not\n  allow sharing."
    },
    {
      "commit": "e698e3903870da0317511334ee21d3ae830ecd66",
      "tree": "dd020e0ee2a4c2990472439324e4247755187bd2",
      "parents": [
        "07fc104cc2e43e0af5776b088157b499df668d5c"
      ],
      "author": {
        "name": "Antoine du Hamel",
        "email": "duhamelantoine1995@gmail.com",
        "time": "Wed Aug 26 08:48:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 08:48:26 2026"
      },
      "message": "build: add `perfetto_use_system_re2` flag (#7217)\n\nI\u0027m trying to package Perfetto into NixOS / nixpkgs\n(https://github.com/NixOS/nixpkgs/pull/553888), and one of the\nrequirement on that system is that downloading things at build time is\nnot allowed, so I\u0027d need a flag to use the system re2.\n\nGiven the patch is simple enough, I figured I should send it upstream\nrather than floating it on Nix end."
    },
    {
      "commit": "07fc104cc2e43e0af5776b088157b499df668d5c",
      "tree": "f358635dc795e1cda5eb2d5e48be6200314e2094",
      "parents": [
        "4d0f73105724aac31f630f96343a8d6a162a7256"
      ],
      "author": {
        "name": "BogdanLionte",
        "email": "bogdan.lionte1997@gmail.com",
        "time": "Wed Aug 26 07:03:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 07:03:31 2026"
      },
      "message": "proto_merger: fix map field serialization and skip synthetic map entries (#7211)\n\nIn protobuf descriptors, map fields report is_repeated() as true and\ncreate synthetic MapEntry nested messages. Exclude map fields from\nis_repeated to prevent serializing them with a \u0027repeated\u0027 label, and\nskip map_entry messages when collecting nested messages."
    },
    {
      "commit": "4d0f73105724aac31f630f96343a8d6a162a7256",
      "tree": "a591c8f4a943cf5c8e7833ed60add8d384094685",
      "parents": [
        "0bc40adc02df3d43156fc5fed28482637bea6f68"
      ],
      "author": {
        "name": "Adil Burak Şen",
        "email": "56400880+adilburaksen@users.noreply.github.com",
        "time": "Tue Aug 25 23:14:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 23:14:30 2026"
      },
      "message": "trace_processor: reject overflowing offset+length in TraceBlobViewReader::SliceOff (#6517)\n\n**trace_processor: reject overflowing offset+length in\nTraceBlobViewReader::SliceOff**\n\n`TraceBlobViewReader::SliceOffImpl` bounds-checks a requested slice with\n`offset + length \u003c\u003d ...` (fast path)\nand `offset + length \u003e end_offset_`, computing `offset + length` in\n`size_t` without checking for overflow.\n\nA caller can pass an attacker-controlled `offset`. For example the\nperf.data importer reads each attrs\n`ids` section as a `PerfFile::Section {uint64 offset, uint64 size}`\ndirectly from the file and validates only\nthat `ids.size` is a multiple of 8 (`perf_data_tokenizer.cc`), then\ncalls `SliceOff(ids.offset, ids.size)`.\nWith `offset + length` wrapping past `2^64`, the sum becomes a small\nvalue that spuriously passes the\nfast-path check. `SliceOff` then returns a `TraceBlobView` pointing\noutside the backing buffer\n(`TraceBlobView::slice_off` only `DCHECK`s, which is compiled out in\nrelease builds), and the subsequent\n`Reader::ReadVector`/read performs an out-of-bounds heap access.\n\nReject `offset`/`length` pairs whose sum overflows, before the bounds\nchecks. This fixes the issue for every\nimporter that reaches `SliceOff` with a file-controlled offset, not just\nperf.data."
    },
    {
      "commit": "0bc40adc02df3d43156fc5fed28482637bea6f68",
      "tree": "cb4d59b4f96bd3dc70c30d5074add5576c1f8c34",
      "parents": [
        "3e1b29a3cd95a21ca68e2fb0742e735c5391c0a7"
      ],
      "author": {
        "name": "sanath099",
        "email": "sanath099@gmail.com",
        "time": "Tue Aug 25 16:32:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 16:32:43 2026"
      },
      "message": "tp: allow scalar \u003c-\u003e enum extension transitions in DescriptorPool (#7185)\n\nWhen merging an incoming FileDescriptorSet (such as on-device\nExtensionDescriptor packets emitted during trace recording), an\nextension field may transition between a scalar integer (e.g. int32) and\nan enum. Both share the same protobuf wire type (kVarInt) and decode\nidentically.\n\nHowever, CheckExtensionField previously checked if the incoming field\nwas a message or enum (is_msg_or_enum), but neglected to verify whether\nthe existing field was also a message or enum. As a result, when an\nint32 extension field (with an empty raw_type_name) was re-declared as\nan enum, it queued a deferred structural check with an empty\nexisting_raw_type. In the fourth pass, this triggered an assertion abort\nin ResolveShortType:\nPERFETTO_CHECK(!short_type.empty()).\n\nFix this by ensuring deferred structural compatibility checks are only\nenqueued when both fields are messages or both fields are enums. Also\ndefensively guard the fourth pass in AddFromFileDescriptorSet against\nempty type names.\n\nBug: 494586279\nTest: perfetto_unittests --gtest_filter\u003d\"DescriptorsTest.*\""
    },
    {
      "commit": "3e1b29a3cd95a21ca68e2fb0742e735c5391c0a7",
      "tree": "b517d23917a82b876d8af24967e0a8cc22d1b3f1",
      "parents": [
        "37aabef7286f6406c0fa1488235cacd13334fe30"
      ],
      "author": {
        "name": "Edgar Arriaga",
        "email": "edgararriaga@google.com",
        "time": "Tue Aug 25 16:25:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 16:25:00 2026"
      },
      "message": "Add multi-pass redactor support and implement process tree merging with it (#6979)\n\nThe process tree merging achieves trace savings of 12.2% of redacted\ntrace size on average.\n\nInternal tracking bug b/539590970"
    },
    {
      "commit": "37aabef7286f6406c0fa1488235cacd13334fe30",
      "tree": "b068fcbb19074ef64861a3eb29302c17a3477a36",
      "parents": [
        "5dbeaad4ceb91470a835426b52e0cb43a3e5ef10"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Tue Aug 25 16:23:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 16:23:58 2026"
      },
      "message": "tools: move pfsql out of trace processor (#7218)\n\nMove pfsql into src/tools and extract the reusable PerfettoSQL\nparser and intrinsic macro expansion code into src/perfetto_sql.\nThis keeps offline SQL analysis separate from the Trace Processor\nruntime while allowing both consumers to share the language frontend.\n\nAdd a presubmit check that prevents targets outside\nsrc/trace_processor from depending on Trace Processor internals.\nDependencies on src/trace_processor/util and explicitly grandfathered\nexisting edges remain allowed."
    },
    {
      "commit": "5dbeaad4ceb91470a835426b52e0cb43a3e5ef10",
      "tree": "3caf18e87c0ff39a164a3cd3eb21b32f0b8eb6d9",
      "parents": [
        "f6b82160edd1eec08b3260691a8a1dc515fe5408"
      ],
      "author": {
        "name": "pohengshen",
        "email": "pohengshen@google.com",
        "time": "Tue Aug 25 15:12:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 15:12:45 2026"
      },
      "message": "ftrace: Update sched_wakeup_task_attr event format (#7209)\n\nAdd sched_qos_user_defined_flag, rampup_multiplier,\neffect_rampup_multiplier, and tag_nice fields to the\nsched_wakeup_task_attr ftrace event.\n\nBug: 552311774\n\nWelcome to Perfetto!\nMake sure your PR has a bug/issue attached or has at least\na clear description of the problem you are trying to fix.\n\nFor more details please see\nhttps://perfetto.dev/docs/contributing/getting-started"
    },
    {
      "commit": "f6b82160edd1eec08b3260691a8a1dc515fe5408",
      "tree": "83c4544bcb7c1795450592a6fb1d670368462796",
      "parents": [
        "f3f49b118c3b530557da99d6dba6051d60385c2d"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Tue Aug 25 13:50:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 13:50:33 2026"
      },
      "message": "ui: remove redundant flamegraph highlight Hide button (#7199)\n\nThe Highlight toggle already closes the controls while preserving an\nactive highlight. Keeping a second Hide action in the expanded row\nduplicates that behavior and makes the control harder to scan."
    },
    {
      "commit": "f3f49b118c3b530557da99d6dba6051d60385c2d",
      "tree": "49914c914bf045f967659b4c785b3b91d2c31953",
      "parents": [
        "7474e4be9faf4ed86d759ffdd4ab58b516fa9c00"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Tue Aug 25 13:18:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 13:18:46 2026"
      },
      "message": "tp: improve error messages for syncing two multi-clock traces (#7210)"
    },
    {
      "commit": "7474e4be9faf4ed86d759ffdd4ab58b516fa9c00",
      "tree": "b650fd21f8e13e344a84472f9d29b66c5e8cbece",
      "parents": [
        "2505fa8e8538ed9eae87859c87f4b235a2498164"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Tue Aug 25 12:27:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 12:27:57 2026"
      },
      "message": "ui: Autofocus query page editor on tab creation (#5875)\n\nRemoves a click from the new tab flow before the user can start typing a\nquery."
    },
    {
      "commit": "2505fa8e8538ed9eae87859c87f4b235a2498164",
      "tree": "1feed115aa996a165c1fa3df9dc89fa4fd939f1b",
      "parents": [
        "759e5ab57a17d67e9d40e3c9a1deaa6225640f9f"
      ],
      "author": {
        "name": "Steve Golton",
        "email": "stevegolton@google.com",
        "time": "Tue Aug 25 12:00:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 12:00:23 2026"
      },
      "message": "ui: Fix flicker when selecting between track events (#7205)\n\nClicking between different track events on the timeline would result in\na brief flicker in the details panel.\n\nRoot cause: There\u0027s a bug in the interaction between\nZonedInteractionHandler and the TrackShell component(s). Track event\nclicks are triggered from a DOM click event listener in the TrackShell,\nand backdrop clicks (to clear the selection) are handled in an\nunderlying component controlled by a ZonedInteractionHandler, which\nhandles drag events, among other things.\n\nClicks on the backdrop are derived from the mouseup events rather than\nclick events. However this means that calling `e.stopPropagation()` in\none of the TrackShells doesn\u0027t prevent the \u0027click\u0027 event on the\nbackdrop. Thus, every time the user clicks an event, the selection is\nfirst cleared (backdrop click), then immediately set to the new event.\nThis causes the details panel to show \u0027Empty selection\u0027 while the\ndetails of the new track event are loaded, rather than continuing to\nshow the previously selected events details.\n\nThis fix defers the virtual click event from the ZonedInteractionHandler\nto the actual DOM click event so it can be blocked by the TrackShell\nproperly. We also switch to `e.preventDefault()` in the track shell so\nthat the underlying backdrop can continue to receive the click event\nwhich helps with state management, checking the `e.defaultPrevented`\nflag to check whether or not to do anything."
    },
    {
      "commit": "759e5ab57a17d67e9d40e3c9a1deaa6225640f9f",
      "tree": "351befa0974b266a977f9b127d0c6976bd4dde82",
      "parents": [
        "6c7c1f46948e9b3c0af622154992ae32a1b5dcc1"
      ],
      "author": {
        "name": "BogdanLionte",
        "email": "bogdan.lionte1997@gmail.com",
        "time": "Tue Aug 25 10:40:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 10:40:16 2026"
      },
      "message": "perfetto: renumber recovered_trace_info field ID to 138 (#7207)\n\nUpdate RecoveredTraceInfo field ID in TracePacket from 136 to 138 and\nregenerate merged protos, C-SDK headers, and Python protobuf bindings.\n\nCo-authored-by: bgdn \u003cbgdn@google.com\u003e"
    },
    {
      "commit": "6c7c1f46948e9b3c0af622154992ae32a1b5dcc1",
      "tree": "35a95880db726336d850e397e536905bf040159b",
      "parents": [
        "747fbc2e180c2881d92c91198287012caba70021"
      ],
      "author": {
        "name": "perfetto-automation[bot]",
        "email": "278437629+perfetto-automation[bot]@users.noreply.github.com",
        "time": "Tue Aug 25 09:51:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 09:51:18 2026"
      },
      "message": "Sync generated proto files (#7206)\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": "747fbc2e180c2881d92c91198287012caba70021",
      "tree": "fa432fc055407c9971cbd32b1ae64e3e7c0ce8e8",
      "parents": [
        "386d870e04da1a5ca11b6239343b4db518ddea43"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Tue Aug 25 09:50:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 09:50:31 2026"
      },
      "message": "tp: make FlexVector::shrink_to_fit a no-op at minimal capacity (#7198)\n\nshrink_to_fit unconditionally reallocated and copied the storage even\nwhen capacity was already the smallest legal size for the current\nelement count. Dataframe::Finalize calls it on every column of every\nbuilt dataframe, so each finalize silently copied all column storage.\nThat copy also defeats any downstream design that wants to share or\nmove finalized column storage instead of duplicating it.\n\nReturn early when the aligned size already equals capacity, making the\ncall free in the common already-minimal case."
    },
    {
      "commit": "386d870e04da1a5ca11b6239343b4db518ddea43",
      "tree": "cbce4fc89d6a9176c5a02a389f9df3051bcec393",
      "parents": [
        "82e4cb705f0d11b0f67e287b74e2fffbf373c94c"
      ],
      "author": {
        "name": "perfetto-automation[bot]",
        "email": "278437629+perfetto-automation[bot]@users.noreply.github.com",
        "time": "Mon Aug 24 22:57:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 22:57:02 2026"
      },
      "message": "Roll prebuilts to v58.2 (#7201)\n\nAutomated prebuilt roll for **v58.2**: bumps the prebuilt binary\nmanifests (trace_processor, traceconv, tracebox, SDK sources, heapprofd)\nand stamps the matching agent-skills version (RFC-0026).\n\nCo-authored-by: perfetto-automation[bot] \u003cperfetto-automation-github-app@google.com\u003e"
    },
    {
      "commit": "82e4cb705f0d11b0f67e287b74e2fffbf373c94c",
      "tree": "386a19b25e949663819943ced0a201d7ca9ef560",
      "parents": [
        "165bc9d716b43a846dcfada39ca0f9f732e82321"
      ],
      "author": {
        "name": "MichaelFQuigley",
        "email": "michaelquigley@google.com",
        "time": "Mon Aug 24 19:04:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 19:04:21 2026"
      },
      "message": "Support parsing mergedClasses metadata to better de-obfuscate heap dumps. (#6911)\n\nThis supports parsing of JSON comments in the Proguard mapping (.map)\nfiles, such as:\n```\n# {\"id\":\"com.android.tools.r8.mergedClasses\", \"class_id_field\": \"$cid\", \"mergedClasses\": [{ \"name\": \"ClassA\", \"classId\": 0 }, { \"name\": \"ClassB\", \"class_id\": 1 }]}\n```\nThis will allow for disambiguation of de-obfuscated classes in heap\ndumps."
    },
    {
      "commit": "165bc9d716b43a846dcfada39ca0f9f732e82321",
      "tree": "1349360f69efb30269b0384a1012f569a2092283",
      "parents": [
        "2f51754d745e27397a4363c62b9506f69cec4b29"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Mon Aug 24 18:19:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 18:19:16 2026"
      },
      "message": "ui: add call tree and flat function views to the tree explorer (#7070)\n\nA flamegraph is one lens on weighted tree data. Add two more views on\ntop of the tree explorer decomposition: an expandable call tree and a\nflat per-function table, sharing the filter bar and the already-fetched\ntree.\n\nA `displayMode` field (flamegraph | tree | flat) is added to the state\nschema, zod-defaulted so previously persisted state keeps parsing.\nTreeExplorerViewSwitcher is a free-standing widget over the caller-owned\nstate, so hosts with their own chrome can place it wherever fits;\nTreeExplorerPanel renders one above the filter bar by default.\n\nThe call tree is a DataGrid in id-based tree mode over the resident\nnodes: expansion walks only visible rows and the DOM is virtualised.\nDirection (top-down / bottom-up) comes from the fetched tree shape, so\nthe existing selector switches the table between callees and callers.\n\nThe flat view aggregates per function name in TS: self sums every\noccurrence, total counts only the topmost occurrence per path so\nrecursion is not double-counted. Direction has no meaning there, so\nflat always fetches the TOP_DOWN shape and the direction selector is\ngreyed out; Highlight only affects the canvas and is greyed out in\nboth table views. Toggling display modes does not refetch. Export\nfollows the active view.\n\nAggregateProfilesPage drops its single-tab strip: the panel\u0027s switcher\nprovides the tabs its \"Future tabs\" comment anticipated, and only the\nhelp buttons remain."
    },
    {
      "commit": "2f51754d745e27397a4363c62b9506f69cec4b29",
      "tree": "03b20f2cbc9ff1ed3ed9a2d613da50248688532a",
      "parents": [
        "35d7559735ae7e922551b2556bc9d8b3f2278577"
      ],
      "author": {
        "name": "Jesse McKenna",
        "email": "jessemckenna@google.com",
        "time": "Mon Aug 24 17:07:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 17:07:47 2026"
      },
      "message": "Add stack_sampling_debug_ids to ETW config (#7183)\n\nThis change adds `stack_sampling_debug_ids` to Perfetto\u0027s ETW config.\nThis will enable the consumer to pass information needed for\nsymbolization (specifically, file paths and debug IDs) to the producer,\nto be added to the trace.\n\nPlease see the companion Chromium change for an example of its use:\n[etw-stackwalk: send debug GUIDs from\nbrowser](https://chromium-review.git.corp.google.com/c/chromium/src/+/7793565)"
    },
    {
      "commit": "35d7559735ae7e922551b2556bc9d8b3f2278577",
      "tree": "1ea79380bef17da67f5c1c3ec23f890737c1a6ac",
      "parents": [
        "1edd81179136e1942655faf9db30d250c14455d7"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Mon Aug 24 16:31:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 16:31:56 2026"
      },
      "message": "ui: split flamegraph into tree explorer building blocks (#7069)\n\nThe flamegraph widget currently owns everything: the filter bar, the\nmeasure picker, highlight state, export, the canvas and the fetch\norchestration wrapped around it in QueryFlamegraph. Upcoming work adds\ntop-down/bottom-up call tree and flat function table views that share\nthe same filters and fetched data, which is not possible while all of\nthis is fused together.\n\nDecompose it into:\n\n- widgets/tree_explorer.ts: the shared state schema, filter grammar,\n  data types and formatting helpers, renamed to TreeExplorer* since\n  they now describe the whole family of views. Serialized field names\n  are unchanged so persisted state keeps parsing. The old\n  Flamegraph.createDefaultState / updateState statics become free\n  functions here.\n- widgets/tree_explorer_filter_bar.ts: the filter / measure /\n  highlight bar as a standalone widget. Highlight is lifted into attrs\n  so sibling views can consume the same pattern; export content is\n  provided by the caller so it can later track the active view.\n- widgets/flamegraph.ts: now only the canvas and its tooltip.\n- components/tree_explorer_fetcher.ts: the mithril-free data layer\n  that was QueryFlamegraph (virtual table cache + tree query).\n- components/tree_explorer_panel.ts: the batteries-included\n  composition replacing FlamegraphPanel, owning the fetcher lifecycle\n  and rendering bar plus flamegraph.\n\nThis is a no-op refactor apart from one small cleanup: the redundant\n\"Hide\" button in the highlight row is dropped, since the Highlight\ntoggle already closes it."
    },
    {
      "commit": "1edd81179136e1942655faf9db30d250c14455d7",
      "tree": "bd008e81a81cca99009b2ba63ff1436036b8efc6",
      "parents": [
        "e2289768c978101bc5a48490087451c5775cff52"
      ],
      "author": {
        "name": "etiennep-chromium",
        "email": "etiennep@chromium.org",
        "time": "Mon Aug 24 15:47:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 15:47:25 2026"
      },
      "message": "[tp] Include all stack samples in symbolization candidates (#7197)\n\n_stacks_symbolization_candidates previously discovered callsites from\ncpu_profiling_samples, which is restricted to CPU profiling timebases\n(ns, cycles, instructions). This excluded non-CPU profiler samples such\nas Chrome native heap profiler samples (timebase_unit \u003d \u0027bytes\u0027),\nresulting in zero candidate frames for downstream symbolization metrics\nlike unsymbolized_frames.\n\nQuery stack_sample directly joined with stack_sample_task_context and\nthread to resolve upid, ensuring all stack samples are included as\nsymbolization candidates."
    },
    {
      "commit": "e2289768c978101bc5a48490087451c5775cff52",
      "tree": "99bc6a829cef7603cffd07bc6fa39ec08777321e",
      "parents": [
        "18d695f414df9d415e667beb998d3bb95ee17f4e"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Mon Aug 24 15:10:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 15:10:55 2026"
      },
      "message": "tp: validate remaining query buffer accesses (#7195)\n\nReported by U-Sec (Wujie Security)."
    },
    {
      "commit": "18d695f414df9d415e667beb998d3bb95ee17f4e",
      "tree": "167fb8d6304fd530fccf79d07be3c4ab3835c13e",
      "parents": [
        "1f806f87062c1fb35c6f2044d7db513efa34a29b"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Mon Aug 24 15:10:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 15:10:55 2026"
      },
      "message": "tp: validate tree intrinsic node ids (#7194)\n\nReported by U-Sec (Wujie Security)."
    },
    {
      "commit": "1f806f87062c1fb35c6f2044d7db513efa34a29b",
      "tree": "7b67fa128eeb5d8dccacd07e6db14c0e0968306c",
      "parents": [
        "33c2526e26b0a3ad233202d91944865689d3bcb8"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Mon Aug 24 15:10:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 15:10:55 2026"
      },
      "message": "tp: bounds-check graph traversal node ids (#7193)\n\nReported by U-Sec (Wujie Security)."
    },
    {
      "commit": "33c2526e26b0a3ad233202d91944865689d3bcb8",
      "tree": "8077bcc5c59d83ced487b45add75dd573b0c5915",
      "parents": [
        "a5f10b5a791c681d02f40631e2ca19e9eb159aeb"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Mon Aug 24 15:10:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 15:10:54 2026"
      },
      "message": "tp: validate graph node ids before narrowing (#7192)\n\nReported by U-Sec (Wujie Security)."
    },
    {
      "commit": "a5f10b5a791c681d02f40631e2ca19e9eb159aeb",
      "tree": "faa599581c61b0046861b2245224dff706a7100c",
      "parents": [
        "3b916b9c566d0f6d917cef3debadb76b5846f8ad"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Mon Aug 24 14:40:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 14:40:21 2026"
      },
      "message": "perfetto: sharpen SQL and heap dump guidance in AI skills (#7191)\n\nThe querying reference told agents to reach for the stdlib first but\nnever explained SPAN_JOIN itself, so agents kept hand-rolling interval\narithmetic and hitting the operator\u0027s unwritten rules: integer-only\npartition columns, no overlapping spans within a partition, and no\nCREATE OR REPLACE for virtual tables. Documenting those up front, along\nwith the per-row cost of custom PerfettoSQL functions, removes the most\ncommon sources of silently wrong or needlessly slow queries.\n\nAdd recipes for the two investigations that come up repeatedly and have\nno obvious entry point in the stdlib: LMK plus process memory, and\nwalking a wakeup chain back through waker_utid.\n\nOn the heap dump side, the report template asked for \"philosophical\nadvice\" and made source lookup mandatory, which pushed agents into vague\nprose or a dead end when the source isn\u0027t in the workspace. Ask for\nconcrete architectural recommendations instead, and let the report stand\non heap data alone when the code isn\u0027t there. The clustering workflow\nnow says outright not to reimplement the script."
    },
    {
      "commit": "3b916b9c566d0f6d917cef3debadb76b5846f8ad",
      "tree": "414713398ad4539fcaf4513b0a611d4773be6ed9",
      "parents": [
        "52635b8a5a9fa4f9a08244c28b922bb63cd58897"
      ],
      "author": {
        "name": "Safayat Ullah",
        "email": "safayat@google.com",
        "time": "Mon Aug 24 12:02:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 12:02:47 2026"
      },
      "message": "Support Perfetto trace recovery across device reboot (#6928)\n\nAdds support for persistent traces to survive device reboots on Android.\nWhen `persist_trace_across_reboots` is enabled in `TraceConfig`,\nPerfetto saves persistent trace files to disk and recovers/uploads them\non the next boot via `--upload-after-reboot`.\n\nSummary of changes:\n- Added `persist_trace_across_reboots` to TraceConfig and\n`AfterRebootTraceEvent` proto header to annotate recovered trace\nmetadata.\n- Unlinks trace files upfront before processing in\n`UploadPersistentTracesAfterReboot` to prevent crash loops if parsing or\nupload fails.\n- Synchronizes status via `traced.reboot_trace.status` sysprop so new\ntracing sessions wait for active uploads to finish before starting.\n- Emits StatSD atoms for trace recovery (atom 66), timeouts (atom 67),\nand framework handoff (atom 51).\nTested on a device and verified new `perfetto_unittests`\n\nBug: 382209797\nTest: atest perfetto_unittests;"
    },
    {
      "commit": "52635b8a5a9fa4f9a08244c28b922bb63cd58897",
      "tree": "92afd30903c33f5e926ba2fb1cbdc3f21eafa88d",
      "parents": [
        "ec5d16b14b743ba6063d720956d6d6af6610fd72"
      ],
      "author": {
        "name": "Nima Akbarzadeh",
        "email": "iw4p@protonmail.com",
        "time": "Mon Aug 24 10:03:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 10:03:45 2026"
      },
      "message": "ui: Handle null navigator.keyboard (#7186)\n\n## Problem\n\u003cimg width\u003d\"898\" height\u003d\"636\" alt\u003d\"Screenshot 2026-08-23 at 23 05 46\"\nsrc\u003d\"https://github.com/user-attachments/assets/cff9851d-82f4-40c4-9cde-d39f2e3964af\"\n/\u003e\n\nIn some browsers, the `keyboard` property exists on `navigator` but its\nvalue is `null`.\n\nThe existing property-presence check succeeds and then calls\n`getLayoutMap()` on `null`, crashing the Perfetto home page:\n\n\u003e TypeError: Cannot read properties of null (reading \u0027getLayoutMap\u0027)\n\nObserved with Perfetto UI v58.2 on Chrome 150 on macOS.\n\n## Fix\n\nDeclare `navigator.keyboard` as nullable and check its value before\ncalling `getLayoutMap()`.\n\nUnsupported environments now throw the existing `NotSupportedError`,\nallowing the UI to use its fallback keyboard layout.\n\nI solved it with declare global because I saw they\u0027ve been used in other\nparts, could be fixed with cast but ugly, or runtime guard which\u0027s\nverbose..\n\nAdditionally getLayoutMap() genuinely returns a\nPromise\u003cKeyboardLayoutMap\u003e according to the [Keyboard Map\nspecification](https://wicg.github.io/keyboard-map/#keyboard-interface),\nthis is the reason I changed it."
    },
    {
      "commit": "ec5d16b14b743ba6063d720956d6d6af6610fd72",
      "tree": "4e9e2fd04bc6e9b4c265c7338be4861a9a225fc0",
      "parents": [
        "4b69bf97ccd38b0fb161ccd94c6389887bdf7a04"
      ],
      "author": {
        "name": "zezeozue",
        "email": "zezeozue@google.com",
        "time": "Sat Aug 22 14:48:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 22 14:48:40 2026"
      },
      "message": "tp: record responsible thread on process-scoped counters (#7182)\n\nCounters delivered in thread context but attributed to a process\n(rss_stat, oom_score_adj, mm_event, ...) go through\nPushProcessCounterForThread, which resolves the emitting utid to a upid\nand drops the thread. The thread is often the signal you want (\"which\nthread grew the process\u0027s anon RSS\"), so record it as a \"utid\" arg on\neach counter sample.\n\nThe counter stays process-scoped; the responsible thread now survives in\ncounter.arg_set_id, is queryable via EXTRACT_ARG, and shows in the UI\ndetails panel with no UI change -- mirroring the utid/end_utid args\nalready attached to async slices in systrace_parser."
    },
    {
      "commit": "4b69bf97ccd38b0fb161ccd94c6389887bdf7a04",
      "tree": "bd8213c2152d4b555cb0d0548cd0233e5eb680df",
      "parents": [
        "fff30e83b5af315d311a3f18626d70b458631fc5"
      ],
      "author": {
        "name": "David Reveman",
        "email": "reveman@meta.com",
        "time": "Fri Aug 21 21:34:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 21:34:34 2026"
      },
      "message": "rust-sdk: add missing proto bindings (#7181)"
    },
    {
      "commit": "fff30e83b5af315d311a3f18626d70b458631fc5",
      "tree": "a72f5e72c105f7c08a1810c681f78103bff03071",
      "parents": [
        "71120f3748a260c43c51b474437ca84442932df2"
      ],
      "author": {
        "name": "David Reveman",
        "email": "reveman@meta.com",
        "time": "Fri Aug 21 19:51:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 19:51:06 2026"
      },
      "message": "rust-sdk: update proto bindings and crate versions (#7180)"
    },
    {
      "commit": "71120f3748a260c43c51b474437ca84442932df2",
      "tree": "398539a0c316cfb193d28b42d77c666c15f62209",
      "parents": [
        "e476a5a8ded4f6af8adc709b6347b87db85a273b"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Fri Aug 21 17:41:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 17:41:54 2026"
      },
      "message": "base: fix Windows subprocess format signedness (#7178)\n\n`GetLastError()` returns a `DWORD` (`unsigned long`), but the subprocess\nread failure path formatted it with `%ld`. The new clang-cl uprev\ndiagnoses that signedness mismatch under `-Werror`.\n\nUse `%lx`, matching the other Windows error-code logging in this file.\n\nThe reported Windows build failure was not rerun locally because the\nWindows toolchain is unavailable on this macOS checkout."
    },
    {
      "commit": "e476a5a8ded4f6af8adc709b6347b87db85a273b",
      "tree": "b858bf666c49da975542f8c3a1e1e0ad32624f11",
      "parents": [
        "afb109c06989c7ed48053a763bd84102f2f7f48e"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Fri Aug 21 17:35:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 17:35:39 2026"
      },
      "message": "perfetto: bump CHANGELOG to v58.2 (#7177)\n\nCut v58.2 for the additional Windows build, test, and path-handling\nfixes being promoted to canary and stable.\n\nTests were not run; changelog-only change."
    },
    {
      "commit": "afb109c06989c7ed48053a763bd84102f2f7f48e",
      "tree": "7cb695b69992f5ae2e8cd3ede9332ada2b6a80ab",
      "parents": [
        "c8ed6639080948e2d6feccd887bde2b693dbc787"
      ],
      "author": {
        "name": "MichaelFQuigley",
        "email": "MichaelForrQuigley@gmail.com",
        "time": "Fri Aug 21 17:06:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 17:06:56 2026"
      },
      "message": "Make simple_json_parser a perfetto_component (#6909)\n\nMake simple_json_parser a perfetto_component.\n\nThis allows it to become a cc_library and be shared as a dependency in\nmultiple\nlibraries while avoiding ODR violations.\n\nThis is in preparation for an upcoming change to parse JSON comments\nfrom\nProguard mapping (.map) files, such as:\n```\n# {\"id\":\"com.android.tools.r8.mergedClasses\", \"class_id_field\": \"$cid\", \"merged_classes\": [{ \"name\": \"ClassA\", \"class_id\": 0 }, { \"name\": \"ClassB\", \"class_id\": 1 }]}\n```"
    },
    {
      "commit": "c8ed6639080948e2d6feccd887bde2b693dbc787",
      "tree": "fb645b69123ce9a5bb112597c457497d0a2d575a",
      "parents": [
        "0feb6ba96a0358bd44cef2ef9129647908b7d6d0"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Fri Aug 21 15:51:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 15:51:48 2026"
      },
      "message": "perfetto: bump CHANGELOG to v58.1 (#7172)"
    },
    {
      "commit": "0feb6ba96a0358bd44cef2ef9129647908b7d6d0",
      "tree": "3a8f7df8db93ad22f1ef03bcf86476c7b57852a6",
      "parents": [
        "045d97a29bdcf559cce9485b123f50d251ebc724"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Fri Aug 21 15:44:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 15:44:11 2026"
      },
      "message": "base: fix compile on windows (#7170)"
    },
    {
      "commit": "045d97a29bdcf559cce9485b123f50d251ebc724",
      "tree": "86ac699dde35f43030c0c465d10bb9d07806f22c",
      "parents": [
        "a5178496173682a27368f737ef9c1d561481b2dd"
      ],
      "author": {
        "name": "Parth Sane",
        "email": "parthsane@gmail.com",
        "time": "Fri Aug 21 11:25:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 11:25:49 2026"
      },
      "message": "perfetto: update frameworks/base tracing protos (#7138)\n\nAdd AndroidProcessStateSnapshot and AndroidFreezerStateSnapshot\nAndroidSelfBroadcastEvent trace packet extension protos. Extract\nUnfreezeReason enum into\nframeworks_base_common.proto and register track event extensions.\n\nMirrors frameworks/base/proto/tracing/frameworks_base_track_event.proto\nin the upstream Android tree."
    },
    {
      "commit": "a5178496173682a27368f737ef9c1d561481b2dd",
      "tree": "3bc37f74194443ad6fa087d8443a8b86a02dddac",
      "parents": [
        "15524260d4a9a6228e688cbbbfa4024161d0d9f3"
      ],
      "author": {
        "name": "elrakadm",
        "email": "elrakadm@google.com",
        "time": "Fri Aug 21 10:02:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 10:02:11 2026"
      },
      "message": "Add is aggregtable dimension metadata field to metrics v2 (#7164)\n\nAdd \"is aggregtable\" dimension metadata field to metrics v2"
    },
    {
      "commit": "15524260d4a9a6228e688cbbbfa4024161d0d9f3",
      "tree": "7e0c5dc99a899825e7a16da76bce12bd8dfcca2d",
      "parents": [
        "6d27b00b79a3b4ab1ba9a20c6c81a44fd298c321"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Wed Aug 19 18:24:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 18:24:46 2026"
      },
      "message": "ui: don\u0027t show memory overview page without smaps or heap dumps (#7139)\n\nIt\u0027s very confusing to see thi s tab appear on every trace even when it\ndoesn\u0027t do anything."
    },
    {
      "commit": "6d27b00b79a3b4ab1ba9a20c6c81a44fd298c321",
      "tree": "91d0e0d4d496530ef6a3847691e12fe65a1faa5a",
      "parents": [
        "ffa47ff628aec1d075de0ac4d9d2878e22e2bb66"
      ],
      "author": {
        "name": "Edgar Arriaga",
        "email": "edgararriaga@google.com",
        "time": "Wed Aug 19 17:19:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 17:19:15 2026"
      },
      "message": "Trace size optimization: Remove unreferenced intern table entries in redacted traces (v2) (#7129)\n\nThis optimization reduces trace size by eliminating every unreferenced\nthread name from the compact sched intern table which is results from\nredaction, as redaction currently leaves dangling references that\nconsume significant trace size as they are lists of strings.\n\nThe average gains in trace size with this optimization are ~9.6% of\ntrace size.\n\nNote: Internal tracking bug b/539563625"
    },
    {
      "commit": "ffa47ff628aec1d075de0ac4d9d2878e22e2bb66",
      "tree": "a29217ff8a76516c3f6c4bbed30896454d9f8bf8",
      "parents": [
        "47b9413613576862334ff2b7f2f19ebee750e529"
      ],
      "author": {
        "name": "gignat-dev",
        "email": "gignat@google.com",
        "time": "Wed Aug 19 16:09:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 16:09:40 2026"
      },
      "message": "tp: Fix negative self_size in heap graph aggregation (#7141)\n\nExclude the -1 placeholder sentinel when aggregating self_size in\n_heap_graph_path_hash_aggregate to avoid negative sizes in flamegraphs.\n\nBug: b/548916242"
    },
    {
      "commit": "47b9413613576862334ff2b7f2f19ebee750e529",
      "tree": "3de926260e241e5f7bff704e1fb7a44c4aa2c025",
      "parents": [
        "445c7c9c1a139d5b2dd6fdb6194c986afbc9c758"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Wed Aug 19 16:03:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 16:03:54 2026"
      },
      "message": "tp: describe dataframe queries as a sequence of logical operations (#7133)\n\nIntroduce LogicalPlan, an explicit sequence of operations the query\nperforms:\nscan, filter, index filter, distinct, sort, reverse, min/max, limit,\noutput.\nLogicalPlanner produces one and BytecodeLowering consumes it, producing\nthe\nactual bytecode."
    },
    {
      "commit": "445c7c9c1a139d5b2dd6fdb6194c986afbc9c758",
      "tree": "830e5182c6f43ffcfa3db69158683d5076a52355",
      "parents": [
        "8537c55a32f279a9005dbd745a8ed25a4f76ed32"
      ],
      "author": {
        "name": "gignat-dev",
        "email": "gignat@google.com",
        "time": "Wed Aug 19 15:29:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 15:29:46 2026"
      },
      "message": "tp: Fallback unnamed classes to \u0027\u0027 in heap graph aggregation (#7140)\n\nEnsures non-NULL class names in _heap_graph_path_hash_aggregate,\nmatching _heap_graph_class_name_hash."
    },
    {
      "commit": "8537c55a32f279a9005dbd745a8ed25a4f76ed32",
      "tree": "007320cabfe3f70d3d91b136e422bc9c66a399dc",
      "parents": [
        "68927f486b5a0f010023684b091e4ea9db95729a"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Wed Aug 19 14:50:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 14:50:08 2026"
      },
      "message": "tp: split access-path selection out of dataframe bytecode emission (#7132)\n\nPure refactor, splitting query planning into two stages to allow for\nalternative lowering from logical plan other than\nto bytecode."
    },
    {
      "commit": "68927f486b5a0f010023684b091e4ea9db95729a",
      "tree": "faf6b5e2cf0f0df935de53c75ac1fc7c58404793",
      "parents": [
        "0a24e4aa3f81b739feac54cd6b16f61ed6bd4022"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Wed Aug 19 13:45:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 13:45:58 2026"
      },
      "message": "tp: stop double-counting selectivity in dataframe row estimates (#7131)"
    },
    {
      "commit": "0a24e4aa3f81b739feac54cd6b16f61ed6bd4022",
      "tree": "2516ceb323525c2c0a36a1400b8f733ad095e1d1",
      "parents": [
        "de794788d545dcf05aacece46a7fb5385b52ac77"
      ],
      "author": {
        "name": "andrabivolaru",
        "email": "andrabivolaru@google.com",
        "time": "Wed Aug 19 09:31:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 09:31:18 2026"
      },
      "message": "tools/proto_merger: preserve upstream declaration order for fields (#7113)\n\nWhen adding support for preserving reserved fields as `[deprecated \u003d\ntrue]` in #7036, `std::sort` was introduced to sort fields by tag\nnumber.\n\nHowever, fields in Perfetto protos are often grouped logically by\nfeature/subsystem rather than in strict ascending numerical order.\nSorting all fields caused massive unnecessary diffs when merging\ndownstream protos (such as `perfetto_log.proto`) by rearranging\nunchanged active fields.\n\nThis change:\n1. Removes `std::sort` from `MergeFields` so active fields preserve\ntheir exact upstream declaration order.\n2. Passes `reserved_numbers` into `MergeFields` to cleanly append\nretained deprecated fields without disturbing active fields.\n3. Filters `reserved_numbers` from `deleted_fields` in `Merge(Message)`\nto avoid duplicating deprecated fields in the commented-out deleted\nsection.\n4. Updates unit tests to verify that non-numerical declaration order is\nmaintained."
    },
    {
      "commit": "de794788d545dcf05aacece46a7fb5385b52ac77",
      "tree": "7dc445dab13ac9eea98b1e914fea3a78bd75f2bb",
      "parents": [
        "98a044471ff2141fd9a254f6a8b7b2feb585e838"
      ],
      "author": {
        "name": "sanath099",
        "email": "sanath099@gmail.com",
        "time": "Tue Aug 18 17:43:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 17:43:06 2026"
      },
      "message": "ui: Support filtering Day Explorer flamegraph by selected tracks (#7031)\n\nPass track_id and root status to Day Explorer tracks, and use them in\ncomputeDayExplorerFlameGraph to construct a recursive query filtering by\nselected tracks and their descendants.\n\nBug: 482033855\n\nWelcome to Perfetto!\nMake sure your PR has a bug/issue attached or has at least\na clear description of the problem you are trying to fix.\n\nFor more details please see\nhttps://perfetto.dev/docs/contributing/getting-started"
    },
    {
      "commit": "98a044471ff2141fd9a254f6a8b7b2feb585e838",
      "tree": "88e360e0aa2a77baf82ce4f4e79467e5891accd6",
      "parents": [
        "23d39a05f46dddefccd03f1bc5d7b456c229b328"
      ],
      "author": {
        "name": "sashwinbalaji",
        "email": "sashwinbalaji@google.com",
        "time": "Tue Aug 18 14:59:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 14:59:11 2026"
      },
      "message": "perfetto: fix remaining -Wformat-signedness errors after clang uprev (#7126)\n\nFix signed/unsigned printf mismatches:\n\n- fuchsia trace parser/tokenizer: %d -\u003e %u for uint32_t record/event\ntypes\n- chrome_string_lookup: %u -\u003e %d for int32_t process/thread types\n- tracing_muxer_impl: drop stray \"u\" suffix that flipped an int32_t to\nunsigned\n- trace_buffer_v2: cast uint16_t subtraction result before %u\n- tracing_service_impl_unittest: cast int64 proto field before PRIu64"
    },
    {
      "commit": "23d39a05f46dddefccd03f1bc5d7b456c229b328",
      "tree": "ee7169ed1325ba0b825471c222034b7523cdc82a",
      "parents": [
        "81ae3189b3bc7b97c40b5b4eab7cacacfc1471eb"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Tue Aug 18 14:55:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 14:55:14 2026"
      },
      "message": "tp: align Arrow buffers and slabs to 64 bytes (#7123)"
    },
    {
      "commit": "81ae3189b3bc7b97c40b5b4eab7cacacfc1471eb",
      "tree": "f11213b4ff5ba5f8ee57206b43af1cb7229ba82a",
      "parents": [
        "1b84966541966b49110cc7a8d4f906e6b0102b0a"
      ],
      "author": {
        "name": "Lalit Maganti",
        "email": "lalitm@google.com",
        "time": "Tue Aug 18 14:20:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 14:20:32 2026"
      },
      "message": "tp: fix compile on clang debug (#7121)"
    },
    {
      "commit": "1b84966541966b49110cc7a8d4f906e6b0102b0a",
      "tree": "dc50d3ac487e193a13f47579c08b74d455b3a770",
      "parents": [
        "5cfb3fa8c2580aeb46300051750d276a04be0b98"
      ],
      "author": {
        "name": "elrakadm",
        "email": "elrakadm@google.com",
        "time": "Tue Aug 18 13:43:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 13:43:21 2026"
      },
      "message": "Remove invalid utf-8 chars from aflag events (#7122)\n\nRemove invalid utf-8 chars from aflag events\n\nSimilar to systrace_parser, check ascii and remove invalid utf8\ncharacters to avoid issues in parsing metric outputs."
    },
    {
      "commit": "5cfb3fa8c2580aeb46300051750d276a04be0b98",
      "tree": "94e8592a83953d507a7cc2ed8ffd039f25dcb22e",
      "parents": [
        "ed3848d34162b7c6d528c5c1a80bf342b5783ccd"
      ],
      "author": {
        "name": "Kevin Svetlitski",
        "email": "kevin_svetlitski@berkeley.edu",
        "time": "Tue Aug 18 13:02:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 13:02:56 2026"
      },
      "message": "Ensure `object-src: \u0027none\u0027` CSP directive is applied as intended (#6988)\n\n[According to\nMDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/object-src#none)\nthe single-quotes surrounding `\u0027none\u0027` are mandatory in the `object-src`\nCSP directive. Unlike the other CSP directives that take care to\npreserve these single-quotes when required (e.g. `\u0027self\u0027` in\n`connect-src`), the `object-src` was passing a plain `none` without\nquotes, which is treated as the bare hostname `none`."
    }
  ],
  "next": "ed3848d34162b7c6d528c5c1a80bf342b5783ccd"
}
