# HG changeset patch # User drewp@bigasterisk.com # Date 2023-05-24 06:42:33 # Node ID 9b6f4b3c329c6f897aebdc2ec1fb3ef17afdc9e8 # Parent b0e6fe19dc3b4912db895bbebf6197af301dd386 correct some output loop rates; clean up diff --git a/light9/collector/output.py b/light9/collector/output.py --- a/light9/collector/output.py +++ b/light9/collector/output.py @@ -86,8 +86,10 @@ class BackgroundLoopOutput(Output): async def _loop(self): while True: + t1 = time.time() self._loop_one() - await asyncio.sleep(.1) + remain = max(0, 1 / self.rate - (time.time() - t1)) + await asyncio.sleep(remain) def _loop_one(self): start = time.time() diff --git a/light9/effect/sequencer/eval_faders.py b/light9/effect/sequencer/eval_faders.py --- a/light9/effect/sequencer/eval_faders.py +++ b/light9/effect/sequencer/eval_faders.py @@ -38,11 +38,8 @@ class FaderEval: """ def __init__(self, graph: SyncedGraph, - sendToCollector: Callable[[DeviceSettings], Coroutine[None ,None,None]], ): self.graph = graph - self.sendToCollector = sendToCollector - self.faders: List[Fader] = [] # self.simpleOutputs = SimpleOutputs(self.graph) @@ -85,7 +82,6 @@ class FaderEval: raise TypeError('f.value should be set by now') effectSettings = EffectSettings(self.graph, [(f.effect, f.setEffectAttr, f.value)]) - print(f'{effectSettings=}') notesSettings.append(f.ee.compute(effectSettings)) # ee = effecteval.EffectEval(self.graph, f.effectClass, self.simpleOutputs) @@ -98,11 +94,3 @@ class FaderEval: # if deviceSettings: # notesSettings.append(deviceSettings) return DeviceSettings.merge(self.graph, notesSettings) - - - # @metrics('update_call_fader').time() - # async def update(self): - # log.info(f'update {len(self.notes)=}') - # devSettings = self.computeOutput() - # with metrics('update_s3_send_fader').time(): # our measurement - # sendSecs = await self.sendToCollector(devSettings) diff --git a/light9/effect/sequencer/service.py b/light9/effect/sequencer/service.py --- a/light9/effect/sequencer/service.py +++ b/light9/effect/sequencer/service.py @@ -7,7 +7,6 @@ import json import logging import time -import aiohttp from louie import dispatcher from rdfdb.syncedgraph.syncedgraph import SyncedGraph from sse_starlette.sse import EventSourceResponse @@ -15,15 +14,16 @@ from starlette.applications import Starl from starlette.routing import Route from starlette_exporter import PrometheusMiddleware, handle_metrics +from lib.background_loop import loop_forever from light9 import networking from light9.collector.collector_client_asyncio import sendToCollector from light9.effect.sequencer.eval_faders import FaderEval from light9.effect.sequencer.sequencer import Sequencer, StateUpdate -from light9.effect.settings import DeviceSettings from light9.metrics import metrics from light9.run_local import log -from lib.background_loop import loop_forever +RATE = 30 + async def changes(): state = {} @@ -48,18 +48,6 @@ async def send_page_updates(request): return EventSourceResponse(changes()) -################################################################### - - -async def _send_one(faders: FaderEval): - ds = faders.computeOutput() - await sendToCollector('effectSequencer', session='0', settings=ds) - - - -#################################################################### - - def main(): graph = SyncedGraph(networking.rdfdb.url, "effectSequencer") logging.getLogger('autodepgraphapi').setLevel(logging.INFO) @@ -67,11 +55,14 @@ def main(): logging.getLogger('sse_starlette.sse').setLevel(logging.INFO) # seq = Sequencer(graph, send) # per-song timed notes - faders = FaderEval(graph) # bin/fade's untimed notes + faders = FaderEval(graph) # bin/fade's untimed effects - async def so(first_run): - await _send_one(faders) - faders_loop = loop_forever(so, metric_prefix='faders', sleep_period=.05, log_fps=True) + #@metrics('computeAndSend').time() # needs rework with async + async def update(first_run): + ds = faders.computeOutput() + await sendToCollector('effectSequencer', session='0', settings=ds) + + faders_loop = loop_forever(update, metric_prefix='faders', sleep_period=1 / RATE) app = Starlette( debug=True,