diff options
author | 2018-04-05 14:36:36 -0700 | |
---|---|---|
committer | 2018-04-05 15:29:03 -0700 | |
commit | 0e7a791d51e92aafefd416044a2d38b6eec22a00 (patch) | |
tree | 298c22b754e3ca39d0dfb82f63cd3147ded7061f | |
parent | 89238e9438500e2e92a98930e4617d9ca43462df (diff) |
[SurfaceFlinger] Plumb HAL to hardware composer.
Previously we introduced HIDL interfaces for Auto Color support. This patch
implements HAL interfaces in DisplayHardware/.
BUG: 73824924
BUG: 73825729
Test: Build
Change-Id: I4f2011bfa9306552d50a88fe0f065932be3efd0c
-rw-r--r-- | libs/ui/DebugUtils.cpp | 24 | ||||
-rw-r--r-- | libs/ui/include/ui/DebugUtils.h | 1 | ||||
-rw-r--r-- | libs/ui/include/ui/GraphicTypes.h | 3 | ||||
-rw-r--r-- | services/surfaceflinger/DisplayHardware/ComposerHal.cpp | 193 | ||||
-rw-r--r-- | services/surfaceflinger/DisplayHardware/ComposerHal.h | 28 | ||||
-rw-r--r-- | services/surfaceflinger/DisplayHardware/HWC2.cpp | 18 | ||||
-rw-r--r-- | services/surfaceflinger/DisplayHardware/HWC2.h | 8 | ||||
-rw-r--r-- | services/surfaceflinger/DisplayHardware/HWComposer.cpp | 49 | ||||
-rw-r--r-- | services/surfaceflinger/DisplayHardware/HWComposer.h | 8 | ||||
-rw-r--r-- | services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp | 1 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 3 | ||||
-rw-r--r-- | services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp | 2 | ||||
-rw-r--r-- | services/surfaceflinger/tests/unittests/MockComposer.h | 7 |
13 files changed, 261 insertions, 84 deletions
diff --git a/libs/ui/DebugUtils.cpp b/libs/ui/DebugUtils.cpp index 58fed84ea8..61df02d41d 100644 --- a/libs/ui/DebugUtils.cpp +++ b/libs/ui/DebugUtils.cpp @@ -23,6 +23,7 @@ using android::base::StringPrintf; using android::ui::ColorMode; +using android::ui::RenderIntent; std::string decodeStandard(android_dataspace dataspace) { const uint32_t dataspaceSelect = (dataspace & HAL_DATASPACE_STANDARD_MASK); @@ -229,6 +230,15 @@ std::string decodeColorMode(ColorMode colorMode) { case ColorMode::DISPLAY_P3: return std::string("ColorMode::DISPLAY_P3"); + + case ColorMode::BT2020: + return std::string("ColorMode::BT2020"); + + case ColorMode::BT2100_PQ: + return std::string("ColorMode::BT2100_PQ"); + + case ColorMode::BT2100_HLG: + return std::string("ColorMode::BT2100_HLG"); } return android::base::StringPrintf("Unknown color mode %d", colorMode); @@ -294,6 +304,20 @@ std::string decodePixelFormat(android::PixelFormat format) { } } +std::string decodeRenderIntent(RenderIntent renderIntent) { + switch(renderIntent) { + case RenderIntent::COLORIMETRIC: + return std::string("RenderIntent::COLORIMETRIC"); + case RenderIntent::ENHANCE: + return std::string("RenderIntent::ENHANCE"); + case RenderIntent::TONE_MAP_COLORIMETRIC: + return std::string("RenderIntent::TONE_MAP_COLORIMETRIC"); + case RenderIntent::TONE_MAP_ENHANCE: + return std::string("RenderIntent::TONE_MAP_ENHANCE"); + } + return std::string("Unknown RenderIntent"); +} + std::string to_string(const android::Rect& rect) { return StringPrintf("(%4d,%4d,%4d,%4d)", rect.left, rect.top, rect.right, rect.bottom); } diff --git a/libs/ui/include/ui/DebugUtils.h b/libs/ui/include/ui/DebugUtils.h index 5e5df43740..92b2bfb282 100644 --- a/libs/ui/include/ui/DebugUtils.h +++ b/libs/ui/include/ui/DebugUtils.h @@ -32,4 +32,5 @@ std::string dataspaceDetails(android_dataspace dataspace); std::string decodeColorMode(android::ui::ColorMode colormode); std::string decodeColorTransform(android_color_transform colorTransform); std::string decodePixelFormat(android::PixelFormat format); +std::string decodeRenderIntent(android::ui::RenderIntent renderIntent); std::string to_string(const android::Rect& rect); diff --git a/libs/ui/include/ui/GraphicTypes.h b/libs/ui/include/ui/GraphicTypes.h index 92a5519898..bd5722fdb0 100644 --- a/libs/ui/include/ui/GraphicTypes.h +++ b/libs/ui/include/ui/GraphicTypes.h @@ -24,9 +24,10 @@ namespace android { namespace ui { -using android::hardware::graphics::common::V1_0::ColorMode; +using android::hardware::graphics::common::V1_1::ColorMode; using android::hardware::graphics::common::V1_1::Dataspace; using android::hardware::graphics::common::V1_1::PixelFormat; +using android::hardware::graphics::common::V1_1::RenderIntent; } // namespace ui } // namespace android diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp index bbffd0ae7f..5daa87ee35 100644 --- a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp +++ b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp @@ -350,15 +350,29 @@ Error Composer::getColorModes(Display display, std::vector<ColorMode>* outModes) { Error error = kDefaultError; - mClient->getColorModes(display, - [&](const auto& tmpError, const auto& tmpModes) { - error = tmpError; - if (error != Error::NONE) { - return; - } - *outModes = tmpModes; - }); + if (mClient_2_2) { + mClient_2_2->getColorModes_2_2(display, + [&](const auto& tmpError, const auto& tmpModes) { + error = tmpError; + if (error != Error::NONE) { + return; + } + + *outModes = tmpModes; + }); + } else { + mClient->getColorModes(display, + [&](const auto& tmpError, const auto& tmpModes) { + error = tmpError; + if (error != Error::NONE) { + return; + } + for (V1_0::ColorMode colorMode : tmpModes) { + outModes->push_back(static_cast<ColorMode>(colorMode)); + } + }); + } return error; } @@ -479,25 +493,6 @@ Error Composer::getHdrCapabilities(Display display, return error; } -Error Composer::getPerFrameMetadataKeys( - Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) { - if (!mClient_2_2) { - return Error::UNSUPPORTED; - } - - Error error = kDefaultError; - mClient_2_2->getPerFrameMetadataKeys(display, [&](const auto& tmpError, const auto& tmpKeys) { - error = tmpError; - if (error != Error::NONE) { - return; - } - - *outKeys = tmpKeys; - }); - - return error; -} - Error Composer::getReleaseFences(Display display, std::vector<Layer>* outLayers, std::vector<int>* outReleaseFences) { @@ -553,9 +548,16 @@ Error Composer::setClientTarget(Display display, uint32_t slot, return Error::NONE; } -Error Composer::setColorMode(Display display, ColorMode mode) +Error Composer::setColorMode(Display display, ColorMode mode, + RenderIntent renderIntent) { - auto ret = mClient->setColorMode(display, mode); + hardware::Return<Error> ret(kDefaultError); + if (mClient_2_2) { + ret = mClient_2_2->setColorMode_2_2(display, mode, renderIntent); + } else { + ret = mClient->setColorMode(display, + static_cast<V1_0::ColorMode>(mode)); + } return unwrapRet(ret); } @@ -862,39 +864,44 @@ Error Composer::execute() } Error error = kDefaultError; - auto ret = mClient->executeCommands(commandLength, commandHandles, - [&](const auto& tmpError, const auto& tmpOutChanged, - const auto& tmpOutLength, const auto& tmpOutHandles) - { - error = tmpError; - - // set up new output command queue if necessary - if (error == Error::NONE && tmpOutChanged) { - error = kDefaultError; - mClient->getOutputCommandQueue( - [&](const auto& tmpError, - const auto& tmpDescriptor) - { - error = tmpError; - if (error != Error::NONE) { - return; - } - - mReader.setMQDescriptor(tmpDescriptor); - }); - } - - if (error != Error::NONE) { - return; - } - - if (mReader.readQueue(tmpOutLength, tmpOutHandles)) { - error = mReader.parse(); - mReader.reset(); - } else { - error = Error::NO_RESOURCES; - } - }); + hardware::Return<void> ret; + auto hidl_callback = [&](const auto& tmpError, const auto& tmpOutChanged, + const auto& tmpOutLength, const auto& tmpOutHandles) + { + error = tmpError; + + // set up new output command queue if necessary + if (error == Error::NONE && tmpOutChanged) { + error = kDefaultError; + mClient->getOutputCommandQueue( + [&](const auto& tmpError, + const auto& tmpDescriptor) + { + error = tmpError; + if (error != Error::NONE) { + return; + } + + mReader.setMQDescriptor(tmpDescriptor); + }); + } + + if (error != Error::NONE) { + return; + } + + if (mReader.readQueue(tmpOutLength, tmpOutHandles)) { + error = mReader.parse(); + mReader.reset(); + } else { + error = Error::NO_RESOURCES; + } + }; + if (mClient_2_2) { + ret = mClient_2_2->executeCommands_2_2(commandLength, commandHandles, hidl_callback); + } else { + ret = mClient->executeCommands(commandLength, commandHandles, hidl_callback); + } // executeCommands can fail because of out-of-fd and we do not want to // abort() in that case if (!ret.isOk()) { @@ -925,6 +932,68 @@ Error Composer::execute() return error; } +// Composer HAL 2.2 + +Error Composer::getPerFrameMetadataKeys( + Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) { + if (!mClient_2_2) { + return Error::UNSUPPORTED; + } + + Error error = kDefaultError; + mClient_2_2->getPerFrameMetadataKeys(display, [&](const auto& tmpError, const auto& tmpKeys) { + error = tmpError; + if (error != Error::NONE) { + return; + } + + *outKeys = tmpKeys; + }); + + return error; +} + +Error Composer::getRenderIntents(Display display, ColorMode colorMode, + std::vector<RenderIntent>* outRenderIntents) { + if (!mClient_2_2) { + outRenderIntents->push_back(RenderIntent::COLORIMETRIC); + return Error::NONE; + } + + Error error = kDefaultError; + mClient_2_2->getRenderIntents(display, colorMode, + [&](const auto& tmpError, const auto& tmpKeys) { + error = tmpError; + if (error != Error::NONE) { + return; + } + + *outRenderIntents = tmpKeys; + }); + + return error; +} + +Error Composer::getDataspaceSaturationMatrix(Dataspace dataspace, mat4* outMatrix) +{ + if (!mClient_2_2) { + *outMatrix = mat4(); + return Error::NONE; + } + + Error error = kDefaultError; + mClient_2_2->getDataspaceSaturationMatrix(dataspace, [&](const auto& tmpError, const auto& tmpMatrix) { + error = tmpError; + if (error != Error::NONE) { + return; + } + + *outMatrix = mat4(tmpMatrix.data()); + }); + + return error; +} + CommandReader::~CommandReader() { resetData(); diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.h b/services/surfaceflinger/DisplayHardware/ComposerHal.h index 98f2f9d387..08901f685f 100644 --- a/services/surfaceflinger/DisplayHardware/ComposerHal.h +++ b/services/surfaceflinger/DisplayHardware/ComposerHal.h @@ -29,6 +29,7 @@ #include <android/hardware/graphics/composer/2.2/IComposerClient.h> #include <composer-command-buffer/2.2/ComposerCommandBuffer.h> #include <gui/HdrMetadata.h> +#include <math/mat4.h> #include <ui/GraphicBuffer.h> #include <utils/StrongPointer.h> @@ -38,12 +39,13 @@ namespace Hwc2 { using android::frameworks::vr::composer::V1_0::IVrComposerClient; -using android::hardware::graphics::common::V1_0::ColorMode; using android::hardware::graphics::common::V1_0::ColorTransform; using android::hardware::graphics::common::V1_0::Hdr; using android::hardware::graphics::common::V1_0::Transform; +using android::hardware::graphics::common::V1_1::ColorMode; using android::hardware::graphics::common::V1_1::Dataspace; using android::hardware::graphics::common::V1_1::PixelFormat; +using android::hardware::graphics::common::V1_1::RenderIntent; using android::hardware::graphics::composer::V2_1::Config; using android::hardware::graphics::composer::V2_1::Display; @@ -114,9 +116,6 @@ public: float* outMaxLuminance, float* outMaxAverageLuminance, float* outMinLuminance) = 0; - virtual Error getPerFrameMetadataKeys( - Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) = 0; - virtual Error getReleaseFences(Display display, std::vector<Layer>* outLayers, std::vector<int>* outReleaseFences) = 0; @@ -132,7 +131,7 @@ public: virtual Error setClientTarget(Display display, uint32_t slot, const sp<GraphicBuffer>& target, int acquireFence, Dataspace dataspace, const std::vector<IComposerClient::Rect>& damage) = 0; - virtual Error setColorMode(Display display, ColorMode mode) = 0; + virtual Error setColorMode(Display display, ColorMode mode, RenderIntent renderIntent) = 0; virtual Error setColorTransform(Display display, const float* matrix, ColorTransform hint) = 0; virtual Error setOutputBuffer(Display display, const native_handle_t* buffer, int releaseFence) = 0; @@ -175,6 +174,13 @@ public: const std::vector<IComposerClient::Rect>& visible) = 0; virtual Error setLayerZOrder(Display display, Layer layer, uint32_t z) = 0; virtual Error setLayerInfo(Display display, Layer layer, uint32_t type, uint32_t appId) = 0; + + // Composer HAL 2.2 + virtual Error getPerFrameMetadataKeys( + Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) = 0; + virtual Error getRenderIntents(Display display, ColorMode colorMode, + std::vector<RenderIntent>* outRenderIntents) = 0; + virtual Error getDataspaceSaturationMatrix(Dataspace dataspace, mat4* outMatrix) = 0; }; namespace impl { @@ -306,9 +312,6 @@ public: Error getHdrCapabilities(Display display, std::vector<Hdr>* outTypes, float* outMaxLuminance, float* outMaxAverageLuminance, float* outMinLuminance) override; - Error getPerFrameMetadataKeys( - Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) override; - Error getReleaseFences(Display display, std::vector<Layer>* outLayers, std::vector<int>* outReleaseFences) override; @@ -324,7 +327,7 @@ public: Error setClientTarget(Display display, uint32_t slot, const sp<GraphicBuffer>& target, int acquireFence, Dataspace dataspace, const std::vector<IComposerClient::Rect>& damage) override; - Error setColorMode(Display display, ColorMode mode) override; + Error setColorMode(Display display, ColorMode mode, RenderIntent renderIntent) override; Error setColorTransform(Display display, const float* matrix, ColorTransform hint) override; Error setOutputBuffer(Display display, const native_handle_t* buffer, int releaseFence) override; @@ -364,6 +367,13 @@ public: Error setLayerZOrder(Display display, Layer layer, uint32_t z) override; Error setLayerInfo(Display display, Layer layer, uint32_t type, uint32_t appId) override; + // Composer HAL 2.2 + Error getPerFrameMetadataKeys( + Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) override; + Error getRenderIntents(Display display, ColorMode colorMode, + std::vector<RenderIntent>* outRenderIntents) override; + Error getDataspaceSaturationMatrix(Dataspace dataspace, mat4* outMatrix) override; + private: class CommandWriter : public CommandWriterBase { public: diff --git a/services/surfaceflinger/DisplayHardware/HWC2.cpp b/services/surfaceflinger/DisplayHardware/HWC2.cpp index 2686788ade..5f94bb4202 100644 --- a/services/surfaceflinger/DisplayHardware/HWC2.cpp +++ b/services/surfaceflinger/DisplayHardware/HWC2.cpp @@ -50,6 +50,7 @@ namespace Hwc2 = android::Hwc2; using android::ui::ColorMode; using android::ui::Dataspace; using android::ui::PixelFormat; +using android::ui::RenderIntent; namespace { @@ -369,6 +370,19 @@ Error Display::getColorModes(std::vector<ColorMode>* outModes) const return static_cast<Error>(intError); } +Error Display::getRenderIntents(ColorMode colorMode, + std::vector<RenderIntent>* outRenderIntents) const +{ + auto intError = mComposer.getRenderIntents(mId, colorMode, outRenderIntents); + return static_cast<Error>(intError); +} + +Error Display::getDataspaceSaturationMatrix(Dataspace dataspace, android::mat4* outMatrix) +{ + auto intError = mComposer.getDataspaceSaturationMatrix(dataspace, outMatrix); + return static_cast<Error>(intError); +} + std::vector<std::shared_ptr<const Display::Config>> Display::getConfigs() const { std::vector<std::shared_ptr<const Config>> configs; @@ -526,9 +540,9 @@ Error Display::setClientTarget(uint32_t slot, const sp<GraphicBuffer>& target, return static_cast<Error>(intError); } -Error Display::setColorMode(ColorMode mode) +Error Display::setColorMode(ColorMode mode, RenderIntent renderIntent) { - auto intError = mComposer.setColorMode(mId, mode); + auto intError = mComposer.setColorMode(mId, mode, renderIntent); return static_cast<Error>(intError); } diff --git a/services/surfaceflinger/DisplayHardware/HWC2.h b/services/surfaceflinger/DisplayHardware/HWC2.h index 9b870e3ed9..e5779d40d1 100644 --- a/services/surfaceflinger/DisplayHardware/HWC2.h +++ b/services/surfaceflinger/DisplayHardware/HWC2.h @@ -212,6 +212,11 @@ public: std::unordered_map<Layer*, Composition>* outTypes); [[clang::warn_unused_result]] Error getColorModes( std::vector<android::ui::ColorMode>* outModes) const; + [[clang::warn_unused_result]] Error getRenderIntents( + android::ui::ColorMode colorMode, + std::vector<android::ui::RenderIntent>* outRenderIntents) const; + [[clang::warn_unused_result]] Error getDataspaceSaturationMatrix( + android::ui::Dataspace dataspace, android::mat4* outMatrix); // Doesn't call into the HWC2 device, so no errors are possible std::vector<std::shared_ptr<const Config>> getConfigs() const; @@ -236,7 +241,8 @@ public: const android::sp<android::Fence>& acquireFence, android::ui::Dataspace dataspace); [[clang::warn_unused_result]] Error setColorMode( - android::ui::ColorMode mode); + android::ui::ColorMode mode, + android::ui::RenderIntent renderIntent); [[clang::warn_unused_result]] Error setColorTransform( const android::mat4& matrix, android_color_transform_t hint); [[clang::warn_unused_result]] Error setOutputBuffer( diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index 29e2727b3e..8db8aa6cd0 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -330,17 +330,20 @@ std::vector<ui::ColorMode> HWComposer::getColorModes(int32_t displayId) const { return modes; } -status_t HWComposer::setActiveColorMode(int32_t displayId, ui::ColorMode mode) { +status_t HWComposer::setActiveColorMode(int32_t displayId, ui::ColorMode mode, + ui::RenderIntent renderIntent) { if (!isValidDisplay(displayId)) { ALOGE("setActiveColorMode: Display %d is not valid", displayId); return BAD_INDEX; } auto& displayData = mDisplayData[displayId]; - auto error = displayData.hwcDisplay->setColorMode(mode); + auto error = displayData.hwcDisplay->setColorMode(mode, renderIntent); if (error != HWC2::Error::None) { - ALOGE("setActiveConfig: Failed to set color mode %d on display %d: " - "%s (%d)", mode, displayId, to_string(error).c_str(), + ALOGE("setActiveConfig: Failed to set color mode %d" + "with render intent %d on display %d: " + "%s (%d)", mode, renderIntent, displayId, + to_string(error).c_str(), static_cast<int32_t>(error)); return UNKNOWN_ERROR; } @@ -841,6 +844,44 @@ std::unique_ptr<HdrCapabilities> HWComposer::getHdrCapabilities( return capabilities; } +std::vector<ui::RenderIntent> HWComposer::getRenderIntents(int32_t displayId, + ui::ColorMode colorMode) const { + if (!isValidDisplay(displayId)) { + ALOGE("getRenderIntents: Attempted to access invalid display %d", + displayId); + return {}; + } + + std::vector<ui::RenderIntent> renderIntents; + auto error = mDisplayData[displayId].hwcDisplay->getRenderIntents(colorMode, &renderIntents); + if (error != HWC2::Error::None) { + ALOGE("getColorModes failed for display %d: %s (%d)", displayId, + to_string(error).c_str(), static_cast<int32_t>(error)); + return std::vector<ui::RenderIntent>(); + } + + return renderIntents; +} + +mat4 HWComposer::getDataspaceSaturationMatrix(int32_t displayId, ui::Dataspace dataspace) { + if (!isValidDisplay(displayId)) { + ALOGE("getDataSpaceSaturationMatrix: Attempted to access invalid display %d", + displayId); + return {}; + } + + mat4 matrix; + auto error = mDisplayData[displayId].hwcDisplay->getDataspaceSaturationMatrix(dataspace, + &matrix); + if (error != HWC2::Error::None) { + ALOGE("getDataSpaceSaturationMatrix failed for display %d: %s (%d)", displayId, + to_string(error).c_str(), static_cast<int32_t>(error)); + return mat4(); + } + + return matrix; +} + // Converts a PixelFormat to a human-readable string. Max 11 chars. // (Could use a table of prefab String8 objects.) /* diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h index 6e2e156abd..e86d6211c8 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.h +++ b/services/surfaceflinger/DisplayHardware/HWComposer.h @@ -137,6 +137,11 @@ public: // Returns the HDR capabilities of the given display std::unique_ptr<HdrCapabilities> getHdrCapabilities(int32_t displayId); + // Returns the available RenderIntent of the given display. + std::vector<ui::RenderIntent> getRenderIntents(int32_t displayId, ui::ColorMode colorMode) const; + + mat4 getDataspaceSaturationMatrix(int32_t displayId, ui::Dataspace dataspace); + // Events handling --------------------------------------------------------- // Returns true if successful, false otherwise. The @@ -161,7 +166,8 @@ public: std::vector<ui::ColorMode> getColorModes(int32_t displayId) const; - status_t setActiveColorMode(int32_t displayId, ui::ColorMode mode); + status_t setActiveColorMode(int32_t displayId, ui::ColorMode mode, + ui::RenderIntent renderIntent); bool isUsingVrComposer() const; diff --git a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp index 1eda900f47..1fc310025d 100644 --- a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp +++ b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp @@ -302,6 +302,7 @@ void GLES20RenderEngine::drawMesh(const Mesh& mesh) { glVertexAttribPointer(Program::position, mesh.getVertexSize(), GL_FLOAT, GL_FALSE, mesh.getByteStride(), mesh.getPositions()); + // TODO(b/73825729) Refactor this code block to handle BT2020 color space properly. // DISPLAY_P3 is the only supported wide color output if (mPlatformHasWideColor && mOutputDataSpace == Dataspace::DISPLAY_P3) { Description wideColorState = mState; diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index c5bd0eb20e..5be7951972 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -106,6 +106,7 @@ using namespace android::hardware::configstore; using namespace android::hardware::configstore::V1_0; using ui::ColorMode; using ui::Dataspace; +using ui::RenderIntent; namespace { class ConditionalLock { @@ -1007,7 +1008,7 @@ void SurfaceFlinger::setActiveColorModeInternal(const sp<DisplayDevice>& hw, hw->getDisplayType()); hw->setActiveColorMode(mode); - getHwComposer().setActiveColorMode(type, mode); + getHwComposer().setActiveColorMode(type, mode, RenderIntent::COLORIMETRIC); } diff --git a/services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp b/services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp index c048c583f2..0705b5c7f8 100644 --- a/services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp +++ b/services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp @@ -46,8 +46,8 @@ using testing::Mock; using testing::Return; using testing::SetArgPointee; -using android::hardware::graphics::common::V1_0::ColorMode; using android::hardware::graphics::common::V1_0::Hdr; +using android::hardware::graphics::common::V1_1::ColorMode; using android::Hwc2::Error; using android::Hwc2::IComposer; using android::Hwc2::IComposerClient; diff --git a/services/surfaceflinger/tests/unittests/MockComposer.h b/services/surfaceflinger/tests/unittests/MockComposer.h index 00e565b75c..8be277915e 100644 --- a/services/surfaceflinger/tests/unittests/MockComposer.h +++ b/services/surfaceflinger/tests/unittests/MockComposer.h @@ -27,12 +27,13 @@ class GraphicBuffer; namespace Hwc2 { namespace mock { -using android::hardware::graphics::common::V1_0::ColorMode; using android::hardware::graphics::common::V1_0::ColorTransform; using android::hardware::graphics::common::V1_0::Hdr; using android::hardware::graphics::common::V1_0::Transform; +using android::hardware::graphics::common::V1_1::ColorMode; using android::hardware::graphics::common::V1_1::Dataspace; using android::hardware::graphics::common::V1_1::PixelFormat; +using android::hardware::graphics::common::V1_1::RenderIntent; using android::hardware::graphics::composer::V2_1::Config; using android::hardware::graphics::composer::V2_1::Display; @@ -75,13 +76,14 @@ public: MOCK_METHOD5(getHdrCapabilities, Error(Display, std::vector<Hdr>*, float*, float*, float*)); MOCK_METHOD2(getPerFrameMetadataKeys, Error(Display, std::vector<IComposerClient::PerFrameMetadataKey>*)); + MOCK_METHOD2(getDataspaceSaturationMatrix, Error(Dataspace, mat4*)); MOCK_METHOD3(getReleaseFences, Error(Display, std::vector<Layer>*, std::vector<int>*)); MOCK_METHOD2(presentDisplay, Error(Display, int*)); MOCK_METHOD2(setActiveConfig, Error(Display, Config)); MOCK_METHOD6(setClientTarget, Error(Display, uint32_t, const sp<GraphicBuffer>&, int, Dataspace, const std::vector<IComposerClient::Rect>&)); - MOCK_METHOD2(setColorMode, Error(Display, ColorMode)); + MOCK_METHOD3(setColorMode, Error(Display, ColorMode, RenderIntent)); MOCK_METHOD3(setColorTransform, Error(Display, const float*, ColorTransform)); MOCK_METHOD3(setOutputBuffer, Error(Display, const native_handle_t*, int)); MOCK_METHOD2(setPowerMode, Error(Display, IComposerClient::PowerMode)); @@ -107,6 +109,7 @@ public: Error(Display, Layer, const std::vector<IComposerClient::Rect>&)); MOCK_METHOD3(setLayerZOrder, Error(Display, Layer, uint32_t)); MOCK_METHOD4(setLayerInfo, Error(Display, Layer, uint32_t, uint32_t)); + MOCK_METHOD3(getRenderIntents, Error(Display, ColorMode, std::vector<RenderIntent>*)); }; } // namespace mock |