Skip to content

Hot Spots Tab

The Hot Spots tab provides a flat, sortable table of every instrumented composable, ranked by severity. It answers the question: “Which composables need attention right now?”

At the top of the tab, a summary card provides an at-a-glance overview:

3 violations | 12 near budget | 85 OK

Each count is color-coded (red, yellow, green) with a badge. This gives you an immediate sense of the app’s overall recomposition health.

The table displays every composable with 8 columns:

ColumnTypeDescription
ComposableStringThe simple name (e.g., ProfileHeader, HomeScreen.Scaffold{})
Rate/sIntCurrent recomposition rate (rolling 1-second window)
Budget/sIntMaximum acceptable rate for this budget class
RatioFloatRate divided by budget. Values above 1.0 indicate a violation.
Skip %FloatPercentage of calls where the body was skipped
Peak/sIntHighest rate ever recorded for this composable
ClassEnumBudget class: SCREEN, CONTAINER, LEAF, INTERACTIVE, LIST_ITEM, ANIMATED, UNKNOWN
StatusIconColor-coded indicator (red/yellow/green)

The table sorts by Rate/s descending by default, putting the highest recomposition rates at the top. Click any column header to sort by that column.

  • Ratio descending — surfaces composables closest to or exceeding their budget, regardless of absolute rate
  • Skip % ascending — finds composables with the lowest skip rates, where Compose is failing to skip effectively
  • Peak/s descending — identifies composables that had the highest burst rates, even if they have since calmed down

Double-clicking any row navigates to the @Composable function in the editor. The plugin performs a PSI lookup by fully-qualified name to find the function declaration.

  • Copy FQN — copies the fully-qualified name to the clipboard
  • Show in Monitor Tree — switches to the Monitor tab and selects this composable in the tree
  • View History — switches to the History tab filtered to this composable (if history data is available)

The table updates via SessionListener.onSnapshot() each time new data arrives from the socket (every 1 second). Updates only apply when the Hot Spots tab is visible — inactive tabs do not repaint, avoiding unnecessary UI work.