Performance tweaks
This commit is contained in:
parent
ac2b4ff8ab
commit
4118c75b86
|
|
@ -804,7 +804,7 @@ struct EditorApp {
|
||||||
audio_input_stream: Option<cpal::Stream>,
|
audio_input_stream: Option<cpal::Stream>,
|
||||||
audio_buffer_size: u32,
|
audio_buffer_size: u32,
|
||||||
audio_event_rx: Option<rtrb::Consumer<daw_backend::AudioEvent>>,
|
audio_event_rx: Option<rtrb::Consumer<daw_backend::AudioEvent>>,
|
||||||
audio_events_pending: std::sync::Arc<std::sync::atomic::AtomicBool>,
|
last_input_monitoring: bool,
|
||||||
/// Count of in-flight graph preset loads — keeps the repaint loop alive
|
/// Count of in-flight graph preset loads — keeps the repaint loop alive
|
||||||
/// until the audio thread sends GraphPresetLoaded events for all of them
|
/// until the audio thread sends GraphPresetLoaded events for all of them
|
||||||
pending_graph_loads: std::sync::Arc<std::sync::atomic::AtomicU32>,
|
pending_graph_loads: std::sync::Arc<std::sync::atomic::AtomicU32>,
|
||||||
|
|
@ -1088,10 +1088,10 @@ impl EditorApp {
|
||||||
audio_stream,
|
audio_stream,
|
||||||
audio_controller,
|
audio_controller,
|
||||||
audio_event_rx,
|
audio_event_rx,
|
||||||
|
last_input_monitoring: false,
|
||||||
audio_input,
|
audio_input,
|
||||||
audio_input_stream: None,
|
audio_input_stream: None,
|
||||||
audio_buffer_size: config.audio_buffer_size,
|
audio_buffer_size: config.audio_buffer_size,
|
||||||
audio_events_pending: std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)),
|
|
||||||
pending_graph_loads: std::sync::Arc::new(std::sync::atomic::AtomicU32::new(0)),
|
pending_graph_loads: std::sync::Arc::new(std::sync::atomic::AtomicU32::new(0)),
|
||||||
commit_raster_floating_if_any: false,
|
commit_raster_floating_if_any: false,
|
||||||
pending_node_group: false,
|
pending_node_group: false,
|
||||||
|
|
@ -4818,10 +4818,6 @@ impl eframe::App for EditorApp {
|
||||||
}
|
}
|
||||||
|
|
||||||
let _pre_events_ms = _frame_start.elapsed().as_secs_f64() * 1000.0;
|
let _pre_events_ms = _frame_start.elapsed().as_secs_f64() * 1000.0;
|
||||||
// Check if audio events are pending and request repaint if needed
|
|
||||||
if self.audio_events_pending.load(std::sync::atomic::Ordering::Relaxed) {
|
|
||||||
ctx.request_repaint();
|
|
||||||
}
|
|
||||||
// Keep repainting while waiting for graph preset loads to complete
|
// Keep repainting while waiting for graph preset loads to complete
|
||||||
if self.pending_graph_loads.load(std::sync::atomic::Ordering::Relaxed) > 0 {
|
if self.pending_graph_loads.load(std::sync::atomic::Ordering::Relaxed) > 0 {
|
||||||
ctx.request_repaint();
|
ctx.request_repaint();
|
||||||
|
|
@ -4847,9 +4843,7 @@ impl eframe::App for EditorApp {
|
||||||
|
|
||||||
// Poll audio events from the audio engine
|
// Poll audio events from the audio engine
|
||||||
if let Some(event_rx) = &mut self.audio_event_rx {
|
if let Some(event_rx) = &mut self.audio_event_rx {
|
||||||
let mut polled_events = false;
|
|
||||||
while let Ok(event) = event_rx.pop() {
|
while let Ok(event) = event_rx.pop() {
|
||||||
polled_events = true;
|
|
||||||
use daw_backend::AudioEvent;
|
use daw_backend::AudioEvent;
|
||||||
match event {
|
match event {
|
||||||
AudioEvent::PlaybackPosition(time) => {
|
AudioEvent::PlaybackPosition(time) => {
|
||||||
|
|
@ -5262,19 +5256,11 @@ impl eframe::App for EditorApp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we polled events, set the flag to trigger another update
|
|
||||||
// (in case more events arrive before the next frame)
|
|
||||||
if polled_events {
|
|
||||||
self.audio_events_pending.store(true, std::sync::atomic::Ordering::Relaxed);
|
|
||||||
} else {
|
|
||||||
// No events this frame, clear the flag
|
|
||||||
self.audio_events_pending.store(false, std::sync::atomic::Ordering::Relaxed);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update input monitoring based on active layer
|
// Update input monitoring based on active layer (only send command when changed)
|
||||||
if let Some(controller) = &self.audio_controller {
|
{
|
||||||
let should_monitor = self.active_layer_id.map_or(false, |layer_id| {
|
let should_monitor = self.audio_controller.is_some() && self.active_layer_id.map_or(false, |layer_id| {
|
||||||
let doc = self.action_executor.document();
|
let doc = self.action_executor.document();
|
||||||
if let Some(layer) = doc.get_layer(&layer_id) {
|
if let Some(layer) = doc.get_layer(&layer_id) {
|
||||||
matches!(layer, lightningbeam_core::layer::AnyLayer::Audio(a) if a.audio_layer_type == lightningbeam_core::layer::AudioLayerType::Sampled)
|
matches!(layer, lightningbeam_core::layer::AnyLayer::Audio(a) if a.audio_layer_type == lightningbeam_core::layer::AudioLayerType::Sampled)
|
||||||
|
|
@ -5282,8 +5268,13 @@ impl eframe::App for EditorApp {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if let Ok(mut ctrl) = controller.try_lock() {
|
if should_monitor != self.last_input_monitoring {
|
||||||
ctrl.set_input_monitoring(should_monitor);
|
self.last_input_monitoring = should_monitor;
|
||||||
|
if let Some(controller) = &self.audio_controller {
|
||||||
|
if let Ok(mut ctrl) = controller.try_lock() {
|
||||||
|
ctrl.set_input_monitoring(should_monitor);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue