about summary refs log tree commit diff
path: root/src/rustdoc/rustdoc.rs
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-02-27 18:07:16 -0800
committerBrian Anderson <banderson@mozilla.com>2012-02-27 18:07:16 -0800
commit98c31aaaffcd98ab708acd095cc0202fa49ce2dd (patch)
treea2a7b18a6e47b964b30bc1ca0adddc401e5481ed /src/rustdoc/rustdoc.rs
parent7e9aa6c3c2ae054e32dfcc7c5e4830ce7c4c6921 (diff)
downloadrust-98c31aaaffcd98ab708acd095cc0202fa49ce2dd.tar.gz
rust-98c31aaaffcd98ab708acd095cc0202fa49ce2dd.zip
rustdoc: Time passes
Diffstat (limited to 'src/rustdoc/rustdoc.rs')
-rwxr-xr-xsrc/rustdoc/rustdoc.rs35
1 files changed, 31 insertions, 4 deletions
diff --git a/src/rustdoc/rustdoc.rs b/src/rustdoc/rustdoc.rs
index f00f0d0726a..00213c57003 100755
--- a/src/rustdoc/rustdoc.rs
+++ b/src/rustdoc/rustdoc.rs
@@ -7,7 +7,10 @@ import doc::item;
 import doc::util;
 
 #[doc = "A single operation on the document model"]
-type pass = fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc;
+type pass = {
+    name: str,
+    f: fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc
+};
 
 fn run_passes(
     srv: astsrv::srv,
@@ -36,7 +39,9 @@ fn run_passes(
         log(debug, #fmt("pass #%d", passno));
         passno += 1;
         log(debug, doc);
-        pass(srv, doc)
+        time(pass.name) {||
+            pass.f(srv, doc)
+        }
     }
 }
 
@@ -72,7 +77,16 @@ fn test_run_passes() {
     }
     let source = "";
     astsrv::from_str(source) {|srv|
-        let passes = [pass1, pass2];
+        let passes = [
+            {
+                name: "",
+                f: pass1
+            },
+            {
+                name: "",
+                f: pass2
+            }
+        ];
         let doc = extract::from_srv(srv, "one");
         let doc = run_passes(srv, doc, passes);
         assert doc.topmod.name() == "onetwothree";
@@ -90,12 +104,25 @@ fn main(argv: [str]) {
     run(source_file);
 }
 
+fn time<T>(what: str, f: fn() -> T) -> T {
+    let start = std::time::precise_time_s();
+    let rv = f();
+    let end = std::time::precise_time_s();
+    #info("time: %3.3f s    %s", end - start, what);
+    ret rv;
+}
+
 #[doc = "Runs rustdoc over the given file"]
 fn run(source_file: str) {
 
     let default_name = source_file;
     astsrv::from_file(source_file) {|srv|
-        let doc = extract::from_srv(srv, default_name);
+        time("wait") {||
+            astsrv::exec(srv) {|_ctxt| () }
+        };
+        let doc = time("extract") {||
+            extract::from_srv(srv, default_name)
+        };
         run_passes(srv, doc, [
             reexport_pass::mk_pass(),
             prune_unexported_pass::mk_pass(),