kopia lustrzana https://github.com/corrscope/corrscope
Add config parameter for benchmarking
rodzic
f0da6c682e
commit
c58fb527cc
ovgenpy
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import time
|
||||
from typing import Optional, List
|
||||
from enum import unique, IntEnum
|
||||
from typing import Optional, List, Union
|
||||
|
||||
from ovgenpy import outputs
|
||||
from ovgenpy.channel import Channel, ChannelConfig
|
||||
|
@ -16,6 +17,13 @@ from ovgenpy.wave import Wave
|
|||
|
||||
RENDER_PROFILING = True
|
||||
|
||||
@unique
|
||||
class BenchmarkMode(IntEnum):
|
||||
NONE = 0
|
||||
TRIGGER = 1
|
||||
RENDER = 2
|
||||
OUTPUT = 3
|
||||
|
||||
|
||||
@register_config(always_dump='wave_prefix')
|
||||
class Config:
|
||||
|
@ -35,10 +43,20 @@ class Config:
|
|||
|
||||
outputs: List[outputs.IOutputConfig]
|
||||
|
||||
benchmark_mode: Union[str, BenchmarkMode] = 'NONE'
|
||||
|
||||
@property
|
||||
def render_width_s(self) -> float:
|
||||
return self.width_ms / 1000
|
||||
|
||||
def __post_init__(self):
|
||||
try:
|
||||
self.benchmark_mode = BenchmarkMode[self.benchmark_mode]
|
||||
except KeyError:
|
||||
raise ValueError(
|
||||
f'invalid benchmark_mode mode {self.benchmark_mode} not in '
|
||||
f'{[el.name for el in BenchmarkMode]}')
|
||||
|
||||
|
||||
_FPS = 60 # f_s
|
||||
|
||||
|
@ -104,6 +122,9 @@ class Ovgen:
|
|||
if RENDER_PROFILING:
|
||||
begin = time.perf_counter()
|
||||
|
||||
benchmark_mode = self.cfg.benchmark_mode
|
||||
not_benchmarking = not benchmark_mode
|
||||
|
||||
# For each frame, render each wave
|
||||
prev = -1
|
||||
for frame in range(nframes):
|
||||
|
@ -120,17 +141,23 @@ class Ovgen:
|
|||
sample = round(wave.smp_s * time_seconds)
|
||||
region_len = round(wave.smp_s * render_width_s)
|
||||
|
||||
trigger_sample = channel.trigger.get_trigger(sample)
|
||||
if not_benchmarking or benchmark_mode == BenchmarkMode.TRIGGER:
|
||||
trigger_sample = channel.trigger.get_trigger(sample)
|
||||
else:
|
||||
trigger_sample = sample
|
||||
|
||||
datas.append(wave.get_around(
|
||||
trigger_sample, region_len, channel.render_subsampling))
|
||||
|
||||
# Render frame
|
||||
renderer.render_frame(datas)
|
||||
if not_benchmarking or benchmark_mode >= BenchmarkMode.RENDER:
|
||||
# Render frame
|
||||
renderer.render_frame(datas)
|
||||
|
||||
# Output frame
|
||||
frame = renderer.get_frame()
|
||||
for output in self.outputs:
|
||||
output.write_frame(frame)
|
||||
if not_benchmarking or benchmark_mode == BenchmarkMode.OUTPUT:
|
||||
# Output frame
|
||||
frame = renderer.get_frame()
|
||||
for output in self.outputs:
|
||||
output.write_frame(frame)
|
||||
|
||||
if RENDER_PROFILING:
|
||||
# noinspection PyUnboundLocalVariable
|
||||
|
|
Ładowanie…
Reference in New Issue