diff options
author | 2017-01-18 15:22:37 -0800 | |
---|---|---|
committer | 2017-01-19 15:12:12 -0800 | |
commit | 0f01b583c3952d0219696480654a0db8fac4b661 (patch) | |
tree | 33184022e0c9bc0a6af4d89b21864fd460f32df4 /runtime/runtime_callbacks.cc | |
parent | 04bbb5be5b9c0f0b3a72116353d23ea63c8bc5e9 (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.cc | 24 |
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 |