@@ -95,17 +95,41 @@ impl flags::AnalysisStats {
9595 eprintln ! ( ")" ) ;
9696
9797 let mut analysis_sw = self . stop_watch ( ) ;
98- let mut num_crates = 0 ;
99- let mut visited_modules = FxHashSet :: default ( ) ;
100- let mut visit_queue = Vec :: new ( ) ;
10198
10299 let mut krates = Crate :: all ( db) ;
103100 if self . randomize {
104101 shuffle ( & mut rng, & mut krates) ;
105102 }
103+
104+ let mut item_tree_sw = self . stop_watch ( ) ;
105+ let mut num_item_trees = 0 ;
106+ let source_roots =
107+ krates. iter ( ) . cloned ( ) . map ( |krate| db. file_source_root ( krate. root_file ( db) ) ) . unique ( ) ;
108+ for source_root_id in source_roots {
109+ let source_root = db. source_root ( source_root_id) ;
110+ if !source_root. is_library || self . with_deps {
111+ for file_id in source_root. iter ( ) {
112+ if let Some ( p) = source_root. path_for_file ( & file_id) {
113+ if let Some ( ( _, Some ( "rs" ) ) ) = p. name_and_extension ( ) {
114+ db. file_item_tree ( file_id. into ( ) ) ;
115+ num_item_trees += 1 ;
116+ }
117+ }
118+ }
119+ }
120+ }
121+ eprintln ! ( " item trees: {num_item_trees}" ) ;
122+ let item_tree_time = item_tree_sw. elapsed ( ) ;
123+ eprintln ! ( "{:<20} {}" , "Item Tree Collection:" , item_tree_time) ;
124+ report_metric ( "item tree time" , item_tree_time. time . as_millis ( ) as u64 , "ms" ) ;
125+
126+ let mut crate_def_map_sw = self . stop_watch ( ) ;
127+ let mut num_crates = 0 ;
128+ let mut visited_modules = FxHashSet :: default ( ) ;
129+ let mut visit_queue = Vec :: new ( ) ;
106130 for krate in krates {
107131 let module = krate. root_module ( db) ;
108- let file_id = module. definition_source ( db) . file_id ;
132+ let file_id = module. definition_source_file_id ( db) ;
109133 let file_id = file_id. original_file ( db) ;
110134 let source_root = db. file_source_root ( file_id) ;
111135 let source_root = db. source_root ( source_root) ;
@@ -171,7 +195,9 @@ impl flags::AnalysisStats {
171195 adts. len( ) ,
172196 consts. len( ) ,
173197 ) ;
174- eprintln ! ( "{:<20} {}" , "Item Collection:" , analysis_sw. elapsed( ) ) ;
198+ let crate_def_map_time = crate_def_map_sw. elapsed ( ) ;
199+ eprintln ! ( "{:<20} {}" , "Item Collection:" , crate_def_map_time) ;
200+ report_metric ( "crate def map time" , crate_def_map_time. time . as_millis ( ) as u64 , "ms" ) ;
175201
176202 if self . randomize {
177203 shuffle ( & mut rng, & mut bodies) ;
0 commit comments