From 9dc99c89d35bde63ac49c0acf93b55913010ea63 Mon Sep 17 00:00:00 2001 From: Eduard Burtescu Date: Tue, 22 Apr 2014 03:25:56 +0300 Subject: [PATCH] rustc: de-@ stats. --- src/librustc/metadata/encoder.rs | 110 +++++++++++++-------------- src/librustc/middle/trans/common.rs | 15 ---- src/librustc/middle/trans/context.rs | 21 ++++- 3 files changed, 70 insertions(+), 76 deletions(-) diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index ab03e647611..848fd8d362e 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -27,7 +27,7 @@ use util::nodemap::{NodeMap, NodeSet}; use serialize::Encodable; use std::cast; -use std::cell::{Cell, RefCell}; +use std::cell::RefCell; use std::hash; use std::hash::Hash; use std::io::MemWriter; @@ -76,26 +76,9 @@ pub struct EncodeParams<'a> { pub encode_inlined_item: EncodeInlinedItem<'a>, } -pub struct Stats { - inline_bytes: Cell, - attr_bytes: Cell, - dep_bytes: Cell, - lang_item_bytes: Cell, - native_lib_bytes: Cell, - macro_registrar_fn_bytes: Cell, - macro_defs_bytes: Cell, - impl_bytes: Cell, - misc_bytes: Cell, - item_bytes: Cell, - index_bytes: Cell, - zero_bytes: Cell, - total_bytes: Cell, -} - pub struct EncodeContext<'a> { pub diag: &'a SpanHandler, pub tcx: &'a ty::ctxt, - pub stats: @Stats, pub reexports2: &'a middle::resolve::ExportMap2, pub item_symbols: &'a RefCell>, pub non_inlineable_statics: &'a RefCell, @@ -1701,20 +1684,33 @@ pub fn encode_metadata(parms: EncodeParams, krate: &Crate) -> Vec { } fn encode_metadata_inner(wr: &mut MemWriter, parms: EncodeParams, krate: &Crate) { - let stats = Stats { - inline_bytes: Cell::new(0), - attr_bytes: Cell::new(0), - dep_bytes: Cell::new(0), - lang_item_bytes: Cell::new(0), - native_lib_bytes: Cell::new(0), - macro_registrar_fn_bytes: Cell::new(0), - macro_defs_bytes: Cell::new(0), - impl_bytes: Cell::new(0), - misc_bytes: Cell::new(0), - item_bytes: Cell::new(0), - index_bytes: Cell::new(0), - zero_bytes: Cell::new(0), - total_bytes: Cell::new(0), + struct Stats { + attr_bytes: u64, + dep_bytes: u64, + lang_item_bytes: u64, + native_lib_bytes: u64, + macro_registrar_fn_bytes: u64, + macro_defs_bytes: u64, + impl_bytes: u64, + misc_bytes: u64, + item_bytes: u64, + index_bytes: u64, + zero_bytes: u64, + total_bytes: u64, + } + let mut stats = Stats { + attr_bytes: 0, + dep_bytes: 0, + lang_item_bytes: 0, + native_lib_bytes: 0, + macro_registrar_fn_bytes: 0, + macro_defs_bytes: 0, + impl_bytes: 0, + misc_bytes: 0, + item_bytes: 0, + index_bytes: 0, + zero_bytes: 0, + total_bytes: 0, }; let EncodeParams { item_symbols, @@ -1730,7 +1726,6 @@ fn encode_metadata_inner(wr: &mut MemWriter, parms: EncodeParams, krate: &Crate) let ecx = EncodeContext { diag: diag, tcx: tcx, - stats: @stats, reexports2: reexports2, item_symbols: item_symbols, non_inlineable_statics: non_inlineable_statics, @@ -1748,76 +1743,75 @@ fn encode_metadata_inner(wr: &mut MemWriter, parms: EncodeParams, krate: &Crate) let mut i = ebml_w.writer.tell().unwrap(); let crate_attrs = synthesize_crate_attrs(&ecx, krate); encode_attributes(&mut ebml_w, crate_attrs.as_slice()); - ecx.stats.attr_bytes.set(ebml_w.writer.tell().unwrap() - i); + stats.attr_bytes = ebml_w.writer.tell().unwrap() - i; i = ebml_w.writer.tell().unwrap(); encode_crate_deps(&mut ebml_w, ecx.cstore); - ecx.stats.dep_bytes.set(ebml_w.writer.tell().unwrap() - i); + stats.dep_bytes = ebml_w.writer.tell().unwrap() - i; // Encode the language items. i = ebml_w.writer.tell().unwrap(); encode_lang_items(&ecx, &mut ebml_w); - ecx.stats.lang_item_bytes.set(ebml_w.writer.tell().unwrap() - i); + stats.lang_item_bytes = ebml_w.writer.tell().unwrap() - i; // Encode the native libraries used i = ebml_w.writer.tell().unwrap(); encode_native_libraries(&ecx, &mut ebml_w); - ecx.stats.native_lib_bytes.set(ebml_w.writer.tell().unwrap() - i); + stats.native_lib_bytes = ebml_w.writer.tell().unwrap() - i; // Encode the macro registrar function i = ebml_w.writer.tell().unwrap(); encode_macro_registrar_fn(&ecx, &mut ebml_w); - ecx.stats.macro_registrar_fn_bytes.set(ebml_w.writer.tell().unwrap() - i); + stats.macro_registrar_fn_bytes = ebml_w.writer.tell().unwrap() - i; // Encode macro definitions i = ebml_w.writer.tell().unwrap(); encode_macro_defs(&ecx, krate, &mut ebml_w); - ecx.stats.macro_defs_bytes.set(ebml_w.writer.tell().unwrap() - i); + stats.macro_defs_bytes = ebml_w.writer.tell().unwrap() - i; // Encode the def IDs of impls, for coherence checking. i = ebml_w.writer.tell().unwrap(); encode_impls(&ecx, krate, &mut ebml_w); - ecx.stats.impl_bytes.set(ebml_w.writer.tell().unwrap() - i); + stats.impl_bytes = ebml_w.writer.tell().unwrap() - i; // Encode miscellaneous info. i = ebml_w.writer.tell().unwrap(); encode_misc_info(&ecx, krate, &mut ebml_w); - ecx.stats.misc_bytes.set(ebml_w.writer.tell().unwrap() - i); + stats.misc_bytes = ebml_w.writer.tell().unwrap() - i; // Encode and index the items. ebml_w.start_tag(tag_items); i = ebml_w.writer.tell().unwrap(); let items_index = encode_info_for_items(&ecx, &mut ebml_w, krate); - ecx.stats.item_bytes.set(ebml_w.writer.tell().unwrap() - i); + stats.item_bytes = ebml_w.writer.tell().unwrap() - i; i = ebml_w.writer.tell().unwrap(); encode_index(&mut ebml_w, items_index, write_i64); - ecx.stats.index_bytes.set(ebml_w.writer.tell().unwrap() - i); + stats.index_bytes = ebml_w.writer.tell().unwrap() - i; ebml_w.end_tag(); - ecx.stats.total_bytes.set(ebml_w.writer.tell().unwrap()); + stats.total_bytes = ebml_w.writer.tell().unwrap(); if tcx.sess.meta_stats() { for e in ebml_w.writer.get_ref().iter() { if *e == 0 { - ecx.stats.zero_bytes.set(ecx.stats.zero_bytes.get() + 1); + stats.zero_bytes += 1; } } println!("metadata stats:"); - println!(" inline bytes: {}", ecx.stats.inline_bytes.get()); - println!(" attribute bytes: {}", ecx.stats.attr_bytes.get()); - println!(" dep bytes: {}", ecx.stats.dep_bytes.get()); - println!(" lang item bytes: {}", ecx.stats.lang_item_bytes.get()); - println!(" native bytes: {}", ecx.stats.native_lib_bytes.get()); - println!("macro registrar bytes: {}", ecx.stats.macro_registrar_fn_bytes.get()); - println!(" macro def bytes: {}", ecx.stats.macro_defs_bytes.get()); - println!(" impl bytes: {}", ecx.stats.impl_bytes.get()); - println!(" misc bytes: {}", ecx.stats.misc_bytes.get()); - println!(" item bytes: {}", ecx.stats.item_bytes.get()); - println!(" index bytes: {}", ecx.stats.index_bytes.get()); - println!(" zero bytes: {}", ecx.stats.zero_bytes.get()); - println!(" total bytes: {}", ecx.stats.total_bytes.get()); + println!(" attribute bytes: {}", stats.attr_bytes); + println!(" dep bytes: {}", stats.dep_bytes); + println!(" lang item bytes: {}", stats.lang_item_bytes); + println!(" native bytes: {}", stats.native_lib_bytes); + println!("macro registrar bytes: {}", stats.macro_registrar_fn_bytes); + println!(" macro def bytes: {}", stats.macro_defs_bytes); + println!(" impl bytes: {}", stats.impl_bytes); + println!(" misc bytes: {}", stats.misc_bytes); + println!(" item bytes: {}", stats.item_bytes); + println!(" index bytes: {}", stats.index_bytes); + println!(" zero bytes: {}", stats.zero_bytes); + println!(" total bytes: {}", stats.total_bytes); } } diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index d3f140fdd70..edb98db416a 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -154,21 +154,6 @@ pub fn expr_info(expr: &ast::Expr) -> NodeInfo { NodeInfo { id: expr.id, span: expr.span } } -pub struct Stats { - pub n_static_tydescs: Cell, - pub n_glues_created: Cell, - pub n_null_glues: Cell, - pub n_real_glues: Cell, - pub n_fns: Cell, - pub n_monos: Cell, - pub n_inlines: Cell, - pub n_closures: Cell, - pub n_llvm_insns: Cell, - pub llvm_insns: RefCell>, - // (ident, time-in-ms, llvm-instructions) - pub fn_stats: RefCell >, -} - pub struct BuilderRef_res { pub b: BuilderRef, } diff --git a/src/librustc/middle/trans/context.rs b/src/librustc/middle/trans/context.rs index ebbb3d06bc4..144ffe494b2 100644 --- a/src/librustc/middle/trans/context.rs +++ b/src/librustc/middle/trans/context.rs @@ -20,7 +20,7 @@ use middle::resolve; use middle::trans::adt; use middle::trans::base; use middle::trans::builder::Builder; -use middle::trans::common::{ExternMap,tydesc_info,BuilderRef_res,Stats}; +use middle::trans::common::{ExternMap,tydesc_info,BuilderRef_res}; use middle::trans::debuginfo; use middle::trans::monomorphize::MonoId; use middle::trans::type_::Type; @@ -36,6 +36,21 @@ use collections::{HashMap, HashSet}; use syntax::ast; use syntax::parse::token::InternedString; +pub struct Stats { + pub n_static_tydescs: Cell, + pub n_glues_created: Cell, + pub n_null_glues: Cell, + pub n_real_glues: Cell, + pub n_fns: Cell, + pub n_monos: Cell, + pub n_inlines: Cell, + pub n_closures: Cell, + pub n_llvm_insns: Cell, + pub llvm_insns: RefCell>, + // (ident, time-in-ms, llvm-instructions) + pub fn_stats: RefCell >, +} + pub struct CrateContext { pub llmod: ModuleRef, pub llcx: ContextRef, @@ -99,7 +114,7 @@ pub struct CrateContext { pub all_llvm_symbols: RefCell>, pub tcx: ty::ctxt, pub maps: astencode::Maps, - pub stats: @Stats, + pub stats: Stats, pub int_type: Type, pub opaque_vec_type: Type, pub builder: BuilderRef_res, @@ -181,7 +196,7 @@ impl CrateContext { all_llvm_symbols: RefCell::new(HashSet::new()), tcx: tcx, maps: maps, - stats: @Stats { + stats: Stats { n_static_tydescs: Cell::new(0u), n_glues_created: Cell::new(0u), n_null_glues: Cell::new(0u),