Skip to content

Commit 64003a0

Browse files
committed
move comparison::Metric to database crate
1 parent 4462d4b commit 64003a0

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,9 +252,8 @@ pub mod bootstrap {
252252

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

@@ -595,8 +594,8 @@ pub mod github {
595594
}
596595

597596
pub mod triage {
598-
use crate::comparison::Metric;
599597
use collector::Bound;
598+
use database::comparison::Metric;
600599
use serde::{Deserialize, Serialize};
601600

602601
#[derive(Debug, Clone, Serialize, Deserialize)]

site/src/comparison.rs

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

1313
use collector::compile::benchmark::category::Category;
1414
use collector::Bound;
15-
use serde::{Deserialize, Serialize};
15+
use database::comparison::Metric;
16+
use serde::Serialize;
1617

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

3332
type 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

site/src/github/comparison_summary.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
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

7-
use database::{ArtifactId, QueuedCommit};
7+
use database::{comparison::Metric, ArtifactId, QueuedCommit};
88

99
use crate::github::{COMMENT_MARK_ROLLUP, COMMENT_MARK_TEMPORARY, RUST_REPO_GITHUB_API_URL};
1010
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
@@ -25,12 +25,12 @@ use crate::db::{ArtifactId, Profile, Scenario};
2525
use crate::load::SiteCtxt;
2626

2727
use collector::Bound;
28+
use database::comparison::Metric;
2829
use database::interpolate::Interpolate;
2930
use database::selector::StatisticSeries;
3031
use database::ArtifactIdIter;
3132
use database::{selector::Point, Benchmark, CodegenBackend, Commit, Connection, Index, Lookup};
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)