If dex2oat takes >1s, show a breakdown of where the time went.

Turns out that we spend nearly as much time verifying as actually compiling.

Change-Id: Icf2e42b4cc77bd9a48a6d04a4fe19f57270c5927
diff --git a/src/compiler.cc b/src/compiler.cc
index a3bb985..02367d3 100644
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -29,6 +29,7 @@
 #include "object_utils.h"
 #include "runtime.h"
 #include "stl_util.h"
+#include "timing_logger.h"
 
 namespace art {
 
@@ -138,9 +139,19 @@
                           const std::vector<const DexFile*>& dex_files) {
   DCHECK(!Runtime::Current()->IsStarted());
 
-  PreCompile(class_loader, dex_files);
+  TimingLogger timings("compiler");
+
+  PreCompile(class_loader, dex_files, timings);
+
   Compile(class_loader, dex_files);
+  timings.AddSplit("Compile");
+
   PostCompile(class_loader, dex_files);
+  timings.AddSplit("PostCompile");
+
+  if (timings.GetTotalNs() > MsToNs(1000)) {
+    timings.Dump();
+  }
 }
 
 void Compiler::CompileOne(const Method* method) {
@@ -154,7 +165,8 @@
   std::vector<const DexFile*> dex_files;
   dex_files.push_back(&dex_file);
 
-  PreCompile(class_loader, dex_files);
+  TimingLogger timings("CompileOne");
+  PreCompile(class_loader, dex_files, timings);
 
   uint32_t method_idx = method->GetDexMethodIndex();
   const DexFile::CodeItem* code_item = dex_file.GetCodeItem(method->GetCodeItemOffset());
@@ -173,10 +185,15 @@
 }
 
 void Compiler::PreCompile(const ClassLoader* class_loader,
-                          const std::vector<const DexFile*>& dex_files) {
+                          const std::vector<const DexFile*>& dex_files, TimingLogger& timings) {
   Resolve(class_loader, dex_files);
+  timings.AddSplit("PreCompile.Resolve");
+
   Verify(class_loader, dex_files);
+  timings.AddSplit("PreCompile.Verify");
+
   InitializeClassesWithoutClinit(class_loader, dex_files);
+  timings.AddSplit("PreCompile.InitializeClassesWithoutClinit");
 }
 
 void Compiler::PostCompile(const ClassLoader* class_loader,