Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions crates/neomacs-diagnostics/src/flamegraph.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,5 @@ fn empty_svg(title: &str) -> String {
}

#[cfg(test)]
#[path = "flamegraph/tests/flamegraph_test.rs"]
mod tests;
1 change: 1 addition & 0 deletions crates/neomacs-diagnostics/src/metrics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,5 @@ pub struct GcMetrics {
}

#[cfg(test)]
#[path = "metrics/tests/metrics_test.rs"]
mod tests;
1 change: 1 addition & 0 deletions crates/neomacs-diagnostics/src/pprof.rs
Original file line number Diff line number Diff line change
Expand Up @@ -188,4 +188,5 @@ pub fn folded_to_pprof(folded: &str) -> Vec<u8> {
}

#[cfg(test)]
#[path = "pprof/tests/pprof_test.rs"]
mod tests;
1 change: 1 addition & 0 deletions crates/neomacs-diagnostics/src/report.rs
Original file line number Diff line number Diff line change
Expand Up @@ -290,4 +290,5 @@ fn sort_edges(map: HashMap<&str, u64>) -> Vec<CallEdge> {
}

#[cfg(test)]
#[path = "report/tests/report_test.rs"]
mod tests;
1 change: 1 addition & 0 deletions crates/neomacs-diagnostics/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -470,4 +470,5 @@ pub fn spawn(
}

#[cfg(test)]
#[path = "server/tests/server_test.rs"]
mod tests;
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,7 @@ pub fn default_child_frame_resize() -> ChildFrameAnimation {
}

#[cfg(test)]
#[path = "child_frame_animation/tests/child_frame_animation_test.rs"]
mod tests;

crate::effect_schema!(ChildFrameAnimation {
Expand Down
1 change: 1 addition & 0 deletions crates/neomacs-display-protocol/src/display_identity.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,5 @@ impl GraphicalDisplayIdentity {
}

#[cfg(test)]
#[path = "display_identity/tests/display_identity_test.rs"]
mod tests;
1 change: 1 addition & 0 deletions crates/neomacs-display-protocol/src/effect_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1769,6 +1769,7 @@ effect_config!(
);

#[cfg(test)]
#[path = "effect_config/tests/effect_config_test.rs"]
mod tests;

/// Container for all visual effect configurations.
Expand Down
1 change: 1 addition & 0 deletions crates/neomacs-display-protocol/src/face.rs
Original file line number Diff line number Diff line change
Expand Up @@ -979,4 +979,5 @@ impl FaceCache {
}

#[cfg(test)]
#[path = "face/tests/face_test.rs"]
mod tests;
1 change: 1 addition & 0 deletions crates/neomacs-display-protocol/src/font.rs
Original file line number Diff line number Diff line change
Expand Up @@ -913,4 +913,5 @@ pub struct FrameFontBindings<'a> {
}

#[cfg(test)]
#[path = "font/tests/font_test.rs"]
mod tests;
1 change: 1 addition & 0 deletions crates/neomacs-display-protocol/src/frame_chrome.rs
Original file line number Diff line number Diff line change
Expand Up @@ -773,4 +773,5 @@ pub enum ChromeLayoutError {
}

#[cfg(test)]
#[path = "frame_chrome/tests/frame_chrome_test.rs"]
mod tests;
1 change: 1 addition & 0 deletions crates/neomacs-display-protocol/src/frame_glyphs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2551,4 +2551,5 @@ impl FrameGlyphBuffer {
}

#[cfg(test)]
#[path = "frame_glyphs/tests/frame_glyphs_test.rs"]
mod tests;
1 change: 1 addition & 0 deletions crates/neomacs-display-protocol/src/frame_time.rs
Original file line number Diff line number Diff line change
Expand Up @@ -174,4 +174,5 @@ impl FrameSample {
}

#[cfg(test)]
#[path = "frame_time/tests/frame_time_test.rs"]
mod tests;
1 change: 1 addition & 0 deletions crates/neomacs-display-protocol/src/geometry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -609,4 +609,5 @@ impl DeviceScale {
}

#[cfg(test)]
#[path = "geometry/tests/geometry_test.rs"]
mod tests;
1 change: 1 addition & 0 deletions crates/neomacs-display-protocol/src/glyph_matrix.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3731,6 +3731,7 @@ pub trait RedisplayInterface {
}

#[cfg(test)]
#[path = "glyph_matrix/tests/glyph_matrix_test.rs"]
mod tests;

#[cfg(test)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ fn gnu_frame_alpha_survives_display_snapshot_materialization() {
}
use crate::DisplayFrameId;

