Inspect performance
Stay organized with collections
Save and categorize content based on your preferences.
Inspect performance to help you understand what is happening in your app and
ensure it meets your expectations.
Android provides several tools you can use to inspect your app's performance.
When getting started, we recommend you focus on one area at a time during
inspection. These areas can include the following:
- App startup
- Slow rendering (jank)
- Screen transitions and navigation events
- Long running work
- Operations in the background, such as I/O and networking
Alternatively, you can inspect critical user journeys of your app's workflow.
This can help you gain a holistic understanding of where performance and
expectations don't align.
There are two main approaches when inspecting performance, manual and automated.
It's likely that you start with manual debugging when inspecting a new area.
Manual inspection
After deciding which area of your app to inspect, you can use a variety of tools
to identify what exactly is happening.
The most comprehensive tool to inspect performance on devices running Android 9
and higher is Perfetto. Perfetto provides the highest possible
detail of tracing information. By using powerful filters, you can adjust the
level of detail for your needs. For more information about how to capture traces
from Android devices, see the Quickstart: Record traces on
Android guide.
The Android profilers built into Android Studio can also provide valuable
insights into your app's performance, where you can limit the level of detail to
your app, or when running on devices earlier than Android
9.
For more information, see Overview of system tracing or watch the in-depth
series on performance debugging.
Automated testing
In addition to manual inspection, you can set up automated tests to collect and
aggregate performance data. This helps you understand what users are actually
seeing and identify when regressions might occur. For more information about
setting up automated performance tests for your app, see Benchmark your
app.
There are multiple tools you can use to inspect and monitor performance to help
improve your app.
Understand performance locally with Benchmark libraries
- The Macrobenchmark library helps you measure larger end-user
interactions, such as startup, interacting with the UI, and animations.
- The Microbenchmark library helps analyze performance of more granular,
app-specific situations.
Understand performance in production
- Android vitals can help improve your app's performance by alerting you
when various performance metrics exceed predetermined thresholds.
- The Firebase performance SDK collects various metrics about your app's
performance. For example, you can use the SDK to measure the time between
when the user opens the app and when the app becomes responsive, helping
identify potential startup bottlenecks.
Profile locally with Android Studio
- Use Android Studio to record and view system traces or stack sampling
traces.
- Record traces using Android Studio. For additional information, see
the Performance Debugging video series.
- Use Simpleperf, a native stack sampling tool for Android, to profile
both Android apps and native processes running on Android. It can profile
both Java and C++ code on Android.
Advanced profiling tools: Perfetto tracing
Additional resources
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2023-10-18 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2023-10-18 UTC."],[],[],null,["# Inspect performance to help you understand what is happening in your app and\nensure it meets your expectations.\n\nAndroid provides several tools you can use to inspect your app's performance.\nWhen getting started, we recommend you focus on one area at a time during\ninspection. These areas can include the following:\n\n- App startup\n- Slow rendering (jank)\n- Screen transitions and navigation events\n- Long running work\n- Operations in the background, such as I/O and networking\n\nAlternatively, you can inspect critical user journeys of your app's workflow.\nThis can help you gain a holistic understanding of where performance and\nexpectations don't align.\n\nThere are two main approaches when inspecting performance, manual and automated.\nIt's likely that you start with manual debugging when inspecting a new area.\n\nManual inspection\n-----------------\n\nAfter deciding which area of your app to inspect, you can use a variety of tools\nto identify what exactly is happening.\n\nThe most comprehensive tool to inspect performance on devices running Android 9\nand higher is [Perfetto](https://perfetto.dev/). Perfetto provides the highest possible\ndetail of tracing information. By using powerful filters, you can adjust the\nlevel of detail for your needs. For more information about how to capture traces\nfrom Android devices, see the [Quickstart: Record traces on\nAndroid](https://perfetto.dev/docs/quickstart/android-tracing) guide.\n\nThe [Android profilers](/studio/profile) built into Android Studio can also provide valuable\ninsights into your app's performance, where you can limit the level of detail to\nyour app, or when running on devices earlier than Android\n9.\n\nFor more information, see [Overview of system tracing](/topic/performance/tracing) or watch the in-depth\nseries on [performance debugging](https://www.youtube.com/playlist?list=PLWz5rJ2EKKc-xjSI-rWn9SViXivBhQUnp).\n\nAutomated testing\n-----------------\n\nIn addition to manual inspection, you can set up automated tests to collect and\naggregate performance data. This helps you understand what users are actually\nseeing and identify when regressions might occur. For more information about\nsetting up automated performance tests for your app, see [Benchmark your\napp](/topic/performance/benchmarking/benchmarking-overview).\n\nApp startup performance\n-----------------------\n\nThere are multiple tools you can use to inspect and monitor performance to help\nimprove your app.\n\n### Understand performance locally with Benchmark libraries\n\n- The [Macrobenchmark library](/topic/performance/benchmarking/macrobenchmark-overview) helps you measure larger end-user interactions, such as startup, interacting with the UI, and animations.\n- The [Microbenchmark library](/topic/performance/benchmarking/microbenchmark-overview) helps analyze performance of more granular, app-specific situations.\n\n### Understand performance in production\n\n- [Android vitals](/topic/performance/vitals) can help improve your app's performance by alerting you when various performance metrics exceed predetermined thresholds.\n- The [Firebase performance SDK](https://firebase.google.com/docs/perf-mon/get-started-android) collects various metrics about your app's performance. For example, you can use the SDK to measure the time between when the user opens the app and when the app becomes responsive, helping identify potential startup bottlenecks.\n\n### Profile locally with Android Studio\n\n- Use [Android Studio](/studio/profile) to record and view system traces or stack sampling traces.\n- [Record traces](/studio/profile/record-traces) using Android Studio. For additional information, see the [Performance Debugging video series](https://www.youtube.com/playlist?list=PLWz5rJ2EKKc-xjSI-rWn9SViXivBhQUnp).\n- Use [Simpleperf](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/doc/README.md), a native stack sampling tool for Android, to profile both Android apps and native processes running on Android. It can profile both Java and C++ code on Android.\n\n### Advanced profiling tools: Perfetto tracing\n\n- [Perfetto](https://perfetto.dev/): a platform-wide tracing tool available on Android 10 (API level 29) and higher. For more information, see the [overview of Perfetto traces](https://perfetto.dev/docs/).\n- [Run Perfetto using `adb`](/studio/command-line/perfetto): describes how to run the `perfetto` command-line tool to capture traces.\n- [Recording a trace through the cmdline](https://perfetto.dev/docs/quickstart/android-tracing#recording-a-trace-through-the-cmdline): describes how to build and run the `perfetto` command-line tool to capture traces.\n- [Perfetto web-based trace viewer](https://perfetto.dev/docs/quickstart/android-tracing#recording-a-trace-through-the-perfetto-ui): opens Perfetto traces and displays a complete report. You can also open [Systrace](/topic/performance/tracing) traces in this viewer using the legacy UI option.\n\nAdditional resources\n--------------------\n\n- [Performance debugging - MAD skills series](https://www.youtube.com/playlist?list=PLWz5rJ2EKKc-xjSI-rWn9SViXivBhQUnp)\n- [Profile your app performance](/studio/profile)\n- [Write a Macrobenchmark](/topic/performance/benchmarking/macrobenchmark-overview)\n- [Microbenchmark](/topic/performance/benchmarking/microbenchmark-overview)"]]