Skip to content

Merge the v53.0 release into Sokatoa fork#167

Merged
cdamus merged 371 commits intosokatoafrom
issues/sokatoa-4184
Dec 18, 2025
Merged

Merge the v53.0 release into Sokatoa fork#167
cdamus merged 371 commits intosokatoafrom
issues/sokatoa-4184

Conversation

@cdamus
Copy link
Collaborator

@cdamus cdamus commented Dec 17, 2025

For android-graphics/sokatoa#4184.

cdamus and others added 30 commits October 20, 2025 21:38
)

Fixes google#3342

----

In Korean locales it is not unusual that the platform default encoding
on Windows is the EUC-KR codepage, so on these and other systems that
don't default to UTF-8, it would help to have any build script that
loads UTF-8 files make that explicit in their code.

Signed-off-by: Christian W. Damus <cdamus.ext@eclipsesource.com>
Grid QoL improvements:
- Stable, resizable, auto-sizable column widths with sensible defaults.
  - Columns can be user-resized by dragging on the column handle.
- A sensible initial size is decided as soon as we have some data based
on measuring the cells in place.
- Column widths are stable and persist over various operations such as
filtering, sorting, et al.
- Right click context menus in data cells rather than triple dot menu
saving valuable real estate and avoiding awkward gaps in the layout.
- Header cell buttons are now removed entirely from the layout when
hidden, saving valuable real estate.
- Virtual scrolling and dynamic data loading now supported at the Grid
level.
- The old VirtualTable widget has been removed in favor of Grid.
- PivotTable now uses virtual scrolling to improve performance.
- DataGrid now uses virtual scrolling also to improve performance, but
also in order to support pivoting in the future as the grouping UX would
be very awkward with pagination.
Adding boolean dimension type to metric summary spec

Bug: 436528777
While other tab's state is preserved when switching tabs, the 'Current
Selection' tab was left out, so switching away from it would cause it to
lose state.

This patch fixes this, allowing the current selection tab's state to be
preserved including the currently selected sub-tab in aggregations.

Fixes: https://buganizer.corp.google.com/issues/453942809

Note: This fix doesn't persist state between sub-tabs in the current
selection tab. This is a different issue, and will be fixed in a
followup.
Copybara import from Chromium: proto and stdlib changes

- 2bc115ddc4ad0bec0fe31094a4f1b9a5cc286b26 Add per-priority task queues
to NetworkServiceTaskScheduler by Hayato Ito <hayato@chromium.org>

COPYBARA_IMPORT=Project import generated by Copybara.

GitOrigin-RevId: 2bc115ddc4ad0bec0fe31094a4f1b9a5cc286b26

Co-authored-by: Perfetto Team <copybara-servicebot@google.com>
All sub tabs of the current selection tab are rendered, but only the
active one is visible. This persists DOM state between tab-flips, and
follows how the rest of the UI works: e.g. tabs, pages
Copybara import from Chromium: proto and stdlib changes

- bfc7b89ebfb9972f9ba8c514296ce90e357d4eb0 Sync feature protos. by
Googler <noreply@google.com>

COPYBARA_IMPORT=Project import generated by Copybara.

GitOrigin-RevId: bfc7b89ebfb9972f9ba8c514296ce90e357d4eb0

Co-authored-by: Perfetto Team <copybara-servicebot@google.com>
This patch makes the following changes to Grid's virtual scrolling:
- Reduce layzerization overhead by adding `will-change: transform` to
the block of rows that moves up and down the slider when scrolling.
- Tuned the grid virtual scrolling overdraw bounds.
- Added scroll velocity compensation to offset the loaded rows a little
in the direction of scroll, proportionally to how fast the user is
scrolling.

Fixes: https://b.corp.google.com/issues/453940632
If RESET RPC is called, it will cause a new TP instance to be allocated
which means the signal handler is holding onto a totally invalid
instance of TP leading to a UAF and a crash.

