makepad/studio/hub/tests/log_store_test.rs
2026-03-12 15:51:30 +01:00

100 lines
2.9 KiB
Rust

use makepad_live_id::LiveId;
use makepad_studio_hub::log_store::{
AppendLogEntry, LogQuery, LogStore, ProfilerQuery, ProfilerStore, SAMPLE_TYPE_EVENT,
SAMPLE_TYPE_GPU,
};
use makepad_studio_protocol::hub_protocol::{ClientId, EventSample, GPUSample, LogSource, QueryId};
use makepad_studio_protocol::LogLevel;
#[test]
fn log_store_filters_by_build_source_and_pattern() {
let build_a = QueryId::new(ClientId(1), 1);
let build_b = QueryId::new(ClientId(2), 1);
let mut store = LogStore::default();
store.append(AppendLogEntry {
build_id: Some(build_a),
level: LogLevel::Log,
source: LogSource::Cargo,
message: "compile ok".to_string(),
file_name: None,
line: None,
column: None,
timestamp: Some(1.0),
});
store.append(AppendLogEntry {
build_id: Some(build_b),
level: LogLevel::Warning,
source: LogSource::Studio,
message: "lint warning".to_string(),
file_name: Some("repo/src/lib.rs".to_string()),
line: Some(10),
column: Some(3),
timestamp: Some(2.0),
});
let query = LogQuery {
build_id: Some(build_b),
level: Some("warning".to_string()),
source: Some(LogSource::Studio),
file: Some("repo/src/lib.rs".to_string()),
pattern: Some("lint".to_string()),
since_index: Some(1),
};
let results = store.query(&query);
assert_eq!(results.len(), 1);
assert_eq!(results[0].0, 1);
assert_eq!(results[0].1.source, LogSource::Studio);
}
#[test]
fn profiler_store_filters_and_downsamples() {
let build = QueryId::new(ClientId(4), 9);
let mut store = ProfilerStore::default();
for i in 0..20 {
store.append_event(
Some(build),
EventSample {
at: i as f64,
label: LiveId::from_str("event.tick"),
..Default::default()
},
);
}
for i in 0..10 {
store.append_gpu(
Some(build),
GPUSample {
at: i as f64,
label: LiveId::from_str("gpu.frame"),
..Default::default()
},
);
}
let query = ProfilerQuery {
build_id: Some(build),
sample_type: Some(SAMPLE_TYPE_EVENT),
time_start: Some(4.0),
time_end: Some(15.0),
max_samples: Some(5),
};
let (events, gpu, gc, total) = store.query(&query);
assert!(!events.is_empty());
assert!(events.len() <= 5);
assert!(gpu.is_empty());
assert!(gc.is_empty());
assert_eq!(total, 12);
let gpu_query = ProfilerQuery {
build_id: Some(build),
sample_type: Some(SAMPLE_TYPE_GPU),
time_start: None,
time_end: None,
max_samples: Some(3),
};
let (_events, gpu, _gc, total) = store.query(&gpu_query);
assert_eq!(gpu.len(), 3);
assert_eq!(total, 10);
}