#[path = "row_appearance_test.rs"]
mod row_appearance_test;
use crate::face::Face;
use crate::frame_chrome::PresentationId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,4 +90,5 @@ impl<'row> TextRowGeometry<'row> {
}

#[cfg(test)]
#[path = "text_geometry/tests/text_geometry_test.rs"]
mod tests;
198 changes: 2 additions & 196 deletions crates/neomacs-display-protocol/src/input_latency.rs
Original file line number Diff line number Diff line change
Expand Up @@ -399,199 +399,5 @@ pub fn observed(
}

#[cfg(test)]
mod tests {
use super::*;
fn viewport(start: usize) -> Vec<ScrollViewport> {
vec![ScrollViewport {
window: 1,
buffer: 1,
start,
hscroll: 0,
vscroll: 0,
}]
}
fn time(nanoseconds: u64) -> PlatformTimestamp {
PlatformTimestamp {
clock_id: 1,
nanoseconds,
}
}
#[test]
fn output_confirmation_preserves_its_measurement_kind_and_uncertainty() {
let mut measurements = Measurements::default();
let token = measurements.receive(7, "precise", time(100));
let kind = PresentationObservation::FirstPixelOutput { uncertainty_ns: 70 };
measurements.start(&[token], |_| viewport(1));
measurements.projected_requested(&[token], 7, 41);
measurements.projected_observed(7, 41, time(150), kind);
measurements.seal(7, PresentationId::new(2), &viewport(2));
let samples = measurements.observed(PresentationId::new(2), time(300), kind);
assert_eq!(samples[0]["observation"], "native-first-pixel-output");
assert_eq!(
samples[0]["projected_observation"],
"native-first-pixel-output"
);
assert_eq!(samples[0]["timestamp_uncertainty_ns"], 70);
assert_eq!(samples[0]["projected_timestamp_uncertainty_ns"], 70);
assert_eq!(samples[0]["input_to_present_ns"], 200);
}

#[test]
fn projected_latency_requires_exact_native_submission_and_keeps_authoritative_completion() {
let mut measurements = Measurements::default();
let token = measurements.receive(7, "precise", time(100));
measurements.projected_requested(&[token], 7, 41);
measurements.projected_confirmed(8, 41, time(110));
measurements.projected_confirmed(7, 40, time(120));
measurements.projected_confirmed(
7,
41,
PlatformTimestamp {
clock_id: 2,
nanoseconds: 130,
},
);
assert!(measurements.pending[0].projected.is_none());
measurements.projected_confirmed(7, 41, time(150));
measurements.projected_confirmed(7, 41, time(160));
assert!(
measurements
.confirmed(PresentationId::new(1), time(170))
.is_empty()
);
measurements.start(&[token], |_| viewport(1));
measurements.seal(7, PresentationId::new(2), &viewport(2));
let samples = measurements.confirmed(PresentationId::new(2), time(300));
assert_eq!(samples.len(), 1);
assert_eq!(samples[0]["input_to_projected_present_ns"], 50);
assert_eq!(samples[0]["projected_submission"], 41);
assert_eq!(samples[0]["input_to_present_ns"], 200);
assert!(measurements.pending.is_empty());
}

#[test]
fn queued_input_and_other_frames_cannot_complete_a_latency_sample() {
let mut measurements = Measurements::default();
let token = measurements.receive(7, "wheel", time(100));
measurements.seal(7, PresentationId::new(1), &viewport(2));
assert!(
measurements
.confirmed(PresentationId::new(1), time(200))
.is_empty()
);
measurements.start(&[token], |_| viewport(1));
measurements.seal(8, PresentationId::new(2), &viewport(2));
assert!(
measurements
.confirmed(PresentationId::new(2), time(300))
.is_empty()
);
measurements.seal(7, PresentationId::new(3), &viewport(2));
let samples = measurements.confirmed(PresentationId::new(3), time(400));
assert_eq!(samples[0]["input_to_present_ns"], 300);
assert!(
measurements
.confirmed(PresentationId::new(3), time(500))
.is_empty()
);
}
#[test]
fn superseded_layout_keeps_original_input_time_and_bounds_memory() {
let mut measurements = Measurements::default();
for _ in 0..MAX_PENDING + 1 {
measurements.receive(7, "precise", time(100));
}
assert_eq!(measurements.pending.len(), MAX_PENDING);
assert_eq!(measurements.dropped, 1);
let token = measurements.pending.back().unwrap().token;
measurements.start(&[token], |_| viewport(1));
for id in 1..=20 {
measurements.seal(7, PresentationId::new(id), &viewport(2));
}
assert_eq!(
measurements.pending.back().unwrap().layouts.len(),
MAX_PRESENTATIONS
);
assert!(
measurements
.confirmed(PresentationId::new(1), time(200))
.is_empty()
);
let samples = measurements.confirmed(PresentationId::new(20), time(500));
assert_eq!(samples[0]["input_to_present_ns"], 400);
assert_eq!(samples[0]["evicted_inputs"], 1);
}
#[test]
fn command_preflight_cannot_ack_before_the_viewport_changes() {
let mut measurements = Measurements::default();
let token = measurements.receive(7, "precise", time(100));
measurements.start(&[token], |_| viewport(1));
measurements.seal(7, PresentationId::new(1), &viewport(1));
assert!(
measurements
.confirmed(PresentationId::new(1), time(200))
.is_empty()
);
measurements.seal(7, PresentationId::new(2), &viewport(2));
assert_eq!(
measurements
.confirmed(PresentationId::new(2), time(300))
.len(),
1
);
let token = measurements.receive(7, "page", time(400));
measurements.start(&[token], |_| viewport(2));
measurements.cancel(&[token]);
measurements.seal(7, PresentationId::new(3), &viewport(3));
assert!(
measurements
.confirmed(PresentationId::new(3), time(500))
.is_empty()
);
}

#[test]
fn completed_no_op_cannot_be_credited_to_a_later_command() {
let mut measurements = Measurements::default();
let token = measurements.receive(7, "page", time(100));
measurements.start(&[token], |_| viewport(1));
measurements.finish(&[token], |_| viewport(1));
measurements.seal(7, PresentationId::new(2), &viewport(2));
assert!(
measurements
.confirmed(PresentationId::new(2), time(300))
.is_empty()
);
}

#[test]
fn completed_scrolls_can_be_coalesced_back_to_the_original_viewport() {
let mut measurements = Measurements::default();
let token = measurements.receive(7, "precise", time(100));
measurements.start(&[token], |_| viewport(1));
measurements.finish(&[token], |_| viewport(2));
measurements.seal(7, PresentationId::new(2), &viewport(1));
assert_eq!(
measurements
.confirmed(PresentationId::new(2), time(300))
.len(),
1
);
}

#[test]
fn unrelated_clock_cannot_fabricate_latency() {
let mut measurements = Measurements::default();
let token = measurements.receive(7, "page", time(100));
measurements.start(&[token], |_| viewport(1));
measurements.seal(7, PresentationId::new(1), &viewport(2));
let samples = measurements.confirmed(
PresentationId::new(1),
PlatformTimestamp {
clock_id: 2,
nanoseconds: 200,
},
);
assert!(samples[0]["input_to_present_ns"].is_null());
}
}
#[path = "tests/input_latency_test.rs"]
mod tests;
Loading
Loading