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();