gignat-dev
90d · built 2026-07-24
90-day totals
- Commits
- 24
- Grow
- 10.9
- Maintenance
- 3.2
- Fixes
- 0.2
- Total ETV
- 14.4
30-day trajectory
Last 30 days vs. the 30 days before. Up arrows on Growth and ETV mean improvement; up arrow on Fixes share means more time on fixes (worse).
↓-40.0 %
vs 10 prior
↓-6.2 pp
recent vs prior
↓-2.9 pp
recent vs prior
Daily performance
Daily ETV, stacked by Growth, Maintenance and Fixes.
Work-mix over time
Share of Growth / Maintenance / Fixes over a rolling 7-day window. Reads as 'where is effort flowing right now'.
Repository spread
Where this developer's commits land. Concentrated work (top1 > 80%) vs polymath spread (top1 < 30%).
Most impactful commits
Top 20 by ETV in the 90-day window.
- 4.0ETVbt-ui: Revamp Bigtrace settings architecture and UI (#6205) Overhauls the Bigtrace settings infrastructure to consolidate storage, improve the UI, and simplify query execution. Key changes: - Trace Selection Grid: Introduces a dedicated, filterable DataGrid on the Settings page to select the exact traces a query will run over (the /trace_metadata wire contract), replacing the legacy panel. - Unified UI: Replaces the legacy trace-metadata panel with a cohesive settings strip and modal on the query page. - Storage & Mapping: Dedupes settings storage into SingleFieldStorage and centralizes the mapping logic for the /trace_metadata and /execute_* endpoints. - Component Polish: Makes boolean settings immediately editable (no enable/disable toggle), adds a "reset to default" affordance, and ensures default metadata columns are visible. - Layout & Rendering: Groups metadata result columns in a trailing block, places the link column first, and bounds the results grid for proper virtualization. - History & State: Restores history-entry hover states, parses camelCase setting IDs from snapshots to restore disabled settings, and defaults new queries to persistent execution.github.com-google-perfetto · cb8c1445 · 2026-06-11
- 3.8ETVbt-ui: Implement and polish Bigtrace asynchronous queries (#5822) This PR introduces comprehensive support for executing asynchronous queries in the Bigtrace UI, along with a series of architectural improvements and UX polish. Key additions and improvements include: * Core Async Support: Introduces the ability to submit, track, and manage long-running asynchronous Bigtrace queries. * Architecture: Implements a centralized BigtraceQueryClient and QueryRunner to manage query lifecycles, separating state management from the UI components. * DataGrid Integration: Replaces traditional pagination with a scroll-based approach and integrates with server-side sorting (order_by) and filter encoding for Datagrid chips. * History & State: Adds persistent query history with background status polling, and fixes ephemeral tab state when switching pages. * UI/UX Polish: Introduces updated progress bars, detailed post-filter row counts, and improved duration formatting.github.com-google-perfetto · 3748a38e · 2026-05-20
- 2.5ETVBigtrace UI V0 (#5243) This change introduces "BigTrace UI", a standalone bigtrace query interface within perfetto UI source code. BigTrace provides a focused environment for executing and managing complex SQL queries against traces. Key features and components: - Application Shell: A new entry point and lightweight application singleton (BigTraceApp) managing its own command and omnibox instances. - Multi-tab SQL Editor: A robust query interface supporting multiple persistent tabs, syntax-highlighted editors, and result limiting. - Result Visualization: Integration with DataGrid for high-performance rendering of SQL query results, including support for linkified columns and uuid-based row tracking. - Navigation & Layout: Custom routing (router.ts, routes.ts) and layout components (Sidebar, Topbar, Omnibox) tailored for the BigTrace experience. - Persistence: Local storage integration for saving editor tabs, query history, and user preferences across sessions. - Settings Management: A dedicated SettingsPage and storage service for configuring Brush-specific parameters, such as backend endpoints and default result limits. - Home & Help: A landing page with "getting started" guidance and a help modal detailing available keyboard shortcuts. - Styling: Dedicated SCSS for BigTrace to ensure a consistent and modern aesthetic. Note: we may have duplicated classes/interfaces between Bigtrace UI and Perfetto UI, because we wanted to **isolate** the changes and avoid exposing classes/interfaces from Perfetto UI. In a follow-up, we will expose the classes/interfaces suitable for reuse.github.com-google-perfetto · 2984b76b · 2026-04-28
- 0.8ETVbt-ui: Add BigTrace trace presets (#6283) This PR introduces the BigTrace analysis presets feature and the trace-selection / per-tab query settings that back it. It provides an integrated flow for launching and managing predefined BigTrace queries: - **Analysis Presets & UI Integration**: Presets are fetched dynamically from the backend (`GET /trace_presets`) and surfaced as launchable cards on the Home page, as well as a picker on the Settings page. - **Holistic Preset Application**: Applying an analysis preset securely loads its full recipe into the query editor (including the SQL query and tab title) and enforces its settings as the sole active config by cleanly turning off any unlisted toggles. - **Active Preset Detection**: The UI reliably identifies and highlights the currently active preset in the picker by comparing trace filters using their canonical, key-sorted encoding (`encodeFilters()`). - Includes full wiring for the query-history, sidebar entry, and client/unit tests for the backend trace endpoints.github.com-google-perfetto · 263bb0c3 · 2026-06-19
- 0.7ETVui: Fix column sort, reorder, and hide in QueryPage results grid (#6030) https://github.com/google/perfetto/pull/5872 fixed a bug by fixing the list of columns passed to DataGrid in the various query page results tables, however, since sorting is defined in the column list, this also means that sorting doesn't work (the buttons are present but no one is home). Less important but still notable is that column reordering and hiding is also no longer possible, however the DataGrid correctly hides these options from the UX so this isn't a bug, it's more of a missing feature which has questionable value anyway. There are two issues here: 1. DataGrid should not show sorting options if sorting is controlled by no column callback is specified, as there is no way that sorting can be persisted in this case - it already correctly hides column re-ordering options when this callback is missing. 2. Regardless, we should allow sorting in the query results as this is a genuinely useful feature. This patch fixes the issue by: - Reverting DataGrid to uncontrolled mode - allow it to store the column state internally. This enables sorting and column management. - Assign a unique id to each query result, and use it to key the ResultsTable component. - While in the area, also move the DataSource construction (which caches the intermediate lookups) to the oninit function of the ResultsTable component as a new one will be created for each result set anyway now, which removes a lot of boilerplate caching code in the parent. Notes: - Switched from happy-dom to jsdom in the jest unit tests - as jsdom more faithfully represents the real browser DOM (ariaLabel -> aria-label) properly. - This means we can un-skip a test which was previously skipped due to it not working with happy-dom. Fixes: https://b.corp.google.com/issues/516394557 --------- Co-authored-by: Steve Golton <stevegolton@google.com>github.com-google-perfetto · 5ce98840 · 2026-06-02
- 0.6ETVbt-ui: Bigtrace UI fixes and polish (#6225) This PR introduces a bundle of UX improvements and bug fixes to the Bigtrace UI, addressing layout issues, error visibility, and history navigation. Key Changes: * Query History Polish: * The history sidebar now correctly syncs its active sub-tab (Persistent vs Ephemeral) with the currently active query tab on page load. * Clicking the status/date header band of a history entry now opens the query directly, providing a much larger click target. * Results Grid: * Hides the backend-internal _row_id column from the grid by default (still available via the column picker). * Refactors how fetch_results errors are displayed: they now render in a selectable, wrapping <pre> block with their raw HTTP status and detail, replacing the uncopyable and heavily truncated EmptyState widget. * Settings & Layout Fixes: * Abbreviates large trace counts on the settings page to a compact format (e.g., ~3.4K traces) with the exact count available on hover. * Prevents horizontally scrolling the entire query page when a filter chip contains an extremely long value (like a trace path); chips now properly cap their width and ellipsize their labels.github.com-google-perfetto · 16148479 · 2026-06-19
- 0.4ETVui: BreakdownTracks: consolidate interval logic and improve BinderViz (#6216) This commit consolidates the following improvements to BreakdownTracks and AndroidBinderViz: * Parallelize track creation: The server and client transaction track trees are now built concurrently via Promise.all, reducing trace engine idle time. Deterministic attach order (server first) is preserved. * Single interval_self_intersect path: BreakdownTracks is now collapsed onto one code path built entirely on `interval_self_intersect`, deleting the legacy machinery and divergent code paths. `createTracks` now builds `_breakdown_intervals`, `_breakdown_segments`, and `_breakdown_projected` once. Lazy `CounterTrack.create` is used over the segments table. * Group and describe breakdown tracks: The server and client transaction-count trees are nested under a single collapsible "Binder" summary group. A root-track description is added for each perspective, explaining the overlap-count grouping.github.com-google-perfetto · 668060cc · 2026-06-26
- 0.4ETVui: SQL editor syntaqlite Lsp integration (#6237) Adds an opt-in dev.perfetto.SqlEditorIntelligence plugin that wires the QueryPage editor to syntaqlite's in-process LSP server (wasm_lsp_message) through the stock @codemirror/lsp-client. The stock extensions provide completion, diagnostics, hover docs, signature help, go-to-definition, references, and rename; our side is loading the WASM engine + dialect, a small in-memory transport, and feeding the stdlib schema via the syntaqlite/setSessionContext extension request. - The WASM runtime + dialect load once; each trace gets its own WASM session, disposed on trace unload. An LSP server accepts exactly one initialize, so sharing a session would reject the next trace's client handshake. - Editor widget: new generic `extensions` prop, held in a Compartment so late-registering plugins reconfigure already-mounted editors (plugin onTraceLoad can run seconds after the query page first renders). - QueryPage: editor intelligence is a per-tab factory - every query tab stays mounted, and the LSP workspace requires one document per view. The factory memoizes per document; a fresh extension identity would close and reopen the server document on every redraw. - SqlModules: expose waitForSqlModules() so consumers can await the module catalog instead of polling. - @codemirror/autocomplete is version-overridden so basicSetup and the LSP client resolve one shared instance; two copies each render their own completion popup. Known gap: unknown_function diagnostics flag every stdlib call (the server's function catalog is SQLite built-ins only). Left visible pending upstream support for declaring functions in the session context.github.com-google-perfetto · 3782d68a · 2026-07-13
- 0.2ETVui: Add details panel and process navigation to AndroidAnr plugin (#6001) Clicking an ANR slice now opens a details panel showing process info, ANR type, subject, timestamp and duration. A 'Go to process' anchor scrolls to and expands the process track group on the main thread, matching the existing deeplink behavior. Shared findMainThreadTrackUri and scrollToTrackAndSelect helpers live alongside the panel in navigate.ts.github.com-google-perfetto · 3436d040 · 2026-05-21
- 0.2ETVbt-ui: bigtrace add SQL formatting to the query editor (#6226) Format the editor tab's SQL with the same syntaqlite formatter the Query page uses: Alt+Shift+F in the editor (the option key on Mac) plus an icon-only toolbar button. The shortcut is documented in the help modal. No command — the chord can't be expressed in the command hotkey grammar, whose key matching breaks on option-composed characters on Mac; the editor binding matches by key code and works everywhere. The engine init mirrors the Query page plugin's (it is private to the plugin and cannot be imported across bundles). The syntaqlite assets are now also copied into the bigtrace dist, which resolves assets against its own serving root, and bigtrace's CSP gains 'wasm-unsafe-eval' — Wasm compilation without JS eval().github.com-google-perfetto · 4dd608e6 · 2026-06-12
- 0.2ETVui: MemoryViz move reclaim events under Memory group (#5899) This change refactor MemoryViz plugin such that the memory reclaim events kswapd, direct reclaim and lmk appear under the Memory group. The kswapd and direct reclaim are separate now. The direct reclaim events are also broken down by process and then by thread.github.com-google-perfetto · b291bd0d · 2026-05-15
- 0.1ETVui: QueryPage collapsible right sidebar with persistence (#6031) Add a toggle button to the editor tab strip (right-aligned via a flex spacer) that hides/shows the History/Tables right sidebar. When hidden, the editor takes the full page width. Visibility persists across sessions via a new `dev.perfetto.QueryPage#sidebarVisible` setting (defaultValue: true), registered next to the existing queryTabPersistence one. <img width="1910" height="840" alt="image" src="https://github.com/user-attachments/assets/63cb63f8-c202-4f63-aea4-48a06b4d462b" />github.com-google-perfetto · fb5d0a1d · 2026-06-01
- 0.1ETVui: Add details panel and process navigation to AndroidStartup plugin (#6002) Clicking an app-startup slice now opens a details panel showing package name, startup type (cold/warm/hot), timestamp and duration. A 'Go to process' anchor scrolls to and expands the process track group on the main thread, matching the existing deeplink behavior. The startup deeplink path is also realigned to expand the process group and select on the main thread track, matching the ANR pattern. Shared findMainThreadTrackUri and scrollToTrackAndSelect helpers live alongside the panel in navigate.ts .github.com-google-perfetto · e906de3f · 2026-05-21
- 0.1ETVstdlib: memory_breakdown: attribute zygote baseline to forking parent and scope to primary zygotes (#6214) android_process_memory_intervals subtracted one pooled zygote baseline (the average across zygote, zygote64 and webview_zygote) from every non-zygote process. That over-counts two ways: a process inherits memory via copy-on-write only from the specific zygote that forked it, not a blend of all three; and native daemons that were never forked from a zygote had a zygote baseline subtracted anyway. Compute the baseline per zygote and attribute it via process.parent_upid: each process subtracts only its forking zygote's baseline, and a process whose parent is not a zygote subtracts nothing. Narrow zygote detection to just the primary zygotes (zygote, zygote64). Also single-source the "keep zygote raw" guard off zygote_processes so the zygote name set lives in one place, and update the diff test to use zygote + zygote64 as the two differing-baseline zygotes. Test: `tools/diff_test_trace_processor.py out/linux_clang_release/trace_processor_shell --name-filter '.*android_process_memory_intervals.*'`github.com-google-perfetto · 2cf2f20c · 2026-06-12
- 0.1ETVui: OomAdjScoreViz: improve track ordering, descriptions, and rendering (#6206) This commit consolidates several improvements to the OomAdjScoreViz plugin: * Fix concurrency track cut: The per-bucket "processes count" track dropped its final return-to-zero point because `lead(ts) - ts` is NULL. Coalescing the trailing NULL duration to `trace_end() - ts` ensures the count drops to 0 at the right time when a bucket empties. * Order bucket tracks: Bucket tracks are now ordered by `oom_score` descending (cached first, system last) matching the ranges in `oom_adjuster.sql`, rather than relying on arbitrary `SELECT DISTINCT` ordering. * Describe score tracks: Added descriptions to per-process score tracks so their purpose is documented in the UI on hover and in track details.github.com-google-perfetto · 7ebcd865 · 2026-06-11
- 0.0ETVui: add memcg reclaim tracks and update descriptions in MemoryViz (#5986) This patch adds support for visualizing synchronous memory cgroup reclaim events in the MemoryViz plugin, indicating when an app allocates past its budget. It also improves the descriptions Direct Reclaim tracks to be more informative. Additionally, it updates the BreakdownTracks schema to use LONG durations instead of LONG_NULL in order to support selection aggregation in the UI.github.com-google-perfetto · 8b719551 · 2026-05-20
- 0.0ETVui: Enable MemoryViz by default and improve load performance (#6011) This change enables the com.android.MemoryViz plugin by default, exposing the Kswapd, Direct Reclaim, Memcg Reclaim, and LMK memory tracks to all users under the MEMORY group. Additionally, to mitigate the impact on trace loading times, the track initialization functions in onTraceLoad are now executed concurrently using Promise.all.github.com-google-perfetto · 0c1a4ea7 · 2026-05-22
- 0.0ETVbt-ui: keep SettingsPage mounted across route changes (#6326) Previously, navigating away from the settings route would unmount the SettingsPage, and returning would remount it. This caused its trace-list grid to rebuild its data source and refetch /trace_metadata every time the settings page was opened. Instead, keep the SettingsPage mounted in the DOM at all times and hide it using the `pf-bt-route-pane--hidden` class when not on the settings route. This preserves the loaded rows in the trace-list grid across route changes, avoiding unnecessary refetches.github.com-google-perfetto · fa13b5fb · 2026-06-21
- 0.0ETVui: roll syntaqlite to v0.7.0 (#6585) Completes the trace_processor-side syntaqlite roll for the UI, which was still pinned to ^0.5.9 and so loaded a v0.5.x runtime against the freshly re-vendored v0.7.0 perfetto dialect. syntaqlite 0.7.0 reworks the one-shot JS API: runFmt() is replaced by format(), which returns the formatted string directly and throws on failure, and keywordCase moved from a numeric enum to 'upper'|'lower' (1 mapped to Upper in the old wasm decoder). Migrate the two call sites (query page and bigtrace SQL formatters) accordingly.github.com-google-perfetto · 3bbfd6fe · 2026-07-08
- 0.0ETVtp: add flags_enum annotation to broadcast_type (#6797) This updates `frameworks_base_track_event.proto` to add the `.com.android.internal.BroadcastType` proto flags_enum annotation to the `broadcast_type` field.github.com-google-perfetto · 16043a52 · 2026-07-20