codetether_agent/tui/app/state/
timing.rs1use std::time::Instant;
7
8impl super::AppState {
9 pub fn begin_request_timing(&mut self) {
10 self.processing_started_at = Some(Instant::now());
11 self.current_request_first_token_ms = None;
12 self.current_request_last_token_ms = None;
13 }
14
15 pub fn current_request_elapsed_ms(&self) -> Option<u64> {
16 self.processing_started_at
17 .map(|started| started.elapsed().as_millis() as u64)
18 }
19
20 pub fn note_text_token(&mut self) {
21 let Some(elapsed_ms) = self.current_request_elapsed_ms() else {
22 return;
23 };
24 if self.current_request_first_token_ms.is_none() {
25 self.current_request_first_token_ms = Some(elapsed_ms);
26 }
27 self.current_request_last_token_ms = Some(elapsed_ms);
28 }
29
30 pub fn complete_request_timing(&mut self) {
31 self.last_request_first_token_ms = self.current_request_first_token_ms;
32 self.last_request_last_token_ms = self.current_request_last_token_ms;
33 self.clear_request_timing();
34 }
35
36 pub fn clear_request_timing(&mut self) {
37 self.processing_started_at = None;
38 self.current_request_first_token_ms = None;
39 self.current_request_last_token_ms = None;
40 }
41}