Basic GC logging (and class initialization timing).

Change-Id: Ibb09e556fbd42b1bb8cbd72974e8ca226aa073a5
diff --git a/src/class_linker.cc b/src/class_linker.cc
index 0299c4a..adabe97 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -1559,6 +1559,8 @@
     klass->SetStatus(Class::kStatusInitializing);
   }
 
+  uint64_t t0 = NanoTime();
+
   if (!InitializeSuperClass(klass, can_run_clinit)) {
     return false;
   }
@@ -1569,6 +1571,8 @@
     clinit->Invoke(self, NULL, NULL, NULL);
   }
 
+  uint64_t t1 = NanoTime();
+
   {
     ObjectLock lock(klass);
 
@@ -1576,9 +1580,12 @@
       WrapExceptionInInitializer();
       klass->SetStatus(Class::kStatusError);
     } else {
-      ++Runtime::Current()->GetStats()->class_init_count;
-      ++self->GetStats()->class_init_count;
-      // TODO: class_init_time_ns
+      RuntimeStats* global_stats = Runtime::Current()->GetStats();
+      RuntimeStats* thread_stats = self->GetStats();
+      ++global_stats->class_init_count;
+      ++thread_stats->class_init_count;
+      global_stats->class_init_time_ns += (t1 - t0);
+      thread_stats->class_init_time_ns += (t1 - t0);
       klass->SetStatus(Class::kStatusInitialized);
     }
     lock.NotifyAll();