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

Commit 0dfa358c authored by Ryan Prichard's avatar Ryan Prichard
Browse files

[sf] HdrOutputControlTest: fix strategy arguments

The code was previously passing an
aidl::[...]::common::HdrConversionStrategy* argument to
gui::ISurfaceComposer::setHdrConversionStrategy, which accepts a
const gui::HdrConversionStrategy& parameter. Converting between these
two kinds of HdrConversionStrategy is laborious -- see
SurfaceFlinger::setHdrConversionStrategy.

This code was previously avoiding the conversion difficulty by passing
a pointer to HdrConversionStrategy, which is wrong because the function
actually accepts a const reference. It worked, though, because
gui::HdrConversionStrategy's _value has type:

    std::variant<bool, ::std::vector<int32_t>, int32_t>

... and aidl::[...]::common::HdrConversionStrategy* can be coerced to
bool. The pointer is always non-nullptr, so each
sf->setHdrConversionStrategy was actually passing a {passthrough==true}
strategy.

The C++ standard tightened the rules around variant conversion
(P0608R3, P1957R2), and after upgrading libc++, this code no longer
compiles. Fix the compile error by using gui::HdrConversionStrategy for
the type of the strategy vector elements.

Bug: 175635923
Test: m MODULES-IN-frameworks-native-services-surfaceflinger
Change-Id: I820ac945113da0317d0eaa44f581fd6ab1b61645
parent ec8cc07d
Loading
Loading
Loading
Loading
+7 −11
Original line number Diff line number Diff line
@@ -26,8 +26,6 @@

namespace android {

using aidl::android::hardware::graphics::common::HdrConversionCapability;
using aidl::android::hardware::graphics::common::HdrConversionStrategy;
using GuiHdrConversionStrategyTag = gui::HdrConversionStrategy::Tag;
using gui::aidl_utils::statusTFromBinderStatus;

@@ -66,17 +64,15 @@ TEST(HdrOutputControlTest, testSetHdrConversionStrategy) {
            sf->getHdrOutputConversionSupport(&hdrOutputConversionSupport);
    ASSERT_EQ(NO_ERROR, statusTFromBinderStatus(getSupportStatus));

    std::vector<HdrConversionStrategy> strategies =
            {HdrConversionStrategy(std::in_place_index<static_cast<size_t>(
                                           GuiHdrConversionStrategyTag::passthrough)>),
             HdrConversionStrategy(std::in_place_index<static_cast<size_t>(
                                           GuiHdrConversionStrategyTag::autoAllowedHdrTypes)>),
             HdrConversionStrategy(std::in_place_index<static_cast<size_t>(
                                           GuiHdrConversionStrategyTag::forceHdrConversion)>)};
    std::vector<gui::HdrConversionStrategy> strategies = {
            gui::HdrConversionStrategy::make<GuiHdrConversionStrategyTag::passthrough>(),
            gui::HdrConversionStrategy::make<GuiHdrConversionStrategyTag::autoAllowedHdrTypes>(),
            gui::HdrConversionStrategy::make<GuiHdrConversionStrategyTag::forceHdrConversion>(),
    };
    int32_t outPreferredHdrOutputType = 0;

    for (HdrConversionStrategy strategy : strategies) {
        binder::Status status = sf->setHdrConversionStrategy(&strategy, &outPreferredHdrOutputType);
    for (const gui::HdrConversionStrategy& strategy : strategies) {
        binder::Status status = sf->setHdrConversionStrategy(strategy, &outPreferredHdrOutputType);

        if (hdrOutputConversionSupport) {
            ASSERT_EQ(NO_ERROR, statusTFromBinderStatus(status));