only run RenderEffects when effects are enabled

This commit is contained in:
Greg Johnston 2024-06-10 21:14:53 -04:00
parent 8a8862be9e
commit 7f57b88e8d
1 changed files with 27 additions and 22 deletions

View File

@ -52,34 +52,39 @@ where
sources: SourceSet::new(),
}));
let initial_value = Some(owner.with(|| {
inner
.to_any_subscriber()
.with_observer(|| fun(initial_value))
}));
let initial_value = cfg!(feature = "effects").then(|| {
owner.with(|| {
inner
.to_any_subscriber()
.with_observer(|| fun(initial_value))
})
});
*value.write().or_poisoned() = initial_value;
Executor::spawn_local({
let value = Arc::clone(&value);
let subscriber = inner.to_any_subscriber();
if cfg!(feature = "effects") {
Executor::spawn_local({
let value = Arc::clone(&value);
let subscriber = inner.to_any_subscriber();
async move {
while rx.next().await.is_some() {
if subscriber
.with_observer(|| subscriber.update_if_necessary())
{
subscriber.clear_sources(&subscriber);
async move {
while rx.next().await.is_some() {
if subscriber
.with_observer(|| subscriber.update_if_necessary())
{
subscriber.clear_sources(&subscriber);
let old_value =
mem::take(&mut *value.write().or_poisoned());
let new_value = owner.with_cleanup(|| {
subscriber.with_observer(|| fun(old_value))
});
*value.write().or_poisoned() = Some(new_value);
let old_value =
mem::take(&mut *value.write().or_poisoned());
let new_value = owner.with_cleanup(|| {
subscriber.with_observer(|| fun(old_value))
});
*value.write().or_poisoned() = Some(new_value);
}
}
}
}
});
});
}
RenderEffect { value, inner }
}