@@ -12,22 +12,21 @@ use crate::selector::{
1212
1313use collector:: compile:: benchmark:: category:: Category ;
1414use collector:: Bound ;
15- use serde:: { Deserialize , Serialize } ;
15+ use database:: comparison:: Metric ;
16+ use serde:: Serialize ;
1617
1718use crate :: api:: comparison:: CompileBenchmarkMetadata ;
1819use crate :: benchmark_metadata:: get_compile_benchmarks_metadata;
1920use crate :: server:: comparison:: StatComparison ;
2021use collector:: compile:: benchmark:: ArtifactType ;
2122use database:: { CodegenBackend , CommitType , CompileBenchmark } ;
22- use serde:: de:: IntoDeserializer ;
2323use std:: cmp;
2424use std:: collections:: { HashMap , HashSet } ;
2525use std:: error:: Error ;
2626use std:: fmt:: Write ;
2727use std:: hash:: Hash ;
2828use std:: iter;
2929use std:: ops:: Deref ;
30- use std:: str:: FromStr ;
3130use std:: sync:: Arc ;
3231
3332type BoxedError = Box < dyn Error + Send + Sync > ;
@@ -234,115 +233,12 @@ async fn populate_report(
234233 }
235234}
236235
237- /// This enum contains all "known" metrics coming from rustc or profiling tools that we know
238- /// (and care) about.
239- #[ derive( Copy , Clone , Debug , PartialEq , Serialize , Deserialize ) ]
240- pub enum Metric {
241- #[ serde( rename = "context-switches" ) ]
242- ContextSwitches ,
243- #[ serde( rename = "cpu-clock" ) ]
244- CpuClock ,
245- #[ serde( rename = "cpu-clock:u" ) ]
246- CpuClockUser ,
247- #[ serde( rename = "cycles" ) ]
248- Cycles ,
249- #[ serde( rename = "cycles:u" ) ]
250- CyclesUser ,
251- #[ serde( rename = "faults" ) ]
252- Faults ,
253- #[ serde( rename = "faults:u" ) ]
254- FaultsUser ,
255- #[ serde( rename = "instructions:u" ) ]
256- InstructionsUser ,
257- #[ serde( rename = "max-rss" ) ]
258- MaxRSS ,
259- #[ serde( rename = "task-clock" ) ]
260- TaskClock ,
261- #[ serde( rename = "task-clock:u" ) ]
262- TaskClockUser ,
263- #[ serde( rename = "wall-time" ) ]
264- WallTime ,
265- #[ serde( rename = "branch-misses" ) ]
266- BranchMisses ,
267- #[ serde( rename = "cache-misses" ) ]
268- CacheMisses ,
269- /// Rustc guesses the codegen unit size by MIR count.
270- #[ serde( rename = "size:codegen_unit_size_estimate" ) ]
271- CodegenUnitSize ,
272- /// The codegen unit size by llvm ir count, the real size of a cgu.
273- #[ serde( rename = "size:cgu_instructions" ) ]
274- CodegenUnitLlvmIrCount ,
275- #[ serde( rename = "size:dep_graph" ) ]
276- DepGraphSize ,
277- #[ serde( rename = "size:linked_artifact" ) ]
278- LinkedArtifactSize ,
279- #[ serde( rename = "size:object_file" ) ]
280- ObjectFileSize ,
281- #[ serde( rename = "size:query_cache" ) ]
282- QueryCacheSize ,
283- #[ serde( rename = "size:work_product_index" ) ]
284- WorkProductIndexSize ,
285- #[ serde( rename = "size:crate_metadata" ) ]
286- CrateMetadataSize ,
287- #[ serde( rename = "size:dwo_file" ) ]
288- DwoFileSize ,
289- #[ serde( rename = "size:assembly_file" ) ]
290- AssemblyFileSize ,
291- #[ serde( rename = "size:llvm_bitcode" ) ]
292- LlvmBitcodeSize ,
293- #[ serde( rename = "size:llvm_ir" ) ]
294- LlvmIrSize ,
295- /// Total bytes of a generated documentation directory
296- #[ serde( rename = "size:doc_bytes" ) ]
297- DocByteSize ,
298- /// Number of files inside a generated documentation directory.
299- #[ serde( rename = "size:doc_files_count" ) ]
300- DocFilesCount ,
236+ trait MetricExt {
237+ fn relative_change_magnitude ( & self , change : f64 ) -> Magnitude ;
238+ fn is_typically_noisy ( & self ) -> bool ;
301239}
302240
303- impl FromStr for Metric {
304- type Err = String ;
305-
306- fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
307- Metric :: deserialize ( s. into_deserializer ( ) )
308- . map_err ( |e : serde:: de:: value:: Error | format ! ( "Unknown metric `{s}`: {e:?}" ) )
309- }
310- }
311-
312- impl Metric {
313- pub fn as_str ( & self ) -> & str {
314- match self {
315- Metric :: ContextSwitches => "context-switches" ,
316- Metric :: CpuClock => "cpu-clock" ,
317- Metric :: CpuClockUser => "cpu-clock:u" ,
318- Metric :: Cycles => "cycles" ,
319- Metric :: CyclesUser => "cycles:u" ,
320- Metric :: Faults => "faults" ,
321- Metric :: FaultsUser => "faults:u" ,
322- Metric :: InstructionsUser => "instructions:u" ,
323- Metric :: MaxRSS => "max-rss" ,
324- Metric :: TaskClock => "task-clock" ,
325- Metric :: TaskClockUser => "task-clock:u" ,
326- Metric :: WallTime => "wall-time" ,
327- Metric :: BranchMisses => "branch-misses" ,
328- Metric :: CacheMisses => "cache-misses" ,
329- Metric :: CodegenUnitSize => "size:codegen_unit_size_estimate" ,
330- Metric :: CodegenUnitLlvmIrCount => "size:cgu_instructions" ,
331- Metric :: DepGraphSize => "size:dep_graph" ,
332- Metric :: LinkedArtifactSize => "size:linked_artifact" ,
333- Metric :: ObjectFileSize => "size:object_file" ,
334- Metric :: QueryCacheSize => "size:query_cache" ,
335- Metric :: WorkProductIndexSize => "size:work_product_index" ,
336- Metric :: CrateMetadataSize => "size:crate_metadata" ,
337- Metric :: DwoFileSize => "size:dwo_file" ,
338- Metric :: AssemblyFileSize => "size:assembly_file" ,
339- Metric :: LlvmBitcodeSize => "size:llvm_bitcode" ,
340- Metric :: LlvmIrSize => "size:llvm_ir" ,
341- Metric :: DocByteSize => "size:doc_bytes" ,
342- Metric :: DocFilesCount => "size:doc_files_count" ,
343- }
344- }
345-
241+ impl MetricExt for Metric {
346242 /// Determines the magnitude of a percent relative change for a given metric.
347243 ///
348244 /// Takes into account how noisy the stat is. For example, instruction
0 commit comments