pub struct DebugStats {Show 22 fields
pub parses: u64,
pub ref_index_locks: u64,
pub warm_sweeps_completed: u64,
pub workspace_symbol_index_ready: bool,
pub workspace_index_walks: u64,
pub reachability_scan_passes: u64,
pub analysis_compute_count: u64,
pub warm_start_replays_completed: u64,
pub warm_start_untrusted_reanalyzed: u64,
pub vendor_warm_sweeps_completed: u64,
pub debug_gate_held: Option<String>,
pub workspace_file_count: u64,
pub token_cache_len: u64,
pub text_cache_len: u64,
pub parsed_cache_len: u64,
pub analysis_cache_len: u64,
pub owned_program_cache_len: u64,
pub decl_fingerprints_len: u64,
pub vendor_index_cache_len: u64,
pub mir_ref_query_cache_hits: u64,
pub mir_subtype_query_cache_hits: u64,
pub mir_mention_scans_recorded: u64,
}Expand description
Response for the $/php-lsp/debugStats custom request.
Fields§
§parses: u64Cumulative count of real ParsedDoc parses (cache misses).
ref_index_locks: u64Times mir’s reference index was locked. Reads are per-key posting lookups and edits commit one file’s postings, so this grows by a small bounded amount per operation — never per candidate file.
warm_sweeps_completed: u64Analysis warm sweeps run to completion (not cancelled). Lets benches and tests wait for the post-index sweep before baselining.
workspace_symbol_index_ready: boolWhether mir’s workspace symbol index singleton is populated (seeded from the disk cache at warm start, or built by the first sweep).
workspace_index_walks: u64Executions of mir’s tracked O(all-files) symbol-index walk. A cache-warm session must keep this at zero — the regression tests assert it.
reachability_scan_passes: u64Workspace-wide FQN/text-needle scan passes for reference-scope
narrowing (DocumentStore::resolve_reachability_queries). A request
with many narrowing-requiring declarations (e.g. code lens on a file
with several classes/public-static-methods) must pay one pass per
request, not one per declaration — the regression tests assert the
delta across such a request.
analysis_compute_count: u64Real FileAnalyzer::analyze runs (never a cache hit). Concurrent
callers racing for the same uncached file’s analysis (e.g. did_open
diagnostics vs. a fast-following hover) must serialize onto one run,
not one per caller — the regression test asserts the delta.
warm_start_replays_completed: u64DocumentStore::warm_start_indexes calls that replayed at least one
file. A runtime-added workspace folder runs this in the same spawned
task as its scan, before the refresh-request notifications go out —
tests await a count bump here instead of guessing a fixed delay.
warm_start_untrusted_reanalyzed: u64Files handed to a background reanalysis because their replayed
reference postings were flagged untrusted by mir’s warm_start_files.
See DocumentStore::warm_start_untrusted_reanalyzed.
vendor_warm_sweeps_completed: u64Throttled vendor warm-analysis sweeps run to completion. Always 0
today — the sweep doesn’t exist yet (ROADMAP 0c step 2). See
DocumentStore::vendor_warm_sweeps_completed.
debug_gate_held: Option<String>Section currently parked at the debug gate (see debug_gate.rs), if
any. The responsiveness tests poll this to prove a handler’s blocking
work is both off the serve future and genuinely in flight.
workspace_file_count: u64Files mirrored into the salsa workspace. Denominator for the per-file cache sizes below.
token_cache_len: u64Entries in the semantic-tokens delta cache.
text_cache_len: u64Entries in the mirrored-source-text cache. Expected to track
workspace_file_count.
parsed_cache_len: u64Entries in the read-through ParsedDoc cache (LRU-capped).
analysis_cache_len: u64Entries in the per-file FileAnalysis cache (LRU-capped).
owned_program_cache_len: u64Entries in the owned-Program cache (LRU-capped).
decl_fingerprints_len: u64Entries in the declaration-fingerprint cache. Expected to track
workspace_file_count.
vendor_index_cache_len: u64Entries in the lazily-loaded vendor FileIndex cache. Not
LRU-capped today — the one cache size here worth watching on a
long-running session with heavy vendor navigation.
mir_ref_query_cache_hits: u64Hits served from mir’s indexed_references_to memoization cache
(see mir_analyzer::AnalysisSession::ref_query_cache_hits).
mir_subtype_query_cache_hits: u64Hits served from mir’s indexed_subtype_classes memoization cache
(see mir_analyzer::AnalysisSession::subtype_query_cache_hits).
mir_mention_scans_recorded: u64Per-file text scans recorded in mir’s own ClassMentionIndex — the
single shared backend every resolve_reachability_queries needle is
answered by. The ratio against reachability_scan_passes is the
per-file mention cache’s hit rate — a warm, unedited repeat query
should not move this at all.
Trait Implementations§
Source§impl Debug for DebugStats
impl Debug for DebugStats
Source§impl<'de> Deserialize<'de> for DebugStats
impl<'de> Deserialize<'de> for DebugStats
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for DebugStats
impl RefUnwindSafe for DebugStats
impl Send for DebugStats
impl Sync for DebugStats
impl Unpin for DebugStats
impl UnsafeUnpin for DebugStats
impl UnwindSafe for DebugStats
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more