feat(tui): optimize performance by caching display lines and token counts, and improve action handling
This commit is contained in:
@@ -19,11 +19,12 @@ use crate::state::AppStateRest;
|
||||
|
||||
/// Spawn an agent turn on a background OS thread.
|
||||
pub fn spawn_agent_turn(state: &mut AppStateRest, text: String) {
|
||||
if let Ok(mut in_flight) = state.turn_in_flight_flag.lock() {
|
||||
if *in_flight {
|
||||
return;
|
||||
}
|
||||
*in_flight = true;
|
||||
// compare_exchange: only mark in-flight if not already running
|
||||
if state.turn_in_flight_flag
|
||||
.compare_exchange(false, true, Ordering::SeqCst, Ordering::Relaxed)
|
||||
.is_err()
|
||||
{
|
||||
return; // already running
|
||||
}
|
||||
|
||||
let turn_events = state.turn_events.clone();
|
||||
@@ -56,7 +57,7 @@ fn run_turn(
|
||||
session_dir: &Path,
|
||||
workspace_roots: &[PathBuf],
|
||||
turn_events: &Arc<Mutex<VecDeque<TurnEvent>>>,
|
||||
in_flight: &Arc<Mutex<bool>>,
|
||||
in_flight: &Arc<AtomicBool>,
|
||||
abort: &Arc<AtomicBool>,
|
||||
) {
|
||||
let client = LlmClient::new(
|
||||
@@ -188,8 +189,7 @@ fn push_event(queue: &Arc<Mutex<VecDeque<TurnEvent>>>, event: TurnEvent) {
|
||||
}
|
||||
}
|
||||
|
||||
fn mark_done(flag: &Arc<Mutex<bool>>) {
|
||||
if let Ok(mut f) = flag.lock() {
|
||||
*f = false;
|
||||
}
|
||||
/// Mark the turn as done using lock-free atomic store.
|
||||
fn mark_done(flag: &Arc<AtomicBool>) {
|
||||
flag.store(false, Ordering::SeqCst);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user