Skip to content

Commit ffb00d4

Browse files
committed
move comparison::Metric to database crate
1 parent 668454d commit ffb00d4

File tree

8 files changed

+127
-120
lines changed

8 files changed

+127
-120
lines changed

database/src/comparison.rs

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
use std::str::FromStr;
2+
3+
use serde::{de::IntoDeserializer, Deserialize, Serialize};
4+
5+
/// This enum contains all "known" metrics coming from rustc or profiling tools that we know
6+
/// (and care) about.
7+
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
8+
pub enum Metric {
9+
#[serde(rename = "context-switches")]
10+
ContextSwitches,
11+
#[serde(rename = "cpu-clock")]
12+
CpuClock,
13+
#[serde(rename = "cpu-clock:u")]
14+
CpuClockUser,
15+
#[serde(rename = "cycles")]
16+
Cycles,
17+
#[serde(rename = "cycles:u")]
18+
CyclesUser,
19+
#[serde(rename = "faults")]
20+
Faults,
21+
#[serde(rename = "faults:u")]
22+
FaultsUser,
23+
#[serde(rename = "instructions:u")]
24+
InstructionsUser,
25+
#[serde(rename = "max-rss")]
26+
MaxRSS,
27+
#[serde(rename = "task-clock")]
28+
TaskClock,
29+
#[serde(rename = "task-clock:u")]
30+
TaskClockUser,
31+
#[serde(rename = "wall-time")]
32+
WallTime,
33+
#[serde(rename = "branch-misses")]
34+
BranchMisses,
35+
#[serde(rename = "cache-misses")]
36+
CacheMisses,
37+
/// Rustc guesses the codegen unit size by MIR count.
38+
#[serde(rename = "size:codegen_unit_size_estimate")]
39+
CodegenUnitSize,
40+
/// The codegen unit size by llvm ir count, the real size of a cgu.
41+
#[serde(rename = "size:cgu_instructions")]
42+
CodegenUnitLlvmIrCount,
43+
#[serde(rename = "size:dep_graph")]
44+
DepGraphSize,
45+
#[serde(rename = "size:linked_artifact")]
46+
LinkedArtifactSize,
47+
#[serde(rename = "size:object_file")]
48+
ObjectFileSize,
49+
#[serde(rename = "size:query_cache")]
50+
QueryCacheSize,
51+
#[serde(rename = "size:work_product_index")]
52+
WorkProductIndexSize,
53+
#[serde(rename = "size:crate_metadata")]
54+
CrateMetadataSize,
55+
#[serde(rename = "size:dwo_file")]
56+
DwoFileSize,
57+
#[serde(rename = "size:assembly_file")]
58+
AssemblyFileSize,
59+
#[serde(rename = "size:llvm_bitcode")]
60+
LlvmBitcodeSize,
61+
#[serde(rename = "size:llvm_ir")]
62+
LlvmIrSize,
63+
/// Total bytes of a generated documentation directory
64+
#[serde(rename = "size:doc_bytes")]
65+
DocByteSize,
66+
/// Number of files inside a generated documentation directory.
67+
#[serde(rename = "size:doc_files_count")]
68+
DocFilesCount,
69+
}
70+
71+
impl FromStr for Metric {
72+
type Err = String;
73+
74+
fn from_str(s: &str) -> Result<Self, Self::Err> {
75+
Metric::deserialize(s.into_deserializer())
76+
.map_err(|e: serde::de::value::Error| format!("Unknown metric `{s}`: {e:?}"))
77+
}
78+
}
79+
80+
impl Metric {
81+
pub fn as_str(&self) -> &str {
82+
match self {
83+
Metric::ContextSwitches => "context-switches",
84+
Metric::CpuClock => "cpu-clock",
85+
Metric::CpuClockUser => "cpu-clock:u",
86+
Metric::Cycles => "cycles",
87+
Metric::CyclesUser => "cycles:u",
88+
Metric::Faults => "faults",
89+
Metric::FaultsUser => "faults:u",
90+
Metric::InstructionsUser => "instructions:u",
91+
Metric::MaxRSS => "max-rss",
92+
Metric::TaskClock => "task-clock",
93+
Metric::TaskClockUser => "task-clock:u",
94+
Metric::WallTime => "wall-time",
95+
Metric::BranchMisses => "branch-misses",
96+
Metric::CacheMisses => "cache-misses",
97+
Metric::CodegenUnitSize => "size:codegen_unit_size_estimate",
98+
Metric::CodegenUnitLlvmIrCount => "size:cgu_instructions",
99+
Metric::DepGraphSize => "size:dep_graph",
100+
Metric::LinkedArtifactSize => "size:linked_artifact",
101+
Metric::ObjectFileSize => "size:object_file",
102+
Metric::QueryCacheSize => "size:query_cache",
103+
Metric::WorkProductIndexSize => "size:work_product_index",
104+
Metric::CrateMetadataSize => "size:crate_metadata",
105+
Metric::DwoFileSize => "size:dwo_file",
106+
Metric::AssemblyFileSize => "size:assembly_file",
107+
Metric::LlvmBitcodeSize => "size:llvm_bitcode",
108+
Metric::LlvmIrSize => "size:llvm_ir",
109+
Metric::DocByteSize => "size:doc_bytes",
110+
Metric::DocFilesCount => "size:doc_files_count",
111+
}
112+
}
113+
}