Instead, keep track of the actual active TP inside the RPC instead.
It's bad design to have this as a global when it's possible that we
invalidate
it and create new instances (see
google#3348).

Remove to reduce the chances of a mistake like this happening again
Redactor started failing when it encountered this perf sample.

packet {
  sequence_flags: 2
  timestamp: 252557484253
  timestamp_clock_id: 6
  perf_sample {
    cpu: 0
    kernel_records_lost: 12
  }
  trusted_uid: 9999
  trusted_packet_sequence_id: 6
  trusted_pid: 11706
}
This code modifies redactor so that it skips the sample instead of
making redactor bail out and fail.
…d_yarn group across 1 directory (google#3360)

Bumps the npm_and_yarn group with 1 update in the /ui directory:
[tar-fs](https://github.com/mafintosh/tar-fs).

Updates `tar-fs` from 3.0.9 to 3.1.1
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/mafintosh/tar-fs/commit/0aa57de79eb58a5206992c979a7fd5c4df85e07c"><code>0aa57de</code></a>
3.1.1</li>
<li><a
href="https://github.com/mafintosh/tar-fs/commit/0bd54cdf06da2b7b5b95cd4b062c9f4e0a8c4e09"><code>0bd54cd</code></a>
expand check</li>
<li><a
href="https://github.com/mafintosh/tar-fs/commit/cb1c571fba8ec6dd56340f55dcd5d284372a8249"><code>cb1c571</code></a>
3.1.0</li>
<li><a
href="https://github.com/mafintosh/tar-fs/commit/374460e9973a5ac5655b7f21a84dfa9b64da5d78"><code>374460e</code></a>
add optional disablement of symlink validation (<a
href="https://redirect.github.com/mafintosh/tar-fs/issues/119">#119</a>)</li>
<li><a
href="https://github.com/mafintosh/tar-fs/commit/5bfe6dfb9d26436829ec6a6400eca3a030d4757a"><code>5bfe6df</code></a>
3.0.10</li>
<li><a
href="https://github.com/mafintosh/tar-fs/commit/63e12f94740afa9ba87f91c1a530ad91548ba3a9"><code>63e12f9</code></a>
bare support</li>
<li>See full diff in <a
href="https://github.com/mafintosh/tar-fs/compare/v3.0.9...v3.1.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tar-fs&package-manager=npm_and_yarn&previous-version=3.0.9&new-version=3.1.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/google/perfetto/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Remove a lot of obsolete logic, that just stayed there since different
implementations of QueryBuilder:
- Ports rendering
- Separate styling for blocks and single nodes
- A lot of small cleanups here and there

Remove materialisation as maintaining this code was costly at this stage
of the project.

Consolidate he nodes creation logic: NodeBox is responsible for what
should be inside the node, the colours and buttons regarding one node.
NodeBlock has multiple NodeBoxes, SingleNode has one, and they are
responsible for handling the borders and special behaviours regarding
each type of graph object. NodeContainer is responsible for state
management and drag and drop logic.
* Remove O(n^2) behaviour when building dictionaries
* Lots of unnecessary allocations which would be terrible for
performance when
doing conversion on lots of rows.
For example on Windows.

```
../../src/trace_processor/trace_processor_shell.cc(2076,17): error: unused variable 'g_rpc_for_signal_handler' [-Werror,-Wunused-variable]
 2076 |     static Rpc* g_rpc_for_signal_handler = &rpc;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
```
- Fix bug where select boxes can show the incorrect value
- Form validation on required fields when empty, which prohibits invalid
values from being passed to the debug track factory.
- Add a `--None--` value to optional selects rather than showing blank,
which makes it more obvious that this feature is disabled (i.e. for
arg_set_id & pivot)
- Disable submit button if form is invalid
- Add cancel button

<img width="308" height="298" alt="image"
src="https://github.com/user-attachments/assets/4144182c-4e04-4759-87a0-57d96de4a27e"
/>

Fixes: https://b.corp.google.com/issues/453748356
This is perfectly valid to have in a string. We were being too zealous
and rejecting the string.

Also fix a critical bug in ScanString for HasEscapes when the escape
was *not* the last escape in the string.

Fixes: google#3361
This PR enables/fixes direct links to flags, plugins and settings.

E.g.:
- #!/flags/<myFlagId>
- #!/plugins/<myPluginId>
- #!/settings/<mySettingId>

When entered into the URL bar manually or by clicking a link, the UI
will load then scroll to the referenced entity and highlight it.

This PR also adds:
- A link button to each entity that changes the URL bar to the
appropriate link so that it may be copied and shared easily.
- Add the entity id under the title for convenience.

## Screenshot
<img width="931" height="611" alt="image"
src="https://github.com/user-attachments/assets/1a824e1c-4829-4d86-8ad4-30ed18c85b63"
/>
Copybara import from Chromium: proto and stdlib changes

- f134af426c876bedffdf55825316a1f5d2edb15b Sync feature protos. by
Googler <noreply@google.com>

COPYBARA_IMPORT=Project import generated by Copybara.

GitOrigin-RevId: f134af426c876bedffdf55825316a1f5d2edb15b

Co-authored-by: Perfetto Team <copybara-servicebot@google.com>
…oogle#3355)

In the case where the SMA was >50% full, we were accidentally spamming the task running
with FlushPendingCommitDataRequests calls. There's no point in doing this as one call
to this basically does the same as n calls. However, it does cause a bunch of CPU
usage in various processes using the SDK (traced_probes, surfaceflinger) unnecessarily

Remove this excessive spamming of the task runner by only posting the task once
to the queue. Any future calls are simply ignored. We put this behind an Android flag
to incrementally roll out this change.
…oogle#3374)

google#3355 fixes the case for normal
flush scheduling but didn't properly handle shared memory emulation.
It's very likely that shared memory emulation is hitting a *very*
similar pattern of `UpdateCommitDataRequest` being called many times in
a loop without yielding to the task runner.

Therefore, speculatively apply the same fix assuming that the same issue
is being hit in that context as well. It also has the benefit of keeping
the two codepaths very similar which is good to reduce the amount of
unique conditions we need to think about here.
Tea has been renamed to Mint. This change is to update the UI to rename
to use the Mint name.
Add support for perf samples in trace redactor which in turn allows for
call stack collection of all the hardware and sw counters currently
supported with linux.perf collection
1. Add a highlight to the cell when right clicked.
2. Fix italicized nulls from getting clipped by the bounds of the cell
container.
Changes the order of columns in Android Logs view
to follow the same format as `adb logcat`.

This columns order is also used by many other tools, so imho would be
great to match it here as well

Screenshot with the change:

<img width="1694" height="336" alt="image"
src="https://github.com/user-attachments/assets/43bf11a6-fe3c-480c-bf98-45847c4b06ff"
/>

Sample `adb logcat` output:

```
10-22 15:49:51.390  9265  9680 E ServiceManager: error in isDeclared
10-22 15:49:51.390  9265  9680 E ServiceManager: java.lang.SecurityException: SELinux denied for service.
10-22 15:49:51.390  9265  9680 E ServiceManager: 	at android.os.Parcel.createExceptionOrNull(Parcel.java:3372)
```
Sorry, as part of google#3373 I forgot
to update the cell order in the rows 😓

Attaching screenshot with the fix:

<img width="1776" height="328" alt="image"
src="https://github.com/user-attachments/assets/56b83b56-cad4-49da-958b-aa7f30dedab6"
/>
Adds an action to organize tracks using the ' -> ' separator.

For example, tracks with names:
```
  - Foo -> Bar -> Track1
  - Foo -> Bar -> Track2
  - Foo -> Track3
```

Will be reorganized into:
```
  - Foo
     - Bar
        - Track1
        - Track2
     - Track3
```

Sample:
<img width="577" height="256" alt="image"
src="https://github.com/user-attachments/assets/cabf1f19-ce55-43e7-a19d-0a6cf080e1de"
/>
rukkal and others added 23 commits November 12, 2025 08:05
Mark the perfetto_winscope-lite proto library as
host_supported to use it from host-side tests.
Copybara import from Chromium: proto and stdlib changes

- 8d7515b24d9e713790419d67279d4a9078e80a49 Stop TrafficStats APIs from
triggering Chromium startup. by Chidera Olibie <colibie@google.com>

COPYBARA_IMPORT=Project import generated by Copybara.

GitOrigin-RevId: 8d7515b24d9e713790419d67279d4a9078e80a49

Co-authored-by: Perfetto Team <copybara-servicebot@google.com>
## Summary

- Improved UX for query builder nodes by consolidating controls in the
node details view
- Replaced `MultiselectInput` with `PopupMultiSelect` for better user
experience in aggregation and sort nodes
- Added glob matching support for SWITCH/CASE columns on string types in
modifyColumnsNode
- Made limit/offset and sort controls only from the node level
- Interval intersect `filter unfinished intervals` is opt out
Why:
Often, for the sake of the IntervalIntersect, you might want to only use
the subset of your columns or rename some columns to id, ts and dur.

Adds the ability to insert column selection (ModifyColumns) nodes at
specific input ports of IntervalIntersect nodes, along with refactoring
to properly initialize node actions. Th

# Changes

  Feature: Column selection for interval intersect inputs

- Adds a new "Pick columns" button (with view_column icon) next to each
input source in the IntervalIntersect node UI
- Introduces onInsertModifyColumnsNode(portIndex) action to the
NodeActions interface
  - Implements handleInsertModifyColumnsNode() which:
    - Creates a ModifyColumns node
- Inserts it between the input node and the IntervalIntersect node at
the specified port
    - Rewires connections appropriately
    - Selects the newly created node

# Refactoring: Deduplicated action initialization

- Extracts action creation into createNodeActions() method to eliminate
code duplication
- Adds ensureNodeActions() to lazily initialize actions for nodes
(crucial for nodes from imported state)
- Introduces initializedNodes Set to track which nodes have been
initialized
  - Updates node creation flow to use centralized action initialization
- Ensures all nodes get actions initialized during rendering (handles
imported state edge case)

# Improvement: Query formatting

- Updates queryToRun() to add blank lines between SQL modules/preambles
and the main query
  - Improves readability of generated SQL in the query preview
  - Adds unit tests verifying the formatting behavior
…retain sharpness (google#3634)

A recent PR added `will-change: transform;` to the NodeGraph content
container. This was a mistake as it doesn't improve performance, but has
the side effect of rasterizing the nodes at 100% zoom which results in
ugly pixelation when zoomed.

Before:
<img width="591" height="363" alt="image"
src="https://github.com/user-attachments/assets/0d96136c-fd37-49b0-8b9c-98050bd07399"
/>

After:
<img width="583" height="405" alt="image"
src="https://github.com/user-attachments/assets/bf32697d-cd1a-4bf2-90dc-9cd215f1d26d"
/>
Fix: when writing the query and reexecuting for the second time with
different set of columns, the new columns would not be fetched and
propagated further
1. Column Alias Handling

- Issue: Child nodes couldn't use aliased column names from
ModifyColumnsNode
- Fix: Modified newColumnInfo() in column_info.ts to replace both
top-level name and column.name with the
   aliased name
- Test: Added test "aggregation node can group by aliased column from
modify columns node"

  2. Interval Intersect Filter Initialization

- Issue: "Filter unfinished intervals" checkbox appeared checked but
filter wasn't actually applied until
   toggling
- Fix: Modified IntervalIntersectNode constructor and
onPrevNodesUpdated() to initialize
  filterNegativeDur array with explicit true values
- Test: Added test "interval intersect node initializes filter to true
by default"

  3. Node Deletion with InputNodes

- Issue: Unable to delete ModifyColumnsNode when it has inputNodes
connections
- Fix: Modified handleDeleteNode() in explore_page.ts to collect nodes
from inputNodes array in addition
  to prevNode/prevNodes

  4. Automatic Connection on Docking

  - Issue: Docking nodes didn't automatically create connections
- Fix: Modified onDock callback in graph.ts to call addConnection() when
nodes are docked

  5. Aggregation Query Re-execution on Keystroke

- Issue: Typing in aggregation node fields caused queries to re-run on
every letter (bad performance)
- Fix: Migrated aggregation editor to use Form widget with submit/cancel
pattern - queries only execute
  when "Apply" is clicked

  6. Form Widget Validation

- Issue: Form didn't properly validate/disable Apply button for
incomplete aggregations
- Fix: Added required: true and validation: () =>
validateAggregation(agg) to Form widget, plus required
  attributes on Select widgets

  7. Aggregation Placeholder Naming Cleanup

- Issue: Column names used "agg_" prefix (e.g., "agg_sum") and showed
invalid placeholders
- Fix: Cleaned up placeholderNewColumnName() to remove "agg_" prefix and
show better defaults (e.g.,
  "duration_sum" instead of "agg_sum")
Modification nodes (like Aggregation node or Modify Columns) can now be
added from the graph, without parent node - in an invalid state
Also adds rust formatting support as it demonstrates how to use the
installed toolchain.
- Make new nodes start their auto-placement search in the center of the
viewport, rather than have their top left corner in the center.
- Fix a bug where the incomplete nodes were not being passed properly to
the auto placement function in the NodeGraph demo, so nodes were often
being placed overlapping.
This ftrace event reports counter events in Pixel firmware.

This ftrace event is only on Pixel kernels and is not upstream.

Bug: 386832373
Test: Verified FWTP counter tracepoints may be collected with Perfetto
 and displayed with traceconv.
And update .gitignore to reflect this
For android-graphics/sokatoa#4184.

Signed-off-by: Christian W. Damus <cdamus.ext@eclipsesource.com>
Signed-off-by: Christian W. Damus <cdamus.ext@eclipsesource.com>
Signed-off-by: Christian W. Damus <cdamus.ext@eclipsesource.com>
@cdamus cdamus merged commit 0a412c7 into sokatoa Dec 18, 2025
1 check passed
@cdamus cdamus deleted the issues/sokatoa-4184 branch December 18, 2025 16:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.