Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eda7bc5c authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Removed legacy code used to read/write java arrays from HwBinder parcels."

parents 5706a8f5 74c3b8ed
Loading
Loading
Loading
Loading
+0 −16
Original line number Diff line number Diff line
@@ -53,21 +53,13 @@ public class HwParcel {
    public native final void writeDouble(double val);
    public native final void writeString(String val);

    public native final void writeBoolArray(int size, boolean[] val);
    public native final void writeBoolVector(boolean[] val);
    public native final void writeInt8Array(int size, byte[] val);
    public native final void writeInt8Vector(byte[] val);
    public native final void writeInt16Array(int size, short[] val);
    public native final void writeInt16Vector(short[] val);
    public native final void writeInt32Array(int size, int[] val);
    public native final void writeInt32Vector(int[] val);
    public native final void writeInt64Array(int size, long[] val);
    public native final void writeInt64Vector(long[] val);
    public native final void writeFloatArray(int size, float[] val);
    public native final void writeFloatVector(float[] val);
    public native final void writeDoubleArray(int size, double[] val);
    public native final void writeDoubleVector(double[] val);
    public native final void writeStringArray(int size, String[] val);
    public native final void writeStringVector(String[] val);

    public native final void writeStrongBinder(IHwBinder binder);
@@ -82,21 +74,13 @@ public class HwParcel {
    public native final double readDouble();
    public native final String readString();

    public native final boolean[] readBoolArray(int size);
    public native final boolean[] readBoolVector();
    public native final byte[] readInt8Array(int size);
    public native final byte[] readInt8Vector();
    public native final short[] readInt16Array(int size);
    public native final short[] readInt16Vector();
    public native final int[] readInt32Array(int size);
    public native final int[] readInt32Vector();
    public native final long[] readInt64Array(int size);
    public native final long[] readInt64Vector();
    public native final float[] readFloatArray(int size);
    public native final float[] readFloatVector();
    public native final double[] readDoubleArray(int size);
    public native final double[] readDoubleVector();
    public native final String[] readStringArray(int size);
    public native final String[] readStringVector();

    public native final IHwBinder readStrongBinder();
+0 −209
Original line number Diff line number Diff line
@@ -431,35 +431,6 @@ static void JHwParcel_native_writeString(
    signalExceptionForError(env, err);
}

#define DEFINE_PARCEL_ARRAY_WRITER(Suffix,Type)                                \
static void JHwParcel_native_write ## Suffix ## Array(                         \
        JNIEnv *env, jobject thiz, jint size, Type ## Array valObj) {          \
    if (valObj == NULL) {                                                      \
        jniThrowException(env, "java/lang/NullPointerException", NULL);        \
        return;                                                                \
    }                                                                          \
                                                                               \
    jsize len = env->GetArrayLength(valObj);                                   \
                                                                               \
    if (len != size) {                                                         \
        jniThrowException(env, "java/lang/IllegalArgumentException", NULL);    \
        return;                                                                \
    }                                                                          \
                                                                               \
    sp<JHwParcel> impl = JHwParcel::GetNativeContext(env, thiz);               \
                                                                               \
    const Type *val =                                                          \
        impl->getStorage()->allocTemporary ## Suffix ## Array(env, valObj);    \
                                                                               \
    hardware::Parcel *parcel = impl->getParcel();                              \
                                                                               \
    size_t parentHandle;                                                       \
    status_t err = parcel->writeBuffer(                                        \
            val, size * sizeof(*val), &parentHandle);                          \
                                                                               \
    signalExceptionForError(env, err);                                         \
}

#define DEFINE_PARCEL_VECTOR_WRITER(Suffix,Type)                               \
static void JHwParcel_native_write ## Suffix ## Vector(                        \
        JNIEnv *env, jobject thiz, Type ## Array valObj) {                     \
@@ -491,13 +462,6 @@ static void JHwParcel_native_write ## Suffix ## Vector( \
    signalExceptionForError(env, err);                                         \
}

DEFINE_PARCEL_ARRAY_WRITER(Int8,jbyte)
DEFINE_PARCEL_ARRAY_WRITER(Int16,jshort)
DEFINE_PARCEL_ARRAY_WRITER(Int32,jint)
DEFINE_PARCEL_ARRAY_WRITER(Int64,jlong)
DEFINE_PARCEL_ARRAY_WRITER(Float,jfloat)
DEFINE_PARCEL_ARRAY_WRITER(Double,jdouble)

