SF: Upgrade to Composer HAL 2.4
Add plumbing for getDisplayCapabilities and getDisplayConnectionType.
The only functional change is that getDisplayType is no longer called
on hotplug.
Bug: 135929065
Bug: 134771872
Test: Rev HAL to 2.4 on crosshatch
Test: libsurfaceflinger_unittest
Change-Id: Ib2c0383397acef9cde860dd64182213ae7cbb286
diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp
index e53d099..acddc42 100644
--- a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp
+++ b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp
@@ -17,9 +17,11 @@
#undef LOG_TAG
#define LOG_TAG "HwcComposer"
-#include <inttypes.h>
#include <log/log.h>
+#include <algorithm>
+#include <cinttypes>
+
#include "ComposerHal.h"
#include <composer-command-buffer/2.2/ComposerCommandBuffer.h>
@@ -173,7 +175,16 @@
LOG_ALWAYS_FATAL("failed to get hwcomposer service");
}
- if (sp<IComposer> composer_2_3 = IComposer::castFrom(mComposer)) {
+ if (sp<IComposer> composer_2_4 = IComposer::castFrom(mComposer)) {
+ composer_2_4->createClient_2_4([&](const auto& tmpError, const auto& tmpClient) {
+ if (tmpError == Error::NONE) {
+ mClient = tmpClient;
+ mClient_2_2 = tmpClient;
+ mClient_2_3 = tmpClient;
+ mClient_2_4 = tmpClient;
+ }
+ });
+ } else if (sp<V2_3::IComposer> composer_2_3 = V2_3::IComposer::castFrom(mComposer)) {
composer_2_3->createClient_2_3([&](const auto& tmpError, const auto& tmpClient) {
if (tmpError == Error::NONE) {
mClient = tmpClient;
@@ -456,23 +467,6 @@
return Error::NONE;
}
-Error Composer::getDisplayType(Display display,
- IComposerClient::DisplayType* outType)
-{
- Error error = kDefaultError;
- mClient->getDisplayType(display,
- [&](const auto& tmpError, const auto& tmpType) {
- error = tmpError;
- if (error != Error::NONE) {
- return;
- }
-
- *outType = tmpType;
- });
-
- return error;
-}
-
Error Composer::getDozeSupport(Display display, bool* outSupport)
{
Error error = kDefaultError;
@@ -1113,23 +1107,6 @@
return error;
}
-Error Composer::getDisplayCapabilities(Display display,
- std::vector<DisplayCapability>* outCapabilities) {
- if (!mClient_2_3) {
- return Error::UNSUPPORTED;
- }
- Error error = kDefaultError;
- mClient_2_3->getDisplayCapabilities(display,
- [&](const auto& tmpError, const auto& tmpCapabilities) {
- error = tmpError;
- if (error != Error::NONE) {
- return;
- }
- *outCapabilities = tmpCapabilities;
- });
- return error;
-}
-
Error Composer::setDisplayContentSamplingEnabled(Display display, bool enabled,
uint8_t componentMask, uint64_t maxFrames) {
if (!mClient_2_3) {
@@ -1187,6 +1164,60 @@
return mClient_2_3->setDisplayBrightness(display, brightness);
}
+// Composer HAL 2.4
+
+Error Composer::getDisplayCapabilities(Display display,
+ std::vector<DisplayCapability>* outCapabilities) {
+ if (!mClient_2_3) {
+ return Error::UNSUPPORTED;
+ }
+
+ Error error = kDefaultError;
+ if (mClient_2_4) {
+ mClient_2_4->getDisplayCapabilities_2_4(display,
+ [&](const auto& tmpError, const auto& tmpCaps) {
+ error = tmpError;
+ if (error != Error::NONE) {
+ return;
+ }
+ *outCapabilities = tmpCaps;
+ });
+ } else {
+ mClient_2_3
+ ->getDisplayCapabilities(display, [&](const auto& tmpError, const auto& tmpCaps) {
+ error = tmpError;
+ if (error != Error::NONE) {
+ return;
+ }
+
+ outCapabilities->resize(tmpCaps.size());
+ std::transform(tmpCaps.begin(), tmpCaps.end(), outCapabilities->begin(),
+ [](auto cap) { return static_cast<DisplayCapability>(cap); });
+ });
+ }
+
+ return error;
+}
+
+Error Composer::getDisplayConnectionType(Display display,
+ IComposerClient::DisplayConnectionType* outType) {
+ if (!mClient_2_4) {
+ return Error::UNSUPPORTED;
+ }
+
+ Error error = kDefaultError;
+ mClient_2_4->getDisplayConnectionType(display, [&](const auto& tmpError, const auto& tmpType) {
+ error = tmpError;
+ if (error != Error::NONE) {
+ return;
+ }
+
+ *outType = tmpType;
+ });
+
+ return error;
+}
+
CommandReader::~CommandReader()
{
resetData();