diff options
author | Ian Rogers <irogers@google.com> | 2014-03-13 23:45:53 -0700 |
---|---|---|
committer | Ian Rogers <irogers@google.com> | 2014-03-14 11:28:10 -0700 |
commit | 53b8b09fc80329539585dcf43657bc5f4ecefdff (patch) | |
tree | cac0f82fbb89bd907104e3fed6c36203e11a3de0 /runtime/jni_internal_test.cc | |
parent | 0dea9872082bc3e576ed6cefed86b0d6c0c45ffd (diff) | |
download | art-53b8b09fc80329539585dcf43657bc5f4ecefdff.zip art-53b8b09fc80329539585dcf43657bc5f4ecefdff.tar.gz art-53b8b09fc80329539585dcf43657bc5f4ecefdff.tar.bz2 |
Refactor reflective method invocation.
Move invocation code out of JNI internal into reflection, including ArgArray
code. Make reflective invocation use the ArgArray to build arguments rather
than allocating a jvalue[] and unboxing arguments into that.
Move reflection part of jni_internal_test into reflection_test.
Make greater use of fast JNI.
Change-Id: Ib381372df5f9a83679e30e7275de24fa0e6b1057
Diffstat (limited to 'runtime/jni_internal_test.cc')
-rw-r--r-- | runtime/jni_internal_test.cc | 843 |
1 files changed, 1 insertions, 842 deletions
diff --git a/runtime/jni_internal_test.cc b/runtime/jni_internal_test.cc index 28408d2..7b29a9c 100644 --- a/runtime/jni_internal_test.cc +++ b/runtime/jni_internal_test.cc @@ -21,7 +21,6 @@ #include <cmath> #include "common_compiler_test.h" -#include "invoke_arg_array_builder.h" #include "mirror/art_method-inl.h" #include "mirror/class-inl.h" #include "mirror/object_array-inl.h" @@ -74,7 +73,7 @@ class JniInternalTest : public CommonCompilerTest { } } - virtual void TearDown() { + virtual void TearDown() OVERRIDE { CleanUpJniEnv(); CommonCompilerTest::TearDown(); } @@ -86,676 +85,6 @@ class JniInternalTest : public CommonCompilerTest { return soa.AddLocalReference<jclass>(c); } - void JniInternalTestMakeExecutable(mirror::ArtMethod** method, - mirror::Object** receiver, - bool is_static, const char* method_name, - const char* method_signature) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - const char* class_name = is_static ? "StaticLeafMethods" : "NonStaticLeafMethods"; - jobject jclass_loader(LoadDex(class_name)); - Thread* self = Thread::Current(); - SirtRef<mirror::ClassLoader> null_class_loader(self, nullptr); - SirtRef<mirror::ClassLoader> - class_loader(self, - ScopedObjectAccessUnchecked(self).Decode<mirror::ClassLoader*>(jclass_loader)); - if (is_static) { - MakeExecutable(ScopedObjectAccessUnchecked(self).Decode<mirror::ClassLoader*>(jclass_loader), - class_name); - } else { - MakeExecutable(nullptr, "java.lang.Class"); - MakeExecutable(nullptr, "java.lang.Object"); - MakeExecutable(ScopedObjectAccessUnchecked(self).Decode<mirror::ClassLoader*>(jclass_loader), - class_name); - } - - mirror::Class* c = class_linker_->FindClass(self, DotToDescriptor(class_name).c_str(), - class_loader); - CHECK(c != NULL); - - *method = is_static ? c->FindDirectMethod(method_name, method_signature) - : c->FindVirtualMethod(method_name, method_signature); - CHECK(method != nullptr); - - *receiver = (is_static ? nullptr : c->AllocObject(self)); - - // Start runtime. - bool started = runtime_->Start(); - CHECK(started); - self->TransitionFromSuspendedToRunnable(); - } - - void InvokeNopMethod(bool is_static) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - mirror::ArtMethod* method; - mirror::Object* receiver; - JniInternalTestMakeExecutable(&method, &receiver, is_static, "nop", "()V"); - - ArgArray arg_array("V", 1); - JValue result; - - if (!is_static) { - arg_array.Append(receiver); - } - - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "V"); - } - - void InvokeIdentityByteMethod(bool is_static) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - mirror::ArtMethod* method; - mirror::Object* receiver; - JniInternalTestMakeExecutable(&method, &receiver, is_static, "identity", "(B)B"); - - ArgArray arg_array("BB", 2); - uint32_t* args = arg_array.GetArray(); - JValue result; - - if (!is_static) { - arg_array.Append(receiver); - args++; - } - - arg_array.Append(0U); - result.SetB(-1); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "BB"); - EXPECT_EQ(0, result.GetB()); - - args[0] = -1; - result.SetB(0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "BB"); - EXPECT_EQ(-1, result.GetB()); - - args[0] = SCHAR_MAX; - result.SetB(0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "BB"); - EXPECT_EQ(SCHAR_MAX, result.GetB()); - - args[0] = (SCHAR_MIN << 24) >> 24; - result.SetB(0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "BB"); - EXPECT_EQ(SCHAR_MIN, result.GetB()); - } - - void InvokeIdentityIntMethod(bool is_static) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - mirror::ArtMethod* method; - mirror::Object* receiver; - JniInternalTestMakeExecutable(&method, &receiver, is_static, "identity", "(I)I"); - - ArgArray arg_array("II", 2); - uint32_t* args = arg_array.GetArray(); - JValue result; - - if (!is_static) { - arg_array.Append(receiver); - args++; - } - - arg_array.Append(0U); - result.SetI(-1); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "II"); - EXPECT_EQ(0, result.GetI()); - - args[0] = -1; - result.SetI(0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "II"); - EXPECT_EQ(-1, result.GetI()); - - args[0] = INT_MAX; - result.SetI(0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "II"); - EXPECT_EQ(INT_MAX, result.GetI()); - - args[0] = INT_MIN; - result.SetI(0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "II"); - EXPECT_EQ(INT_MIN, result.GetI()); - } - - void InvokeIdentityDoubleMethod(bool is_static) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - mirror::ArtMethod* method; - mirror::Object* receiver; - JniInternalTestMakeExecutable(&method, &receiver, is_static, "identity", "(D)D"); - - ArgArray arg_array("DD", 2); - uint32_t* args = arg_array.GetArray(); - JValue value; - JValue result; - - if (!is_static) { - arg_array.Append(receiver); - args++; - } - - value.SetD(0.0); - arg_array.AppendWide(value.GetJ()); - result.SetD(-1.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "DD"); - EXPECT_EQ(0.0, result.GetD()); - - value.SetD(-1.0); - args[0] = value.GetJ(); - args[1] = value.GetJ() >> 32; - result.SetD(0.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "DD"); - EXPECT_EQ(-1.0, result.GetD()); - - value.SetD(DBL_MAX); - args[0] = value.GetJ(); - args[1] = value.GetJ() >> 32; - result.SetD(0.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "DD"); - EXPECT_EQ(DBL_MAX, result.GetD()); - - value.SetD(DBL_MIN); - args[0] = value.GetJ(); - args[1] = value.GetJ() >> 32; - result.SetD(0.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "DD"); - EXPECT_EQ(DBL_MIN, result.GetD()); - } - - void InvokeSumIntIntMethod(bool is_static) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - mirror::ArtMethod* method; - mirror::Object* receiver; - JniInternalTestMakeExecutable(&method, &receiver, is_static, "sum", "(II)I"); - - ArgArray arg_array("III", 3); - uint32_t* args = arg_array.GetArray(); - JValue result; - - if (!is_static) { - arg_array.Append(receiver); - args++; - } - - arg_array.Append(0U); - arg_array.Append(0U); - result.SetI(-1); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "III"); - EXPECT_EQ(0, result.GetI()); - - args[0] = 1; - args[1] = 2; - result.SetI(0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "III"); - EXPECT_EQ(3, result.GetI()); - - args[0] = -2; - args[1] = 5; - result.SetI(0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "III"); - EXPECT_EQ(3, result.GetI()); - - args[0] = INT_MAX; - args[1] = INT_MIN; - result.SetI(1234); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "III"); - EXPECT_EQ(-1, result.GetI()); - - args[0] = INT_MAX; - args[1] = INT_MAX; - result.SetI(INT_MIN); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "III"); - EXPECT_EQ(-2, result.GetI()); - } - - void InvokeSumIntIntIntMethod(bool is_static) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - mirror::ArtMethod* method; - mirror::Object* receiver; - JniInternalTestMakeExecutable(&method, &receiver, is_static, "sum", "(III)I"); - - ArgArray arg_array("IIII", 4); - uint32_t* args = arg_array.GetArray(); - JValue result; - - if (!is_static) { - arg_array.Append(receiver); - args++; - } - - arg_array.Append(0U); - arg_array.Append(0U); - arg_array.Append(0U); - result.SetI(-1); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "IIII"); - EXPECT_EQ(0, result.GetI()); - - args[0] = 1; - args[1] = 2; - args[2] = 3; - result.SetI(0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "IIII"); - EXPECT_EQ(6, result.GetI()); - - args[0] = -1; - args[1] = 2; - args[2] = -3; - result.SetI(0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "IIII"); - EXPECT_EQ(-2, result.GetI()); - - args[0] = INT_MAX; - args[1] = INT_MIN; - args[2] = INT_MAX; - result.SetI(1234); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "IIII"); - EXPECT_EQ(2147483646, result.GetI()); - - args[0] = INT_MAX; - args[1] = INT_MAX; - args[2] = INT_MAX; - result.SetI(INT_MIN); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "IIII"); - EXPECT_EQ(2147483645, result.GetI()); - } - - void InvokeSumIntIntIntIntMethod(bool is_static) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - mirror::ArtMethod* method; - mirror::Object* receiver; - JniInternalTestMakeExecutable(&method, &receiver, is_static, "sum", "(IIII)I"); - - ArgArray arg_array("IIIII", 5); - uint32_t* args = arg_array.GetArray(); - JValue result; - - if (!is_static) { - arg_array.Append(receiver); - args++; - } - - arg_array.Append(0U); - arg_array.Append(0U); - arg_array.Append(0U); - arg_array.Append(0U); - result.SetI(-1); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "IIIII"); - EXPECT_EQ(0, result.GetI()); - - args[0] = 1; - args[1] = 2; - args[2] = 3; - args[3] = 4; - result.SetI(0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "IIIII"); - EXPECT_EQ(10, result.GetI()); - - args[0] = -1; - args[1] = 2; - args[2] = -3; - args[3] = 4; - result.SetI(0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "IIIII"); - EXPECT_EQ(2, result.GetI()); - - args[0] = INT_MAX; - args[1] = INT_MIN; - args[2] = INT_MAX; - args[3] = INT_MIN; - result.SetI(1234); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "IIIII"); - EXPECT_EQ(-2, result.GetI()); - - args[0] = INT_MAX; - args[1] = INT_MAX; - args[2] = INT_MAX; - args[3] = INT_MAX; - result.SetI(INT_MIN); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "IIIII"); - EXPECT_EQ(-4, result.GetI()); - } - - void InvokeSumIntIntIntIntIntMethod(bool is_static) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - mirror::ArtMethod* method; - mirror::Object* receiver; - JniInternalTestMakeExecutable(&method, &receiver, is_static, "sum", "(IIIII)I"); - - ArgArray arg_array("IIIIII", 6); - uint32_t* args = arg_array.GetArray(); - JValue result; - - if (!is_static) { - arg_array.Append(receiver); - args++; - } - - arg_array.Append(0U); - arg_array.Append(0U); - arg_array.Append(0U); - arg_array.Append(0U); - arg_array.Append(0U); - result.SetI(-1.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "IIIIII"); - EXPECT_EQ(0, result.GetI()); - - args[0] = 1; - args[1] = 2; - args[2] = 3; - args[3] = 4; - args[4] = 5; - result.SetI(0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "IIIIII"); - EXPECT_EQ(15, result.GetI()); - - args[0] = -1; - args[1] = 2; - args[2] = -3; - args[3] = 4; - args[4] = -5; - result.SetI(0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "IIIIII"); - EXPECT_EQ(-3, result.GetI()); - - args[0] = INT_MAX; - args[1] = INT_MIN; - args[2] = INT_MAX; - args[3] = INT_MIN; - args[4] = INT_MAX; - result.SetI(1234); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "IIIIII"); - EXPECT_EQ(2147483645, result.GetI()); - - args[0] = INT_MAX; - args[1] = INT_MAX; - args[2] = INT_MAX; - args[3] = INT_MAX; - args[4] = INT_MAX; - result.SetI(INT_MIN); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "IIIIII"); - EXPECT_EQ(2147483643, result.GetI()); - } - - void InvokeSumDoubleDoubleMethod(bool is_static) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - mirror::ArtMethod* method; - mirror::Object* receiver; - JniInternalTestMakeExecutable(&method, &receiver, is_static, "sum", "(DD)D"); - - ArgArray arg_array("DDD", 3); - uint32_t* args = arg_array.GetArray(); - JValue value; - JValue value2; - JValue result; - - if (!is_static) { - arg_array.Append(receiver); - args++; - } - - value.SetD(0.0); - value2.SetD(0.0); - arg_array.AppendWide(value.GetJ()); - arg_array.AppendWide(value2.GetJ()); - result.SetD(-1.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "DDD"); - EXPECT_EQ(0.0, result.GetD()); - - value.SetD(1.0); - value2.SetD(2.0); - args[0] = value.GetJ(); - args[1] = value.GetJ() >> 32; - args[2] = value2.GetJ(); - args[3] = value2.GetJ() >> 32; - result.SetD(0.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "DDD"); - EXPECT_EQ(3.0, result.GetD()); - - value.SetD(1.0); - value2.SetD(-2.0); - args[0] = value.GetJ(); - args[1] = value.GetJ() >> 32; - args[2] = value2.GetJ(); - args[3] = value2.GetJ() >> 32; - result.SetD(0.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "DDD"); - EXPECT_EQ(-1.0, result.GetD()); - - value.SetD(DBL_MAX); - value2.SetD(DBL_MIN); - args[0] = value.GetJ(); - args[1] = value.GetJ() >> 32; - args[2] = value2.GetJ(); - args[3] = value2.GetJ() >> 32; - result.SetD(0.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "DDD"); - EXPECT_EQ(1.7976931348623157e308, result.GetD()); - - value.SetD(DBL_MAX); - value2.SetD(DBL_MAX); - args[0] = value.GetJ(); - args[1] = value.GetJ() >> 32; - args[2] = value2.GetJ(); - args[3] = value2.GetJ() >> 32; - result.SetD(0.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "DDD"); - EXPECT_EQ(INFINITY, result.GetD()); - } - - void InvokeSumDoubleDoubleDoubleMethod(bool is_static) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - mirror::ArtMethod* method; - mirror::Object* receiver; - JniInternalTestMakeExecutable(&method, &receiver, is_static, "sum", "(DDD)D"); - - ArgArray arg_array("DDDD", 4); - uint32_t* args = arg_array.GetArray(); - JValue value; - JValue value2; - JValue value3; - JValue result; - - if (!is_static) { - arg_array.Append(receiver); - args++; - } - - value.SetD(0.0); - value2.SetD(0.0); - value3.SetD(0.0); - arg_array.AppendWide(value.GetJ()); - arg_array.AppendWide(value2.GetJ()); - arg_array.AppendWide(value3.GetJ()); - result.SetD(-1.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "DDDD"); - EXPECT_EQ(0.0, result.GetD()); - - value.SetD(1.0); - value2.SetD(2.0); - value3.SetD(3.0); - args[0] = value.GetJ(); - args[1] = value.GetJ() >> 32; - args[2] = value2.GetJ(); - args[3] = value2.GetJ() >> 32; - args[4] = value3.GetJ(); - args[5] = value3.GetJ() >> 32; - result.SetD(0.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "DDDD"); - EXPECT_EQ(6.0, result.GetD()); - - value.SetD(1.0); - value2.SetD(-2.0); - value3.SetD(3.0); - args[0] = value.GetJ(); - args[1] = value.GetJ() >> 32; - args[2] = value2.GetJ(); - args[3] = value2.GetJ() >> 32; - args[4] = value3.GetJ(); - args[5] = value3.GetJ() >> 32; - result.SetD(0.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "DDDD"); - EXPECT_EQ(2.0, result.GetD()); - } - - void InvokeSumDoubleDoubleDoubleDoubleMethod(bool is_static) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - mirror::ArtMethod* method; - mirror::Object* receiver; - JniInternalTestMakeExecutable(&method, &receiver, is_static, "sum", "(DDDD)D"); - - ArgArray arg_array("DDDDD", 5); - uint32_t* args = arg_array.GetArray(); - JValue value; - JValue value2; - JValue value3; - JValue value4; - JValue result; - - if (!is_static) { - arg_array.Append(receiver); - args++; - } - - value.SetD(0.0); - value2.SetD(0.0); - value3.SetD(0.0); - value4.SetD(0.0); - arg_array.AppendWide(value.GetJ()); - arg_array.AppendWide(value2.GetJ()); - arg_array.AppendWide(value3.GetJ()); - arg_array.AppendWide(value4.GetJ()); - result.SetD(-1.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "DDDDD"); - EXPECT_EQ(0.0, result.GetD()); - - value.SetD(1.0); - value2.SetD(2.0); - value3.SetD(3.0); - value4.SetD(4.0); - args[0] = value.GetJ(); - args[1] = value.GetJ() >> 32; - args[2] = value2.GetJ(); - args[3] = value2.GetJ() >> 32; - args[4] = value3.GetJ(); - args[5] = value3.GetJ() >> 32; - args[6] = value4.GetJ(); - args[7] = value4.GetJ() >> 32; - result.SetD(0.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "DDDDD"); - EXPECT_EQ(10.0, result.GetD()); - - value.SetD(1.0); - value2.SetD(-2.0); - value3.SetD(3.0); - value4.SetD(-4.0); - args[0] = value.GetJ(); - args[1] = value.GetJ() >> 32; - args[2] = value2.GetJ(); - args[3] = value2.GetJ() >> 32; - args[4] = value3.GetJ(); - args[5] = value3.GetJ() >> 32; - args[6] = value4.GetJ(); - args[7] = value4.GetJ() >> 32; - result.SetD(0.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "DDDDD"); - EXPECT_EQ(-2.0, result.GetD()); - } - - void InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(bool is_static) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - mirror::ArtMethod* method; - mirror::Object* receiver; - JniInternalTestMakeExecutable(&method, &receiver, is_static, "sum", "(DDDDD)D"); - - ArgArray arg_array("DDDDDD", 6); - uint32_t* args = arg_array.GetArray(); - JValue value; - JValue value2; - JValue value3; - JValue value4; - JValue value5; - JValue result; - - if (!is_static) { - arg_array.Append(receiver); - args++; - } - - value.SetD(0.0); - value2.SetD(0.0); - value3.SetD(0.0); - value4.SetD(0.0); - value5.SetD(0.0); - arg_array.AppendWide(value.GetJ()); - arg_array.AppendWide(value2.GetJ()); - arg_array.AppendWide(value3.GetJ()); - arg_array.AppendWide(value4.GetJ()); - arg_array.AppendWide(value5.GetJ()); - result.SetD(-1.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "DDDDDD"); - EXPECT_EQ(0.0, result.GetD()); - - value.SetD(1.0); - value2.SetD(2.0); - value3.SetD(3.0); - value4.SetD(4.0); - value5.SetD(5.0); - args[0] = value.GetJ(); - args[1] = value.GetJ() >> 32; - args[2] = value2.GetJ(); - args[3] = value2.GetJ() >> 32; - args[4] = value3.GetJ(); - args[5] = value3.GetJ() >> 32; - args[6] = value4.GetJ(); - args[7] = value4.GetJ() >> 32; - args[8] = value5.GetJ(); - args[9] = value5.GetJ() >> 32; - result.SetD(0.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "DDDDDD"); - EXPECT_EQ(15.0, result.GetD()); - - value.SetD(1.0); - value2.SetD(-2.0); - value3.SetD(3.0); - value4.SetD(-4.0); - value5.SetD(5.0); - args[0] = value.GetJ(); - args[1] = value.GetJ() >> 32; - args[2] = value2.GetJ(); - args[3] = value2.GetJ() >> 32; - args[4] = value3.GetJ(); - args[5] = value3.GetJ() >> 32; - args[6] = value4.GetJ(); - args[7] = value4.GetJ() >> 32; - args[8] = value5.GetJ(); - args[9] = value5.GetJ() >> 32; - result.SetD(0.0); - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, - "DDDDDD"); - EXPECT_EQ(3.0, result.GetD()); - } - JavaVMExt* vm_; JNIEnv* env_; jclass aioobe_; @@ -1772,176 +1101,6 @@ TEST_F(JniInternalTest, DeleteWeakGlobalRef) { env_->DeleteWeakGlobalRef(o2); } -TEST_F(JniInternalTest, StaticMainMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - jobject jclass_loader = LoadDex("Main"); - SirtRef<mirror::ClassLoader> - class_loader(soa.Self(), soa.Decode<mirror::ClassLoader*>(jclass_loader)); - CompileDirectMethod(class_loader, "Main", "main", "([Ljava/lang/String;)V"); - - mirror::Class* klass = class_linker_->FindClass(soa.Self(), "LMain;", class_loader); - ASSERT_TRUE(klass != NULL); - - mirror::ArtMethod* method = klass->FindDirectMethod("main", "([Ljava/lang/String;)V"); - ASSERT_TRUE(method != NULL); - - ArgArray arg_array("VL", 2); - arg_array.Append(0U); - JValue result; - - // Start runtime. - bool started = runtime_->Start(); - CHECK(started); - Thread::Current()->TransitionFromSuspendedToRunnable(); - - method->Invoke(Thread::Current(), arg_array.GetArray(), arg_array.GetNumBytes(), &result, "VL"); -} - -TEST_F(JniInternalTest, StaticNopMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeNopMethod(true); -} - -TEST_F(JniInternalTest, NonStaticNopMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeNopMethod(false); -} - -TEST_F(JniInternalTest, StaticIdentityByteMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeIdentityByteMethod(true); -} - -TEST_F(JniInternalTest, NonStaticIdentityByteMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeIdentityByteMethod(false); -} - -TEST_F(JniInternalTest, StaticIdentityIntMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeIdentityIntMethod(true); -} - -TEST_F(JniInternalTest, NonStaticIdentityIntMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeIdentityIntMethod(false); -} - -TEST_F(JniInternalTest, StaticIdentityDoubleMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeIdentityDoubleMethod(true); -} - -TEST_F(JniInternalTest, NonStaticIdentityDoubleMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeIdentityDoubleMethod(false); -} - -TEST_F(JniInternalTest, StaticSumIntIntMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumIntIntMethod(true); -} - -TEST_F(JniInternalTest, NonStaticSumIntIntMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumIntIntMethod(false); -} - -TEST_F(JniInternalTest, StaticSumIntIntIntMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumIntIntIntMethod(true); -} - -TEST_F(JniInternalTest, NonStaticSumIntIntIntMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumIntIntIntMethod(false); -} - -TEST_F(JniInternalTest, StaticSumIntIntIntIntMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumIntIntIntIntMethod(true); -} - -TEST_F(JniInternalTest, NonStaticSumIntIntIntIntMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumIntIntIntIntMethod(false); -} - -TEST_F(JniInternalTest, StaticSumIntIntIntIntIntMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumIntIntIntIntIntMethod(true); -} - -TEST_F(JniInternalTest, NonStaticSumIntIntIntIntIntMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumIntIntIntIntIntMethod(false); -} - -TEST_F(JniInternalTest, StaticSumDoubleDoubleMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumDoubleDoubleMethod(true); -} - -TEST_F(JniInternalTest, NonStaticSumDoubleDoubleMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumDoubleDoubleMethod(false); -} - -TEST_F(JniInternalTest, StaticSumDoubleDoubleDoubleMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumDoubleDoubleDoubleMethod(true); -} - -TEST_F(JniInternalTest, NonStaticSumDoubleDoubleDoubleMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumDoubleDoubleDoubleMethod(false); -} - -TEST_F(JniInternalTest, StaticSumDoubleDoubleDoubleDoubleMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumDoubleDoubleDoubleDoubleMethod(true); -} - -TEST_F(JniInternalTest, NonStaticSumDoubleDoubleDoubleDoubleMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumDoubleDoubleDoubleDoubleMethod(false); -} - -TEST_F(JniInternalTest, StaticSumDoubleDoubleDoubleDoubleDoubleMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(true); -} - -TEST_F(JniInternalTest, NonStaticSumDoubleDoubleDoubleDoubleDoubleMethod) { - TEST_DISABLED_FOR_PORTABLE(); - ScopedObjectAccess soa(Thread::Current()); - InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(false); -} - TEST_F(JniInternalTest, Throw) { EXPECT_EQ(JNI_ERR, env_->Throw(NULL)); |