database/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use std::ops::{Add, Sub};
99
use std::sync::Arc;
1010
use std::time::Duration;
1111

12+
pub mod comparison;
1213
pub mod interpolate;
1314
pub mod pool;
1415
pub mod selector;

site/src/api.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,7 @@ pub mod bootstrap {
252252

253253
pub mod comparison {
254254
use crate::benchmark_metadata::ProfileMetadata;
255-
use crate::comparison::Metric;
256-
use database::{selector::Bound, Date};
255+
use database::{comparison::Metric, selector::Bound, Date};
257256
use serde::{Deserialize, Serialize};
258257
use std::collections::HashMap;
259258

@@ -594,7 +593,7 @@ pub mod github {
594593
}
595594

596595
pub mod triage {
597-
use crate::comparison::Metric;
596+
use database::comparison::Metric;
598597
use database::selector::Bound;
599598
use serde::{Deserialize, Serialize};
600599

site/src/comparison.rs

Lines changed: 6 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,21 @@ use crate::selector::{
1111
};
1212

1313
use collector::compile::benchmark::category::Category;
14-
use serde::{Deserialize, Serialize};
14+
use database::comparison::Metric;
15+
use serde::Serialize;
1516

1617
use crate::api::comparison::CompileBenchmarkMetadata;
1718
use crate::benchmark_metadata::get_compile_benchmarks_metadata;
1819
use crate::server::comparison::StatComparison;
1920
use collector::compile::benchmark::ArtifactType;
2021
use database::{selector::Bound, CodegenBackend, CommitType, CompileBenchmark};
21-
use serde::de::IntoDeserializer;
2222
use std::cmp;
2323
use std::collections::{HashMap, HashSet};
2424
use std::error::Error;
2525
use std::fmt::Write;
2626
use std::hash::Hash;
2727
use std::iter;
2828
use std::ops::Deref;
29-
use std::str::FromStr;
3029
use std::sync::Arc;
3130

3231
type BoxedError = Box<dyn Error + Send + Sync>;
@@ -233,115 +232,12 @@ async fn populate_report(
233232
}
234233
}
235234

236-
/// This enum contains all "known" metrics coming from rustc or profiling tools that we know
237-
/// (and care) about.
238-
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
239-
pub enum Metric {
240-
#[serde(rename = "context-switches")]
241-
ContextSwitches,
242-
#[serde(rename = "cpu-clock")]
243-
CpuClock,
244-
#[serde(rename = "cpu-clock:u")]
245-
CpuClockUser,
246-
#[serde(rename = "cycles")]
247-
Cycles,
248-
#[serde(rename = "cycles:u")]
249-
CyclesUser,
250-
#[serde(rename = "faults")]
251-
Faults,
252-
#[serde(rename = "faults:u")]
253-
FaultsUser,
254-
#[serde(rename = "instructions:u")]
255-
InstructionsUser,
256-
#[serde(rename = "max-rss")]
257-
MaxRSS,
258-
#[serde(rename = "task-clock")]
259-
TaskClock,
260-
#[serde(rename = "task-clock:u")]
261-
TaskClockUser,
262-
#[serde(rename = "wall-time")]
263-
WallTime,
264-
#[serde(rename = "branch-misses")]
265-
BranchMisses,
266-
#[serde(rename = "cache-misses")]
267-
CacheMisses,
268-
/// Rustc guesses the codegen unit size by MIR count.
269-
#[serde(rename = "size:codegen_unit_size_estimate")]
270-
CodegenUnitSize,
271-
/// The codegen unit size by llvm ir count, the real size of a cgu.
272-
#[serde(rename = "size:cgu_instructions")]
273-
CodegenUnitLlvmIrCount,
274-
#[serde(rename = "size:dep_graph")]
275-
DepGraphSize,
276-
#[serde(rename = "size:linked_artifact")]
277-
LinkedArtifactSize,
278-
#[serde(rename = "size:object_file")]
279-
ObjectFileSize,
280-
#[serde(rename = "size:query_cache")]
281-
QueryCacheSize,
282-
#[serde(rename = "size:work_product_index")]
283-
WorkProductIndexSize,
284-
#[serde(rename = "size:crate_metadata")]
285-
CrateMetadataSize,
286-
#[serde(rename = "size:dwo_file")]
287-
DwoFileSize,
288-
#[serde(rename = "size:assembly_file")]
289-
AssemblyFileSize,
290-
#[serde(rename = "size:llvm_bitcode")]
291-
LlvmBitcodeSize,
292-
#[serde(rename = "size:llvm_ir")]
293-
LlvmIrSize,
294-
/// Total bytes of a generated documentation directory
295-
#[serde(rename = "size:doc_bytes")]
296-
DocByteSize,
297-
/// Number of files inside a generated documentation directory.
298-
#[serde(rename = "size:doc_files_count")]
299-
DocFilesCount,
235+
trait MetricExt {
236+
fn relative_change_magnitude(&self, change: f64) -> Magnitude;
237+
fn is_typically_noisy(&self) -> bool;
300238
}
301239

302-
impl FromStr for Metric {
303-
type Err = String;
304-
305-
fn from_str(s: &str) -> Result<Self, Self::Err> {
306-
Metric::deserialize(s.into_deserializer())
307-
.map_err(|e: serde::de::value::Error| format!("Unknown metric `{s}`: {e:?}"))
308-
}
309-
}
310-
311-
impl Metric {
312-
pub fn as_str(&self) -> &str {
313-
match self {
314-
Metric::ContextSwitches => "context-switches",
315-
Metric::CpuClock => "cpu-clock",
316-
Metric::CpuClockUser => "cpu-clock:u",
317-
Metric::Cycles => "cycles",
318-
Metric::CyclesUser => "cycles:u",
319-
Metric::Faults => "faults",
320-
Metric::FaultsUser => "faults:u",
321-
Metric::InstructionsUser => "instructions:u",
322-
Metric::MaxRSS => "max-rss",
323-
Metric::TaskClock => "task-clock",
324-
Metric::TaskClockUser => "task-clock:u",
325-
Metric::WallTime => "wall-time",
326-
Metric::BranchMisses => "branch-misses",
327-
Metric::CacheMisses => "cache-misses",
328-
Metric::CodegenUnitSize => "size:codegen_unit_size_estimate",
329-
Metric::CodegenUnitLlvmIrCount => "size:cgu_instructions",
330-
Metric::DepGraphSize => "size:dep_graph",
331-
Metric::LinkedArtifactSize => "size:linked_artifact",
332-
Metric::ObjectFileSize => "size:object_file",
333-
Metric::QueryCacheSize => "size:query_cache",
334-
Metric::WorkProductIndexSize => "size:work_product_index",
335-
Metric::CrateMetadataSize => "size:crate_metadata",
336-
Metric::DwoFileSize => "size:dwo_file",
337-
Metric::AssemblyFileSize => "size:assembly_file",
338-
Metric::LlvmBitcodeSize => "size:llvm_bitcode",
339-
Metric::LlvmIrSize => "size:llvm_ir",
340-
Metric::DocByteSize => "size:doc_bytes",
341-
Metric::DocFilesCount => "size:doc_files_count",
342-
}
343-
}
344-
240+
impl MetricExt for Metric {
345241
/// Determines the magnitude of a percent relative change for a given metric.
346242
///
347243
/// Takes into account how noisy the stat is. For example, instruction

site/src/github/comparison_summary.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use crate::comparison::{
22
deserves_attention_icount, write_summary_table, ArtifactComparison, ArtifactComparisonSummary,
3-
Direction, Metric,
3+
Direction,
44
};
55
use crate::load::SiteCtxt;
66

77
use database::selector::Bound;
8-
use database::{ArtifactId, QueuedCommit};
8+
use database::{comparison::Metric, ArtifactId, QueuedCommit};
99

1010
use crate::github::{COMMENT_MARK_ROLLUP, COMMENT_MARK_TEMPORARY, RUST_REPO_GITHUB_API_URL};
1111
use humansize::BINARY;

site/src/request_handlers/dashboard.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ use lazy_static::lazy_static;
44

55
use crate::api::{dashboard, ServerResult};
66
use crate::benchmark_metadata::get_stable_benchmark_names;
7-
use crate::comparison::Metric;
8-
use crate::db::{self, ArtifactId, Profile, Scenario};
7+
use crate::db::{self, comparison::Metric, ArtifactId, Profile, Scenario};
98
use crate::load::SiteCtxt;
109
use crate::selector;
1110

site/src/request_handlers/self_profile.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@ use std::sync::Arc;
44
use std::time::Instant;
55

66
use bytes::Buf;
7-
use database::CommitType;
7+
use database::{comparison::Metric, CommitType};
88
use headers::{ContentType, Header};
99
use hyper::StatusCode;
1010

1111
use crate::api::self_profile::ArtifactSizeDelta;
1212
use crate::api::{self_profile, self_profile_processed, self_profile_raw, ServerResult};
13-
use crate::comparison::Metric;
1413
use crate::db::ArtifactId;
1514
use crate::load::SiteCtxt;
1615
use crate::selector::{self};

site/src/selector.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@
2424
use crate::db::{ArtifactId, Profile, Scenario};
2525
use crate::load::SiteCtxt;
2626

27+
use database::comparison::Metric;
2728
use database::interpolate::Interpolate;
2829
use database::{
2930
selector::{Bound, Point, StatisticSeries},
3031
ArtifactIdIter, Benchmark, CodegenBackend, Commit, Connection, Index, Lookup,
3132
};
3233

33-
use crate::comparison::Metric;
3434
use async_trait::async_trait;
3535
use std::fmt::Debug;
3636
use std::hash::Hash;

0 commit comments

Comments
 (0)