use super::*;
use std::time::Instant;
#[test]
#[ignore = "session load measurement; run with --release --ignored --nocapture and PROFILE_SESSION_STORE"]
fn session_store_load_measurement() {
let Ok(root) = std::env::var("PROFILE_SESSION_STORE") else {
eprintln!("session_load skipped: PROFILE_SESSION_STORE unset");
return;
};
let manager = SessionManager::new(root.into());
for pass in ["first", "repeat"] {
let started = Instant::now();
let summaries = manager.list_metadata_summaries().unwrap();
eprintln!(
"session_list pass={pass} sessions={} elapsed_ms={:.2}",
summaries.len(),
started.elapsed().as_secs_f64() * 1000.0
);
}
if let Some(newest) = manager.list_metadata_summaries().unwrap().last() {
let started = Instant::now();
let session = manager.open_existing(newest.session.id()).unwrap();
let _ = crate::sessions::session_title_metadata(&session).unwrap();
eprintln!(
"session_title_lookup elapsed_ms={:.3}",
started.elapsed().as_secs_f64() * 1000.0
);
}
let mut sessions = manager
.list_metadata_summaries()
.unwrap()
.into_iter()
.map(|summary| summary.session)
.collect::<Vec<_>>();
sessions.sort_by_key(|session| {
std::cmp::Reverse(fs::metadata(session.path()).map(|m| m.len()).unwrap_or(0))
});
let settings = crate::config::InjectedContentSettings::default();
for session in sessions.iter().take(5) {
let file_bytes = fs::metadata(session.path()).map(|m| m.len()).unwrap_or(0);
let read_started = Instant::now();
let read = match session
.read_events_tolerant_bounded(SESSION_SWITCH_MAX_EVENTS, SESSION_SWITCH_MAX_BYTES)
{
Ok(read) => read,
Err(_) => {
eprintln!("session_load file_bytes={file_bytes} skipped=read_rejected");
continue;
}
};
let read_ms = read_started.elapsed().as_secs_f64() * 1000.0;
let hydrate_started = Instant::now();
let snapshot = hydrate_session_history_snapshot(&read.events, &settings);
let hydrate_ms = hydrate_started.elapsed().as_secs_f64() * 1000.0;
eprintln!(
"session_load file_bytes={file_bytes} events={} transcript={} read_ms={read_ms:.2} hydrate_ms={hydrate_ms:.2}",
read.events.len(),
snapshot.transcript.len(),
);
}
}