Device Performance Monitor watches the live memory, CPU, threads and frame-rate of one app — on an Android phone, an iOS Simulator, or a real iPhone or iPad. Have an AI read the session, then reach for the built-in tools: bundle size and build compare, startup timing, a cold-start benchmark, a jank timeline, a live log viewer, battery reports, screenshot & record, threshold alerts, and a dpm command line you can drop into CI or hand to an AI agent. You pick the platform, the device and the app inside the window. Nothing is hard-coded.
brew install --cask coursion-studio/tools/device-performance-monitor
Memory that never comes back down, a CPU spike that lines up with a tap, a build that grew for no reason — the things you open the app to find, and the tools you reach for next.
The app opens on a launcher that fits your screen. Live monitoring is the headline; seven tools sit under it, each with its own glyph, plus a Command line & AI card. Press one and the window eases open straight into it.
The app's total footprint and the share actually resident in RAM, charted second by second with minimum, average and peak called out. The session-change card tells you at a glance whether you finished heavier than you started.
Per-process CPU as a share of a core, a live thread count that surfaces leaks the moment it stops coming back down, and frame-rate, jank and frame-time percentiles for anything that draws.
Drop an App Bundle and get the real per-device download — one ABI, debug symbols excluded — next to the raw file, a composition bar, a treemap you can drill into, and the biggest files. It matches Android Studio; run bundletool for the exact figure or compare two builds.
Install dpm on your PATH with one button. Every command — record, battery, devices, apps — gets its own tab with an options table, required and default tags, copyable examples and colour-coded exit codes. Set memory and CPU budgets and dpm record becomes a CI gate.
Four copyable prompts for Claude Code, Codex or Cursor: check a flow for memory leaks, compare before and after a change, add a CI performance gate, or compare battery drain across branches. The agent runs dpm on your Mac and reads the JSON back to you.
Start by choosing what to watch — an Android phone over adb, an iOS Simulator, or a real iPhone or iPad. The app finds ready devices for you; nothing is hard-coded to one project.
One app at a time, sampled once a second, with only the metrics you chose fetched — so the tool never distorts what it is measuring.
App PSS, resident and swap, plus the full pool breakdown — native heap, Java heap, graphics, code — updated every second.
Per-process CPU and a live thread count, read straight from /proc and differenced tick to tick.
Frames per second from SurfaceFlinger — even for a SurfaceView game — with jank percentage and frame-time p95 from gfxinfo.
Battery level, temperature and current draw, plus per-app received and sent throughput.
One Android phone over adb, an iOS Simulator, or a real iPhone or iPad — chosen in the window, nothing hard-coded.
Have Claude, GPT, or Gemini read a session — a plain-language summary, per-screen diagnosis and fixes, a worst-screens ranking and anomaly flags, with your own API key.
See which screen the app was showing for every reading — native and React Native — so a spike or leak is pinned to the route that caused it.
Save a session as CSV, JSON, Markdown, a shareable HTML report, or the charts as PNG or PDF — and set a run as a baseline to diff future runs against it.
Every stopped session is saved automatically, so you can reopen an earlier run and analyze or compare it later — even after relaunching.
English, Türkçe, Español, Deutsch and Français — switch in Settings and the interface re-localizes live, no relaunch.
A hub of standalone tools sits alongside live monitoring — pick one from the Home launcher and get to work. Seven full tools, threshold alerts and a dpm command line, with more landing over time.
Drop an .apk, .aab or .ipa and see where its bytes go — a composition bar, a category breakdown, a treemap and the biggest files. For an App Bundle it estimates the real per-device download (one ABI, debug symbols excluded) and matches Android Studio; run bundletool for the exact figure, compare two builds file by file, or ask an AI how to shrink it.
Cold and warm launch times on Android, an iOS Simulator or a real iPhone — batched across runs and charted with averages, so a regression in first-frame time is obvious. Pick the app from the installed list instead of typing an identifier.
Measure Android cold start the way Macrobenchmark does — over adb, no Gradle module or test needed. Pick a compilation profile (none, partial or full), and it recompiles, warms up, then times many launches and reports the distribution — median, p90 and p95 — with a stable-vs-noisy read.
Per-frame render times captured from gfxinfo, with janky and frozen frames called out and the p95 frame time — so a stutter is a spike you can point at, not a feeling.
Stream live device logs — logcat, a simulator's log or an iPhone's syslog — with a text filter and a minimum level, colored by severity, follow the tail, and save the filtered lines to a file.
Track charge, temperature, charging and thermal state over a session with a derived drain rate. Save a labeled report, auto-record for a set duration, then compare two runs — a branch against main, or release against release — with the deltas and a plain verdict.
Grab a device screenshot (preview then save) or a screen recording — for Android and the iOS Simulator — without leaving the app.
The app doubles as a dpm command line, installed on your PATH with one click. dpm record samples an app without a window, writes a min/avg/max summary and fails the build on a memory or CPU budget; dpm battery captures a labeled report per branch; dpm devices and dpm apps find what to point it at.
Copy a ready-made prompt into Claude Code, Codex or Cursor — check a flow for leaks, compare before and after a change, add a CI gate, or compare battery drain across branches. The agent runs dpm and reads the JSON back to you.
Set a ceiling or floor per metric — app memory over 400 MB, FPS under 45 — and get a system and in-window notification the moment a live reading crosses it.
A signed, universal build for Apple silicon and Intel that updates itself in place.
Prefer the command line? Install and upgrade it with a cask.
brew install --cask coursion-studio/tools/device-performance-monitorRequires macOS 14 (Sonoma) or later, universal for Apple silicon and Intel. Android monitoring needs adb; iOS monitoring (Simulator or a real iPhone/iPad) needs Xcode's command-line tools. The bundle-size tool works on its own; its exact per-device figure optionally uses bundletool, and AI analysis uses your own Claude, OpenAI or Gemini key. The same app doubles as a dpm command line for CI and AI agents.