diff options
author | Peiyong Lin <lpy@google.com> | 2020-01-18 01:08:18 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-01-18 01:08:18 +0000 |
commit | b8c7368328425733bc4566cb40a0e292641e92bc (patch) | |
tree | 1b202da04ed1f127aa091e8098f44ab378ba9a94 /services/surfaceflinger | |
parent | 2c596099b0f1eebb421ef367592abcf5ec496e42 (diff) | |
parent | afa0f5706a924e5af5ed2a417e7448f1946118f3 (diff) | |
download | native-b8c7368328425733bc4566cb40a0e292641e92bc.tar.gz |
Merge "Plumb getClientTargetProperty API."
Diffstat (limited to 'services/surfaceflinger')
6 files changed, 41 insertions, 5 deletions
diff --git a/services/surfaceflinger/Android.bp b/services/surfaceflinger/Android.bp index 8fa35d83e7..9a7eabd498 100644 --- a/services/surfaceflinger/Android.bp +++ b/services/surfaceflinger/Android.bp @@ -79,6 +79,7 @@ cc_defaults { "android.hardware.graphics.composer@2.1-command-buffer", "android.hardware.graphics.composer@2.2-command-buffer", "android.hardware.graphics.composer@2.3-command-buffer", + "android.hardware.graphics.composer@2.4-command-buffer", ], export_static_lib_headers: [ "libcompositionengine", diff --git a/services/surfaceflinger/CompositionEngine/Android.bp b/services/surfaceflinger/CompositionEngine/Android.bp index 18477bbe4c..42d9875f55 100644 --- a/services/surfaceflinger/CompositionEngine/Android.bp +++ b/services/surfaceflinger/CompositionEngine/Android.bp @@ -35,6 +35,7 @@ cc_defaults { "android.hardware.graphics.composer@2.1-command-buffer", "android.hardware.graphics.composer@2.2-command-buffer", "android.hardware.graphics.composer@2.3-command-buffer", + "android.hardware.graphics.composer@2.4-command-buffer", "libsurfaceflinger_headers", ], } diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp index 6892dd8ed0..9d8f31b276 100644 --- a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp +++ b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp @@ -1337,8 +1337,7 @@ Error CommandReader::parse() uint16_t length = 0; while (!isEmpty()) { - auto command_2_1 = reinterpret_cast<V2_1::IComposerClient::Command*>(&command); - if (!beginCommand(command_2_1, &length)) { + if (!beginCommand(&command, &length)) { break; } @@ -1365,6 +1364,9 @@ Error CommandReader::parse() case IComposerClient::Command ::SET_PRESENT_OR_VALIDATE_DISPLAY_RESULT: parsed = parseSetPresentOrValidateDisplayResult(length); break; + case IComposerClient::Command::SET_CLIENT_TARGET_PROPERTY: + parsed = parseSetClientTargetProperty(length); + break; default: parsed = false; break; @@ -1502,6 +1504,15 @@ bool CommandReader::parseSetPresentOrValidateDisplayResult(uint16_t length) return true; } +bool CommandReader::parseSetClientTargetProperty(uint16_t length) { + if (length != CommandWriterBase::kSetClientTargetPropertyLength || !mCurrentReturnData) { + return false; + } + mCurrentReturnData->clientTargetProperty.pixelFormat = static_cast<PixelFormat>(readSigned()); + mCurrentReturnData->clientTargetProperty.dataspace = static_cast<Dataspace>(readSigned()); + return true; +} + void CommandReader::resetData() { mErrors.clear(); diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.h b/services/surfaceflinger/DisplayHardware/ComposerHal.h index 301f54fa6a..6f0f38a58a 100644 --- a/services/surfaceflinger/DisplayHardware/ComposerHal.h +++ b/services/surfaceflinger/DisplayHardware/ComposerHal.h @@ -29,7 +29,7 @@ #include <android/hardware/graphics/common/1.1/types.h> #include <android/hardware/graphics/composer/2.4/IComposer.h> #include <android/hardware/graphics/composer/2.4/IComposerClient.h> -#include <composer-command-buffer/2.3/ComposerCommandBuffer.h> +#include <composer-command-buffer/2.4/ComposerCommandBuffer.h> #include <gui/HdrMetadata.h> #include <math/mat4.h> #include <ui/DisplayedFrameStats.h> @@ -63,8 +63,8 @@ using V2_1::Config; using V2_1::Display; using V2_1::Error; using V2_1::Layer; -using V2_3::CommandReaderBase; -using V2_3::CommandWriterBase; +using V2_4::CommandReaderBase; +using V2_4::CommandWriterBase; using V2_4::IComposer; using V2_4::IComposerCallback; using V2_4::IComposerClient; @@ -280,6 +280,7 @@ private: bool parseSetPresentFence(uint16_t length); bool parseSetReleaseFences(uint16_t length); bool parseSetPresentOrValidateDisplayResult(uint16_t length); + bool parseSetClientTargetProperty(uint16_t length); struct ReturnData { uint32_t displayRequests = 0; @@ -296,6 +297,13 @@ private: std::vector<int> releaseFences; uint32_t presentOrValidateState; + + // Composer 2.4 implementation can return a client target property + // structure to indicate the client target properties that hardware + // composer requests. The composer client must change the client target + // properties to match this request. + IComposerClient::ClientTargetProperty clientTargetProperty{PixelFormat::RGBA_8888, + Dataspace::UNKNOWN}; }; std::vector<CommandError> mErrors; diff --git a/services/surfaceflinger/tests/fakehwc/FakeComposerClient.cpp b/services/surfaceflinger/tests/fakehwc/FakeComposerClient.cpp index 5824e589d1..1d3fed8227 100644 --- a/services/surfaceflinger/tests/fakehwc/FakeComposerClient.cpp +++ b/services/surfaceflinger/tests/fakehwc/FakeComposerClient.cpp @@ -780,6 +780,15 @@ V2_4::Error FakeComposerClient::setContentType(Display, IComposerClient::Content return V2_4::Error::UNSUPPORTED; } +V2_4::Error FakeComposerClient::validateDisplay_2_4( + Display /*display*/, std::vector<Layer>* /*outChangedLayers*/, + std::vector<IComposerClient::Composition>* /*outCompositionTypes*/, + uint32_t* /*outDisplayRequestMask*/, std::vector<Layer>* /*outRequestedLayers*/, + std::vector<uint32_t>* /*outRequestMasks*/, + IComposerClient::ClientTargetProperty* /*outClientTargetProperty*/) { + return V2_4::Error::NONE; +} + ////////////////////////////////////////////////////////////////// void FakeComposerClient::requestVSync(uint64_t vsyncTime) { diff --git a/services/surfaceflinger/tests/fakehwc/FakeComposerClient.h b/services/surfaceflinger/tests/fakehwc/FakeComposerClient.h index f9ff2bf74a..a524850e2e 100644 --- a/services/surfaceflinger/tests/fakehwc/FakeComposerClient.h +++ b/services/surfaceflinger/tests/fakehwc/FakeComposerClient.h @@ -251,6 +251,12 @@ public: Display display, std::vector<IComposerClient::ContentType>* outSupportedContentTypes) override; V2_4::Error setContentType(Display display, IComposerClient::ContentType type) override; + V2_4::Error validateDisplay_2_4( + Display display, std::vector<Layer>* outChangedLayers, + std::vector<IComposerClient::Composition>* outCompositionTypes, + uint32_t* outDisplayRequestMask, std::vector<Layer>* outRequestedLayers, + std::vector<uint32_t>* outRequestMasks, + IComposerClient::ClientTargetProperty* outClientTargetProperty) override; void setClient(ComposerClient* client); |