android-perceived-performance

Measures Android startup time, frame jank, and loading states on physical devices, then remediates findings.

Updated Aug 10, 2026
One-click install
npx skills add https://github.com/nolte/claude-android-engineering --skill android-perceived-performance-nolte
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: android-perceived-performance
Source: https://github.com/nolte/claude-android-engineering/tree/main/skills/android-perceived-performance
Command: npx skills add https://github.com/nolte/claude-android-engineering --skill android-perceived-performance-nolte

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Android apps often feel slow or stuttery without developers knowing why. This Skill measures UX-relevant performance (app startup time, frame jank, loading-state correctness) on a physical device against fixed budgets, then guides interactive remediation with re-measurement to prove each fix worked. ## Core Features & Use Cases - MEASURE phase: Runs Macrobenchmark TTID/TTFD startup metrics, FrameTimingMetric jank percentiles, Perfetto trace analysis, and loading-state audits against response-time thresholds, with full run-condition capture (device, build type, refresh rate, thermal state). - FIX phase: Applies one remediation at a time behind an operator approval gate — Baseline Profiles, deferred initialization, moving work off the main thread, corrected loading-state UI — then rebuilds and re-measures to attribute the delta. - Resumable runs: Checkpoints baselines and approval decisions to .resume/ files so multi-session measurement campaigns can resume safely. - Use Case: Your app's cold start feels slow. The Skill captures a Perfetto trace, names the cost centre (e.g., blocking I/O in Application.onCreate()), proposes the fix, and re-measures to confirm TTID dropped under the 500 ms budget. ## Quick Start Ask the assistant to measure your app's cold startup time and fix any jank on the main screen using the android-perceived-performance skill.

Frequently Asked Questions about android-perceived-performance

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I measure Android app startup time with Macrobenchmark?

Use Macrobenchmark's StartupTimingMetric with a separate com.android.test module targeting a profileable, release-shaped benchmark build type. Run cold, warm, and hot modes on a physical device and report TTID and TTFD separately, discarding the first cold start after install.

How do I find and fix jank in a Jetpack Compose screen?

Measure with Macrobenchmark FrameTimingMetric and read frameOverrunMs at P50/P90/P95/P99, then capture a Perfetto trace to assign the jank to a cause family: main-thread work, render-thread work, layout/recomposition cost, or off-main image/data work. The cause family selects the remediation.

Can I use dumpsys gfxinfo to report Compose jank?

No. dumpsys gfxinfo is scoped to View-toolkit surfaces and is only a coarse local check; a Compose jank finding must rest on Macrobenchmark FrameTimingMetric. Always reset gfxinfo immediately before the scenario since its counters accumulate.

Why does my benchmark build fail to resolve library modules?

A benchmark build type without matchingFallbacks fails variant resolution for library modules that only declare debug and release. Add matchingFallbacks += listOf("release") to the benchmark build type and ensure the app is profileable and non-debuggable.

When should I add a Baseline Profile to my Android app?

A Baseline Profile is required for any app whose startup or scroll is measured, but only after removing the cost centres named by the trace. Generate it with the androidx.baselineprofile Gradle plugin covering startup, main navigation, and the main list scroll, and verify on the minified release build.

Why are my performance numbers inconsistent between runs?

Confounders like thermal throttling, screen-off state, background apps, or a debuggable build distort timings. Pre-flight the device (thermal status NONE, screen on, no foreground work, animations disabled) and record all run conditions before measuring.