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

Commit 0dc922ae authored by Pavel Labovich's avatar Pavel Labovich Committed by Automerger Merge Worker
Browse files

Merge "Improve performance by resolving MediaCodec.BufferInfo members outside...

Merge "Improve performance by resolving MediaCodec.BufferInfo members outside of the frequently called code (like dequeueOutputBuffer)" am: 9687a712 am: cc6014d9

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2280249



Change-Id: I91c77ad40005786ac85d96e0e263db86b664b410
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 402064a1 cc6014d9
Loading
Loading
Loading
Loading
+19 −13
Original line number Diff line number Diff line
@@ -174,6 +174,12 @@ static struct {
    jfieldID typeId;
} gDescriptorInfo;

static struct {
    jclass clazz;
    jmethodID ctorId;
    jmethodID setId;
} gBufferInfo;

struct fields_t {
    jmethodID postEventFromNativeID;
    jmethodID lockAndGetContextID;
@@ -460,11 +466,7 @@ status_t JMediaCodec::dequeueOutputBuffer(
        return err;
    }

    ScopedLocalRef<jclass> clazz(
            env, env->FindClass("android/media/MediaCodec$BufferInfo"));

    jmethodID method = env->GetMethodID(clazz.get(), "set", "(IIJI)V");
    env->CallVoidMethod(bufferInfo, method, (jint)offset, (jint)size, timeUs, flags);
    env->CallVoidMethod(bufferInfo, gBufferInfo.setId, (jint)offset, (jint)size, timeUs, flags);

    return OK;
}
@@ -1091,13 +1093,7 @@ void JMediaCodec::handleCallback(const sp<AMessage> &msg) {
            CHECK(msg->findInt64("timeUs", &timeUs));
            CHECK(msg->findInt32("flags", (int32_t *)&flags));

            ScopedLocalRef<jclass> clazz(
                    env, env->FindClass("android/media/MediaCodec$BufferInfo"));
            jmethodID ctor = env->GetMethodID(clazz.get(), "<init>", "()V");
            jmethodID method = env->GetMethodID(clazz.get(), "set", "(IIJI)V");

            obj = env->NewObject(clazz.get(), ctor);

            obj = env->NewObject(gBufferInfo.clazz, gBufferInfo.ctorId);
            if (obj == NULL) {
                if (env->ExceptionCheck()) {
                    ALOGE("Could not create MediaCodec.BufferInfo.");
@@ -1107,7 +1103,7 @@ void JMediaCodec::handleCallback(const sp<AMessage> &msg) {
                return;
            }

            env->CallVoidMethod(obj, method, (jint)offset, (jint)size, timeUs, flags);
            env->CallVoidMethod(obj, gBufferInfo.setId, (jint)offset, (jint)size, timeUs, flags);
            break;
        }

@@ -3235,6 +3231,16 @@ static void android_media_MediaCodec_native_init(JNIEnv *env, jclass) {

    gDescriptorInfo.typeId = env->GetFieldID(clazz.get(), "mType", "I");
    CHECK(gDescriptorInfo.typeId != NULL);

    clazz.reset(env->FindClass("android/media/MediaCodec$BufferInfo"));
    CHECK(clazz.get() != NULL);
    gBufferInfo.clazz = (jclass)env->NewGlobalRef(clazz.get());

    gBufferInfo.ctorId = env->GetMethodID(clazz.get(), "<init>", "()V");
    CHECK(gBufferInfo.ctorId != NULL);

    gBufferInfo.setId = env->GetMethodID(clazz.get(), "set", "(IIJI)V");
    CHECK(gBufferInfo.setId != NULL);
}

static void android_media_MediaCodec_native_setup(