diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index bc9a57bc77..f5a92117c2 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -242,14 +242,16 @@ void DisplayApp::Refresh() { // If not true, then wait that amount of time queueTimeout = CalculateSleepTime(); if (queueTimeout == 0) { - // Keep running the task handler if it still has things to draw - while (!lv_task_handler()) { + // Only advance the tick count when LVGL is done + // Otherwise keep running the task handler while it still has things to draw + // Note: under high graphics load, LVGL will always have more work to do + if (lv_task_handler() > 0) { + // Drop frames that we've missed if drawing/event handling took way longer than expected + while (queueTimeout == 0) { + alwaysOnTickCount += 1; + queueTimeout = CalculateSleepTime(); + } }; - // Drop frames that we've missed if the loop took way longer than expected to execute - while (queueTimeout == 0) { - alwaysOnTickCount += 1; - queueTimeout = CalculateSleepTime(); - } } } else { queueTimeout = portMAX_DELAY;