DEFINE_PARCEL_VECTOR_WRITER(Int8,jbyte)
DEFINE_PARCEL_VECTOR_WRITER(Int16,jshort)
DEFINE_PARCEL_VECTOR_WRITER(Int32,jint)
@@ -505,43 +469,6 @@ DEFINE_PARCEL_VECTOR_WRITER(Int64,jlong)
DEFINE_PARCEL_VECTOR_WRITER(Float,jfloat)
DEFINE_PARCEL_VECTOR_WRITER(Double,jdouble)

static void JHwParcel_native_writeBoolArray(
        JNIEnv *env, jobject thiz, jint size, jbooleanArray valObj) {
    if (valObj == NULL) {
        jniThrowException(env, "java/lang/NullPointerException", NULL);
        return;
    }

    jsize len = env->GetArrayLength(valObj);

    if (len != size) {
        jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
        return;
    }

    sp<JHwParcel> impl = JHwParcel::GetNativeContext(env, thiz);

    jboolean *src = env->GetBooleanArrayElements(valObj, nullptr);

    bool *dst =
        (bool *)impl->getStorage()->allocTemporaryStorage(size * sizeof(bool));

    for (jint i = 0; i < size; ++i) {
        dst[i] = src[i];
    }

    env->ReleaseBooleanArrayElements(valObj, src, 0 /* mode */);
    src = nullptr;

    hardware::Parcel *parcel = impl->getParcel();

    size_t parentHandle;
    status_t err = parcel->writeBuffer(
            dst, size * sizeof(*dst), &parentHandle);

    signalExceptionForError(env, err);
}

static void JHwParcel_native_writeBoolVector(
        JNIEnv *env, jobject thiz, jbooleanArray valObj) {
    if (valObj == NULL) {
@@ -651,22 +578,6 @@ static jstring JHwParcel_native_readString(JNIEnv *env, jobject thiz) {
    return MakeStringObjFromHidlString(env, *s);
}

#define DEFINE_PARCEL_ARRAY_READER(Suffix,Type,NewType)                        \
static Type ## Array JHwParcel_native_read ## Suffix ## Array(                 \
        JNIEnv *env, jobject thiz, jint size) {                                \
    hardware::Parcel *parcel =                                                 \
        JHwParcel::GetNativeContext(env, thiz)->getParcel();                   \
                                                                               \
    size_t parentHandle;                                                       \
    const Type *val = static_cast<const Type *>(                               \
            parcel->readBuffer(&parentHandle));                                \
                                                                               \
    Type ## Array valObj = env->New ## NewType ## Array(size);                 \
    env->Set ## NewType ## ArrayRegion(valObj, 0, size, val);                  \
                                                                               \
    return valObj;                                                             \
}

#define DEFINE_PARCEL_VECTOR_READER(Suffix,Type,NewType)                       \
static Type ## Array JHwParcel_native_read ## Suffix ## Vector(                \
        JNIEnv *env, jobject thiz) {                                           \
@@ -703,13 +614,6 @@ static Type ## Array JHwParcel_native_read ## Suffix ## Vector( \
    return valObj;                                                             \
}

DEFINE_PARCEL_ARRAY_READER(Int8,jbyte,Byte)
DEFINE_PARCEL_ARRAY_READER(Int16,jshort,Short)
DEFINE_PARCEL_ARRAY_READER(Int32,jint,Int)
DEFINE_PARCEL_ARRAY_READER(Int64,jlong,Long)
DEFINE_PARCEL_ARRAY_READER(Float,jfloat,Float)
DEFINE_PARCEL_ARRAY_READER(Double,jdouble,Double)

DEFINE_PARCEL_VECTOR_READER(Int8,jbyte,Byte)
DEFINE_PARCEL_VECTOR_READER(Int16,jshort,Short)
DEFINE_PARCEL_VECTOR_READER(Int32,jint,Int)
@@ -717,25 +621,6 @@ DEFINE_PARCEL_VECTOR_READER(Int64,jlong,Long)
DEFINE_PARCEL_VECTOR_READER(Float,jfloat,Float)
DEFINE_PARCEL_VECTOR_READER(Double,jdouble,Double)

static jbooleanArray JHwParcel_native_readBoolArray(
        JNIEnv *env, jobject thiz, jint size) {
    hardware::Parcel *parcel =
        JHwParcel::GetNativeContext(env, thiz)->getParcel();

    size_t parentHandle;
    const bool *val = static_cast<const bool *>(
            parcel->readBuffer(&parentHandle));

    jbooleanArray valObj = env->NewBooleanArray(size);

    for (jint i = 0; i < size; ++i) {
        jboolean x = val[i];
        env->SetBooleanArrayRegion(valObj, i, 1, &x);
    }

    return valObj;
}

