diff options
author | Vincent Ambo <mail@tazj.in> | 2023-03-03T21·52+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2023-03-13T20·30+0000 |
commit | 1e37f8b52e3d42fed3e05b327ef30c83e97fd02a (patch) | |
tree | c05ece48e6d2d01d27694ee0949629616bdec611 /tvix/eval/src/observer.rs | |
parent | dfd0066de5f0616673f8e6cef4c6bed312e98d1e (diff) |
feat(tvix/eval): give generators human-readable names r/5978
This adds static strings to generator frames that describe the generator in a human-readable fashion, which are then logged in observers. This makes runtime traces very precise, explaining exactly what is being requested from where. Change-Id: I695659a6bd0b7b0bdee75bc8049651f62b150e0c Reviewed-on: https://cl.tvl.fyi/c/depot/+/8206 Tested-by: BuildkiteCI Reviewed-by: raitobezarius <tvl@lahfa.xyz>
Diffstat (limited to 'tvix/eval/src/observer.rs')
-rw-r--r-- | tvix/eval/src/observer.rs | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/tvix/eval/src/observer.rs b/tvix/eval/src/observer.rs index 29e4fb2d9c06..a606eb136362 100644 --- a/tvix/eval/src/observer.rs +++ b/tvix/eval/src/observer.rs @@ -49,16 +49,16 @@ pub trait RuntimeObserver { fn observe_suspend_call_frame(&mut self, _frame_at: usize, _stack: &[Value]) {} /// Called when the runtime enters a generator frame. - fn observe_enter_generator(&mut self, _frame_at: usize, _stack: &[Value]) {} + fn observe_enter_generator(&mut self, _frame_at: usize, _name: &str, _stack: &[Value]) {} /// Called when the runtime exits a generator frame. - fn observe_exit_generator(&mut self, _frame_at: usize, _stack: &[Value]) {} + fn observe_exit_generator(&mut self, _frame_at: usize, _name: &str, _stack: &[Value]) {} /// Called when the runtime suspends a generator frame. - fn observe_suspend_generator(&mut self, _frame_at: usize, _stack: &[Value]) {} + fn observe_suspend_generator(&mut self, _frame_at: usize, _name: &str, _stack: &[Value]) {} /// Called when a generator requests an action from the VM. - fn observe_generator_request(&mut self, _msg: &GeneratorRequest) {} + fn observe_generator_request(&mut self, _name: &str, _msg: &GeneratorRequest) {} /// Called when the runtime replaces the current call frame for a /// tail call. @@ -219,34 +219,42 @@ impl<W: Write> RuntimeObserver for TracingObserver<W> { self.write_stack(stack); } - fn observe_enter_generator(&mut self, frame_at: usize, stack: &[Value]) { + fn observe_enter_generator(&mut self, frame_at: usize, name: &str, stack: &[Value]) { let _ = write!( &mut self.writer, - "=== entering generator frame {} ===\t", - frame_at + "=== entering generator frame '{}' [{}] ===\t", + name, frame_at, ); self.write_stack(stack); } - fn observe_exit_generator(&mut self, frame_at: usize, stack: &[Value]) { - let _ = write!(&mut self.writer, "=== exiting generator {} ===\t", frame_at); + fn observe_exit_generator(&mut self, frame_at: usize, name: &str, stack: &[Value]) { + let _ = write!( + &mut self.writer, + "=== exiting generator '{}' [{}] ===\t", + name, frame_at + ); self.write_stack(stack); } - fn observe_suspend_generator(&mut self, frame_at: usize, stack: &[Value]) { + fn observe_suspend_generator(&mut self, frame_at: usize, name: &str, stack: &[Value]) { let _ = write!( &mut self.writer, - "=== suspending generator {} ===\t", - frame_at + "=== suspending generator '{}' [{}] ===\t", + name, frame_at ); self.write_stack(stack); } - fn observe_generator_request(&mut self, msg: &GeneratorRequest) { - let _ = writeln!(&mut self.writer, "=== generator requested {} ===", msg); + fn observe_generator_request(&mut self, name: &str, msg: &GeneratorRequest) { + let _ = writeln!( + &mut self.writer, + "=== generator '{}' requested {} ===", + name, msg + ); } fn observe_enter_builtin(&mut self, name: &'static str) { |