ART: Add ClassLoadCallback

Add callback for class-load and class-prepare events. Move Dbg
over. Add tests.

Bug: 31684920
Test: m test-art-host-gtest-runtime_callbacks_test
Test: art/tools/run-jdwp-tests.sh --mode=host
Change-Id: I871f6b3c54448fd6ece8d9a7571b2042be50d525
diff --git a/runtime/runtime_callbacks.h b/runtime/runtime_callbacks.h
index 1060d85..5bdb44a 100644
--- a/runtime/runtime_callbacks.h
+++ b/runtime/runtime_callbacks.h
@@ -21,9 +21,15 @@
 
 #include "base/macros.h"
 #include "base/mutex.h"
+#include "handle.h"
 
 namespace art {
 
+namespace mirror {
+class Class;
+}  // namespace mirror
+
+class ClassLoadCallback;
 class Thread;
 class ThreadLifecycleCallback;
 
@@ -44,19 +50,24 @@
 
 class RuntimeCallbacks {
  public:
-  void AddThreadLifecycleCallback(ThreadLifecycleCallback* cb)
-      REQUIRES(Locks::mutator_lock_);
-  void RemoveThreadLifecycleCallback(ThreadLifecycleCallback* cb)
-      REQUIRES(Locks::mutator_lock_);
+  void AddThreadLifecycleCallback(ThreadLifecycleCallback* cb) REQUIRES(Locks::mutator_lock_);
+  void RemoveThreadLifecycleCallback(ThreadLifecycleCallback* cb) REQUIRES(Locks::mutator_lock_);
 
-  void ThreadStart(Thread* self)
-      REQUIRES_SHARED(Locks::mutator_lock_);
-  void ThreadDeath(Thread* self)
+  void ThreadStart(Thread* self) REQUIRES_SHARED(Locks::mutator_lock_);
+  void ThreadDeath(Thread* self) REQUIRES_SHARED(Locks::mutator_lock_);
+
+  void AddClassLoadCallback(ClassLoadCallback* cb) REQUIRES(Locks::mutator_lock_);
+  void RemoveClassLoadCallback(ClassLoadCallback* cb) REQUIRES(Locks::mutator_lock_);
+
+  void ClassLoad(Handle<mirror::Class> klass) REQUIRES_SHARED(Locks::mutator_lock_);
+  void ClassPrepare(Handle<mirror::Class> temp_klass, Handle<mirror::Class> klass)
       REQUIRES_SHARED(Locks::mutator_lock_);
 
  private:
   std::vector<ThreadLifecycleCallback*> thread_callbacks_
       GUARDED_BY(Locks::mutator_lock_);
+  std::vector<ClassLoadCallback*> class_callbacks_
+      GUARDED_BY(Locks::mutator_lock_);
 };
 
 }  // namespace art