mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +00:00
internal: add tracing to project discovery and VFS loading
This commit is contained in:
parent
2f55a91552
commit
338003f30e
4 changed files with 24 additions and 4 deletions
|
@ -7,6 +7,7 @@ use paths::{AbsPathBuf, Utf8Path, Utf8PathBuf};
|
||||||
use project_model::ProjectJsonData;
|
use project_model::ProjectJsonData;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
|
use tracing::{info_span, span::EnteredSpan};
|
||||||
|
|
||||||
use crate::command::{CommandHandle, ParseFromLine};
|
use crate::command::{CommandHandle, ParseFromLine};
|
||||||
|
|
||||||
|
@ -60,7 +61,10 @@ impl DiscoverCommand {
|
||||||
let mut cmd = Command::new(command);
|
let mut cmd = Command::new(command);
|
||||||
cmd.args(args);
|
cmd.args(args);
|
||||||
|
|
||||||
Ok(DiscoverHandle { _handle: CommandHandle::spawn(cmd, self.sender.clone())? })
|
Ok(DiscoverHandle {
|
||||||
|
_handle: CommandHandle::spawn(cmd, self.sender.clone())?,
|
||||||
|
span: info_span!("discover_command").entered(),
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,6 +72,8 @@ impl DiscoverCommand {
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub(crate) struct DiscoverHandle {
|
pub(crate) struct DiscoverHandle {
|
||||||
_handle: CommandHandle<DiscoverProjectMessage>,
|
_handle: CommandHandle<DiscoverProjectMessage>,
|
||||||
|
#[allow(dead_code)] // not accessed, but used to log on drop.
|
||||||
|
span: EnteredSpan,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An enum containing either progress messages, an error,
|
/// An enum containing either progress messages, an error,
|
||||||
|
|
|
@ -111,6 +111,9 @@ pub(crate) struct GlobalState {
|
||||||
pub(crate) vfs_config_version: u32,
|
pub(crate) vfs_config_version: u32,
|
||||||
pub(crate) vfs_progress_config_version: u32,
|
pub(crate) vfs_progress_config_version: u32,
|
||||||
pub(crate) vfs_done: bool,
|
pub(crate) vfs_done: bool,
|
||||||
|
// used to track how long VFS loading takes. this can't be on `vfs::loader::Handle`,
|
||||||
|
// as that handle's lifetime is the same as `GlobalState` itself.
|
||||||
|
pub(crate) vfs_span: Option<tracing::span::EnteredSpan>,
|
||||||
pub(crate) wants_to_switch: Option<Cause>,
|
pub(crate) wants_to_switch: Option<Cause>,
|
||||||
|
|
||||||
/// `workspaces` field stores the data we actually use, while the `OpQueue`
|
/// `workspaces` field stores the data we actually use, while the `OpQueue`
|
||||||
|
@ -253,6 +256,7 @@ impl GlobalState {
|
||||||
vfs: Arc::new(RwLock::new((vfs::Vfs::default(), IntMap::default()))),
|
vfs: Arc::new(RwLock::new((vfs::Vfs::default(), IntMap::default()))),
|
||||||
vfs_config_version: 0,
|
vfs_config_version: 0,
|
||||||
vfs_progress_config_version: 0,
|
vfs_progress_config_version: 0,
|
||||||
|
vfs_span: None,
|
||||||
vfs_done: true,
|
vfs_done: true,
|
||||||
wants_to_switch: None,
|
wants_to_switch: None,
|
||||||
|
|
||||||
|
|
|
@ -794,13 +794,20 @@ impl GlobalState {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vfs::loader::Message::Progress { n_total, n_done, dir, config_version } => {
|
vfs::loader::Message::Progress { n_total, n_done, dir, config_version } => {
|
||||||
let _p = tracing::info_span!("GlobalState::handle_vfs_mgs/progress").entered();
|
let _p = span!(Level::INFO, "GlobalState::handle_vfs_mgs/progress").entered();
|
||||||
always!(config_version <= self.vfs_config_version);
|
always!(config_version <= self.vfs_config_version);
|
||||||
|
|
||||||
let (n_done, state) = match n_done {
|
let (n_done, state) = match n_done {
|
||||||
LoadingProgress::Started => (0, Progress::Begin),
|
LoadingProgress::Started => {
|
||||||
|
self.vfs_span =
|
||||||
|
Some(span!(Level::INFO, "vfs_load", total = n_total).entered());
|
||||||
|
(0, Progress::Begin)
|
||||||
|
}
|
||||||
LoadingProgress::Progress(n_done) => (n_done.min(n_total), Progress::Report),
|
LoadingProgress::Progress(n_done) => (n_done.min(n_total), Progress::Report),
|
||||||
LoadingProgress::Finished => (n_total, Progress::End),
|
LoadingProgress::Finished => {
|
||||||
|
self.vfs_span = None;
|
||||||
|
(n_total, Progress::End)
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
self.vfs_progress_config_version = config_version;
|
self.vfs_progress_config_version = config_version;
|
||||||
|
@ -881,6 +888,7 @@ impl GlobalState {
|
||||||
.expect("No title could be found; this is a bug");
|
.expect("No title could be found; this is a bug");
|
||||||
match message {
|
match message {
|
||||||
DiscoverProjectMessage::Finished { project, buildfile } => {
|
DiscoverProjectMessage::Finished { project, buildfile } => {
|
||||||
|
self.discover_handle = None;
|
||||||
self.report_progress(&title, Progress::End, None, None, None);
|
self.report_progress(&title, Progress::End, None, None, None);
|
||||||
self.discover_workspace_queue.op_completed(());
|
self.discover_workspace_queue.op_completed(());
|
||||||
|
|
||||||
|
@ -892,6 +900,7 @@ impl GlobalState {
|
||||||
self.report_progress(&title, Progress::Report, Some(message), None, None)
|
self.report_progress(&title, Progress::Report, Some(message), None, None)
|
||||||
}
|
}
|
||||||
DiscoverProjectMessage::Error { error, source } => {
|
DiscoverProjectMessage::Error { error, source } => {
|
||||||
|
self.discover_handle = None;
|
||||||
let message = format!("Project discovery failed: {error}");
|
let message = format!("Project discovery failed: {error}");
|
||||||
self.discover_workspace_queue.op_completed(());
|
self.discover_workspace_queue.op_completed(());
|
||||||
self.show_and_log_error(message.clone(), source);
|
self.show_and_log_error(message.clone(), source);
|
||||||
|
|
|
@ -50,6 +50,7 @@ where
|
||||||
|
|
||||||
let ra_fmt_layer = tracing_subscriber::fmt::layer()
|
let ra_fmt_layer = tracing_subscriber::fmt::layer()
|
||||||
.with_target(false)
|
.with_target(false)
|
||||||
|
.with_ansi(false)
|
||||||
.with_writer(writer)
|
.with_writer(writer)
|
||||||
.with_filter(filter);
|
.with_filter(filter);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue