@@ -95,14 +95,38 @@ impl flags::AnalysisStats {
95
95
eprintln ! ( ")" ) ;
96
96
97
97
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 ( ) ;
101
98
102
99
let mut krates = Crate :: all ( db) ;
103
100
if self . randomize {
104
101
shuffle ( & mut rng, & mut krates) ;
105
102
}
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 ( ) ;
106
130
for krate in krates {
107
131
let module = krate. root_module ( db) ;
108
132
let file_id = module. definition_source_file_id ( db) ;
@@ -169,7 +193,9 @@ impl flags::AnalysisStats {
169
193
visited_modules. len( ) ,
170
194
bodies. len( )
171
195
) ;
172
- eprintln ! ( "{:<20} {}" , "Item Collection:" , analysis_sw. elapsed( ) ) ;
196
+ let crate_def_map_time = crate_def_map_sw. elapsed ( ) ;
197
+ eprintln ! ( "{:<20} {}" , "Item Collection:" , crate_def_map_time) ;
198
+ report_metric ( "crate def map time" , crate_def_map_time. time . as_millis ( ) as u64 , "ms" ) ;
173
199
174
200
if self . randomize {
175
201
shuffle ( & mut rng, & mut bodies) ;
0 commit comments