Mercurial > code > home > repos > light9
changeset 2223:9b6f4b3c329c
correct some output loop rates; clean up
author | drewp@bigasterisk.com |
---|---|
date | Tue, 23 May 2023 23:42:33 -0700 |
parents | b0e6fe19dc3b |
children | 0dd05e9d4ae7 |
files | light9/collector/output.py light9/effect/sequencer/eval_faders.py light9/effect/sequencer/service.py |
diffstat | 3 files changed, 13 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/light9/collector/output.py Tue May 23 23:40:02 2023 -0700 +++ b/light9/collector/output.py Tue May 23 23:42:33 2023 -0700 @@ -86,8 +86,10 @@ 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()
--- a/light9/effect/sequencer/eval_faders.py Tue May 23 23:40:02 2023 -0700 +++ b/light9/effect/sequencer/eval_faders.py Tue May 23 23:42:33 2023 -0700 @@ -38,11 +38,8 @@ """ 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 @@ 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 @@ # 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)
--- a/light9/effect/sequencer/service.py Tue May 23 23:40:02 2023 -0700 +++ b/light9/effect/sequencer/service.py Tue May 23 23:42:33 2023 -0700 @@ -7,7 +7,6 @@ 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.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 @@ 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 @@ 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,