Split `annotations` and `graph` into 2 separate modules
Dependencies
- [2]
UKNTVY7ZAdd treemap visualization code - [3]
L6QJNN62Parse rustc self-profile data using `analyzeme` - [4]
ZEN3WUPDAdd support for histogram charts - [5]
YA5ITLOVAdd support for Sankey diagrams - [6]
BRXHJFU7Refactor measurements into `annotations` module - [7]
OPTMCUTBUse timings `duration` to set size of rendered node - [8]
ZPFD3275Switch from `cargo_metadata`+`petgraph` to `guppy` - [9]
LOR3KOXGParse JSON output from `cargo build --timings` - [10]
UXJFRBBLMove graph functionality into `graph` module - [11]
V2NPEIA6Use custom types to deserialize `--timings=json` output - [12]
T34OV3YQStore timings output in `timings::Output` struct - [13]
2H6RJC35Account for floating point inaccuracy in histogram calculation - [14]
B2L26LOAStore index of dependency nodes - [15]
JVYWRCPTAdd basic chart visualisation - [16]
UQJO24KBUse `forceatlas2` to construct graph layout - [17]
C43IWI7GMove visualization logic into separate module - [18]
XVQXXAGZAdd support for generating treemaps - [19]
7CVIL7UJCreate simple metadata parser
Change contents
- replacement in src/visualize/treemap.rs at line 1
use crate::Annotations;use crate::AnnotationGraph; - replacement in src/visualize/treemap.rs at line 23
annotations: &Annotations,annotations: &AnnotationGraph, - replacement in src/visualize/sankey.rs at line 1
use crate::{Annotations, Measurement, Variable};use crate::{AnnotationGraph, Measurement, Variable}; - replacement in src/visualize/sankey.rs at line 3
pub fn nodes<'graph>(annotations: &'graph Annotations) -> Vec<&'graph str> {pub fn nodes<'graph>(annotations: &'graph AnnotationGraph) -> Vec<&'graph str> { - replacement in src/visualize/sankey.rs at line 10
pub fn links<'graph>(annotations: &'graph Annotations) -> Vec<(&'graph str, &'graph str, f64)> {pub fn links<'graph>(annotations: &'graph AnnotationGraph) -> Vec<(&'graph str, &'graph str, f64)> { - replacement in src/visualize/mod.rs at line 18
pub fn for_style(style: Style, annotations: &crate::Annotations) {pub fn for_style(style: Style, annotations: &crate::AnnotationGraph) { - replacement in src/visualize/histogram.rs at line 1
use crate::{Annotations, Measurement, Variable};use crate::{AnnotationGraph, Measurement, Variable}; - replacement in src/visualize/histogram.rs at line 26
pub fn axes(annotations: &Annotations) -> (Axis, Axis) {pub fn axes(annotations: &AnnotationGraph) -> (Axis, Axis) { - replacement in src/visualize/histogram.rs at line 49
pub fn data(annotations: &Annotations) -> Vec<DataPoint> {pub fn data(annotations: &AnnotationGraph) -> Vec<DataPoint> { - replacement in src/visualize/graph.rs at line 1
use crate::{Annotations, Measurement, Variable};use crate::{AnnotationGraph, Measurement, Variable}; - replacement in src/visualize/graph.rs at line 8
annotations: &'graph Annotations,annotations: &'graph AnnotationGraph, - replacement in src/visualize/graph.rs at line 42
pub fn data(annotations: &Annotations) -> charming::series::GraphData {pub fn data(annotations: &AnnotationGraph) -> charming::series::GraphData { - edit in src/main.rs at line 6
mod graph; - replacement in src/main.rs at line 9
pub use annotations::{Annotations, Measurement, Variable};pub use graph::{AnnotationGraph, Measurement, Variable}; - edit in src/main.rs at line 15
let self_profile = annotations::self_profile::ProfileCollection::new(); - replacement in src/main.rs at line 20
let annotations = annotations::Annotations::new(&package_graph, timings.repr);let graph = AnnotationGraph::new(&package_graph, timings, self_profile); - replacement in src/main.rs at line 22
visualize::for_style(visualize::Style::Treemap, &annotations);visualize::for_style(visualize::Style::Treemap, &graph); - file addition: graph[4.15]
- file move: mod.rs → mod.rs
- replacement in src/graph/mod.rs at line 1
use std::collections::HashMap;use crate::annotations::{self_profile, timings}; - edit in src/graph/mod.rs at line 11
mod self_profile;pub mod timings; - replacement in src/graph/mod.rs at line 36
pub struct Annotations<'graph> {pub struct AnnotationGraph<'graph> { - replacement in src/graph/mod.rs at line 42
impl<'graph> Annotations<'graph> {impl<'graph> AnnotationGraph<'graph> { - replacement in src/graph/mod.rs at line 45
mut timings: HashMap<PackageId, Vec<timings::Message>>,mut timings: timings::Output,self_profile: self_profile::ProfileCollection, - replacement in src/graph/mod.rs at line 48
let profile_data = self_profile::ProfileCollection::new();dbg!(profile_data.probes.len(), profile_data.crates.len());dbg!(self_profile.probes.len(), self_profile.crates.len()); - replacement in src/graph/mod.rs at line 60
timings: timings.remove(id),timings: timings.repr.remove(id), - edit in src/annotations/timings.rs at line 5
use cargo_metadata::camino::Utf8PathBuf;use cargo_metadata::Edition; - edit in src/annotations/timings.rs at line 26[4.614]→[4.614:617](∅→∅),[4.617]→[4.452:991](∅→∅),[4.991]→[4.730:752](∅→∅),[4.752]→[4.1009:1160](∅→∅),[4.1009]→[4.1009:1160](∅→∅)
}/// See https://doc.rust-lang.org/nightly/nightly-rustc/cargo/core/manifest/enum.TargetKind.html/// and https://doc.rust-lang.org/nightly/nightly-rustc/cargo/core/manifest/enum.TargetKind.html#impl-Serialize-for-TargetKind/// This is different to the original enum as `CrateType` has been manually flattened into this enum,/// so some information is lost in favour of simplicity// TODO: fix this limitation, make `TargetKind` match cargo's definition#[derive(Clone, Debug, Serialize, Deserialize)]#[serde(rename_all = "kebab-case")]pub enum TargetKind {Lib,Bin,Test,Bench,ExampleLib,ExampleBin,CustomBuild,Rlib,Dylib,Cdylib,Staticlib,ProcMacro, - edit in src/annotations/timings.rs at line 28[4.1163]→[4.1163:1311](∅→∅),[4.1311]→[4.753:945](∅→∅),[4.945]→[4.1471:1474](∅→∅),[4.1471]→[4.1471:1474](∅→∅)
/// See https://doc.rust-lang.org/nightly/nightly-rustc/cargo/core/manifest/struct.TargetInner.html#[derive(Clone, Debug, Serialize, Deserialize)]pub struct Target {pub kind: Vec<TargetKind>,pub name: String,pub src_path: Utf8PathBuf,pub edition: Edition,pub doc: bool,pub doctest: bool,pub test: bool,} - replacement in src/annotations/timings.rs at line 35
pub target: Target,pub target: super::Target, - replacement in src/annotations/self_profile.rs at line 67
pub crate_types: Vec<super::timings::TargetKind>,pub crate_types: Vec<super::TargetKind>, - file addition: mod.rs[4.3345]
use camino::Utf8PathBuf;use cargo_metadata::Edition;use serde::{Deserialize, Serialize};pub mod self_profile;pub mod timings;/// See https://docs.rs/cargo/latest/cargo/core/compiler/enum.CompileMode.html/// These are the only two cases we are interested in#[derive(Clone, Debug, Serialize, Deserialize)]#[serde(rename_all = "kebab-case")]pub enum Mode {Build,RunCustomBuild,}/// See https://doc.rust-lang.org/nightly/nightly-rustc/cargo/core/manifest/enum.TargetKind.html/// and https://doc.rust-lang.org/nightly/nightly-rustc/cargo/core/manifest/enum.TargetKind.html#impl-Serialize-for-TargetKind/// This is different to the original enum as `CrateType` has been manually flattened into this enum,/// so some information is lost in favour of simplicity// TODO: fix this limitation, make `TargetKind` match cargo's definition#[derive(Clone, Debug, Serialize, Deserialize)]#[serde(rename_all = "kebab-case")]pub enum TargetKind {Lib,Bin,Test,Bench,ExampleLib,ExampleBin,CustomBuild,Rlib,Dylib,Cdylib,Staticlib,ProcMacro,}/// See https://doc.rust-lang.org/nightly/nightly-rustc/cargo/core/manifest/struct.TargetInner.html#[derive(Clone, Debug, Serialize, Deserialize)]pub struct Target {pub kind: Vec<TargetKind>,pub name: String,pub src_path: Utf8PathBuf,pub edition: Edition,pub doc: bool,pub doctest: bool,pub test: bool,}