From eb0a0bac1f8a78e5164aa07c2e0157d34733cec8 Mon Sep 17 00:00:00 2001 From: Vito Caputo Date: Mon, 17 Jul 2023 13:54:46 -0700 Subject: modules/rkt: limit Rocket reconnect frequency to 2HZ On Linux I don't notice a significant affect on anything letting rkt try connect every frame when offline but in creative mode. On Windows however, Dan reported significant latencies in the Scener prompt responsiveness and visible slowdowns in this condition. I suspect the WIN32 Rocket library's sync_tcp_connect() code is the real problem here. But for now I can ameliorate things a bit by just hammering on that code path less when unconnected. --- src/modules/rkt/rkt.c | 9 +++++++-- src/modules/rkt/rkt.h | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/modules/rkt/rkt.c b/src/modules/rkt/rkt.c index 9aa18ee..4caa9ba 100644 --- a/src/modules/rkt/rkt.c +++ b/src/modules/rkt/rkt.c @@ -222,8 +222,13 @@ static void rkt_update_rocket(rkt_context_t *ctxt, unsigned ticks) if (!s->connect) return; - if (!ctxt->connected || sync_update(ctxt->sync_device, ctxt->rocket_row, &rkt_sync_cb, ctxt) < 0) - ctxt->connected = !sync_tcp_connect(ctxt->sync_device, s->host, s->port); + if (!ctxt->connected || sync_update(ctxt->sync_device, ctxt->rocket_row, &rkt_sync_cb, ctxt) < 0) { + /* limit connect attempts to 2HZ */ + if (ticks - ctxt->last_connect >= 500) { + ctxt->connected = !sync_tcp_connect(ctxt->sync_device, s->host, s->port); + ctxt->last_connect = ticks; + } + } } diff --git a/src/modules/rkt/rkt.h b/src/modules/rkt/rkt.h index 4ec8599..53b9eba 100644 --- a/src/modules/rkt/rkt.h +++ b/src/modules/rkt/rkt.h @@ -22,6 +22,7 @@ typedef struct rkt_context_t { double rows_per_ms; double rocket_row; unsigned last_ticks; + unsigned last_connect; /* ticks at last connect attempt */ unsigned paused:1; unsigned connected:1; /* currently connected to the RocketEditor */ size_t n_scenes; -- cgit v1.2.3