summaryrefslogtreecommitdiff
path: root/runtime/runtime_callbacks.cc
diff options
context:
space:
mode:
author Andreas Gampe <agampe@google.com> 2017-01-18 15:22:37 -0800
committer Andreas Gampe <agampe@google.com> 2017-01-19 15:12:12 -0800
commit0f01b583c3952d0219696480654a0db8fac4b661 (patch)
tree33184022e0c9bc0a6af4d89b21864fd460f32df4 /runtime/runtime_callbacks.cc
parent04bbb5be5b9c0f0b3a72116353d23ea63c8bc5e9 (diff)
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
Diffstat (limited to 'runtime/runtime_callbacks.cc')
-rw-r--r--runtime/runtime_callbacks.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/runtime/runtime_callbacks.cc b/runtime/runtime_callbacks.cc
index a523ddfa44..ee9eddab96 100644
--- a/runtime/runtime_callbacks.cc
+++ b/runtime/runtime_callbacks.cc
@@ -18,6 +18,7 @@
#include <algorithm>
+#include "class_linker.h"
#include "thread.h"
namespace art {
@@ -45,4 +46,27 @@ void RuntimeCallbacks::ThreadDeath(Thread* self) {
}
}
+void RuntimeCallbacks::AddClassLoadCallback(ClassLoadCallback* cb) {
+ class_callbacks_.push_back(cb);
+}
+
+void RuntimeCallbacks::RemoveClassLoadCallback(ClassLoadCallback* cb) {
+ auto it = std::find(class_callbacks_.begin(), class_callbacks_.end(), cb);
+ if (it != class_callbacks_.end()) {
+ class_callbacks_.erase(it);
+ }
+}
+
+void RuntimeCallbacks::ClassLoad(Handle<mirror::Class> klass) {
+ for (ClassLoadCallback* cb : class_callbacks_) {
+ cb->ClassLoad(klass);
+ }
+}
+
+void RuntimeCallbacks::ClassPrepare(Handle<mirror::Class> temp_klass, Handle<mirror::Class> klass) {
+ for (ClassLoadCallback* cb : class_callbacks_) {
+ cb->ClassPrepare(temp_klass, klass);
+ }
+}
+
} // namespace art