Skip to content

Commit dfdabb8

Browse files
committed
add some profile info
1 parent dfdaeef commit dfdabb8

File tree

10 files changed

+66
-23
lines changed

10 files changed

+66
-23
lines changed

crates/code_analysis/src/compilation/analyzer/decl/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ mod docs;
22
mod exprs;
33
mod stats;
44

5-
use crate::db_index::{DbIndex, LuaScopeKind};
5+
use crate::{
6+
db_index::{DbIndex, LuaScopeKind},
7+
profile::Profile,
8+
};
69

710
use super::AnalyzeContext;
811
use emmylua_parser::{LuaAst, LuaAstNode, LuaChunk, LuaSyntaxKind};
@@ -14,6 +17,7 @@ use crate::{
1417
};
1518

1619
pub(crate) fn analyze(db: &mut DbIndex, context: &mut AnalyzeContext) {
20+
let _p = Profile::cond_new("decl analyze", context.tree_list.len() > 1);
1721
for in_filed_tree in context.tree_list.iter() {
1822
db.get_reference_index_mut()
1923
.create_local_reference(in_filed_tree.file_id);

crates/code_analysis/src/compilation/analyzer/doc/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ mod type_ref_tags;
99

1010
use super::AnalyzeContext;
1111
use crate::{
12-
db_index::{DbIndex, LuaTypeDeclId},
13-
FileId,
12+
db_index::{DbIndex, LuaTypeDeclId}, profile::Profile, FileId
1413
};
1514
use emmylua_parser::{LuaAstNode, LuaComment, LuaDocDescriptionOwner, LuaSyntaxNode};
1615
use file_generic_index::FileGenericIndex;
1716
use tags::get_owner_id;
1817

1918
pub(crate) fn analyze(db: &mut DbIndex, context: &mut AnalyzeContext) {
19+
let _p = Profile::cond_new("doc analyze", context.tree_list.len() > 1);
2020
let tree_list = context.tree_list.clone();
2121
for in_filed_tree in tree_list.iter() {
2222
let root = &in_filed_tree.value;

crates/code_analysis/src/compilation/analyzer/flow/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
mod reference_flow;
22

3-
use crate::{db_index::DbIndex, FileId};
3+
use crate::{db_index::DbIndex, profile::Profile, FileId};
44
use emmylua_parser::LuaChunk;
55

66
use super::AnalyzeContext;
77

88
pub(crate) fn analyze(db: &mut DbIndex, context: &mut AnalyzeContext) {
9+
let _p = Profile::cond_new("flow analyze", context.tree_list.len() > 1);
910
let tree_list = context.tree_list.clone();
1011
// build decl and ref flow chain
1112
for in_filed_tree in &tree_list {

crates/code_analysis/src/compilation/analyzer/lua/mod.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,13 @@ use stats::{
1313
};
1414

1515
use crate::{
16-
db_index::{DbIndex, LuaType},
17-
semantic::{infer_expr, LuaInferConfig},
18-
FileId,
16+
db_index::{DbIndex, LuaType}, profile::Profile, semantic::{infer_expr, LuaInferConfig}, FileId
1917
};
2018

2119
use super::{unresolve::UnResolve, AnalyzeContext};
2220

2321
pub(crate) fn analyze(db: &mut DbIndex, context: &mut AnalyzeContext) {
22+
let _p = Profile::cond_new("lua analyze", context.tree_list.len() > 1);
2423
let tree_list = context.tree_list.clone();
2524
for in_filed_tree in &tree_list {
2625
let root = &in_filed_tree.value;

crates/code_analysis/src/compilation/analyzer/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ mod unresolve;
66

77
use std::sync::Arc;
88

9-
use crate::{db_index::DbIndex, Emmyrc, InFiled};
9+
use crate::{db_index::DbIndex, profile::Profile, Emmyrc, InFiled};
1010
use emmylua_parser::LuaChunk;
1111
use unresolve::UnResolve;
1212

@@ -21,6 +21,7 @@ pub fn analyze(db: &mut DbIndex, context: AnalyzeContext) {
2121
}
2222

2323
fn module_analyze(db: &mut DbIndex, context: &mut AnalyzeContext) {
24+
let _p = Profile::cond_new("module_analyze", context.tree_list.len() > 1);
2425
for in_filed_tree in &context.tree_list {
2526
let file_id = in_filed_tree.file_id;
2627
if let Some(path) = db.get_vfs().get_file_path(&file_id).cloned() {

crates/code_analysis/src/compilation/analyzer/unresolve/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ mod resolve;
44
mod resolve_closure_param;
55

66
use crate::{
7-
db_index::{DbIndex, LuaDeclId, LuaMemberId, LuaSignatureId},
8-
FileId,
7+
db_index::{DbIndex, LuaDeclId, LuaMemberId, LuaSignatureId}, profile::Profile, FileId
98
};
109
use emmylua_parser::{LuaCallExpr, LuaExpr};
1110
use infer_manager::InferManager;
@@ -19,6 +18,7 @@ use resolve_closure_param::try_resolve_closure_params;
1918
use super::{lua::LuaReturnPoint, AnalyzeContext};
2019

2120
pub fn analyze(db: &mut DbIndex, context: &mut AnalyzeContext) {
21+
let _p = Profile::cond_new("resolve analyze", context.tree_list.len() > 1);
2222
let mut unresolves = std::mem::take(&mut context.unresolves);
2323
let mut infer_manager = InferManager::new(context.config.clone());
2424
while try_resolve(db, &mut infer_manager, &mut unresolves) {

crates/code_analysis/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ mod db_index;
44
mod diagnostic;
55
mod semantic;
66
mod vfs;
7+
mod profile;
78

89
pub use compilation::*;
910
pub use config::*;
@@ -15,6 +16,7 @@ pub use semantic::*;
1516
use std::{collections::HashSet, env, path::PathBuf, sync::Arc};
1617
use tokio_util::sync::CancellationToken;
1718
pub use vfs::*;
19+
pub use profile::Profile;
1820

1921
#[macro_use]
2022
extern crate rust_i18n;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
use std::time::Instant;
2+
use log::info;
3+
4+
pub struct Profile<'a> {
5+
name: &'a str,
6+
start: Instant,
7+
}
8+
9+
#[allow(unused)]
10+
impl<'a> Profile<'a> {
11+
pub fn new(name: &'a str) -> Self {
12+
Self {
13+
name,
14+
start: Instant::now(),
15+
}
16+
}
17+
18+
pub fn cond_new(name: &'a str, cond: bool) -> Option<Self> {
19+
if cond {
20+
Some(Self::new(name))
21+
} else {
22+
None
23+
}
24+
}
25+
}
26+
27+
impl<'a> Drop for Profile<'a> {
28+
fn drop(&mut self) {
29+
let duration = self.start.elapsed();
30+
info!("{}: cost {:?}", self.name, duration);
31+
}
32+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use code_analysis::EmmyLuaAnalysis;
22

3-
3+
#[allow(unused)]
44
pub fn generate_markdown(analysis: &mut EmmyLuaAnalysis, output: &str) {
55

66
}

crates/emmylua_ls/src/handlers/initialized/mod.rs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use crate::{
1313
};
1414
use client_config::get_client_config;
1515
pub use client_config::ClientConfig;
16-
use code_analysis::{uri_to_file_path, EmmyLuaAnalysis, Emmyrc, FileId};
16+
use code_analysis::{uri_to_file_path, EmmyLuaAnalysis, Emmyrc, FileId, Profile};
1717
use codestyle::load_editorconfig;
1818
use collect_files::collect_files;
1919
use log::info;
@@ -147,17 +147,21 @@ pub async fn init_analysis(
147147
}
148148

149149
let mut count = 0;
150-
while let Some(_) = rx.recv().await {
151-
count += 1;
152-
153-
if client_id.is_vscode() {
154-
status_bar.report_progress(
155-
format!("diagnostic {}/{}", count, file_count).as_str(),
156-
0.75,
157-
);
158-
}
159-
if count == file_count {
160-
break;
150+
if file_count != 0 {
151+
let text= format!("diagnose {} files", file_count);
152+
let _p = Profile::new(text.as_str());
153+
while let Some(_) = rx.recv().await {
154+
count += 1;
155+
156+
if client_id.is_vscode() {
157+
status_bar.report_progress(
158+
format!("diagnostic {}/{}", count, file_count).as_str(),
159+
0.75,
160+
);
161+
}
162+
if count == file_count {
163+
break;
164+
}
161165
}
162166
}
163167

0 commit comments

Comments
 (0)