Merge "Improve performance by resolving MediaCodec.BufferInfo members outside of the frequently called code (like dequeueOutputBuffer)" am: 9687a71214
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2280249 Change-Id: Ia4ebcea9e0149f58e1b32fb54d9e1308f181dcbf Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -174,6 +174,12 @@ static struct {
|
|||||||
jfieldID typeId;
|
jfieldID typeId;
|
||||||
} gDescriptorInfo;
|
} gDescriptorInfo;
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
jclass clazz;
|
||||||
|
jmethodID ctorId;
|
||||||
|
jmethodID setId;
|
||||||
|
} gBufferInfo;
|
||||||
|
|
||||||
struct fields_t {
|
struct fields_t {
|
||||||
jmethodID postEventFromNativeID;
|
jmethodID postEventFromNativeID;
|
||||||
jmethodID lockAndGetContextID;
|
jmethodID lockAndGetContextID;
|
||||||
@@ -460,11 +466,7 @@ status_t JMediaCodec::dequeueOutputBuffer(
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScopedLocalRef<jclass> clazz(
|
env->CallVoidMethod(bufferInfo, gBufferInfo.setId, (jint)offset, (jint)size, timeUs, flags);
|
||||||
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);
|
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
@@ -1091,13 +1093,7 @@ void JMediaCodec::handleCallback(const sp<AMessage> &msg) {
|
|||||||
CHECK(msg->findInt64("timeUs", &timeUs));
|
CHECK(msg->findInt64("timeUs", &timeUs));
|
||||||
CHECK(msg->findInt32("flags", (int32_t *)&flags));
|
CHECK(msg->findInt32("flags", (int32_t *)&flags));
|
||||||
|
|
||||||
ScopedLocalRef<jclass> clazz(
|
obj = env->NewObject(gBufferInfo.clazz, gBufferInfo.ctorId);
|
||||||
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);
|
|
||||||
|
|
||||||
if (obj == NULL) {
|
if (obj == NULL) {
|
||||||
if (env->ExceptionCheck()) {
|
if (env->ExceptionCheck()) {
|
||||||
ALOGE("Could not create MediaCodec.BufferInfo.");
|
ALOGE("Could not create MediaCodec.BufferInfo.");
|
||||||
@@ -1107,7 +1103,7 @@ void JMediaCodec::handleCallback(const sp<AMessage> &msg) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
env->CallVoidMethod(obj, method, (jint)offset, (jint)size, timeUs, flags);
|
env->CallVoidMethod(obj, gBufferInfo.setId, (jint)offset, (jint)size, timeUs, flags);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3235,6 +3231,16 @@ static void android_media_MediaCodec_native_init(JNIEnv *env, jclass) {
|
|||||||
|
|
||||||
gDescriptorInfo.typeId = env->GetFieldID(clazz.get(), "mType", "I");
|
gDescriptorInfo.typeId = env->GetFieldID(clazz.get(), "mType", "I");
|
||||||
CHECK(gDescriptorInfo.typeId != NULL);
|
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(
|
static void android_media_MediaCodec_native_setup(
|
||||||
|
|||||||
Reference in New Issue
Block a user