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

Commit cb5f169f 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 am: 0dc922ae

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



Change-Id: I92fd9a07082f37edf4c253d7bae98cfc0dc2d542
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents f4b9ceed 0dc922ae
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(