zezeozue
zezeozue@google.com
90d · built 2026-05-28
90-day totals
- Commits
- 44
- Grow
- 8.7
- Maintenance
- 2.3
- Fixes
- 1.1
- Total ETV
- 12.1
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).
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'.
Bug flow over time
Monthly bug flow attributed to this developer. The left bar (red) is bug impact this dev authored that was addressed in the given month — combining bugs others fixed for them and bugs they fixed themselves. The right bar is fixes they personally shipped that month, split between self-fixes (overlap with the red bar) and fixes done for someone else. X-axis is fix-time, not introduction-time — the Navigara API attributes bugs backward to the author at the moment the fix lands.
- Self-fix share
- 90%
- Bugs you introduced
- 1.2
- Bugs you fixed
- 1.3
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.
- 2.7ETVui: Add Heapdump Explorer plugin (#5276) Add the com.android.HeapDumpExplorer plugin, inspired by Android's ahat tool, with navigation, shared components, queries, and all heap analysis views: overview dashboard, classes, objects, instances, dominators, bitmap gallery, and strings. Uses DataGrid with SQLDataSource for efficient sorting and filtering of large datasets.github.com-google-perfetto · 12afa830 · 2026-03-25
- 1.1ETVui: Encapsulate plugin state in HeapDumpExplorerSession (#5679) The plugin's mutable state was scattered across module-level let/const variables, static fields on HeapDumpPage, and the dumps/activeDump/bitmap-cache globals in queries.ts, with implicit reset semantics. Concentrate it on a session class constructed per onTraceLoad: the session owns nav, dumps, tabs, and the cached overview, and is registered with the page via ctx.pages.registerPage so it's captured by closure and disposed with the trace.github.com-google-perfetto · 4725cd79 · 2026-04-30
- 0.8ETVtp: Support HPROF primitive fields and array contents (#5247) Added heap_graph_object_data and heap_graph_primitive tables for ART heap dumps. Introduce intrinsics to retrieve primitive array data as raw bytes or JSON. Included array_data_hash for content deduplication, specifically bitmaps.github.com-google-perfetto · 2bd3e090 · 2026-03-24
- 0.8ETVtp: Fix HPROF importer for ahat parity (#5029) Match ahat's computation of self_size, native_size, reachability, root_type, and qualified field names so that the raw table output is identical to ahat for the same .hprof file. - Fixed reference_set_id to match the row index of the first reference. - Classified reference types (Weak, Soft, Phantom, Finalizer) to correctly skip "referent" fields during reachability analysis, matching ahat's behavior. - Implement root type precedence and shortest-path root distance calculation to align with proto heap graph expectations.github.com-google-perfetto · e56fa07a · 2026-03-05
- 0.5ETVui: Disambiguate multi-dump traces in the Heap Dump Explorer (#5631) Add a dump selector so traces with multiple heap dumps filter all views to a single (upid, ts) pair instead of silently summing across dumps.github.com-google-perfetto · b1fa9a6e · 2026-04-28
- 0.4ETVui: Extract FlamegraphPanel widget from QueryFlamegraph (#5730) Mithril component that owns the inner QueryFlamegraph and disposes it on unmount or when trace/dependencies identity changes. Migrates all consumers and drops QueryFlamegraphWithMetrics. Also adds optional `displayLabel` on the PIVOT view; SQL match still uses `pivot`. This will be used in the future by the HeapDumpExplorer to provide a better UX when it auto filters a flamegraph to path hashgithub.com-google-perfetto · d4061d15 · 2026-05-05
- 0.4ETVui: Embed flamegraph viewer in Heap Dump Explorer (#5731) Added a Flamegraph tab using FlamegraphPanel and Bidirectional navigation between object info and the flamegraph. A "Show objects from this class" node action opens the flamegraph-objects tab, and each retention-path section in the object view ("Shortest Path", "Dominator Tree Path") gets a "View in Flamegraph" button that pivots the flamegraph at the object's path.github.com-google-perfetto · facb3b40 · 2026-05-05
- 0.4ETVtp: bounded-window walk for critical path; drop slice_name from join (#5704) The prior `_critical_path_intervals!()` pipeline iterated wakeup-graph edges with a `lead(ts)` flatten that only bounded frames by the root's window. On chains where a waker's run was shorter than the root's wait, the uncovered tail was either dropped or attributed to a thread that was itself sleeping during the window. On monitor-contention traces this showed up as runaway depth. Replace it with `__intrinsic_critical_path_walk`, a C++ intrinsic that performs a per-root recursive walk. Each frame is clipped to `[ts - idle_dur, ts + dur]`; the idle portion chains via `waker_id` (or `prev_id` on userspace IRQ self-wakes); and the time before a frame's own idle started recurses into `prev_id` at the same depth. Termination is structural - each step strictly reduces the window's upper bound - with a per-root iteration cap as a safety belt. Exposed via `_critical_path_userspace_by_roots!` and `_critical_path_kernel_by_roots!`. `_critical_path_by_roots` dispatches through them. IRQ self-wake and kernel chain semantics are preserved. Separately, drop `slice_name` from the materialized `_critical_path_thread_state_slice` and `_self_view`. Join `slice` on id at the leaves of `_critical_path_stack` instead. The TEXT was duplicated across every row of the blocker x slice cross product on large traces. Three critical-path diff-test expectations updated to drop rows that the lead-flatten attributed to idle frames.github.com-google-perfetto · 0a16dd19 · 2026-05-01
- 0.4ETVui: Support navigating from Java Flamegraph to Heapdump Explorer (#5298) Added an "Open in Heapdump Explorer" action to java heap graph flamegraph nodes. Clicking it navigates to a new flamegraph-objects view showing individual objects matching the selected path hashes in a DataGrid. Removed all other optional actions. Also fixed query for objects with NULL field_type_name, common in PathClassLoader.github.com-google-perfetto · 4e74ec17 · 2026-03-26
- 0.4ETVui: Show tooltips on the HeapDumpExplorer columns (#5757) Added hover info icons on the size/count columns across HDE views to surface the dominator-vs-BFS distinction. Also cleaned up the general information card with more useful info like process name and class counts.github.com-google-perfetto · e2b8a813 · 2026-05-07
- 0.3ETVui: Add Android logs track breakdown (#5370) Added per-process and per-thread tracks under the existing Android logs summary track. Each process group has its own heatmap header with area selection support. https://screencast.googleplex.com/cast/NTE5MTg0MzIyOTcyODc2OHxjYTJjYTNkYi1mOQgithub.com-google-perfetto · 7345aad2 · 2026-04-03
- 0.3ETVui: Fixed class hierarchy in object view in Heap Dump Explorer (#5538) "Super Class" always showed "none" because the lookup read superclass_id from the wrapper type java.lang.Class<Foo> instead of from Foo's own class row. Now replaced it with a "Class Hierarchy" section showing the full inheritance chain. The chain is resolved with graph_reachable_dfs! over id -> superclass_id. Clicking any class in the hierarchy opens the Classes tab filtered to that class and its transitive subclasses.github.com-google-perfetto · 55ae6fe2 · 2026-04-24
- 0.3ETVandroid_sdk: host stubs for perfetto_trace_lib_java host build (#5967) Fix-forward for the host_supported flip on perfetto_trace_lib_java_defaults (landed as ca68af800e, reverted shortly after because the host build broke). The host variant of perfetto_trace_lib_framework_java fails javac with "cannot find symbol" for dalvik.annotation.optimization.CriticalNative, @FastNative, and android.system.SystemCleaner. Those classes live on the device platform classpath but aren't surfaced by Soong's host module_current. Provide a small host-only stubs library that supplies just the surface the SDK references; reference it via target.host.libs on perfetto_trace_lib_java_defaults so it's visible to javac on host but inert (and unbundled) on Android. Stub surface: * dalvik.annotation.optimization.{Critical,Fast}Native: no-op annotations; ART's specialised ABI is already handled C-side by PERFETTO_JNI_HOST_PARAMS. * android.system.SystemCleaner: delegates to java.lang.ref.Cleaner. * android.util.ArraySet: extends java.util.HashSet. * android.util.Log: routes to System.err. * android.os.Process: minimal surface the SDK references. Generator changes are limited to teaching Target about a Java-side libs field and emitting it in to_string; existing cc consumers are unaffected. The stubs library is hand-defined in Android.bp.extras as a java_library_host so it only builds on host and never lands on the Android side. With this in place, host_supported on perfetto_trace_lib_java_defaults compiles cleanly on AOSP. Tested with m out/soong/.intermediates/external/perfetto/perfetto_trace_lib_framework_java/linux_glibc_common/javac/perfetto_trace_lib_framework_java.jargithub.com-google-perfetto · 9546d63d · 2026-05-19
- 0.3ETVandroid_sdk: PERFETTO_JNI_HOST_PARAMS shim for non-ART JVMs (#5924) @CriticalNative natives skip JNIEnv*/jclass on ART but not on host VMs. Add a PERFETTO_JNI_HOST_PARAMS[_COMMA] shim that expands to empty on Android and to JNIEnv*, jclass[,] elsewhere, and apply it to every @CriticalNative C entry point. No change in behavior. Unblocks Ravenwood: host VMs can now bind these natives directly, which lets us drop the Ravenwood native-method allowlist as a follow-up. This also enables adding a host build of the Perfetto Java SDK.github.com-google-perfetto · 1dfd43ec · 2026-05-18
- 0.3ETVandroid_sdk: Host JVM test runner for PerfettoTraceTest (#5973) Companion to tools/run_android_test (which runs the same test under ART on a device or emulator). tools/run_android_sdk_host_test uses $JAVA_HOME, the Maven jars fetched by `tools/install-build-deps --java-sdk`, and the host stubs landed in #5967 (plus a small AndroidJUnit4 stub added here for the test runner) to compile the perfetto Java SDK and the PerfettoTraceTest suite for host, links against libperfetto_jni.so from the gn+ninja pipeline, and runs the JUnit suite. * src/android_sdk/jni/BUILD.gn: new jdk_include_path declare_arg + a conditional include_dirs / cflags block. Defaults empty so AOSP / device builds are untouched; the runner sets it from $JAVA_HOME/include. * src/android_sdk/jni/host_stubs/android/log.h: stderr-mapping shim so the JNI sources can compile against the standard JNI ABI without liblog. * src/android_sdk/java/host_stubs/androidx/test/ext/junit/runners/ AndroidJUnit4.java: stub for the test's @RunWith annotation; delegates to JUnit 4's BlockJUnit4ClassRunner. * tools/install-build-deps --java-sdk: SHA256-pinned Maven jars (JUnit, Hamcrest, Truth, Guava, protobuf-java 4.31.1, error_prone_annotations) into buildtools/java_sdk/. Opt-in; standard build is unaffected. * tools/run_android_sdk_host_test: runs gn gen with jdk_include_path, builds libperfetto_jni + protoc, generates Java protos for the closure of TEST_PROTOS, javac-compiles SDK + host_stubs + protos and the test, invokes JUnitCore. Picks jars by globbing buildtools/java_sdk/*.jar so version bumps live only in install-build-deps. Usage: export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 tools/install-build-deps tools/install-build-deps --java-sdk tools/run_android_sdk_host_test # -> "OK (20 tests)" on host OpenJDK 21 Follow-up: the 16-flag -Wno-* block in BUILD.gn suppresses standalone -Weverything warnings the upstream SDK sources trip. A separate CL will clean up the SDK sources and drop the suppression list.github.com-google-perfetto · dbce9540 · 2026-05-20
- 0.3ETVui: Switch active heap dump on 'Open in Heapdump Explorer' (#5641) When clicking "Open in Heapdump Explorer" on a flamegraph node in a multi-dump trace, the Heapdump Explorer now switches its active dump to match the flamegraph node. Small fix for limiting field name queries to specific dumpgithub.com-google-perfetto · 72cba8d0 · 2026-04-29
- 0.2ETVui: Add Show Paths toggle to bitmap gallery view (#5314) Add a global Show Paths / Hide Paths button next to the Bitmaps heading that batch-fetches dominator tree paths for all bitmaps and displays them below each bitmap card. Trivial paths (direct GC roots) show "No path to GC root." instead. Extracts PathEntry type from inline InstanceDetail definition, exports fetchPathFromRoot and renderPath for reuse.github.com-google-perfetto · 7cf19fc2 · 2026-03-27
- 0.2ETVui: Replace Instances view with closable instance tabs (#5341) Clicking a class in the Classes tab now filters the Objects tab by class name instead of replacing the Classes tab content with a redundant Instances view. Object detail views open as closable tabs, allowing multiple objects to be inspected side by side. Minor fixes: - Deduped new tabs. - Moved clickable columns to the start of all DataGridsgithub.com-google-perfetto · 63bf2e55 · 2026-03-30
- 0.2ETVui: Add duplicate arrays detection and Arrays tab to HeapDump Explorer (#5310) Added duplicate primitive array detection to the overview. Added a new Arrays tab showing all primitive array objects with size and filterable by content hash from the overview duplicates navigation. Removed the LIMIT 100 cap on duplicate strings and fixed DataGrid height in overview duplicate sections for proper virtual scrolling.github.com-google-perfetto · 9dda91d4 · 2026-03-27
- 0.2ETVui: Default to Heapdump Explorer for traces with heap-graph data (#5761) Open the Heapdump Explorer instead of the timeline whenever a trace has heap_graph_object rows. Traces without heap data are unaffected because the plugin's onTraceLoad listener already early-returns when heap_graph_object is empty.github.com-google-perfetto · b63d3708 · 2026-05-08