Skip to content

Commit ee645a2

Browse files
authored
Merge pull request #1958 from s7tya/move-selector-to-db-crate
Move `Selector` into database crate
2 parents 753d302 + dba0c6b commit ee645a2

21 files changed

+610
-598
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
- name: Install toolchain
2424
uses: actions-rs/toolchain@v1
2525
with:
26-
toolchain: 1.73.0
26+
toolchain: 1.75.0
2727
override: true
2828
components: rustfmt, clippy
2929

Cargo.lock

-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

site/src/interpolate.rs renamed to database/src/interpolate.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
//! Given a series with some missing data `[1, 2, ?, 4]`,
1111
//! this iterator yields `[1, 2, 2, 4]`.
1212
13-
use crate::db::Point;
13+
use crate::selector::Point;
1414

1515
/// Whether a point has been interpolated or not
1616
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]

database/src/lib.rs

+33-6
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,13 @@ use serde::{Deserialize, Serialize};
66
use std::fmt;
77
use std::hash;
88
use std::ops::{Add, Sub};
9+
use std::sync::Arc;
910
use std::time::Duration;
1011

12+
pub mod interpolate;
13+
pub mod metric;
1114
pub mod pool;
15+
pub mod selector;
1216

1317
pub use pool::{Connection, Pool};
1418

@@ -245,20 +249,15 @@ impl fmt::Display for Profile {
245249
///
246250
/// These are usually reported to users in a "flipped" way. For example,
247251
/// `Cache::Empty` means we're doing a "full" build. We present this to users as "full".
248-
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
249-
#[serde(tag = "variant", content = "name")]
252+
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
250253
pub enum Scenario {
251254
/// Empty cache (i.e., full build)
252-
#[serde(rename = "full")]
253255
Empty,
254256
/// Empty cache but still incremental (i.e., a full incremental build)
255-
#[serde(rename = "incr-full")]
256257
IncrementalEmpty,
257258
/// Cache is fully up-to-date (i.e., no code has changed)
258-
#[serde(rename = "incr-unchanged")]
259259
IncrementalFresh,
260260
/// Cache is mostly up-to-date but some code has been changed
261-
#[serde(rename = "incr-patched")]
262261
IncrementalPatch(PatchName),
263262
}
264263

@@ -431,6 +430,34 @@ intern!(pub struct QueryLabel);
431430
#[derive(Serialize, Deserialize, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
432431
pub struct ArtifactIdNumber(pub u32);
433432

433+
#[derive(Debug)]
434+
pub struct ArtifactIdIter {
435+
ids: Arc<Vec<ArtifactId>>,
436+
idx: usize,
437+
}
438+
439+
impl ArtifactIdIter {
440+
pub fn new(artifact_ids: Arc<Vec<ArtifactId>>) -> ArtifactIdIter {
441+
ArtifactIdIter {
442+
ids: artifact_ids,
443+
idx: 0,
444+
}
445+
}
446+
}
447+
448+
impl Iterator for ArtifactIdIter {
449+
type Item = ArtifactId;
450+
fn next(&mut self) -> Option<Self::Item> {
451+
let r = self.ids.get(self.idx)?;
452+
self.idx += 1;
453+
Some(r.clone())
454+
}
455+
456+
fn size_hint(&self) -> (usize, Option<usize>) {
457+
(self.ids.len(), Some(self.ids.len()))
458+
}
459+
}
460+
434461
/// Cached Id lookups for many database tables.
435462
///
436463
/// This is a quick way to find what the database id for something.

database/src/metric.rs

+113
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+
}

0 commit comments

Comments
 (0)