DEV Community

StareBrain
StareBrain

Posted on

Your AI agent works great. Then the phone gets warm. Then it doesn’t.

There’s a failure mode in on-device AI agents that doesn’t show up in testing.

It shows up five minutes into a real session.

The device gets warm. The CPU downclocks. Latency spikes. The agent that responded in 200ms is now taking 800ms. Users don’t report “thermal throttling” — they report “it got slow” or “it stopped working.”

By the time you’re debugging, it looks like a model problem. It’s not.

What’s actually happening

Android’s thermal system throttles CPU and GPU frequency when the device temperature rises. Continuous inference — running a model repeatedly over several minutes — generates heat. On flagship devices with good thermal management, you might not notice. On a mid-range device from two years ago, you will.

PowerManager.getThermalHeadroom() gives you a 1-second forecast of available thermal headroom, from 0.0 (throttling now) to 1.0 (full capacity). Most agents never check it.

The fix: proactive throttling

Don’t wait for the device to throttle you. Monitor headroom and throttle yourself first.

`

`kotlin
private fun getThermalHeadroom(context: Context): Float {
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
powerManager.getThermalHeadroom(1) // 1-second forecast
} else {
1.0f // Assume full capacity on older APIs
}
}

fun shouldThrottleInference(context: Context): Boolean {
val headroom = getThermalHeadroom(context)
return headroom < 0.3f // Throttle when less than 30% headroom remains
}
`
`

When headroom drops below your threshold:

`when {
    headroom < 0.2f -> switchToLighterModel()    // Critical — swap model
    headroom < 0.3f -> reduceInferenceFrequency() // Warning — slow down
    headroom < 0.5f -> skipNonCriticalInference() // Caution — defer optional calls
}`
Enter fullscreen mode Exit fullscreen mode

Why proactive beats reactive

If you wait for the device to throttle, latency has already spiked and the user has already noticed. Proactive throttling keeps the experience degrading gracefully — slower responses, deferred non-critical actions — rather than suddenly breaking.

The lighter model running at 400ms is a better user experience than the full model stuttering at 1200ms because the CPU is thermal-limited.

Test for this

Your emulator won’t reproduce it. Your Pixel 9 probably won’t either.

Run sustained inference on a 3-4 year old mid-range device for 10 minutes. Watch the latency numbers. If they climb, you have a thermal problem. Firebase Test Lab’s device matrix is the fastest way to find which devices in your target market are affected.

Thermal throttling isn’t a model problem or a code problem. It’s a physics problem. The only fix is building around it.

StareBrain is an on-device AI agent for Android. Pre-launch — waitlist on the product page.

Top comments (0)