about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2017-11-20 03:34:13 +0000
committerbors <bors@rust-lang.org>2017-11-20 03:34:13 +0000
commitef94d5c1f18f067ab035ea3f1e85e7b5867ea2a4 (patch)
treec4f0f45929ad0dca9e140e75df785587fe4873dd
parentf50fd075c2555d8511ccee8a7fe7aee3f2c45e14 (diff)
parent8d6f869c988d0d00ea93ce228b41f30aec3cb102 (diff)
downloadrust-ef94d5c1f18f067ab035ea3f1e85e7b5867ea2a4.tar.gz
rust-ef94d5c1f18f067ab035ea3f1e85e7b5867ea2a4.zip
Auto merge of #46068 - wesleywiser:incr_duplicate_read_stats, r=michaelwoerister
[incremental] Collect stats about duplicated edge reads from queries

Part of #45873
-rw-r--r--src/librustc/dep_graph/graph.rs14
-rw-r--r--src/librustc_incremental/persist/save.rs4
2 files changed, 18 insertions, 0 deletions
diff --git a/src/librustc/dep_graph/graph.rs b/src/librustc/dep_graph/graph.rs
index c9205f67f66..015cdd11bbd 100644
--- a/src/librustc/dep_graph/graph.rs
+++ b/src/librustc/dep_graph/graph.rs
@@ -413,6 +413,12 @@ impl DepGraph {
         self.data.as_ref().and_then(|t| t.dep_node_debug.borrow().get(&dep_node).cloned())
     }
 
+    pub fn edge_deduplication_data(&self) -> (u64, u64) {
+        let current_dep_graph = self.data.as_ref().unwrap().current.borrow();
+
+        (current_dep_graph.total_read_count, current_dep_graph.total_duplicate_read_count)
+    }
+
     pub fn serialize(&self) -> SerializedDepGraph {
         let fingerprints = self.fingerprints.borrow();
         let current_dep_graph = self.data.as_ref().unwrap().current.borrow();
@@ -737,6 +743,9 @@ pub(super) struct CurrentDepGraph {
     // each anon node. The session-key is just a random number generated when
     // the DepGraph is created.
     anon_id_seed: Fingerprint,
+
+    total_read_count: u64,
+    total_duplicate_read_count: u64,
 }
 
 impl CurrentDepGraph {
@@ -770,6 +779,8 @@ impl CurrentDepGraph {
             anon_id_seed: stable_hasher.finish(),
             task_stack: Vec::new(),
             forbidden_edge,
+            total_read_count: 0,
+            total_duplicate_read_count: 0,
         }
     }
 
@@ -900,6 +911,7 @@ impl CurrentDepGraph {
                 ref mut read_set,
                 node: ref target,
             }) => {
+                self.total_read_count += 1;
                 if read_set.insert(source) {
                     reads.push(source);
 
@@ -913,6 +925,8 @@ impl CurrentDepGraph {
                             }
                         }
                     }
+                } else {
+                    self.total_duplicate_read_count += 1;
                 }
             }
             Some(&mut OpenTask::Anon {
diff --git a/src/librustc_incremental/persist/save.rs b/src/librustc_incremental/persist/save.rs
index b6dabf99be7..a438ac42838 100644
--- a/src/librustc_incremental/persist/save.rs
+++ b/src/librustc_incremental/persist/save.rs
@@ -189,6 +189,8 @@ fn encode_dep_graph(tcx: TyCtxt,
 
         let total_node_count = serialized_graph.nodes.len();
         let total_edge_count = serialized_graph.edge_list_data.len();
+        let (total_edge_reads, total_duplicate_edge_reads) =
+            tcx.dep_graph.edge_deduplication_data();
 
         let mut counts: FxHashMap<_, Stat> = FxHashMap();
 
@@ -226,6 +228,8 @@ fn encode_dep_graph(tcx: TyCtxt,
         println!("[incremental]");
         println!("[incremental] Total Node Count: {}", total_node_count);
         println!("[incremental] Total Edge Count: {}", total_edge_count);
+        println!("[incremental] Total Edge Reads: {}", total_edge_reads);
+        println!("[incremental] Total Duplicate Edge Reads: {}", total_duplicate_edge_reads);
         println!("[incremental]");
         println!("[incremental]  {:<36}| {:<17}| {:<12}| {:<17}|",
                  "Node Kind",