static jbooleanArray JHwParcel_native_readBoolVector(
        JNIEnv *env, jobject thiz) {
    hardware::Parcel *parcel =
@@ -797,80 +682,6 @@ static jobjectArray MakeStringArray(
    return arrayObj;
}

static jobjectArray JHwParcel_native_readStringArray(
        JNIEnv *env, jobject thiz, jint size) {
    hardware::Parcel *parcel =
        JHwParcel::GetNativeContext(env, thiz)->getParcel();

    size_t parentHandle;
    const hidl_string *val = static_cast<const hidl_string *>(
            parcel->readBuffer(&parentHandle));

    if (val == NULL) {
        signalExceptionForError(env, UNKNOWN_ERROR);
        return NULL;
    }

    status_t err = OK;
    for (jint i = 0; (err == OK) && (i < size); ++i) {
        err = const_cast<hidl_string *>(&val[i])
            ->readEmbeddedFromParcel(
                    *parcel,
                    parentHandle,
                    i * sizeof(hidl_string));
    }

    if (err != OK) {
        signalExceptionForError(env, err);
        return NULL;
    }

    return MakeStringArray(env, val, size);
}

static void JHwParcel_native_writeStringArray(
        JNIEnv *env, jobject thiz, jint size, jobjectArray arrayObj) {
    if (arrayObj == NULL) {
        jniThrowException(env, "java/lang/NullPointerException", NULL);
        return;
    }

    jsize len = env->GetArrayLength(arrayObj);

    if (len != size) {
        jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
        return;
    }

    sp<JHwParcel> impl = JHwParcel::GetNativeContext(env, thiz);

    hidl_string *strings = impl->getStorage()->allocStringArray(len);

    for (jsize i = 0; i < len; ++i) {
        ScopedLocalRef<jstring> stringObj(
                env,
                (jstring)env->GetObjectArrayElement(arrayObj, i));

        const hidl_string *s =
            impl->getStorage()->allocTemporaryString(env, stringObj.get());

        strings[i].setToExternal(s->c_str(), s->size());
    }

    hardware::Parcel *parcel = impl->getParcel();

    size_t parentHandle;
    status_t err = parcel->writeBuffer(
            strings, sizeof(hidl_string) * len, &parentHandle);

    for (jsize i = 0; (err == OK) && (i < len); ++i) {
        err = strings[i].writeEmbeddedToParcel(
                parcel, parentHandle, i * sizeof(hidl_string));
    }

    signalExceptionForError(env, err);
}

static jobjectArray JHwParcel_native_readStringVector(
        JNIEnv *env, jobject thiz) {
    typedef hidl_vec<hidl_string> string_vec;
@@ -1047,26 +858,16 @@ static JNINativeMethod gMethods[] = {
    { "writeString", "(Ljava/lang/String;)V",
        (void *)JHwParcel_native_writeString },

    { "writeBoolArray", "(I[Z)V", (void *)JHwParcel_native_writeBoolArray },
    { "writeBoolVector", "([Z)V", (void *)JHwParcel_native_writeBoolVector },
    { "writeInt8Array", "(I[B)V", (void *)JHwParcel_native_writeInt8Array },
    { "writeInt8Vector", "([B)V", (void *)JHwParcel_native_writeInt8Vector },
    { "writeInt16Array", "(I[S)V", (void *)JHwParcel_native_writeInt16Array },
    { "writeInt16Vector", "([S)V", (void *)JHwParcel_native_writeInt16Vector },
    { "writeInt32Array", "(I[I)V", (void *)JHwParcel_native_writeInt32Array },
    { "writeInt32Vector", "([I)V", (void *)JHwParcel_native_writeInt32Vector },
    { "writeInt64Array", "(I[J)V", (void *)JHwParcel_native_writeInt64Array },
    { "writeInt64Vector", "([J)V", (void *)JHwParcel_native_writeInt64Vector },
    { "writeFloatArray", "(I[F)V", (void *)JHwParcel_native_writeFloatArray },
    { "writeFloatVector", "([F)V", (void *)JHwParcel_native_writeFloatVector },
    { "writeDoubleArray", "(I[D)V", (void *)JHwParcel_native_writeDoubleArray },

    { "writeDoubleVector", "([D)V",
        (void *)JHwParcel_native_writeDoubleVector },

    { "writeStringArray", "(I[Ljava/lang/String;)V",
        (void *)JHwParcel_native_writeStringArray },

    { "writeStringVector", "([Ljava/lang/String;)V",
        (void *)JHwParcel_native_writeStringVector },

@@ -1087,24 +888,14 @@ static JNINativeMethod gMethods[] = {
    { "readString", "()Ljava/lang/String;",
        (void *)JHwParcel_native_readString },

    { "readBoolArray", "(I)[Z", (void *)JHwParcel_native_readBoolArray },
    { "readBoolVector", "()[Z", (void *)JHwParcel_native_readBoolVector },
    { "readInt8Array", "(I)[B", (void *)JHwParcel_native_readInt8Array },
    { "readInt8Vector", "()[B", (void *)JHwParcel_native_readInt8Vector },
    { "readInt16Array", "(I)[S", (void *)JHwParcel_native_readInt16Array },
    { "readInt16Vector", "()[S", (void *)JHwParcel_native_readInt16Vector },
    { "readInt32Array", "(I)[I", (void *)JHwParcel_native_readInt32Array },
    { "readInt32Vector", "()[I", (void *)JHwParcel_native_readInt32Vector },
    { "readInt64Array", "(I)[J", (void *)JHwParcel_native_readInt64Array },
    { "readInt64Vector", "()[J", (void *)JHwParcel_native_readInt64Vector },
    { "readFloatArray", "(I)[F", (void *)JHwParcel_native_readFloatArray },
    { "readFloatVector", "()[F", (void *)JHwParcel_native_readFloatVector },
    { "readDoubleArray", "(I)[D", (void *)JHwParcel_native_readDoubleArray },
    { "readDoubleVector", "()[D", (void *)JHwParcel_native_readDoubleVector },

    { "readStringArray", "(I)[Ljava/lang/String;",
        (void *)JHwParcel_native_readStringArray },

    { "readStringVector", "()[Ljava/lang/String;",
        (void *)JHwParcel_native_readStringVector },

+0 −22
Original line number Diff line number Diff line
@@ -71,21 +71,6 @@ const hidl_string *EphemeralStorage::allocTemporaryString(
    return s;
}

#define DEFINE_ALLOC_ARRAY_METHODS(Suffix,Type,NewType)                        \
const Type *EphemeralStorage::allocTemporary ## Suffix ## Array(               \
        JNIEnv *env, Type ## Array arrayObj) {                                 \
    Type ## Array obj = (Type ## Array)env->NewGlobalRef(arrayObj);            \
    const Type *val = env->Get ## NewType ## ArrayElements(obj, NULL);         \
                                                                               \
    Item item;                                                                 \
    item.mType = TYPE_ ## Suffix ## _ARRAY;                                    \
    item.mObj = obj;                                                           \
    item.mPtr = (void *)val;                                                   \
    mItems.push_back(item);                                                    \
                                                                               \
    return val;                                                                \
}

#define DEFINE_ALLOC_VECTOR_METHODS(Suffix,Type,NewType)                       \
const hidl_vec<Type> *EphemeralStorage::allocTemporary ## Suffix ## Vector(    \
        JNIEnv *env, Type ## Array arrayObj) {                                 \
@@ -107,13 +92,6 @@ const hidl_vec<Type> *EphemeralStorage::allocTemporary ## Suffix ## Vector( \
    return vec;                                                                \
}

DEFINE_ALLOC_ARRAY_METHODS(Int8,jbyte,Byte)
DEFINE_ALLOC_ARRAY_METHODS(Int16,jshort,Short)
DEFINE_ALLOC_ARRAY_METHODS(Int32,jint,Int)
DEFINE_ALLOC_ARRAY_METHODS(Int64,jlong,Long)
DEFINE_ALLOC_ARRAY_METHODS(Float,jfloat,Float)
DEFINE_ALLOC_ARRAY_METHODS(Double,jdouble,Double)

DEFINE_ALLOC_VECTOR_METHODS(Int8,jbyte,Byte)
DEFINE_ALLOC_VECTOR_METHODS(Int16,jshort,Short)
DEFINE_ALLOC_VECTOR_METHODS(Int32,jint,Int)
+0 −3
Original line number Diff line number Diff line
@@ -26,9 +26,6 @@
namespace android {

#define DECLARE_ALLOC_METHODS(Suffix,Type)                          \
    const Type *allocTemporary ## Suffix ## Array(                  \
            JNIEnv *env, Type ## Array arrayObj);                   \
                                                                    \
    const ::android::hardware::hidl_vec<Type> *                     \
    allocTemporary ## Suffix ## Vector(                             \
            JNIEnv *env, Type ## Array arrayObj);