diff options
Diffstat (limited to 'runtime/java_vm_ext_test.cc')
-rw-r--r-- | runtime/java_vm_ext_test.cc | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/runtime/java_vm_ext_test.cc b/runtime/java_vm_ext_test.cc index 2cbfa81b91..5db493b115 100644 --- a/runtime/java_vm_ext_test.cc +++ b/runtime/java_vm_ext_test.cc @@ -19,6 +19,7 @@ #include <pthread.h> #include "common_runtime_test.h" +#include "gc/heap.h" #include "java_vm_ext.h" #include "runtime.h" @@ -134,4 +135,36 @@ TEST_F(JavaVmExtTest, DetachCurrentThread) { EXPECT_EQ(JNI_ERR, err); } +class JavaVmExtStackTraceTest : public JavaVmExtTest { + protected: + void SetUpRuntimeOptions(RuntimeOptions* options) OVERRIDE { + options->emplace_back("-XX:GlobalRefAllocStackTraceLimit=50000", nullptr); + } +}; + +TEST_F(JavaVmExtStackTraceTest, TestEnableDisable) { + ASSERT_FALSE(Runtime::Current()->GetHeap()->IsAllocTrackingEnabled()); + + JNIEnv* env; + jint ok = vm_->AttachCurrentThread(&env, nullptr); + ASSERT_EQ(JNI_OK, ok); + + std::vector<jobject> global_refs_; + jobject local_ref = env->NewStringUTF("Dummy"); + for (size_t i = 0; i < 2000; ++i) { + global_refs_.push_back(env->NewGlobalRef(local_ref)); + } + + EXPECT_TRUE(Runtime::Current()->GetHeap()->IsAllocTrackingEnabled()); + + for (jobject global_ref : global_refs_) { + env->DeleteGlobalRef(global_ref); + } + + EXPECT_FALSE(Runtime::Current()->GetHeap()->IsAllocTrackingEnabled()); + + ok = vm_->DetachCurrentThread(); + EXPECT_EQ(JNI_OK, ok); +} + } // namespace art |