diff options
| author | Valentin Popov <valentin@popov.link> | 2026-06-25 04:06:13 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-06-25 10:45:34 +0300 |
| commit | 6a6393038eb9accc908e4d54555702b426e38780 (patch) | |
| tree | 8c51655fc8e94ab474ded12e9766754be8c3abca | |
| parent | ec6645a21f4e390d9a99dec428879ec7b00a6dce (diff) | |
| download | fparkan-6a6393038eb9accc908e4d54555702b426e38780.tar.xz fparkan-6a6393038eb9accc908e4d54555702b426e38780.zip | |
refactor(vulkan-plan): clarify planning backend telemetry
| -rw-r--r-- | adapters/fparkan-render-vulkan/src/lib.rs | 33 | ||||
| -rw-r--r-- | fixtures/acceptance/coverage.tsv | 4 |
2 files changed, 15 insertions, 22 deletions
diff --git a/adapters/fparkan-render-vulkan/src/lib.rs b/adapters/fparkan-render-vulkan/src/lib.rs index f829d4e..097c5a9 100644 --- a/adapters/fparkan-render-vulkan/src/lib.rs +++ b/adapters/fparkan-render-vulkan/src/lib.rs @@ -42,8 +42,6 @@ use std::ffi::{CStr, CString}; use std::os::raw::c_char; use std::sync::atomic::{AtomicU32, Ordering}; use std::sync::Mutex; -use std::time::{SystemTime, UNIX_EPOCH}; - /// Minimum Vulkan API version accepted by the Stage 0 backend. pub const MIN_VULKAN_API_VERSION: u32 = vk::API_VERSION_1_1; const KHR_SWAPCHAIN_EXTENSION: &str = "VK_KHR_swapchain"; @@ -3599,7 +3597,7 @@ fn render_shader_tool_json(tool: &VulkanShaderToolManifest) -> String { /// Vulkan backend migration readiness. #[derive(Clone, Copy, Debug, Eq, PartialEq)] -pub enum VulkanBackendState { +pub enum VulkanPlanningBackendState { /// Adapter prepared and able to accept commands. Ready, /// Adapter is tracking a recoverable runtime surface/depth pipeline fault. @@ -3608,7 +3606,7 @@ pub enum VulkanBackendState { Error, } -impl Default for VulkanBackendState { +impl Default for VulkanPlanningBackendState { fn default() -> Self { Self::Degraded } @@ -4283,16 +4281,14 @@ fn push_json_string(out: &mut String, value: &str) { /// Diagnostics for Vulkan planning backend setup and frame progression. #[derive(Clone, Debug, PartialEq)] pub struct VulkanPlanningBackendReport { - /// Unix time at initialization. - pub initialized_at: u64, /// Total frames executed. pub frames_executed: u64, /// Total command submissions. pub submissions: u64, /// Last command-capture byte size. pub last_capture_size: usize, - /// Number of simulated present calls. - pub presents: u64, + /// Number of simulated present calls issued by the planning facade. + pub simulated_presents: u64, /// Number of resize-driven surface plan refreshes. pub resize_rebuilds: u64, /// Last render request observed. @@ -4304,13 +4300,10 @@ pub struct VulkanPlanningBackendReport { impl Default for VulkanPlanningBackendReport { fn default() -> Self { Self { - initialized_at: SystemTime::now() - .duration_since(UNIX_EPOCH) - .map_or(0, |duration| duration.as_secs()), frames_executed: 0, submissions: 0, last_capture_size: 0, - presents: 0, + simulated_presents: 0, resize_rebuilds: 0, request: RenderRequest::conservative(), last_frame_submission: None, @@ -4321,7 +4314,7 @@ impl Default for VulkanPlanningBackendReport { /// Vulkan planning backend façade used by the game entrypoint. #[derive(Debug)] pub struct VulkanPlanningBackend { - state: VulkanBackendState, + state: VulkanPlanningBackendState, report: VulkanPlanningBackendReport, swapchain_plan: VulkanSwapchainPlan, } @@ -4337,7 +4330,7 @@ impl VulkanPlanningBackend { #[must_use] pub fn new() -> Self { Self { - state: VulkanBackendState::Ready, + state: VulkanPlanningBackendState::Ready, report: VulkanPlanningBackendReport::default(), swapchain_plan: default_stage0_swapchain_plan(), } @@ -4368,7 +4361,7 @@ impl VulkanPlanningBackend { /// Returns adapter state. #[must_use] - pub const fn state(&self) -> VulkanBackendState { + pub const fn state(&self) -> VulkanPlanningBackendState { self.state } @@ -4379,7 +4372,7 @@ impl VulkanPlanningBackend { } fn simulate_present(&mut self) { - self.report.presents = self.report.presents.saturating_add(1); + self.report.simulated_presents = self.report.simulated_presents.saturating_add(1); } } @@ -4387,7 +4380,7 @@ impl RenderBackend for VulkanPlanningBackend { fn execute(&mut self, commands: &RenderCommandList) -> Result<FrameOutput, RenderError> { if !matches!( self.state, - VulkanBackendState::Ready | VulkanBackendState::Degraded + VulkanPlanningBackendState::Ready | VulkanPlanningBackendState::Degraded ) { return Err(RenderError::InvalidRange); } @@ -4423,7 +4416,7 @@ mod tests { }; #[test] - fn backend_tracks_render_request_and_presents() -> Result<(), RenderError> { + fn planning_backend_tracks_render_request_and_simulated_present() -> Result<(), RenderError> { let mut backend = VulkanPlanningBackend::new(); let request = RenderRequest::conservative(); backend.set_render_request(request); @@ -4448,10 +4441,10 @@ mod tests { }; backend.execute(&commands)?; - assert_eq!(backend.state(), VulkanBackendState::Ready); + assert_eq!(backend.state(), VulkanPlanningBackendState::Ready); assert_eq!(backend.report().frames_executed, 1); assert_eq!(backend.report().submissions, 1); - assert_eq!(backend.report().presents, 1); + assert_eq!(backend.report().simulated_presents, 1); assert!(backend.report().last_capture_size > 0); assert_eq!( backend.report().last_frame_submission, diff --git a/fixtures/acceptance/coverage.tsv b/fixtures/acceptance/coverage.tsv index 22e0a5b..2541e6b 100644 --- a/fixtures/acceptance/coverage.tsv +++ b/fixtures/acceptance/coverage.tsv @@ -30,7 +30,7 @@ S0-PLAT-001 covered cargo test -p fparkan-platform-winit --offline window_port_r S0-PLAT-002 covered cargo clippy -p fparkan-platform -p fparkan-platform-winit --all-targets --all-features --locked -- -D warnings S0-PLAT-003 covered cargo test -p fparkan-platform-winit --offline smoke_window_plan_requires_native_handles_and_nonzero_extent smoke_window_plan_rejects_zero_extent S0-PLAT-004 covered cargo test -p fparkan-platform-winit --offline smoke_window_app_requires_created_native_window smoke_window_app_rejects_synthetic_window_without_native_handles -S0-VK-001 covered cargo test -p fparkan-render-vulkan --offline backend_tracks_render_request_and_presents +S0-VK-001 covered cargo test -p fparkan-render-vulkan --offline planning_backend_tracks_render_request_and_simulated_present S0-VK-002 covered cargo test -p fparkan-render-vulkan --offline device_scoring_is_deterministic_and_prefers_discrete_unified_queue S0-VK-003 covered cargo test -p fparkan-render-vulkan --offline portability_subset_is_reported_and_enabled_when_exposed S0-VK-004 covered cargo test -p fparkan-render-vulkan --offline rejects_missing_graphics_present_swapchain_and_format @@ -51,7 +51,7 @@ S0-VK-018 covered cargo test -p fparkan-render-vulkan --offline triangle_shader_ S0-VK-019 covered cargo test -p fparkan-render-vulkan --offline shader_manifest_report_json_is_stable S0-VK-020 covered cargo test -p fparkan-render-vulkan --offline shader_manifest_rejects_invalid_spirv_containers S0-VK-021 covered cargo test -p fparkan-render-vulkan --offline frame_submission_plan_json_is_stable -S0-VK-022 covered cargo test -p fparkan-render-vulkan --offline backend_tracks_render_request_and_presents +S0-VK-022 covered cargo test -p fparkan-render-vulkan --offline planning_backend_tracks_render_request_and_simulated_present S0-VK-023 covered cargo test -p fparkan-vulkan-smoke --offline rejects_false_pass_without_full_evidence blocked_report_includes_shader_manifest_and_bootstrap_status S0-VK-024 covered cargo test -p fparkan-vulkan-smoke --offline rejects_passed_without_loader_probe formats_vulkan_api_version S0-VK-025 covered cargo test -p fparkan-vulkan-smoke --offline rejects_passed_without_instance_probe parses_instance_probe_as_loader_probe |
