Merge "Move display mocking tests to DisplayServiceTests" into udc-qpr-dev

This commit is contained in:
Fiona Campbell
2023-07-20 12:36:54 +00:00
committed by Android (Google) Code Review
17 changed files with 288 additions and 329 deletions

View File

@@ -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",
],
}

View File

@@ -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" />

View File

@@ -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);
}
}

View File

@@ -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",
],
}

View File

@@ -1 +0,0 @@
include /services/core/java/com/android/server/display/OWNERS

View File

@@ -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);
}
}