summaryrefslogtreecommitdiffstats
path: root/runtime/jni_internal_test.cc
diff options
context:
space:
mode:
authorIan Rogers <irogers@google.com>2014-03-13 23:45:53 -0700
committerIan Rogers <irogers@google.com>2014-03-14 11:28:10 -0700
commit53b8b09fc80329539585dcf43657bc5f4ecefdff (patch)
treecac0f82fbb89bd907104e3fed6c36203e11a3de0 /runtime/jni_internal_test.cc
parent0dea9872082bc3e576ed6cefed86b0d6c0c45ffd (diff)
downloadart-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.cc843
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));