diff options
| author | Luke Hoersten <[email protected]> | 2026-06-15 07:30:37 -0500 |
|---|---|---|
| committer | Luke Hoersten <[email protected]> | 2026-06-15 07:30:37 -0500 |
| commit | def48e1130a46d16b89794bafa78592dbe146184 (patch) | |
| tree | 06753cd7e5cc3155020f8a144afb6c6be0951590 /main | |
| parent | 51b816025183801f5953d849fe4ea83cd9385582 (diff) | |
http_api: log per-frame timing breakdown every 10 frames (recv / decode / paint)
Diffstat (limited to 'main')
| -rw-r--r-- | main/http_api.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/main/http_api.c b/main/http_api.c index db317e4..08e02ef 100644 --- a/main/http_api.c +++ b/main/http_api.c @@ -343,6 +343,8 @@ static esp_err_t frame_post_handler(httpd_req_t *req) return respond_status(req, "503 Service Unavailable", "frame in flight"); } + int64_t t0 = esp_timer_get_time(); + esp_err_t result = ESP_OK; uint8_t *in = jpeg_decoder_input_buffer(); size_t got = 0; @@ -357,9 +359,12 @@ static esp_err_t frame_post_handler(httpd_req_t *req) return respond_status(req, "400 Bad Request", "body read failed"); } + int64_t t_recv = esp_timer_get_time(); + void *rgb = NULL; uint16_t w = 0, h = 0; esp_err_t dec_err = jpeg_decoder_decode(got, &rgb, &w, &h); + int64_t t_decode = esp_timer_get_time(); if (dec_err != ESP_OK) { viewport_state_lock(); viewport_state_get()->decode_errors++; @@ -384,6 +389,7 @@ static esp_err_t frame_post_handler(httpd_req_t *req) } esp_err_t paint_err = display_present_bgr888(rgb); + int64_t t_paint = esp_timer_get_time(); if (paint_err != ESP_OK) { jpeg_decoder_unlock(); return respond_status(req, "500 Internal Server Error", "display paint failed"); @@ -393,10 +399,25 @@ static esp_err_t frame_post_handler(httpd_req_t *req) viewport_state_t *st = viewport_state_get(); st->frames_received++; st->last_frame_us = esp_timer_get_time(); + uint64_t fr = st->frames_received; viewport_state_unlock(); jpeg_decoder_unlock(); + // Timing log every 10 frames so the user can see where each /frame's + // wall-clock budget is going (network → JPEG decode → DSI hand-off). + if (fr % 10 == 0) { + ESP_LOGI(TAG, + "frame %llu: recv=%lldus dec=%lldus paint=%lldus total=%lldms " + "(jpeg=%uKB)", + (unsigned long long)fr, + (long long)(t_recv - t0), + (long long)(t_decode - t_recv), + (long long)(t_paint - t_decode), + (long long)((t_paint - t0) / 1000), + (unsigned)(got / 1024)); + } + state_machine_frame_painted(); // reset idle timer httpd_resp_set_status(req, "204 No Content"); |
