Compose performance on Wear OS

Performance on Wear OS is an essential app consideration, as many Wear OS devices have limited CPU and GPU resources compared to larger mobile devices. You can use your knowledge from Jetpack Compose to configure and develop your app to improve performance with Compose for Wear OS, as many of the techniques are similar. However, it's important to understand how to test your app's performance on Wear OS.

To better understand performance concepts, watch Performance best practices and Create beautiful, power efficient apps for Wear OS on YouTube.

Techniques to improve performance

To accurately understand your app’s performance, try running your app in release mode. Debug mode is useful for spotting lots of problems, but it imposes a significant performance cost, and can make it hard to spot other code issues that might be hurting performance. In addition, debug mode does not use baseline profiles, which can further deteriorate performance. You should also use the R8 compiler to shrink and optimize your app. For more information on removing unused resources, see Shrink your resources.

Familiarize yourself with Android Studio tools including Live Edit, Composable Preview, and Wear OS emulator. This can reduce the amount of time spent debugging your app on a watch, which can improve your productivity. Android Studio ships with a watch AVD. Test with Compose Previews and Live Edit until your app is largely working as expected, then test on a device for an accurate reflection of your app’s performance.

Use the JankStats library to track and analyze performance problems in your applications. For an example, see the JankStats sample on GitHub.

Use a baseline profile

Use a baseline profile to improve your app's performance by defining classes and methods needed on critical user journeys. For an in depth guide on this topic, see Baseline profiles. Each Compose for Wear OS library ships with its own profile rules. When your app depends on a library, the library profile rules are automatically merged and distributed with your app's APK and are compiled ahead of time on device. This can reduce start-up times, cut down janky frames, and otherwise improve performance.

If you choose to define your own profile for an app, verify that it does improve performance by writing Macrobenchmark tests. For an example, see Performance samples on GitHub.

Baseline profile commands

There are some useful commands you can use to help working with baseline profiles. First, determine the status of your profile by running the following:

adb shell dumpsys package dexopt | grep -A 1 $PACKAGE_NAME

If the status is not status=speed-profile, the rules have not yet been applied to optimize the app.

Compose for Wear OS profile rules are applied using a background job which runs when the device is charged and idle. You can manually trigger this by running the following command after the app has been launched and enough time has passed to allow the profile-installer to bootstrap the profile in the background. This typically takes around 40 seconds.

adb shell cmd package bg-dexopt-job

You can then re-run the previous command to check that the status is now speed-profile.

For situations when the optimisation is performed at install, see Sideload the baseline profile.