Return display capability if getDisplayBrightnessSupport is not registered.

If getDisplayBrightnessSupport is not registered, there are two possibilities,
one is it's not supported at all, the other is that the support is returned in
getDisplayCapabilities. And thus we need to check getDisplayCapabilities, and
we return UNSUPPORTED always in this case. This patch also allows
getPerFrameMetadataKeys to return UNSUPPORTED on non-HDR capable devices.

BUG: 131595097
Test: Build, boot.
Change-Id: Ied302b1ac702dd94e039f1081d5420395c1bfbf4
This commit is contained in:
Peiyong Lin
2019-04-29 16:04:41 -07:00
parent ef85db2b65
commit 0686afa15a
4 changed files with 31 additions and 5 deletions

View File

@@ -246,7 +246,19 @@ TEST_F(GraphicsComposerHidlCommandTest, SET_LAYER_PER_FRAME_METADATA) {
* Test IComposerClient::getPerFrameMetadataKeys.
*/
TEST_F(GraphicsComposerHidlTest, GetPerFrameMetadataKeys) {
mComposerClient->getPerFrameMetadataKeys(mPrimaryDisplay);
std::vector<IComposerClient::PerFrameMetadataKey> keys;
Error error = Error::NONE;
mComposerClient->getRaw()->getPerFrameMetadataKeys(
mPrimaryDisplay, [&](const auto& tmpError, const auto& tmpKeys) {
error = tmpError;
keys = tmpKeys;
});
if (error == Error::UNSUPPORTED) {
GTEST_SUCCEED() << "getPerFrameMetadataKeys is not supported";
return;
}
ASSERT_EQ(Error::NONE, error);
ASSERT_TRUE(keys.size() >= 0);
}
/**

View File

@@ -95,7 +95,7 @@ class ComposerClientImpl : public V2_2::hal::detail::ComposerClientImpl<Interfac
Return<void> getDisplayCapabilities(
Display display, IComposerClient::getDisplayCapabilities_cb hidl_cb) override {
hidl_vec<IComposerClient::DisplayCapability> capabilities;
std::vector<IComposerClient::DisplayCapability> capabilities;
Error error = mHal->getDisplayCapabilities(display, &capabilities);
hidl_cb(error, capabilities);
return Void();

View File

@@ -115,7 +115,7 @@ class ComposerHal : public V2_2::hal::ComposerHal {
hidl_vec<uint64_t>& sampleComponent2,
hidl_vec<uint64_t>& sampleComponent3) = 0;
virtual Error getDisplayCapabilities(
Display display, hidl_vec<IComposerClient::DisplayCapability>* outCapabilities) = 0;
Display display, std::vector<IComposerClient::DisplayCapability>* outCapabilities) = 0;
virtual Error setLayerPerFrameMetadataBlobs(
Display display, Layer layer,
std::vector<IComposerClient::PerFrameMetadataBlob>& blobs) = 0;

View File

@@ -220,7 +220,8 @@ class HwcHalImpl : public V2_2::passthrough::detail::HwcHalImpl<Hal> {
}
Error getDisplayCapabilities(
Display display, hidl_vec<IComposerClient::DisplayCapability>* outCapabilities) override {
Display display,
std::vector<IComposerClient::DisplayCapability>* outCapabilities) override {
uint32_t count = 0;
int32_t error = mDispatch.getDisplayCapabilities(mDevice, display, &count, nullptr);
if (error != HWC2_ERROR_NONE) {
@@ -232,7 +233,7 @@ class HwcHalImpl : public V2_2::passthrough::detail::HwcHalImpl<Hal> {
reinterpret_cast<std::underlying_type<IComposerClient::DisplayCapability>::type*>(
outCapabilities->data()));
if (error != HWC2_ERROR_NONE) {
*outCapabilities = hidl_vec<IComposerClient::DisplayCapability>();
*outCapabilities = std::vector<IComposerClient::DisplayCapability>();
return static_cast<Error>(error);
}
return Error::NONE;
@@ -267,6 +268,19 @@ class HwcHalImpl : public V2_2::passthrough::detail::HwcHalImpl<Hal> {
Error getDisplayBrightnessSupport(Display display, bool* outSupport) {
if (!mDispatch.getDisplayBrightnessSupport) {
// Preemptively set to false.
*outSupport = false;
// Try to query from getDisplayCapabilities.
std::vector<IComposerClient::DisplayCapability> capabilities;
Error error = getDisplayCapabilities(display, &capabilities);
if (error != Error::NONE) {
// This function is not registered, always return UNSUPPORTED.
return Error::UNSUPPORTED;
}
*outSupport =
std::find(capabilities.begin(), capabilities.end(),
IComposerClient::DisplayCapability::BRIGHTNESS) != capabilities.end();
// This function is not registered, always return UNSUPPORTED.
return Error::UNSUPPORTED;
}
bool support = false;