Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7e01d70 authored by Chia-I Wu's avatar Chia-I Wu
Browse files

surfaceflinger: do not propogate getPerFrameMetadataKeys errors

We don't want to burden the callers to handle the errors.  This also
silences

  E HWComposer: getSupportedPerFrameMetadata: getSupportedPerFrameMetadata failed for display 0: Unsupported (8)

on unsupported devices.

Test: no error logged
Change-Id: I05cb555a5405e330d22008f32a16e4c4b816d721
parent d0aff9d9
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -905,23 +905,25 @@ Error Composer::setLayerPerFrameMetadata(Display display, Layer layer,
    return Error::NONE;
}

Error Composer::getPerFrameMetadataKeys(
        Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) {
std::vector<IComposerClient::PerFrameMetadataKey> Composer::getPerFrameMetadataKeys(
        Display display) {
    std::vector<IComposerClient::PerFrameMetadataKey>  keys;
    if (!mClient_2_2) {
        return Error::UNSUPPORTED;
        return keys;
    }

    Error error = kDefaultError;
    mClient_2_2->getPerFrameMetadataKeys(display, [&](const auto& tmpError, const auto& tmpKeys) {
        error = tmpError;
        if (error != Error::NONE) {
            ALOGW("getPerFrameMetadataKeys failed with %d", tmpError);
            return;
        }

        *outKeys = tmpKeys;
        keys = tmpKeys;
    });

    return error;
    return keys;
}

Error Composer::getRenderIntents(Display display, ColorMode colorMode,
+4 −4
Original line number Diff line number Diff line
@@ -182,8 +182,8 @@ public:
    virtual Error setLayerPerFrameMetadata(
            Display display, Layer layer,
            const std::vector<IComposerClient::PerFrameMetadata>& perFrameMetadatas) = 0;
    virtual Error getPerFrameMetadataKeys(
            Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) = 0;
    virtual std::vector<IComposerClient::PerFrameMetadataKey> getPerFrameMetadataKeys(
            Display display) = 0;
    virtual Error getRenderIntents(Display display, ColorMode colorMode,
            std::vector<RenderIntent>* outRenderIntents) = 0;
    virtual Error getDataspaceSaturationMatrix(Dataspace dataspace, mat4* outMatrix) = 0;
@@ -380,8 +380,8 @@ public:
    Error setLayerPerFrameMetadata(
            Display display, Layer layer,
            const std::vector<IComposerClient::PerFrameMetadata>& perFrameMetadatas) override;
    Error getPerFrameMetadataKeys(
            Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) override;
    std::vector<IComposerClient::PerFrameMetadataKey> getPerFrameMetadataKeys(
            Display display) override;
    Error getRenderIntents(Display display, ColorMode colorMode,
            std::vector<RenderIntent>* outRenderIntents) override;
    Error getDataspaceSaturationMatrix(Dataspace dataspace, mat4* outMatrix) override;
+8 −12
Original line number Diff line number Diff line
@@ -409,21 +409,17 @@ Error Display::getColorModes(std::vector<ColorMode>* outModes) const
    return static_cast<Error>(intError);
}

Error Display::getSupportedPerFrameMetadata(int32_t* outSupportedPerFrameMetadata) const
int32_t Display::getSupportedPerFrameMetadata() const
{
    *outSupportedPerFrameMetadata = 0;
    std::vector<Hwc2::PerFrameMetadataKey> tmpKeys;
    auto intError = mComposer.getPerFrameMetadataKeys(mId, &tmpKeys);
    auto error = static_cast<Error>(intError);
    if (error != Error::None) {
        return error;
    }
    int32_t supportedPerFrameMetadata = 0;

    std::vector<Hwc2::PerFrameMetadataKey> tmpKeys = mComposer.getPerFrameMetadataKeys(mId);
    std::set<Hwc2::PerFrameMetadataKey> keys(tmpKeys.begin(), tmpKeys.end());

    // Check whether a specific metadata type is supported. A metadata type is considered
    // supported if and only if all required fields are supported.

    // SMPTE2086
    std::set<Hwc2::PerFrameMetadataKey> keys(tmpKeys.begin(), tmpKeys.end());
    if (hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::DISPLAY_RED_PRIMARY_X) &&
        hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::DISPLAY_RED_PRIMARY_Y) &&
        hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::DISPLAY_GREEN_PRIMARY_X) &&
@@ -434,15 +430,15 @@ Error Display::getSupportedPerFrameMetadata(int32_t* outSupportedPerFrameMetadat
        hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::WHITE_POINT_Y) &&
        hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::MAX_LUMINANCE) &&
        hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::MIN_LUMINANCE)) {
        *outSupportedPerFrameMetadata |= HdrMetadata::Type::SMPTE2086;
        supportedPerFrameMetadata |= HdrMetadata::Type::SMPTE2086;
    }
    // CTA861_3
    if (hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::MAX_CONTENT_LIGHT_LEVEL) &&
        hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::MAX_FRAME_AVERAGE_LIGHT_LEVEL)) {
        *outSupportedPerFrameMetadata |= HdrMetadata::Type::CTA861_3;
        supportedPerFrameMetadata |= HdrMetadata::Type::CTA861_3;
    }

    return Error::None;
    return supportedPerFrameMetadata;
}

Error Display::getRenderIntents(ColorMode colorMode,
+2 −4
Original line number Diff line number Diff line
@@ -218,10 +218,8 @@ public:
            std::unordered_map<Layer*, Composition>* outTypes);
    [[clang::warn_unused_result]] Error getColorModes(
            std::vector<android::ui::ColorMode>* outModes) const;
    // outSupportedPerFrameMetadata is an opaque bitmask to the callers
    // but contains HdrMetadata::Type::*.
    [[clang::warn_unused_result]] Error getSupportedPerFrameMetadata(
            int32_t* outSupportedPerFrameMetadata) const;
    // Returns a bitmask which contains HdrMetadata::Type::*.
    [[clang::warn_unused_result]] int32_t getSupportedPerFrameMetadata() const;
    [[clang::warn_unused_result]] Error getRenderIntents(
            android::ui::ColorMode colorMode,
            std::vector<android::ui::RenderIntent>* outRenderIntents) const;
+1 −6
Original line number Diff line number Diff line
@@ -745,12 +745,7 @@ status_t HWComposer::getHdrCapabilities(

int32_t HWComposer::getSupportedPerFrameMetadata(int32_t displayId) const {
    RETURN_IF_INVALID_DISPLAY(displayId, 0);

    int32_t supportedMetadata;
    auto error = mDisplayData[displayId].hwcDisplay->getSupportedPerFrameMetadata(
            &supportedMetadata);
    RETURN_IF_HWC_ERROR(error, displayId, 0);
    return supportedMetadata;
    return mDisplayData[displayId].hwcDisplay->getSupportedPerFrameMetadata();
}

std::vector<ui::RenderIntent> HWComposer::getRenderIntents(int32_t displayId,
Loading