diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2023-07-17 13:54:46 -0700 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2023-07-17 13:54:46 -0700 |
commit | eb0a0bac1f8a78e5164aa07c2e0157d34733cec8 (patch) | |
tree | 0429b893260d1bf9f061985da1f0cff40d6fe3a6 /src/modules | |
parent | b9450fa1b2baba41a912d3d57682df9e14b02530 (diff) |
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.
Diffstat (limited to 'src/modules')
-rw-r--r-- | src/modules/rkt/rkt.c | 9 | ||||
-rw-r--r-- | 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; |