SF: DisplayCommand.colorTransform is just a matrix
Remove the hint from DisplayCommand.colorTransform as currently
we only use ColorTransform::IDENTITY and ColorTransform::ARBITRARY_MATRIX,
which both can be expressed using a matrix.
Bug: 208879711
Test: VTS
Change-Id: I1c335647aabb7f89c2c89e54abfc839d10a659fb
diff --git a/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp b/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp
index 6f2880d..a28aeaa 100644
--- a/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp
+++ b/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp
@@ -537,9 +537,8 @@
return Error::NONE;
}
-Error AidlComposer::setColorTransform(Display display, const float* matrix, ColorTransform hint) {
- mWriter.setColorTransform(translate<int64_t>(display), matrix,
- translate<AidlColorTransform>(hint));
+Error AidlComposer::setColorTransform(Display display, const float* matrix) {
+ mWriter.setColorTransform(translate<int64_t>(display), matrix);
return Error::NONE;
}
diff --git a/services/surfaceflinger/DisplayHardware/AidlComposerHal.h b/services/surfaceflinger/DisplayHardware/AidlComposerHal.h
index 6aae562..777b295 100644
--- a/services/surfaceflinger/DisplayHardware/AidlComposerHal.h
+++ b/services/surfaceflinger/DisplayHardware/AidlComposerHal.h
@@ -116,7 +116,7 @@
int acquireFence, Dataspace dataspace,
const std::vector<IComposerClient::Rect>& damage) override;
Error setColorMode(Display display, ColorMode mode, RenderIntent renderIntent) override;
- Error setColorTransform(Display display, const float* matrix, ColorTransform hint) override;
+ Error setColorTransform(Display display, const float* matrix) override;
Error setOutputBuffer(Display display, const native_handle_t* buffer,
int releaseFence) override;
Error setPowerMode(Display display, IComposerClient::PowerMode mode) override;
diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.h b/services/surfaceflinger/DisplayHardware/ComposerHal.h
index 84e227d..a6a1e6f 100644
--- a/services/surfaceflinger/DisplayHardware/ComposerHal.h
+++ b/services/surfaceflinger/DisplayHardware/ComposerHal.h
@@ -139,7 +139,7 @@
int acquireFence, Dataspace dataspace,
const std::vector<IComposerClient::Rect>& damage) = 0;
virtual Error setColorMode(Display display, ColorMode mode, RenderIntent renderIntent) = 0;
- virtual Error setColorTransform(Display display, const float* matrix, ColorTransform hint) = 0;
+ virtual Error setColorTransform(Display display, const float* matrix) = 0;
virtual Error setOutputBuffer(Display display, const native_handle_t* buffer,
int releaseFence) = 0;
virtual Error setPowerMode(Display display, IComposerClient::PowerMode mode) = 0;
diff --git a/services/surfaceflinger/DisplayHardware/HWC2.cpp b/services/surfaceflinger/DisplayHardware/HWC2.cpp
index b1f7808..3dcea61 100644
--- a/services/surfaceflinger/DisplayHardware/HWC2.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWC2.cpp
@@ -436,8 +436,8 @@
return static_cast<Error>(intError);
}
-Error Display::setColorTransform(const android::mat4& matrix, ColorTransform hint) {
- auto intError = mComposer.setColorTransform(mId, matrix.asArray(), hint);
+Error Display::setColorTransform(const android::mat4& matrix) {
+ auto intError = mComposer.setColorTransform(mId, matrix.asArray());
return static_cast<Error>(intError);
}
diff --git a/services/surfaceflinger/DisplayHardware/HWC2.h b/services/surfaceflinger/DisplayHardware/HWC2.h
index 40bfcd3..c2ebd45 100644
--- a/services/surfaceflinger/DisplayHardware/HWC2.h
+++ b/services/surfaceflinger/DisplayHardware/HWC2.h
@@ -128,7 +128,7 @@
[[clang::warn_unused_result]] virtual hal::Error setColorMode(
hal::ColorMode mode, hal::RenderIntent renderIntent) = 0;
[[clang::warn_unused_result]] virtual hal::Error setColorTransform(
- const android::mat4& matrix, hal::ColorTransform hint) = 0;
+ const android::mat4& matrix) = 0;
[[clang::warn_unused_result]] virtual hal::Error setOutputBuffer(
const android::sp<android::GraphicBuffer>& buffer,
const android::sp<android::Fence>& releaseFence) = 0;
@@ -198,7 +198,7 @@
const android::sp<android::Fence>& acquireFence,
hal::Dataspace dataspace) override;
hal::Error setColorMode(hal::ColorMode, hal::RenderIntent) override;
- hal::Error setColorTransform(const android::mat4& matrix, hal::ColorTransform hint) override;
+ hal::Error setColorTransform(const android::mat4& matrix) override;
hal::Error setOutputBuffer(const android::sp<android::GraphicBuffer>&,
const android::sp<android::Fence>& releaseFence) override;
hal::Error setPowerMode(hal::PowerMode) override;
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index 7ed564f..7618aa2 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -673,11 +673,7 @@
RETURN_IF_INVALID_DISPLAY(displayId, BAD_INDEX);
auto& displayData = mDisplayData[displayId];
- bool isIdentity = transform == mat4();
- auto error = displayData.hwcDisplay
- ->setColorTransform(transform,
- isIdentity ? hal::ColorTransform::IDENTITY
- : hal::ColorTransform::ARBITRARY_MATRIX);
+ auto error = displayData.hwcDisplay->setColorTransform(transform);
RETURN_IF_HWC_ERROR(error, displayId, UNKNOWN_ERROR);
return NO_ERROR;
}
diff --git a/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp b/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp
index c3214d8..96f4496 100644
--- a/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp
+++ b/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp
@@ -507,9 +507,12 @@
return unwrapRet(ret);
}
-Error HidlComposer::setColorTransform(Display display, const float* matrix, ColorTransform hint) {
+Error HidlComposer::setColorTransform(Display display, const float* matrix) {
mWriter.selectDisplay(display);
- mWriter.setColorTransform(matrix, hint);
+ const bool isIdentity = (mat4(matrix) == mat4());
+ mWriter.setColorTransform(matrix,
+ isIdentity ? ColorTransform::IDENTITY
+ : ColorTransform::ARBITRARY_MATRIX);
return Error::NONE;
}
diff --git a/services/surfaceflinger/DisplayHardware/HidlComposerHal.h b/services/surfaceflinger/DisplayHardware/HidlComposerHal.h
index fdb2cbd..8190c17 100644
--- a/services/surfaceflinger/DisplayHardware/HidlComposerHal.h
+++ b/services/surfaceflinger/DisplayHardware/HidlComposerHal.h
@@ -227,7 +227,7 @@
int acquireFence, Dataspace dataspace,
const std::vector<IComposerClient::Rect>& damage) override;
Error setColorMode(Display display, ColorMode mode, RenderIntent renderIntent) override;
- Error setColorTransform(Display display, const float* matrix, ColorTransform hint) override;
+ Error setColorTransform(Display display, const float* matrix) override;
Error setOutputBuffer(Display display, const native_handle_t* buffer,
int releaseFence) override;
Error setPowerMode(Display display, IComposerClient::PowerMode mode) override;
diff --git a/services/surfaceflinger/tests/unittests/CompositionTest.cpp b/services/surfaceflinger/tests/unittests/CompositionTest.cpp
index 7174f58..89a517f 100644
--- a/services/surfaceflinger/tests/unittests/CompositionTest.cpp
+++ b/services/surfaceflinger/tests/unittests/CompositionTest.cpp
@@ -87,6 +87,11 @@
constexpr int DEFAULT_SIDEBAND_STREAM = 51;
+MATCHER(IsIdentityMatrix, "") {
+ constexpr auto kIdentity = mat4();
+ return (mat4(arg) == kIdentity);
+}
+
class CompositionTest : public testing::Test {
public:
CompositionTest() {
@@ -325,9 +330,7 @@
template <typename Case>
static void setupCommonCompositionCallExpectations(CompositionTest* test) {
- EXPECT_CALL(*test->mComposer,
- setColorTransform(HWC_DISPLAY, _, Hwc2::ColorTransform::IDENTITY))
- .Times(1);
+ EXPECT_CALL(*test->mComposer, setColorTransform(HWC_DISPLAY, IsIdentityMatrix())).Times(1);
EXPECT_CALL(*test->mComposer, getDisplayRequests(HWC_DISPLAY, _, _, _)).Times(1);
EXPECT_CALL(*test->mComposer, acceptDisplayChanges(HWC_DISPLAY)).Times(1);
EXPECT_CALL(*test->mComposer, presentDisplay(HWC_DISPLAY, _)).Times(1);
@@ -448,9 +451,7 @@
template <typename Case>
static void setupCommonCompositionCallExpectations(CompositionTest* test) {
// TODO: This seems like an unnecessary call if display is powered off.
- EXPECT_CALL(*test->mComposer,
- setColorTransform(HWC_DISPLAY, _, Hwc2::ColorTransform::IDENTITY))
- .Times(1);
+ EXPECT_CALL(*test->mComposer, setColorTransform(HWC_DISPLAY, IsIdentityMatrix())).Times(1);
// TODO: This seems like an unnecessary call if display is powered off.
Case::CompositionType::setupHwcSetCallExpectations(test);
diff --git a/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockComposer.h b/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockComposer.h
index 36527ae..a1aacc0 100644
--- a/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockComposer.h
+++ b/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockComposer.h
@@ -84,7 +84,7 @@
Error(Display, uint32_t, const sp<GraphicBuffer>&, int, Dataspace,
const std::vector<IComposerClient::Rect>&));
MOCK_METHOD3(setColorMode, Error(Display, ColorMode, RenderIntent));
- MOCK_METHOD3(setColorTransform, Error(Display, const float*, ColorTransform));
+ MOCK_METHOD2(setColorTransform, Error(Display, const float*));
MOCK_METHOD3(setOutputBuffer, Error(Display, const native_handle_t*, int));
MOCK_METHOD2(setPowerMode, Error(Display, IComposerClient::PowerMode));
MOCK_METHOD2(setVsyncEnabled, Error(Display, IComposerClient::Vsync));
diff --git a/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockHWC2.h b/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockHWC2.h
index 3bd8916..b43bc0e 100644
--- a/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockHWC2.h
+++ b/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockHWC2.h
@@ -68,8 +68,7 @@
const android::sp<android::Fence> &, hal::Dataspace),
(override));
MOCK_METHOD(hal::Error, setColorMode, (hal::ColorMode, hal::RenderIntent), (override));
- MOCK_METHOD(hal::Error, setColorTransform, (const android::mat4 &, hal::ColorTransform),
- (override));
+ MOCK_METHOD(hal::Error, setColorTransform, (const android::mat4 &), (override));
MOCK_METHOD(hal::Error, setOutputBuffer,
(const android::sp<android::GraphicBuffer> &, const android::sp<android::Fence> &),
(override));