Merge "Disable HDR dimming when screen rotates." into tm-dev

This commit is contained in:
Sally Qi
2022-03-31 23:19:06 +00:00
committed by Android (Google) Code Review
3 changed files with 37 additions and 1 deletions

View File

@@ -221,6 +221,8 @@ public final class SurfaceControl implements Parcelable {
@DataSpace.NamedDataSpace int dataSpace);
private static native void nativeSetDamageRegion(long transactionObj, long nativeObject,
Region region);
private static native void nativeSetDimmingEnabled(long transactionObj, long nativeObject,
boolean dimmingEnabled);
private static native void nativeOverrideHdrTypes(IBinder displayToken, int[] modes);
@@ -3837,6 +3839,27 @@ public final class SurfaceControl implements Parcelable {
return this;
}
/**
* Set if the layer can be dimmed.
*
* <p>Dimming is to adjust brightness of the layer.
* Default value is {@code true}, which means the layer can be dimmed.
* Disabling dimming means the brightness of the layer can not be changed, i.e.,
* keep the white point for the layer same as the display brightness.</p>
*
* @param sc The SurfaceControl on which to enable or disable dimming.
* @param dimmingEnabled The dimming flag.
* @return this.
*
* @hide
*/
public @NonNull Transaction setDimmingEnabled(@NonNull SurfaceControl sc,
boolean dimmingEnabled) {
checkPreconditions(sc);
nativeSetDimmingEnabled(mNativeObject, sc.mNativeObject, dimmingEnabled);
return this;
}
/**
* Set the color space for the SurfaceControl. The supported color spaces are SRGB
* and Display P3, other color spaces will be treated as SRGB. This can only be used for

View File

@@ -851,6 +851,14 @@ static void nativeSetDamageRegion(JNIEnv* env, jclass clazz, jlong transactionOb
transaction->setSurfaceDamageRegion(surfaceControl, region);
}
static void nativeSetDimmingEnabled(JNIEnv* env, jclass clazz, jlong transactionObj,
jlong nativeObject, jboolean dimmingEnabled) {
auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl*>(nativeObject);
transaction->setDimmingEnabled(ctrl, dimmingEnabled);
}
static void nativeSetAlpha(JNIEnv* env, jclass clazz, jlong transactionObj,
jlong nativeObject, jfloat alpha) {
auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
@@ -2095,8 +2103,9 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
(void*)nativeSetSize },
{"nativeSetTransparentRegionHint", "(JJLandroid/graphics/Region;)V",
(void*)nativeSetTransparentRegionHint },
{ "nativeSetDamageRegion", "(JJLandroid/graphics/Region;)V",
{"nativeSetDamageRegion", "(JJLandroid/graphics/Region;)V",
(void*)nativeSetDamageRegion },
{"nativeSetDimmingEnabled", "(JJZ)V", (void*)nativeSetDimmingEnabled },
{"nativeSetAlpha", "(JJF)V",
(void*)nativeSetAlpha },
{"nativeSetColor", "(JJ[F)V",

View File

@@ -216,6 +216,10 @@ class ScreenRotationAnimation {
t.setLayer(mScreenshotLayer, SCREEN_FREEZE_LAYER_BASE);
t.reparent(mBackColorSurface, displayContent.getSurfaceControl());
// If hdr layers are on-screen, e.g. picture-in-picture mode, the screenshot of
// rotation animation is an sdr image containing tone-mapping hdr content, then
// disable dimming effect to get avoid of hdr content being dimmed during animation.
t.setDimmingEnabled(mScreenshotLayer, false);
t.setLayer(mBackColorSurface, -1);
t.setColor(mBackColorSurface, new float[]{mStartLuma, mStartLuma, mStartLuma});
t.setAlpha(mBackColorSurface, 1);