Chuck and Claude Opus 5.5
e39dcb18b4
feat(scroll): report a panel that cannot reach its refresh cap, and suggest one it can hold
...
Scroll speeds are solved against display.hardware.limit_refresh_rate_hz,
which is only a ceiling. A panel that cannot reach it still moves whole
pixels per frame, but every scroll runs slow by the shortfall and the
"smooth" ladder is the cap's, not the panel's. A user rig (Pi 4, 2x128x64,
adafruit-hat-pwm, pwm_bits 9, gpio_slowdown 5) measured 107.6-113.1 Hz under
a 120 Hz cap: 60 px/s ran at 55, and nothing said why.
- scroll_config: refresh_shortfall() (more than 3% under the planned rate),
holdable_cap() (a multiple of 10, 5% under the measurement, since the
measurement is the fast end of an uncapped panel's drift), and
describe_refresh_shortfall().
- FrameTimingRecorder.plan_refresh(): once the measured period has held for
three trusted windows, a shortfall is logged once as a warning naming the
cap to use. DisplayManager calls it only for a real panel, not the
emulator or the fallback canvas. The stats file records
planned_refresh_hz (additive).
- GET /api/v3/config/refresh-rate, plus a hint under the Display tab's
Limit Refresh Rate field with a button that fills in the suggested cap.
- _panel_refresh_hz (behind the Vegas slider's advice) ignores a measurement
written under a different cap, so a changed cap stops being advised from
the old rate before the display restarts.
Verified on ledpi with a temporary 200 Hz cap: the warning logged about a
minute after the restart ("about 132 Hz ... Set Limit Refresh Rate to
120 Hz"), the endpoint returned the same shortfall, and the Display tab
showed the hint; its button filled in 120. ledpi was restored afterwards.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 17:11:09 -04:00
..
2026-10-04 17:11:09 -04:00
2026-10-03 22:30:51 -04:00
2026-10-01 10:45:28 -04:00
2026-10-04 17:11:09 -04:00
2026-03-20 15:06:58 -04:00
2026-09-30 10:48:14 -04:00
2026-10-04 13:25:12 -04:00
2026-10-03 13:09:53 -04:00
2026-10-03 12:11:27 -04:00
2026-07-12 10:38:52 -04:00
2026-10-02 18:15:28 -04:00
2026-09-30 10:39:44 -04:00
2026-10-01 20:37:54 -04:00
2026-09-28 08:24:43 -04:00
2026-09-30 10:39:44 -04:00
2026-09-30 10:39:44 -04:00
2026-09-30 10:39:44 -04:00
2026-09-11 10:07:38 -04:00
2026-09-30 11:15:31 -04:00
2026-10-03 22:18:54 -04:00
2026-10-03 22:18:54 -04:00
2026-09-30 10:39:44 -04:00
2026-09-30 10:39:44 -04:00
2026-08-23 11:44:23 -04:00
2026-10-03 22:30:39 -04:00
2026-10-01 10:33:02 -04:00
2026-10-03 22:30:39 -04:00
2026-09-28 08:24:43 -04:00
2026-10-03 22:30:28 -04:00
2026-10-03 22:30:39 -04:00
2026-09-30 10:39:44 -04:00
2026-09-30 10:48:14 -04:00
2026-10-03 22:30:39 -04:00
2026-10-03 22:30:39 -04:00
2026-09-23 10:29:16 -04:00
2026-09-24 17:35:49 -04:00
2026-09-11 10:07:38 -04:00
2026-10-04 15:07:19 -04:00
2026-09-30 10:39:44 -04:00
2026-09-11 10:07:38 -04:00
2026-09-24 17:35:49 -04:00
2026-09-28 10:42:07 -04:00
2026-10-03 22:18:42 -04:00
2026-09-28 10:40:16 -04:00
2026-10-03 13:09:53 -04:00
2026-10-03 13:09:53 -04:00
2026-09-18 09:56:50 -04:00
2026-09-28 11:08:43 -04:00
2026-08-26 10:03:43 -04:00
2026-09-01 09:54:04 -04:00
2026-09-30 10:48:14 -04:00
2026-10-03 14:26:03 -04:00
2026-08-07 16:17:11 -04:00
2026-09-13 11:53:50 -04:00
2026-09-28 10:41:40 -04:00
2026-09-28 10:39:40 -04:00
2026-09-24 15:51:53 -04:00
2026-09-30 09:38:16 -04:00
2026-08-12 08:42:56 -04:00
2026-10-03 22:18:00 -04:00
2026-10-03 14:14:08 -04:00
2026-10-01 10:45:28 -04:00
2026-08-19 12:28:22 -04:00
2026-10-03 22:18:00 -04:00
2026-09-07 13:37:54 -04:00
2026-08-12 08:40:07 -04:00
2026-09-17 12:38:39 -04:00
2026-10-03 14:26:03 -04:00
2026-09-23 12:54:07 -04:00
2026-08-11 14:14:25 -04:00
2026-10-03 14:14:08 -04:00
2026-08-19 17:40:52 -04:00
2026-09-14 09:42:24 -04:00
2026-09-23 16:33:24 -04:00
2026-09-28 08:26:05 -04:00
2026-09-28 10:41:40 -04:00
2026-09-23 12:52:50 -04:00
2026-10-01 08:27:16 -04:00
2026-10-03 22:30:16 -04:00
2026-09-11 10:07:38 -04:00
2026-10-03 22:30:16 -04:00
2026-08-06 14:04:23 -04:00
2026-10-03 22:18:42 -04:00
2026-09-23 12:36:26 -04:00
2026-09-24 17:32:02 -04:00
2026-09-17 16:37:29 -04:00
2026-09-30 10:48:14 -04:00
2026-08-04 13:46:28 -04:00
2026-09-03 16:06:40 -04:00
2026-09-28 10:39:40 -04:00
2026-10-01 10:45:28 -04:00
2026-10-01 08:37:15 -04:00
2026-09-23 16:48:02 -04:00
2026-09-28 15:00:45 -04:00
2026-10-02 22:30:52 -04:00
2026-09-28 08:25:26 -04:00
2026-09-28 09:07:08 -04:00
2026-09-23 10:29:16 -04:00
2026-08-23 11:43:39 -04:00
2026-10-01 16:10:04 -04:00
2026-09-23 10:29:16 -04:00
2026-10-02 22:30:52 -04:00
2026-09-28 08:26:05 -04:00
2026-09-28 10:39:40 -04:00
2026-09-24 17:37:15 -04:00
2026-09-23 12:36:26 -04:00
2026-10-01 20:27:20 -04:00
2026-09-07 13:37:54 -04:00
2026-10-03 22:18:19 -04:00
2026-10-01 14:51:38 -04:00
2026-09-17 16:37:29 -04:00
2026-09-28 10:39:40 -04:00
2026-10-03 11:51:06 -04:00
2026-10-01 16:10:04 -04:00
2026-09-24 17:35:49 -04:00
2026-09-30 11:15:31 -04:00
2026-08-06 14:04:23 -04:00
2026-09-28 10:40:16 -04:00
2026-09-28 10:40:16 -04:00
2026-09-24 17:32:29 -04:00
2026-08-07 13:27:20 -04:00
2026-09-24 17:32:29 -04:00
2026-09-28 10:40:16 -04:00
2026-09-23 14:32:02 -04:00
2026-10-04 15:46:15 -04:00
2026-10-03 14:14:08 -04:00
2026-09-29 11:49:36 -04:00
2026-10-04 15:46:15 -04:00
2026-10-01 10:00:26 -04:00
2026-09-24 17:31:41 -04:00
2026-10-03 14:01:23 -04:00
2026-10-01 10:45:28 -04:00
2026-09-24 17:32:29 -04:00
2026-09-23 16:50:42 -04:00
2026-10-01 20:13:57 -04:00
2026-10-04 17:11:09 -04:00
2026-08-21 14:30:29 -04:00
2026-10-02 22:30:52 -04:00
2026-09-07 13:37:38 -04:00
2026-07-12 10:38:52 -04:00
2026-09-30 21:32:07 -04:00
2026-08-21 15:50:55 -04:00
2026-09-28 11:08:43 -04:00
2026-09-23 12:36:26 -04:00
2026-08-12 14:58:05 -04:00
2026-08-23 11:42:51 -04:00
2026-10-03 13:35:13 -04:00
2026-08-03 16:52:42 -04:00
2026-10-03 13:35:13 -04:00
2026-10-03 13:09:53 -04:00
2026-10-03 13:48:27 -04:00
2026-09-28 15:00:45 -04:00
2026-10-01 20:37:54 -04:00
2026-10-01 10:33:02 -04:00
2026-10-02 13:42:23 -04:00
2026-10-01 10:33:02 -04:00
2026-10-01 20:37:54 -04:00
2026-10-03 22:18:31 -04:00
2026-08-21 15:50:55 -04:00
2026-09-23 10:29:16 -04:00
2026-10-03 14:38:27 -04:00
2026-09-28 15:00:45 -04:00
2026-09-18 11:09:25 -04:00
2026-09-24 17:35:49 -04:00
2026-09-11 08:41:58 -04:00
2026-09-23 12:36:26 -04:00
2026-09-28 10:40:16 -04:00
2026-09-28 08:26:05 -04:00
2026-09-28 08:26:05 -04:00
2026-09-28 10:40:16 -04:00
2026-09-28 10:39:40 -04:00
2026-09-24 17:32:02 -04:00
2026-10-03 22:30:51 -04:00
2026-09-08 08:34:52 -04:00
2026-08-11 16:10:56 -04:00
2026-09-24 19:57:03 -04:00
2026-09-30 09:10:41 -04:00
2026-10-04 15:46:15 -04:00
2026-09-07 13:37:38 -04:00
2026-09-29 17:59:12 -04:00
2026-09-30 10:39:44 -04:00
2026-09-23 10:34:20 -04:00
2026-09-28 10:41:40 -04:00
2026-09-30 10:39:44 -04:00
2026-09-30 10:39:44 -04:00
2026-09-30 10:39:44 -04:00
2026-09-28 10:40:16 -04:00
2026-09-15 19:17:48 -04:00
2026-08-17 15:35:02 -04:00
2026-09-08 08:34:52 -04:00
2026-09-28 15:00:45 -04:00
2026-09-30 09:10:41 -04:00
2026-09-30 09:31:16 -04:00
2026-08-21 16:19:33 -04:00
2026-09-11 08:41:58 -04:00
2026-09-30 09:10:41 -04:00
2026-08-19 12:28:22 -04:00
2026-10-03 22:18:42 -04:00
2026-10-03 22:18:42 -04:00
2026-09-28 08:25:45 -04:00
2026-09-24 17:32:29 -04:00
2026-08-23 11:43:39 -04:00
2026-09-28 10:41:40 -04:00
2026-09-28 08:25:45 -04:00
2026-09-24 17:32:02 -04:00
2026-07-09 07:54:18 -04:00
2026-10-02 13:42:23 -04:00
2026-10-02 17:47:02 -04:00
2026-09-30 10:48:14 -04:00
2026-09-24 17:32:02 -04:00
2026-09-17 16:37:29 -04:00
2026-09-30 10:48:14 -04:00
2026-10-03 22:18:42 -04:00
2026-09-30 20:59:16 -04:00
2026-09-23 12:36:26 -04:00
2026-10-03 14:01:23 -04:00
2026-09-30 10:48:14 -04:00
2026-09-30 10:39:44 -04:00
2026-09-24 15:49:51 -04:00
2026-10-03 13:09:53 -04:00
2026-08-07 13:02:59 -04:00
2026-09-28 08:25:26 -04:00
2026-09-24 17:32:02 -04:00
2026-09-30 10:39:44 -04:00
2026-10-03 14:14:08 -04:00
2026-09-23 16:33:24 -04:00
2026-09-28 10:39:40 -04:00
2026-10-04 13:25:12 -04:00
2026-10-01 15:59:14 -04:00
2026-10-01 20:37:54 -04:00
2026-10-01 15:59:14 -04:00
2026-09-17 16:37:29 -04:00
2026-09-24 17:32:02 -04:00
2026-10-01 14:32:24 -04:00
2026-08-21 16:22:48 -04:00
2026-08-07 10:17:30 -04:00
2026-05-15 10:19:55 -04:00
2026-09-28 10:41:40 -04:00
2026-10-04 17:11:09 -04:00
2026-07-31 09:40:38 -04:00
2026-09-28 08:26:05 -04:00
2026-10-01 09:48:47 -04:00
2026-09-30 20:50:34 -04:00
2026-10-03 22:18:19 -04:00
2026-09-30 21:07:31 -04:00
2026-10-03 14:26:03 -04:00
2026-09-17 16:37:29 -04:00
2026-10-04 14:41:47 -04:00
2026-10-01 20:27:20 -04:00
2026-09-29 12:38:40 -04:00
2026-10-03 22:19:05 -04:00
2026-09-29 12:38:40 -04:00
2026-10-01 10:10:22 -04:00
2026-09-30 09:11:02 -04:00
2026-09-29 12:38:40 -04:00
2026-10-01 10:10:22 -04:00
2026-09-13 11:53:50 -04:00
2026-09-15 15:32:21 -04:00
2026-10-01 10:10:22 -04:00
2026-10-01 10:10:22 -04:00
2026-10-03 14:01:23 -04:00
2026-10-01 20:39:44 -04:00
2026-09-17 16:37:29 -04:00
2026-09-20 18:25:33 -04:00
2026-09-29 12:38:40 -04:00
2026-10-01 10:10:22 -04:00
2026-08-26 11:25:10 -04:00
2026-09-29 09:05:10 -04:00
2026-10-03 22:19:05 -04:00
2026-09-30 21:32:07 -04:00
2026-09-23 16:33:12 -04:00
2026-09-11 10:07:38 -04:00
2026-09-28 08:26:05 -04:00
2026-10-04 15:07:19 -04:00
2026-09-24 17:32:02 -04:00
2026-09-28 10:41:40 -04:00
2026-09-28 15:00:45 -04:00
2026-09-23 16:33:24 -04:00
2026-09-28 08:24:43 -04:00
2026-09-30 10:39:44 -04:00
2026-10-03 22:18:42 -04:00
2026-09-24 17:32:02 -04:00
2026-07-13 09:32:37 -04:00
2026-09-24 17:31:41 -04:00
2026-09-24 17:31:41 -04:00
2026-09-24 15:51:14 -04:00
2026-09-28 10:40:16 -04:00
2026-09-11 08:45:40 -04:00
2026-09-30 10:39:44 -04:00
2026-10-03 14:26:03 -04:00
2026-09-24 17:31:41 -04:00
2026-08-06 14:04:23 -04:00
2026-09-28 08:25:45 -04:00
2026-10-01 20:19:30 -04:00
2026-09-30 10:48:14 -04:00
2026-09-23 12:36:26 -04:00
2026-09-30 15:35:26 -04:00
2026-08-21 14:30:29 -04:00
2026-10-03 13:09:53 -04:00
2026-09-24 17:37:15 -04:00
2026-09-24 17:37:15 -04:00
2026-10-01 08:27:16 -04:00
2026-10-01 08:27:16 -04:00
2026-09-24 19:38:22 -04:00
2026-09-28 08:25:26 -04:00
2026-09-30 20:59:16 -04:00
2026-09-30 20:59:16 -04:00
2026-08-23 11:42:33 -04:00
2026-08-12 14:06:32 -04:00
2026-09-24 17:37:15 -04:00
2026-09-30 21:07:31 -04:00
2026-09-30 21:07:31 -04:00
2026-09-30 20:59:16 -04:00
2026-09-30 21:07:31 -04:00
2026-09-30 21:07:31 -04:00
2026-10-01 09:48:47 -04:00
2026-10-01 08:27:16 -04:00
2026-10-01 09:48:47 -04:00
2026-08-21 15:50:55 -04:00
2026-09-30 10:39:44 -04:00
2026-07-08 09:43:13 -04:00
2026-10-01 09:48:47 -04:00
2026-09-24 17:37:15 -04:00
2026-09-28 10:39:14 -04:00
2026-09-30 09:30:37 -04:00
2026-09-24 19:57:03 -04:00
2026-09-23 16:33:24 -04:00
2026-09-23 12:36:26 -04:00
2026-09-30 10:48:14 -04:00
2026-09-30 15:35:26 -04:00
2026-09-10 17:42:00 -04:00
2026-09-23 12:36:53 -04:00
2026-09-24 15:53:19 -04:00
2026-09-30 09:02:01 -04:00
2026-09-30 10:48:14 -04:00
2026-09-30 10:39:44 -04:00
2026-09-30 10:39:44 -04:00
2026-09-30 09:38:16 -04:00
2026-10-03 13:09:53 -04:00
2026-09-09 16:25:45 -04:00
2026-09-14 09:42:24 -04:00
2026-09-28 10:42:07 -04:00
2026-09-14 12:40:41 -04:00
2026-09-14 12:40:41 -04:00
2026-09-24 17:32:29 -04:00
2026-10-01 15:51:00 -04:00
2026-09-28 08:26:05 -04:00