Merge "Move display mocking tests to DisplayServiceTests" into udc-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
45300425b7
@@ -7,19 +7,12 @@ package {
|
||||
default_applicable_licenses: ["frameworks_base_license"],
|
||||
}
|
||||
|
||||
// Include all test java files.
|
||||
filegroup {
|
||||
name: "displayservicetests-sources",
|
||||
srcs: [
|
||||
"src/**/*.java",
|
||||
],
|
||||
}
|
||||
|
||||
android_test {
|
||||
name: "DisplayServiceTests",
|
||||
|
||||
srcs: [
|
||||
"src/**/*.java",
|
||||
":extended-mockito-rule-sources",
|
||||
],
|
||||
|
||||
libs: [
|
||||
@@ -28,14 +21,15 @@ android_test {
|
||||
|
||||
static_libs: [
|
||||
"androidx.test.ext.junit",
|
||||
"display-core-libs",
|
||||
"frameworks-base-testutils",
|
||||
"junit",
|
||||
"junit-params",
|
||||
"mockingservicestests-utils-mockito",
|
||||
"platform-compat-test-rules",
|
||||
"platform-test-annotations",
|
||||
"services.core",
|
||||
"servicestests-utils",
|
||||
"testables",
|
||||
],
|
||||
|
||||
defaults: [
|
||||
@@ -56,10 +50,3 @@ android_test {
|
||||
enabled: false,
|
||||
},
|
||||
}
|
||||
|
||||
java_library {
|
||||
name: "display-core-libs",
|
||||
srcs: [
|
||||
"src/com/android/server/display/TestUtils.java",
|
||||
],
|
||||
}
|
||||
|
||||
@@ -17,10 +17,7 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.android.frameworks.displayservicetests">
|
||||
|
||||
<!--
|
||||
Insert permissions here. eg:
|
||||
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
|
||||
-->
|
||||
<!-- Permissions -->
|
||||
<uses-permission android:name="android.permission.CONTROL_DISPLAY_BRIGHTNESS" />
|
||||
<uses-permission android:name="android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS" />
|
||||
<uses-permission android:name="android.permission.DEVICE_POWER" />
|
||||
@@ -32,6 +29,10 @@
|
||||
<uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />
|
||||
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
|
||||
|
||||
<!-- Permissions needed for DisplayTransformManagerTest -->
|
||||
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
|
||||
<uses-permission android:name="android.permission.HARDWARE_TEST"/>
|
||||
|
||||
<application android:debuggable="true"
|
||||
android:testOnly="true">
|
||||
<uses-library android:name="android.test.mock" android:required="true" />
|
||||
|
||||
@@ -16,22 +16,49 @@
|
||||
|
||||
package com.android.server.display.color;
|
||||
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
|
||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
|
||||
|
||||
import static com.google.common.truth.Truth.assertWithMessage;
|
||||
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.hardware.display.DisplayManagerInternal;
|
||||
import android.os.Binder;
|
||||
import android.os.IBinder;
|
||||
import android.view.SurfaceControl;
|
||||
|
||||
import androidx.test.InstrumentationRegistry;
|
||||
|
||||
import com.android.dx.mockito.inline.extended.ExtendedMockito;
|
||||
import com.android.internal.R;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoSession;
|
||||
import org.mockito.quality.Strictness;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class DisplayWhiteBalanceTintControllerTest {
|
||||
@Mock
|
||||
private Context mMockedContext;
|
||||
@Mock
|
||||
private Resources mMockedResources;
|
||||
@Mock
|
||||
private DisplayManagerInternal mDisplayManagerInternal;
|
||||
|
||||
private DisplayWhiteBalanceTintController mDisplayWhiteBalanceTintController;
|
||||
private MockitoSession mSession;
|
||||
private Resources mResources;
|
||||
IBinder mDisplayToken;
|
||||
DisplayWhiteBalanceTintController mDisplayWhiteBalanceTintController;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -40,6 +67,47 @@ public class DisplayWhiteBalanceTintControllerTest {
|
||||
new DisplayWhiteBalanceTintController(displayManagerInternal);
|
||||
mDisplayWhiteBalanceTintController.setUp(InstrumentationRegistry.getContext(), true);
|
||||
mDisplayWhiteBalanceTintController.setActivated(true);
|
||||
|
||||
mSession = ExtendedMockito.mockitoSession()
|
||||
.initMocks(this)
|
||||
.mockStatic(SurfaceControl.class)
|
||||
.strictness(Strictness.LENIENT)
|
||||
.startMocking();
|
||||
|
||||
mResources = InstrumentationRegistry.getContext().getResources();
|
||||
// These Resources are common to all tests.
|
||||
doReturn(4000)
|
||||
.when(mMockedResources)
|
||||
.getInteger(R.integer.config_displayWhiteBalanceColorTemperatureMin);
|
||||
doReturn(8000)
|
||||
.when(mMockedResources)
|
||||
.getInteger(R.integer.config_displayWhiteBalanceColorTemperatureMax);
|
||||
doReturn(6500)
|
||||
.when(mMockedResources)
|
||||
.getInteger(R.integer.config_displayWhiteBalanceColorTemperatureDefault);
|
||||
doReturn(new String[] {"0.950456", "1.000000", "1.089058"})
|
||||
.when(mMockedResources)
|
||||
.getStringArray(R.array.config_displayWhiteBalanceDisplayNominalWhite);
|
||||
doReturn(6500)
|
||||
.when(mMockedResources)
|
||||
.getInteger(R.integer.config_displayWhiteBalanceDisplayNominalWhiteCct);
|
||||
doReturn(new int[] {0})
|
||||
.when(mMockedResources)
|
||||
.getIntArray(R.array.config_displayWhiteBalanceDisplaySteps);
|
||||
doReturn(new int[] {20})
|
||||
.when(mMockedResources)
|
||||
.getIntArray(R.array.config_displayWhiteBalanceDisplayRangeMinimums);
|
||||
|
||||
doReturn(mMockedResources).when(mMockedContext).getResources();
|
||||
|
||||
mDisplayToken = new Binder();
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
if (mSession != null) {
|
||||
mSession.finishMocking();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -98,4 +166,204 @@ public class DisplayWhiteBalanceTintControllerTest {
|
||||
})
|
||||
).isTrue();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Setup should succeed when SurfaceControl setup results in a valid color transform.
|
||||
*/
|
||||
@Test
|
||||
public void displayWhiteBalance_setupWithSurfaceControl() {
|
||||
// Make SurfaceControl return sRGB primaries
|
||||
SurfaceControl.DisplayPrimaries displayPrimaries = new SurfaceControl.DisplayPrimaries();
|
||||
displayPrimaries.red = new SurfaceControl.CieXyz();
|
||||
displayPrimaries.red.X = 0.412315f;
|
||||
displayPrimaries.red.Y = 0.212600f;
|
||||
displayPrimaries.red.Z = 0.019327f;
|
||||
displayPrimaries.green = new SurfaceControl.CieXyz();
|
||||
displayPrimaries.green.X = 0.357600f;
|
||||
displayPrimaries.green.Y = 0.715200f;
|
||||
displayPrimaries.green.Z = 0.119200f;
|
||||
displayPrimaries.blue = new SurfaceControl.CieXyz();
|
||||
displayPrimaries.blue.X = 0.180500f;
|
||||
displayPrimaries.blue.Y = 0.072200f;
|
||||
displayPrimaries.blue.Z = 0.950633f;
|
||||
displayPrimaries.white = new SurfaceControl.CieXyz();
|
||||
displayPrimaries.white.X = 0.950456f;
|
||||
displayPrimaries.white.Y = 1.000000f;
|
||||
displayPrimaries.white.Z = 1.089058f;
|
||||
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY))
|
||||
.thenReturn(displayPrimaries);
|
||||
|
||||
setUpTintController();
|
||||
assertWithMessage("Setup with valid SurfaceControl failed")
|
||||
.that(mDisplayWhiteBalanceTintController.mSetUp)
|
||||
.isTrue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup should fail when SurfaceControl setup results in an invalid color transform.
|
||||
*/
|
||||
@Test
|
||||
public void displayWhiteBalance_setupWithInvalidSurfaceControlData() {
|
||||
// Make SurfaceControl return invalid display primaries
|
||||
SurfaceControl.DisplayPrimaries displayPrimaries = new SurfaceControl.DisplayPrimaries();
|
||||
displayPrimaries.red = new SurfaceControl.CieXyz();
|
||||
displayPrimaries.green = new SurfaceControl.CieXyz();
|
||||
displayPrimaries.blue = new SurfaceControl.CieXyz();
|
||||
displayPrimaries.white = new SurfaceControl.CieXyz();
|
||||
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY))
|
||||
.thenReturn(displayPrimaries);
|
||||
|
||||
setUpTintController();
|
||||
assertWithMessage("Setup with invalid SurfaceControl succeeded")
|
||||
.that(mDisplayWhiteBalanceTintController.mSetUp)
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup should succeed when SurfaceControl setup fails and Resources result in a valid color
|
||||
* transform.
|
||||
*/
|
||||
@Test
|
||||
public void displayWhiteBalance_setupWithResources() {
|
||||
// Use default (valid) Resources
|
||||
doReturn(mResources.getStringArray(R.array.config_displayWhiteBalanceDisplayPrimaries))
|
||||
.when(mMockedResources)
|
||||
.getStringArray(R.array.config_displayWhiteBalanceDisplayPrimaries);
|
||||
// Make SurfaceControl setup fail
|
||||
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)).thenReturn(null);
|
||||
|
||||
setUpTintController();
|
||||
assertWithMessage("Setup with valid Resources failed")
|
||||
.that(mDisplayWhiteBalanceTintController.mSetUp)
|
||||
.isTrue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup should fail when SurfaceControl setup fails and Resources result in an invalid color
|
||||
* transform.
|
||||
*/
|
||||
@Test
|
||||
public void displayWhiteBalance_setupWithInvalidResources() {
|
||||
// Use Resources with invalid color data
|
||||
doReturn(new String[] {
|
||||
"0", "0", "0", // Red X, Y, Z
|
||||
"0", "0", "0", // Green X, Y, Z
|
||||
"0", "0", "0", // Blue X, Y, Z
|
||||
"0", "0", "0", // White X, Y, Z
|
||||
})
|
||||
.when(mMockedResources)
|
||||
.getStringArray(R.array.config_displayWhiteBalanceDisplayPrimaries);
|
||||
// Make SurfaceControl setup fail
|
||||
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)).thenReturn(null);
|
||||
|
||||
setUpTintController();
|
||||
assertWithMessage("Setup with invalid Resources succeeded")
|
||||
.that(mDisplayWhiteBalanceTintController.mSetUp)
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
/**
|
||||
* Matrix should match the precalculated one for given cct and display primaries.
|
||||
*/
|
||||
@Test
|
||||
public void displayWhiteBalance_getAndSetMatrix_validateTransformMatrix() {
|
||||
SurfaceControl.DisplayPrimaries displayPrimaries = new SurfaceControl.DisplayPrimaries();
|
||||
displayPrimaries.red = new SurfaceControl.CieXyz();
|
||||
displayPrimaries.red.X = 0.412315f;
|
||||
displayPrimaries.red.Y = 0.212600f;
|
||||
displayPrimaries.red.Z = 0.019327f;
|
||||
displayPrimaries.green = new SurfaceControl.CieXyz();
|
||||
displayPrimaries.green.X = 0.357600f;
|
||||
displayPrimaries.green.Y = 0.715200f;
|
||||
displayPrimaries.green.Z = 0.119200f;
|
||||
displayPrimaries.blue = new SurfaceControl.CieXyz();
|
||||
displayPrimaries.blue.X = 0.180500f;
|
||||
displayPrimaries.blue.Y = 0.072200f;
|
||||
displayPrimaries.blue.Z = 0.950633f;
|
||||
displayPrimaries.white = new SurfaceControl.CieXyz();
|
||||
displayPrimaries.white.X = 0.950456f;
|
||||
displayPrimaries.white.Y = 1.000000f;
|
||||
displayPrimaries.white.Z = 1.089058f;
|
||||
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY))
|
||||
.thenReturn(displayPrimaries);
|
||||
|
||||
setUpTintController();
|
||||
assertWithMessage("Setup with valid SurfaceControl failed")
|
||||
.that(mDisplayWhiteBalanceTintController.mSetUp)
|
||||
.isTrue();
|
||||
|
||||
final int cct = 6500;
|
||||
mDisplayWhiteBalanceTintController.setMatrix(cct);
|
||||
mDisplayWhiteBalanceTintController.setAppliedCct(
|
||||
mDisplayWhiteBalanceTintController.getTargetCct());
|
||||
|
||||
assertWithMessage("Failed to set temperature")
|
||||
.that(mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
|
||||
.isEqualTo(cct);
|
||||
float[] matrixDwb = mDisplayWhiteBalanceTintController.getMatrix();
|
||||
final float[] expectedMatrixDwb = {
|
||||
0.971848f, -0.001421f, 0.000491f, 0.0f,
|
||||
0.028193f, 0.945798f, 0.003207f, 0.0f,
|
||||
-0.000042f, -0.000989f, 0.988659f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 1.0f
|
||||
};
|
||||
assertArrayEquals("Unexpected DWB matrix", expectedMatrixDwb, matrixDwb,
|
||||
1e-6f /* tolerance */);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matrix should match the precalculated one for given cct and display primaries.
|
||||
*/
|
||||
@Test
|
||||
public void displayWhiteBalance_targetApplied_validateTransformMatrix() {
|
||||
SurfaceControl.DisplayPrimaries displayPrimaries = new SurfaceControl.DisplayPrimaries();
|
||||
displayPrimaries.red = new SurfaceControl.CieXyz();
|
||||
displayPrimaries.red.X = 0.412315f;
|
||||
displayPrimaries.red.Y = 0.212600f;
|
||||
displayPrimaries.red.Z = 0.019327f;
|
||||
displayPrimaries.green = new SurfaceControl.CieXyz();
|
||||
displayPrimaries.green.X = 0.357600f;
|
||||
displayPrimaries.green.Y = 0.715200f;
|
||||
displayPrimaries.green.Z = 0.119200f;
|
||||
displayPrimaries.blue = new SurfaceControl.CieXyz();
|
||||
displayPrimaries.blue.X = 0.180500f;
|
||||
displayPrimaries.blue.Y = 0.072200f;
|
||||
displayPrimaries.blue.Z = 0.950633f;
|
||||
displayPrimaries.white = new SurfaceControl.CieXyz();
|
||||
displayPrimaries.white.X = 0.950456f;
|
||||
displayPrimaries.white.Y = 1.000000f;
|
||||
displayPrimaries.white.Z = 1.089058f;
|
||||
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY))
|
||||
.thenReturn(displayPrimaries);
|
||||
|
||||
setUpTintController();
|
||||
assertWithMessage("Setup with valid SurfaceControl failed")
|
||||
.that(mDisplayWhiteBalanceTintController.mSetUp)
|
||||
.isTrue();
|
||||
|
||||
final int cct = 6500;
|
||||
mDisplayWhiteBalanceTintController.setTargetCct(cct);
|
||||
final float[] matrixDwb = mDisplayWhiteBalanceTintController.computeMatrixForCct(cct);
|
||||
mDisplayWhiteBalanceTintController.setAppliedCct(cct);
|
||||
|
||||
assertWithMessage("Failed to set temperature")
|
||||
.that(mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
|
||||
.isEqualTo(cct);
|
||||
final float[] expectedMatrixDwb = {
|
||||
0.971848f, -0.001421f, 0.000491f, 0.0f,
|
||||
0.028193f, 0.945798f, 0.003207f, 0.0f,
|
||||
-0.000042f, -0.000989f, 0.988659f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 1.0f
|
||||
};
|
||||
assertArrayEquals("Unexpected DWB matrix", expectedMatrixDwb, matrixDwb,
|
||||
1e-6f /* tolerance */);
|
||||
}
|
||||
|
||||
private void setUpTintController() {
|
||||
mDisplayWhiteBalanceTintController = new DisplayWhiteBalanceTintController(
|
||||
mDisplayManagerInternal);
|
||||
mDisplayWhiteBalanceTintController.setUp(mMockedContext, true);
|
||||
mDisplayWhiteBalanceTintController.setActivated(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,3 +115,14 @@ java_library {
|
||||
"android.test.runner",
|
||||
],
|
||||
}
|
||||
|
||||
filegroup {
|
||||
name: "extended-mockito-rule-sources",
|
||||
srcs: [
|
||||
"src/com/android/server/ExtendedMockitoRule.java",
|
||||
"src/com/android/server/Visitor.java",
|
||||
],
|
||||
visibility: [
|
||||
"//frameworks/base/services/tests/displayservicetests",
|
||||
],
|
||||
}
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
include /services/core/java/com/android/server/display/OWNERS
|
||||
@@ -1,307 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2019 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.server.display.color;
|
||||
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
|
||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
|
||||
|
||||
import static com.google.common.truth.Truth.assertWithMessage;
|
||||
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.hardware.display.DisplayManagerInternal;
|
||||
import android.os.Binder;
|
||||
import android.os.IBinder;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.SurfaceControl.CieXyz;
|
||||
import android.view.SurfaceControl.DisplayPrimaries;
|
||||
|
||||
import androidx.test.InstrumentationRegistry;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.dx.mockito.inline.extended.ExtendedMockito;
|
||||
import com.android.internal.R;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoSession;
|
||||
import org.mockito.quality.Strictness;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class DisplayWhiteBalanceTintControllerTest {
|
||||
@Mock
|
||||
private Context mMockedContext;
|
||||
@Mock
|
||||
private Resources mMockedResources;
|
||||
@Mock
|
||||
private DisplayManagerInternal mDisplayManagerInternal;
|
||||
|
||||
private MockitoSession mSession;
|
||||
private Resources mResources;
|
||||
IBinder mDisplayToken;
|
||||
DisplayWhiteBalanceTintController mDisplayWhiteBalanceTintController;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mSession = ExtendedMockito.mockitoSession()
|
||||
.initMocks(this)
|
||||
.mockStatic(SurfaceControl.class)
|
||||
.strictness(Strictness.LENIENT)
|
||||
.startMocking();
|
||||
|
||||
mResources = InstrumentationRegistry.getContext().getResources();
|
||||
// These Resources are common to all tests.
|
||||
doReturn(4000)
|
||||
.when(mMockedResources)
|
||||
.getInteger(R.integer.config_displayWhiteBalanceColorTemperatureMin);
|
||||
doReturn(8000)
|
||||
.when(mMockedResources)
|
||||
.getInteger(R.integer.config_displayWhiteBalanceColorTemperatureMax);
|
||||
doReturn(6500)
|
||||
.when(mMockedResources)
|
||||
.getInteger(R.integer.config_displayWhiteBalanceColorTemperatureDefault);
|
||||
doReturn(new String[] {"0.950456", "1.000000", "1.089058"})
|
||||
.when(mMockedResources)
|
||||
.getStringArray(R.array.config_displayWhiteBalanceDisplayNominalWhite);
|
||||
doReturn(6500)
|
||||
.when(mMockedResources)
|
||||
.getInteger(R.integer.config_displayWhiteBalanceDisplayNominalWhiteCct);
|
||||
doReturn(new int[] {0})
|
||||
.when(mMockedResources)
|
||||
.getIntArray(R.array.config_displayWhiteBalanceDisplaySteps);
|
||||
doReturn(new int[] {20})
|
||||
.when(mMockedResources)
|
||||
.getIntArray(R.array.config_displayWhiteBalanceDisplayRangeMinimums);
|
||||
|
||||
doReturn(mMockedResources).when(mMockedContext).getResources();
|
||||
|
||||
mDisplayToken = new Binder();
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
if (mSession != null) {
|
||||
mSession.finishMocking();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup should succeed when SurfaceControl setup results in a valid color transform.
|
||||
*/
|
||||
@Test
|
||||
public void displayWhiteBalance_setupWithSurfaceControl() {
|
||||
// Make SurfaceControl return sRGB primaries
|
||||
DisplayPrimaries displayPrimaries = new DisplayPrimaries();
|
||||
displayPrimaries.red = new CieXyz();
|
||||
displayPrimaries.red.X = 0.412315f;
|
||||
displayPrimaries.red.Y = 0.212600f;
|
||||
displayPrimaries.red.Z = 0.019327f;
|
||||
displayPrimaries.green = new CieXyz();
|
||||
displayPrimaries.green.X = 0.357600f;
|
||||
displayPrimaries.green.Y = 0.715200f;
|
||||
displayPrimaries.green.Z = 0.119200f;
|
||||
displayPrimaries.blue = new CieXyz();
|
||||
displayPrimaries.blue.X = 0.180500f;
|
||||
displayPrimaries.blue.Y = 0.072200f;
|
||||
displayPrimaries.blue.Z = 0.950633f;
|
||||
displayPrimaries.white = new CieXyz();
|
||||
displayPrimaries.white.X = 0.950456f;
|
||||
displayPrimaries.white.Y = 1.000000f;
|
||||
displayPrimaries.white.Z = 1.089058f;
|
||||
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY))
|
||||
.thenReturn(displayPrimaries);
|
||||
|
||||
setUpTintController();
|
||||
assertWithMessage("Setup with valid SurfaceControl failed")
|
||||
.that(mDisplayWhiteBalanceTintController.mSetUp)
|
||||
.isTrue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup should fail when SurfaceControl setup results in an invalid color transform.
|
||||
*/
|
||||
@Test
|
||||
public void displayWhiteBalance_setupWithInvalidSurfaceControlData() {
|
||||
// Make SurfaceControl return invalid display primaries
|
||||
DisplayPrimaries displayPrimaries = new DisplayPrimaries();
|
||||
displayPrimaries.red = new CieXyz();
|
||||
displayPrimaries.green = new CieXyz();
|
||||
displayPrimaries.blue = new CieXyz();
|
||||
displayPrimaries.white = new CieXyz();
|
||||
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY))
|
||||
.thenReturn(displayPrimaries);
|
||||
|
||||
setUpTintController();
|
||||
assertWithMessage("Setup with invalid SurfaceControl succeeded")
|
||||
.that(mDisplayWhiteBalanceTintController.mSetUp)
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup should succeed when SurfaceControl setup fails and Resources result in a valid color
|
||||
* transform.
|
||||
*/
|
||||
@Test
|
||||
public void displayWhiteBalance_setupWithResources() {
|
||||
// Use default (valid) Resources
|
||||
doReturn(mResources.getStringArray(R.array.config_displayWhiteBalanceDisplayPrimaries))
|
||||
.when(mMockedResources)
|
||||
.getStringArray(R.array.config_displayWhiteBalanceDisplayPrimaries);
|
||||
// Make SurfaceControl setup fail
|
||||
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)).thenReturn(null);
|
||||
|
||||
setUpTintController();
|
||||
assertWithMessage("Setup with valid Resources failed")
|
||||
.that(mDisplayWhiteBalanceTintController.mSetUp)
|
||||
.isTrue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup should fail when SurfaceControl setup fails and Resources result in an invalid color
|
||||
* transform.
|
||||
*/
|
||||
@Test
|
||||
public void displayWhiteBalance_setupWithInvalidResources() {
|
||||
// Use Resources with invalid color data
|
||||
doReturn(new String[] {
|
||||
"0", "0", "0", // Red X, Y, Z
|
||||
"0", "0", "0", // Green X, Y, Z
|
||||
"0", "0", "0", // Blue X, Y, Z
|
||||
"0", "0", "0", // White X, Y, Z
|
||||
})
|
||||
.when(mMockedResources)
|
||||
.getStringArray(R.array.config_displayWhiteBalanceDisplayPrimaries);
|
||||
// Make SurfaceControl setup fail
|
||||
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY)).thenReturn(null);
|
||||
|
||||
setUpTintController();
|
||||
assertWithMessage("Setup with invalid Resources succeeded")
|
||||
.that(mDisplayWhiteBalanceTintController.mSetUp)
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
/**
|
||||
* Matrix should match the precalculated one for given cct and display primaries.
|
||||
*/
|
||||
@Test
|
||||
public void displayWhiteBalance_getAndSetMatrix_validateTransformMatrix() {
|
||||
DisplayPrimaries displayPrimaries = new DisplayPrimaries();
|
||||
displayPrimaries.red = new CieXyz();
|
||||
displayPrimaries.red.X = 0.412315f;
|
||||
displayPrimaries.red.Y = 0.212600f;
|
||||
displayPrimaries.red.Z = 0.019327f;
|
||||
displayPrimaries.green = new CieXyz();
|
||||
displayPrimaries.green.X = 0.357600f;
|
||||
displayPrimaries.green.Y = 0.715200f;
|
||||
displayPrimaries.green.Z = 0.119200f;
|
||||
displayPrimaries.blue = new CieXyz();
|
||||
displayPrimaries.blue.X = 0.180500f;
|
||||
displayPrimaries.blue.Y = 0.072200f;
|
||||
displayPrimaries.blue.Z = 0.950633f;
|
||||
displayPrimaries.white = new CieXyz();
|
||||
displayPrimaries.white.X = 0.950456f;
|
||||
displayPrimaries.white.Y = 1.000000f;
|
||||
displayPrimaries.white.Z = 1.089058f;
|
||||
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY))
|
||||
.thenReturn(displayPrimaries);
|
||||
|
||||
setUpTintController();
|
||||
assertWithMessage("Setup with valid SurfaceControl failed")
|
||||
.that(mDisplayWhiteBalanceTintController.mSetUp)
|
||||
.isTrue();
|
||||
|
||||
final int cct = 6500;
|
||||
mDisplayWhiteBalanceTintController.setMatrix(cct);
|
||||
mDisplayWhiteBalanceTintController.setAppliedCct(
|
||||
mDisplayWhiteBalanceTintController.getTargetCct());
|
||||
|
||||
assertWithMessage("Failed to set temperature")
|
||||
.that(mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
|
||||
.isEqualTo(cct);
|
||||
float[] matrixDwb = mDisplayWhiteBalanceTintController.getMatrix();
|
||||
final float[] expectedMatrixDwb = {
|
||||
0.971848f, -0.001421f, 0.000491f, 0.0f,
|
||||
0.028193f, 0.945798f, 0.003207f, 0.0f,
|
||||
-0.000042f, -0.000989f, 0.988659f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 1.0f
|
||||
};
|
||||
assertArrayEquals("Unexpected DWB matrix", expectedMatrixDwb, matrixDwb,
|
||||
1e-6f /* tolerance */);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matrix should match the precalculated one for given cct and display primaries.
|
||||
*/
|
||||
@Test
|
||||
public void displayWhiteBalance_targetApplied_validateTransformMatrix() {
|
||||
DisplayPrimaries displayPrimaries = new DisplayPrimaries();
|
||||
displayPrimaries.red = new CieXyz();
|
||||
displayPrimaries.red.X = 0.412315f;
|
||||
displayPrimaries.red.Y = 0.212600f;
|
||||
displayPrimaries.red.Z = 0.019327f;
|
||||
displayPrimaries.green = new CieXyz();
|
||||
displayPrimaries.green.X = 0.357600f;
|
||||
displayPrimaries.green.Y = 0.715200f;
|
||||
displayPrimaries.green.Z = 0.119200f;
|
||||
displayPrimaries.blue = new CieXyz();
|
||||
displayPrimaries.blue.X = 0.180500f;
|
||||
displayPrimaries.blue.Y = 0.072200f;
|
||||
displayPrimaries.blue.Z = 0.950633f;
|
||||
displayPrimaries.white = new CieXyz();
|
||||
displayPrimaries.white.X = 0.950456f;
|
||||
displayPrimaries.white.Y = 1.000000f;
|
||||
displayPrimaries.white.Z = 1.089058f;
|
||||
when(mDisplayManagerInternal.getDisplayNativePrimaries(DEFAULT_DISPLAY))
|
||||
.thenReturn(displayPrimaries);
|
||||
|
||||
setUpTintController();
|
||||
assertWithMessage("Setup with valid SurfaceControl failed")
|
||||
.that(mDisplayWhiteBalanceTintController.mSetUp)
|
||||
.isTrue();
|
||||
|
||||
final int cct = 6500;
|
||||
mDisplayWhiteBalanceTintController.setTargetCct(cct);
|
||||
final float[] matrixDwb = mDisplayWhiteBalanceTintController.computeMatrixForCct(cct);
|
||||
mDisplayWhiteBalanceTintController.setAppliedCct(cct);
|
||||
|
||||
assertWithMessage("Failed to set temperature")
|
||||
.that(mDisplayWhiteBalanceTintController.mCurrentColorTemperature)
|
||||
.isEqualTo(cct);
|
||||
final float[] expectedMatrixDwb = {
|
||||
0.971848f, -0.001421f, 0.000491f, 0.0f,
|
||||
0.028193f, 0.945798f, 0.003207f, 0.0f,
|
||||
-0.000042f, -0.000989f, 0.988659f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 1.0f
|
||||
};
|
||||
assertArrayEquals("Unexpected DWB matrix", expectedMatrixDwb, matrixDwb,
|
||||
1e-6f /* tolerance */);
|
||||
}
|
||||
|
||||
private void setUpTintController() {
|
||||
mDisplayWhiteBalanceTintController = new DisplayWhiteBalanceTintController(
|
||||
mDisplayManagerInternal);
|
||||
mDisplayWhiteBalanceTintController.setUp(mMockedContext, true);
|
||||
mDisplayWhiteBalanceTintController.setActivated(true);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user