Loading core/jni/android_view_SurfaceControl.cpp +42 −75 Original line number Diff line number Diff line Loading @@ -1202,66 +1202,40 @@ static jobject nativeGetDynamicDisplayInfo(JNIEnv* env, jclass clazz, jobject to return object; } struct RefreshRateRange { const float min; const float max; RefreshRateRange(float min, float max) : min(min), max(max) {} RefreshRateRange(JNIEnv* env, jobject obj) : min(env->GetFloatField(obj, gRefreshRateRangeClassInfo.min)), max(env->GetFloatField(obj, gRefreshRateRangeClassInfo.max)) {} jobject toJava(JNIEnv* env) const { return env->NewObject(gRefreshRateRangeClassInfo.clazz, gRefreshRateRangeClassInfo.ctor, min, max); } }; struct RefreshRateRanges { const RefreshRateRange physical; const RefreshRateRange render; RefreshRateRanges(RefreshRateRange physical, RefreshRateRange render) : physical(physical), render(render) {} RefreshRateRanges(JNIEnv* env, jobject obj) : physical(env, env->GetObjectField(obj, gRefreshRateRangesClassInfo.physical)), render(env, env->GetObjectField(obj, gRefreshRateRangesClassInfo.render)) {} jobject toJava(JNIEnv* env) const { return env->NewObject(gRefreshRateRangesClassInfo.clazz, gRefreshRateRangesClassInfo.ctor, physical.toJava(env), render.toJava(env)); } }; static jboolean nativeSetDesiredDisplayModeSpecs(JNIEnv* env, jclass clazz, jobject tokenObj, jobject DesiredDisplayModeSpecs) { sp<IBinder> token(ibinderForJavaObject(env, tokenObj)); if (token == nullptr) return JNI_FALSE; ui::DisplayModeId defaultMode = env->GetIntField(DesiredDisplayModeSpecs, const auto makeRanges = [env](jobject obj) { const auto makeRange = [env](jobject obj) { gui::DisplayModeSpecs::RefreshRateRanges::RefreshRateRange range; range.min = env->GetFloatField(obj, gRefreshRateRangeClassInfo.min); range.max = env->GetFloatField(obj, gRefreshRateRangeClassInfo.max); return range; }; gui::DisplayModeSpecs::RefreshRateRanges ranges; ranges.physical = makeRange(env->GetObjectField(obj, gRefreshRateRangesClassInfo.physical)); ranges.render = makeRange(env->GetObjectField(obj, gRefreshRateRangesClassInfo.render)); return ranges; }; gui::DisplayModeSpecs specs; specs.defaultMode = env->GetIntField(DesiredDisplayModeSpecs, gDesiredDisplayModeSpecsClassInfo.defaultMode); jboolean allowGroupSwitching = specs.allowGroupSwitching = env->GetBooleanField(DesiredDisplayModeSpecs, gDesiredDisplayModeSpecsClassInfo.allowGroupSwitching); const jobject primaryRangesObject = env->GetObjectField(DesiredDisplayModeSpecs, gDesiredDisplayModeSpecsClassInfo.primaryRanges); const jobject appRequestRangesObject = env->GetObjectField(DesiredDisplayModeSpecs, gDesiredDisplayModeSpecsClassInfo.appRequestRanges); const RefreshRateRanges primaryRanges(env, primaryRangesObject); const RefreshRateRanges appRequestRanges(env, appRequestRangesObject); size_t result = SurfaceComposerClient::setDesiredDisplayModeSpecs(token, defaultMode, allowGroupSwitching, primaryRanges.physical.min, primaryRanges.physical.max, appRequestRanges.physical.min, appRequestRanges.physical.max); specs.primaryRanges = makeRanges(env->GetObjectField(DesiredDisplayModeSpecs, gDesiredDisplayModeSpecsClassInfo.primaryRanges)); specs.appRequestRanges = makeRanges(env->GetObjectField(DesiredDisplayModeSpecs, gDesiredDisplayModeSpecsClassInfo.appRequestRanges)); size_t result = SurfaceComposerClient::setDesiredDisplayModeSpecs(token, specs); return result == NO_ERROR ? JNI_TRUE : JNI_FALSE; } Loading @@ -1269,33 +1243,26 @@ static jobject nativeGetDesiredDisplayModeSpecs(JNIEnv* env, jclass clazz, jobje sp<IBinder> token(ibinderForJavaObject(env, tokenObj)); if (token == nullptr) return nullptr; ui::DisplayModeId defaultMode; bool allowGroupSwitching; float primaryPhysicalRefreshRateMin; float primaryPhysicalRefreshRateMax; float appRequestPhysicalRefreshRateMin; float appRequestPhysicalRefreshRateMax; if (SurfaceComposerClient::getDesiredDisplayModeSpecs(token, &defaultMode, &allowGroupSwitching, &primaryPhysicalRefreshRateMin, &primaryPhysicalRefreshRateMax, &appRequestPhysicalRefreshRateMin, &appRequestPhysicalRefreshRateMax) != NO_ERROR) { return nullptr; } const auto rangesToJava = [env](const gui::DisplayModeSpecs::RefreshRateRanges& ranges) { const auto rangeToJava = [env](const gui::DisplayModeSpecs::RefreshRateRanges::RefreshRateRange& range) { return env->NewObject(gRefreshRateRangeClassInfo.clazz, gRefreshRateRangeClassInfo.ctor, range.min, range.max); }; const RefreshRateRange primaryPhysicalRange(primaryPhysicalRefreshRateMin, primaryPhysicalRefreshRateMax); const RefreshRateRange appRequestPhysicalRange(appRequestPhysicalRefreshRateMin, appRequestPhysicalRefreshRateMax); return env->NewObject(gRefreshRateRangesClassInfo.clazz, gRefreshRateRangesClassInfo.ctor, rangeToJava(ranges.physical), rangeToJava(ranges.render)); }; // TODO(b/241460058): populate the render ranges const RefreshRateRanges primaryRanges(primaryPhysicalRange, primaryPhysicalRange); const RefreshRateRanges appRequestRanges(appRequestPhysicalRange, appRequestPhysicalRange); gui::DisplayModeSpecs specs; if (SurfaceComposerClient::getDesiredDisplayModeSpecs(token, &specs) != NO_ERROR) { return nullptr; } return env->NewObject(gDesiredDisplayModeSpecsClassInfo.clazz, gDesiredDisplayModeSpecsClassInfo.ctor, defaultMode, allowGroupSwitching, primaryRanges.toJava(env), appRequestRanges.toJava(env)); gDesiredDisplayModeSpecsClassInfo.ctor, specs.defaultMode, specs.allowGroupSwitching, rangesToJava(specs.primaryRanges), rangesToJava(specs.appRequestRanges)); } static jobject nativeGetDisplayNativePrimaries(JNIEnv* env, jclass, jobject tokenObj) { Loading Loading
core/jni/android_view_SurfaceControl.cpp +42 −75 Original line number Diff line number Diff line Loading @@ -1202,66 +1202,40 @@ static jobject nativeGetDynamicDisplayInfo(JNIEnv* env, jclass clazz, jobject to return object; } struct RefreshRateRange { const float min; const float max; RefreshRateRange(float min, float max) : min(min), max(max) {} RefreshRateRange(JNIEnv* env, jobject obj) : min(env->GetFloatField(obj, gRefreshRateRangeClassInfo.min)), max(env->GetFloatField(obj, gRefreshRateRangeClassInfo.max)) {} jobject toJava(JNIEnv* env) const { return env->NewObject(gRefreshRateRangeClassInfo.clazz, gRefreshRateRangeClassInfo.ctor, min, max); } }; struct RefreshRateRanges { const RefreshRateRange physical; const RefreshRateRange render; RefreshRateRanges(RefreshRateRange physical, RefreshRateRange render) : physical(physical), render(render) {} RefreshRateRanges(JNIEnv* env, jobject obj) : physical(env, env->GetObjectField(obj, gRefreshRateRangesClassInfo.physical)), render(env, env->GetObjectField(obj, gRefreshRateRangesClassInfo.render)) {} jobject toJava(JNIEnv* env) const { return env->NewObject(gRefreshRateRangesClassInfo.clazz, gRefreshRateRangesClassInfo.ctor, physical.toJava(env), render.toJava(env)); } }; static jboolean nativeSetDesiredDisplayModeSpecs(JNIEnv* env, jclass clazz, jobject tokenObj, jobject DesiredDisplayModeSpecs) { sp<IBinder> token(ibinderForJavaObject(env, tokenObj)); if (token == nullptr) return JNI_FALSE; ui::DisplayModeId defaultMode = env->GetIntField(DesiredDisplayModeSpecs, const auto makeRanges = [env](jobject obj) { const auto makeRange = [env](jobject obj) { gui::DisplayModeSpecs::RefreshRateRanges::RefreshRateRange range; range.min = env->GetFloatField(obj, gRefreshRateRangeClassInfo.min); range.max = env->GetFloatField(obj, gRefreshRateRangeClassInfo.max); return range; }; gui::DisplayModeSpecs::RefreshRateRanges ranges; ranges.physical = makeRange(env->GetObjectField(obj, gRefreshRateRangesClassInfo.physical)); ranges.render = makeRange(env->GetObjectField(obj, gRefreshRateRangesClassInfo.render)); return ranges; }; gui::DisplayModeSpecs specs; specs.defaultMode = env->GetIntField(DesiredDisplayModeSpecs, gDesiredDisplayModeSpecsClassInfo.defaultMode); jboolean allowGroupSwitching = specs.allowGroupSwitching = env->GetBooleanField(DesiredDisplayModeSpecs, gDesiredDisplayModeSpecsClassInfo.allowGroupSwitching); const jobject primaryRangesObject = env->GetObjectField(DesiredDisplayModeSpecs, gDesiredDisplayModeSpecsClassInfo.primaryRanges); const jobject appRequestRangesObject = env->GetObjectField(DesiredDisplayModeSpecs, gDesiredDisplayModeSpecsClassInfo.appRequestRanges); const RefreshRateRanges primaryRanges(env, primaryRangesObject); const RefreshRateRanges appRequestRanges(env, appRequestRangesObject); size_t result = SurfaceComposerClient::setDesiredDisplayModeSpecs(token, defaultMode, allowGroupSwitching, primaryRanges.physical.min, primaryRanges.physical.max, appRequestRanges.physical.min, appRequestRanges.physical.max); specs.primaryRanges = makeRanges(env->GetObjectField(DesiredDisplayModeSpecs, gDesiredDisplayModeSpecsClassInfo.primaryRanges)); specs.appRequestRanges = makeRanges(env->GetObjectField(DesiredDisplayModeSpecs, gDesiredDisplayModeSpecsClassInfo.appRequestRanges)); size_t result = SurfaceComposerClient::setDesiredDisplayModeSpecs(token, specs); return result == NO_ERROR ? JNI_TRUE : JNI_FALSE; } Loading @@ -1269,33 +1243,26 @@ static jobject nativeGetDesiredDisplayModeSpecs(JNIEnv* env, jclass clazz, jobje sp<IBinder> token(ibinderForJavaObject(env, tokenObj)); if (token == nullptr) return nullptr; ui::DisplayModeId defaultMode; bool allowGroupSwitching; float primaryPhysicalRefreshRateMin; float primaryPhysicalRefreshRateMax; float appRequestPhysicalRefreshRateMin; float appRequestPhysicalRefreshRateMax; if (SurfaceComposerClient::getDesiredDisplayModeSpecs(token, &defaultMode, &allowGroupSwitching, &primaryPhysicalRefreshRateMin, &primaryPhysicalRefreshRateMax, &appRequestPhysicalRefreshRateMin, &appRequestPhysicalRefreshRateMax) != NO_ERROR) { return nullptr; } const auto rangesToJava = [env](const gui::DisplayModeSpecs::RefreshRateRanges& ranges) { const auto rangeToJava = [env](const gui::DisplayModeSpecs::RefreshRateRanges::RefreshRateRange& range) { return env->NewObject(gRefreshRateRangeClassInfo.clazz, gRefreshRateRangeClassInfo.ctor, range.min, range.max); }; const RefreshRateRange primaryPhysicalRange(primaryPhysicalRefreshRateMin, primaryPhysicalRefreshRateMax); const RefreshRateRange appRequestPhysicalRange(appRequestPhysicalRefreshRateMin, appRequestPhysicalRefreshRateMax); return env->NewObject(gRefreshRateRangesClassInfo.clazz, gRefreshRateRangesClassInfo.ctor, rangeToJava(ranges.physical), rangeToJava(ranges.render)); }; // TODO(b/241460058): populate the render ranges const RefreshRateRanges primaryRanges(primaryPhysicalRange, primaryPhysicalRange); const RefreshRateRanges appRequestRanges(appRequestPhysicalRange, appRequestPhysicalRange); gui::DisplayModeSpecs specs; if (SurfaceComposerClient::getDesiredDisplayModeSpecs(token, &specs) != NO_ERROR) { return nullptr; } return env->NewObject(gDesiredDisplayModeSpecsClassInfo.clazz, gDesiredDisplayModeSpecsClassInfo.ctor, defaultMode, allowGroupSwitching, primaryRanges.toJava(env), appRequestRanges.toJava(env)); gDesiredDisplayModeSpecsClassInfo.ctor, specs.defaultMode, specs.allowGroupSwitching, rangesToJava(specs.primaryRanges), rangesToJava(specs.appRequestRanges)); } static jobject nativeGetDisplayNativePrimaries(JNIEnv* env, jclass, jobject tokenObj) { Loading