agentleFS
liuyi0808liuyi0808/android-review/skills/performance/SKILL.md

performance

Skill17 starsChanged 9 months agoMITView on GitHub

Audit Android (Kotlin/Compose) apps for performance issues and produce structured findings. Use when: app cold start exceeds 500ms, UI jank or dropped frames, memory leaks or OOM, ANR rate above 0.47% in Play Vitals, Compose recomposition waste, missing baseline profiles, battery drain, reviewing performance before release, or general performance optimization.

78 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use app-brief, design-from-app and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • StijnusSkill

    app-brief

    One-page brief (docs/BRIEF.md) for a new macOS app, written before any code. Use when the user has an app idea, wants to replace an app they pay for, or the research and clone skills are done.

    Also in 3 projects that use this

  • StijnusSkill

    design-from-app

    Rebuild the look of an app the user likes as a native SwiftUI design kit, by measuring its screenshots (sizes, spacing, type, colors, icons), building its parts, and comparing pixel by pixel until they match. Use when the user names an app whose look they want, shares screenshots of one, or says "make it look like X".

    Also in 3 projects that use this

  • FlorianBruniauxSkill

    tdd-rust

    Also in 3 projects that use this

  • RodrigoTomeESSkill

    web-quality-audit

    Comprehensive web quality audit covering performance, accessibility, SEO, and best practices. Use when asked to "audit my site", "review web quality", "run lighthouse audit", "check page quality", or "optimize my website".

    Also in 9 projects that use this

  • launchapp-devSkill

    layout-grid

    Define responsive layout grid systems with columns, gutters, margins, and breakpoint behavior.

    Also in 3 projects that use this

  • MohamedAbdallah-14Skill

    app-icon

    Generate an app icon from a single 1024² master and fan out to iOS (AppIcon.appiconset with squircle-ready 1024 opaque), Android (adaptive foreground + background + Android 13 monochrome), PWA (192/512 + 512 maskable with 80% safe zone), and visionOS (3-layer parallax).

    Also in 3 projects that use this

  • +1 more from Stijnus

The file

We split this skill into the rules it gives an agent

2 rules. 0 are common, 2 are distinctive, and 0 are very specific to this project.

  • 0

    Common

    Most of the 52 edited versions we read keep these.

  • 2

    Distinctive

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Run all relevant categories in PARALLEL using independent Task agents.

    line 33
  2. Distinctive:

    Read matched files to confirm the finding is real

    line 36

“Common” is measured: kept by at least 6 in 10 of the 52 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Android Performance Audit

Produce a structured audit report with prioritized findings and concrete fixes.

Audit Process

Phase 1: Triage

Scan project structure (build.gradle, AndroidManifest.xml, source tree) to determine which categories apply. SKIP categories with no relevant code.

CategorySkip If
StartupNo custom Application class, no splash screen
RecompositionNo Jetpack Compose (@Composable not found)
MemoryNo ViewModel / Repository / singleton patterns
ANRNo SharedPreferences / BroadcastReceiver / sync I/O
PaginationNo list screens or large data sets
Baseline ProfilesNEVER skip — always relevant
Battery & NetworkNo background work, location, or network calls

Phase 2: Parallel Scan

Run all relevant categories in PARALLEL using independent Task agents. Each agent:

  1. Grep for the category's anti-patterns (see search guide below)
  2. Read matched files to confirm the finding is real
  3. Return findings in the per-finding format below

Phase 3: Report

Merge parallel results into the final report format below.

Thresholds

MetricTargetCritical
Cold start< 500ms> 1000ms
Warm start< 300ms> 600ms
Hot start< 100ms> 200ms
ANR rate< 0.47%> 1%
Crash rate< 1.09%> 2%

Anti-Pattern Search Guide

Grep-ready patterns per category. Only search categories that passed triage.

Startup

  • class \w+ : Application → check onCreate body for heavy sync init
  • ContentProvider in manifest → auto-init SDKs blocking startup
  • Missing reportFullyDrawn() anywhere in codebase

Recomposition

  • List< / MutableList< / ArrayList< in @Composable fun parameters → unstable type, use ImmutableList or @Immutable wrapper
  • { viewModel. or { \w+ViewModel. inline in Composable call sites → lambda recreated every recomposition, extract with remember
  • items( without key = in LazyColumn/LazyRow
  • .value read outside graphicsLayer / Modifier.layout / Modifier.drawBehind → state read triggers full recomposition instead of layout/draw only
  • Missing composeCompiler { reportsDestination } in build.gradle → no compiler metrics

Memory

  • context: or Context field in ViewModel / Repository / object declaration → Activity leak
  • CoroutineScope( without lifecycle-aware cancellation
  • companion object or top-level val holding Activity/View/Fragment reference
  • Object creation (= Rect( / = Paint( / = StringBuilder() inside for / while loop body

ANR

  • .commit() on SharedPreferences → blocks main thread, use .apply()
  • Network/DB/File I/O call NOT wrapped in withContext(Dispatchers.IO) on a path reachable from main thread
  • BroadcastReceiver subclass with onReceive body missing goAsync()

Pagination

  • Column { followed by .forEach or for ( → composes ALL items, use LazyColumn
  • Large data source without Paging 3 integration

Baseline Profiles

  • profileinstaller NOT in dependencies (build.gradle / libs.versions.toml)
  • No :baselineprofile module or BaselineProfileRule test class

Battery & Network

  • AlarmManager usage → should be WorkManager for deferrable work
  • OkHttpClient without .cache( → missing HTTP cache
  • Continuous location or sensor listener without interval / removeUpdates

Output Format

Per Finding

[PERF-{CATEGORY}-{NNN}] impact: CRITICAL | HIGH | MEDIUM | LOW
  Finding: <root cause>
  Location: <file:line>        ← required for CRITICAL/HIGH only
  Fix: <concrete action>
  Metric: <expected improvement>

Final Report

## Performance Audit Report

### Summary
- Critical: N | High: N | Medium: N | Low: N
- Scanned: N/7 categories (skipped: <list with reasons>)

### Findings

#### Startup
[PERF-STARTUP-001] impact: CRITICAL
  Finding: Synchronous SDK init in Application.onCreate
  Location: App.kt:15
  Fix: Defer via App Startup library or lifecycle observer
  Metric: ~400ms cold start reduction

#### ...

### Metrics
| Metric | Estimated | Target | Status |
|--------|-----------|--------|--------|
| Cold start | Xms | <500ms | PASS/FAIL |
| ANR rate | X% | <0.47% | PASS/FAIL |

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.