ecs: add some spans around the system executors
ci/woodpecker/push/debug Pipeline failed
Details
ci/woodpecker/push/debug Pipeline failed
Details
This commit is contained in:
parent
f3b5106073
commit
3dfb2520ce
|
@ -1758,6 +1758,7 @@ dependencies = [
|
||||||
"paste",
|
"paste",
|
||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
|
"tracing",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
@ -15,6 +15,7 @@ anyhow = "1.0.75"
|
||||||
thiserror = "1.0.50"
|
thiserror = "1.0.50"
|
||||||
paste = "1.0.14"
|
paste = "1.0.14"
|
||||||
atomic_refcell = "0.1.13"
|
atomic_refcell = "0.1.13"
|
||||||
|
tracing = "0.1.37"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
rand = "0.8.5" # used for tests
|
rand = "0.8.5" # used for tests
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
use lyra_ecs::World;
|
use lyra_ecs::World;
|
||||||
|
use tracing::debug_span;
|
||||||
|
|
||||||
use crate::Access;
|
use crate::Access;
|
||||||
|
|
||||||
|
@ -51,6 +52,9 @@ impl System for BatchedSystem {
|
||||||
let mut check_again = false;
|
let mut check_again = false;
|
||||||
|
|
||||||
for criteria in self.criteria.iter_mut() {
|
for criteria in self.criteria.iter_mut() {
|
||||||
|
let crit_span = debug_span!("criteria");
|
||||||
|
let _e = crit_span.enter();
|
||||||
|
|
||||||
match criteria.can_run(world, self.criteria_checks) {
|
match criteria.can_run(world, self.criteria_checks) {
|
||||||
super::CriteriaSchedule::Yes => {},
|
super::CriteriaSchedule::Yes => {},
|
||||||
super::CriteriaSchedule::No => can_run = false,
|
super::CriteriaSchedule::No => can_run = false,
|
||||||
|
@ -65,7 +69,11 @@ impl System for BatchedSystem {
|
||||||
}
|
}
|
||||||
|
|
||||||
if can_run {
|
if can_run {
|
||||||
for system in self.systems.iter_mut() {
|
for (idx, system) in self.systems.iter_mut().enumerate() {
|
||||||
|
let sys_span = debug_span!("batch", system=tracing::field::Empty);
|
||||||
|
sys_span.record("system", idx);
|
||||||
|
let _e = sys_span.enter();
|
||||||
|
|
||||||
system.execute(world)?;
|
system.execute(world)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
use std::{collections::{HashMap, VecDeque, HashSet}, ptr::NonNull};
|
use std::{collections::{HashMap, VecDeque, HashSet}, ptr::NonNull};
|
||||||
|
|
||||||
|
use tracing::{debug_span, info_span};
|
||||||
|
|
||||||
use super::System;
|
use super::System;
|
||||||
|
|
||||||
use crate::{World, CommandQueue, Commands};
|
use crate::{World, CommandQueue, Commands};
|
||||||
|
@ -69,9 +71,14 @@ impl GraphExecutor {
|
||||||
|
|
||||||
let mut possible_errors = Vec::new();
|
let mut possible_errors = Vec::new();
|
||||||
|
|
||||||
|
let sys_span = info_span!("graph_exec", system=tracing::field::Empty);
|
||||||
|
|
||||||
while let Some(node) = stack.pop_front() {
|
while let Some(node) = stack.pop_front() {
|
||||||
let system = self.systems.get_mut(node.as_str()).unwrap();
|
let system = self.systems.get_mut(node.as_str()).unwrap();
|
||||||
|
|
||||||
|
sys_span.record("system", system.name.clone());
|
||||||
|
let _e = sys_span.enter();
|
||||||
|
|
||||||
if let Err(e) = system.system.execute(world_ptr)
|
if let Err(e) = system.system.execute(world_ptr)
|
||||||
.map_err(|e| GraphExecutorError::SystemError(node, e)) {
|
.map_err(|e| GraphExecutorError::SystemError(node, e)) {
|
||||||
if stop_on_error {
|
if stop_on_error {
|
||||||
|
@ -82,6 +89,9 @@ impl GraphExecutor {
|
||||||
unimplemented!("Cannot resume topological execution from error"); // TODO: resume topological execution from error
|
unimplemented!("Cannot resume topological execution from error"); // TODO: resume topological execution from error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let deferred_span = debug_span!("deferred_exec");
|
||||||
|
let _e = deferred_span.enter();
|
||||||
|
|
||||||
if let Err(e) = system.system.execute_deferred(world_ptr)
|
if let Err(e) = system.system.execute_deferred(world_ptr)
|
||||||
.map_err(|e| GraphExecutorError::Command(e)) {
|
.map_err(|e| GraphExecutorError::Command(e)) {
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
use std::{hash::{Hash, DefaultHasher, Hasher}, collections::{HashMap, HashSet, VecDeque}, ptr::NonNull, fmt::Debug};
|
use std::{hash::{Hash, DefaultHasher, Hasher}, collections::{HashMap, HashSet, VecDeque}, ptr::NonNull, fmt::Debug};
|
||||||
|
|
||||||
use lyra_ecs::{system::{GraphExecutor, GraphExecutorError, System}, World};
|
use lyra_ecs::{system::{GraphExecutor, GraphExecutorError, System}, World};
|
||||||
|
use tracing::info_span;
|
||||||
|
|
||||||
#[derive(thiserror::Error, Debug)]
|
#[derive(thiserror::Error, Debug)]
|
||||||
pub enum StagedExecutorError {
|
pub enum StagedExecutorError {
|
||||||
|
@ -119,10 +120,15 @@ impl StagedExecutor {
|
||||||
self.topological_sort(&mut stack, &mut visited, node)?;
|
self.topological_sort(&mut stack, &mut visited, node)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let stage_span = info_span!("stage_exec", stage=tracing::field::Empty);
|
||||||
|
|
||||||
let mut errors = vec![];
|
let mut errors = vec![];
|
||||||
while let Some(node) = stack.pop_front() {
|
while let Some(node) = stack.pop_front() {
|
||||||
let stage = self.stages.get_mut(&node).unwrap();
|
let stage = self.stages.get_mut(&node).unwrap();
|
||||||
|
|
||||||
|
stage_span.record("stage", stage.name.clone());
|
||||||
|
let _e = stage_span.enter();
|
||||||
|
|
||||||
if let Err(e) = stage.exec.execute(world, stop_on_error) {
|
if let Err(e) = stage.exec.execute(world, stop_on_error) {
|
||||||
let e = StagedExecutorError::from_graph_error(stage.name.clone(), e);
|
let e = StagedExecutorError::from_graph_error(stage.name.clone(), e);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue