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

Commit 1228a9ea authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "SF: Update capabilities for HWC virtual display" into main am: 4986afab

parents a7b307ad 4986afab
Loading
Loading
Loading
Loading
+30 −23
Original line number Original line Diff line number Diff line
@@ -79,6 +79,9 @@ Display::Display(android::Hwc2::Composer& composer,
                 DisplayType type)
                 DisplayType type)
      : mComposer(composer), mCapabilities(capabilities), mId(id), mType(type) {
      : mComposer(composer), mCapabilities(capabilities), mId(id), mType(type) {
    ALOGV("Created display %" PRIu64, id);
    ALOGV("Created display %" PRIu64, id);
    if (mType == hal::DisplayType::VIRTUAL) {
        loadDisplayCapabilities();
    }
}
}


Display::~Display() {
Display::~Display() {
@@ -499,29 +502,7 @@ Error Display::setPowerMode(PowerMode mode)
    auto intError = mComposer.setPowerMode(mId, intMode);
    auto intError = mComposer.setPowerMode(mId, intMode);


    if (mode == PowerMode::ON) {
    if (mode == PowerMode::ON) {
        std::call_once(mDisplayCapabilityQueryFlag, [this]() {
        loadDisplayCapabilities();
            std::vector<DisplayCapability> tmpCapabilities;
            auto error =
                    static_cast<Error>(mComposer.getDisplayCapabilities(mId, &tmpCapabilities));
            if (error == Error::NONE) {
                std::scoped_lock lock(mDisplayCapabilitiesMutex);
                mDisplayCapabilities.emplace();
                for (auto capability : tmpCapabilities) {
                    mDisplayCapabilities->emplace(capability);
                }
            } else if (error == Error::UNSUPPORTED) {
                std::scoped_lock lock(mDisplayCapabilitiesMutex);
                mDisplayCapabilities.emplace();
                if (mCapabilities.count(AidlCapability::SKIP_CLIENT_COLOR_TRANSFORM)) {
                    mDisplayCapabilities->emplace(DisplayCapability::SKIP_CLIENT_COLOR_TRANSFORM);
                }
                bool dozeSupport = false;
                error = static_cast<Error>(mComposer.getDozeSupport(mId, &dozeSupport));
                if (error == Error::NONE && dozeSupport) {
                    mDisplayCapabilities->emplace(DisplayCapability::DOZE);
                }
            }
        });
    }
    }


    return static_cast<Error>(intError);
    return static_cast<Error>(intError);
@@ -653,6 +634,32 @@ std::shared_ptr<HWC2::Layer> Display::getLayerById(HWLayerId id) const {
    auto it = mLayers.find(id);
    auto it = mLayers.find(id);
    return it != mLayers.end() ? it->second.lock() : nullptr;
    return it != mLayers.end() ? it->second.lock() : nullptr;
}
}

void Display::loadDisplayCapabilities() {
    std::call_once(mDisplayCapabilityQueryFlag, [this]() {
        std::vector<DisplayCapability> tmpCapabilities;
        auto error =
                static_cast<Error>(mComposer.getDisplayCapabilities(mId, &tmpCapabilities));
        if (error == Error::NONE) {
            std::scoped_lock lock(mDisplayCapabilitiesMutex);
            mDisplayCapabilities.emplace();
            for (auto capability : tmpCapabilities) {
                mDisplayCapabilities->emplace(capability);
            }
        } else if (error == Error::UNSUPPORTED) {
            std::scoped_lock lock(mDisplayCapabilitiesMutex);
            mDisplayCapabilities.emplace();
            if (mCapabilities.count(AidlCapability::SKIP_CLIENT_COLOR_TRANSFORM)) {
                mDisplayCapabilities->emplace(DisplayCapability::SKIP_CLIENT_COLOR_TRANSFORM);
            }
            bool dozeSupport = false;
            error = static_cast<Error>(mComposer.getDozeSupport(mId, &dozeSupport));
            if (error == Error::NONE && dozeSupport) {
                mDisplayCapabilities->emplace(DisplayCapability::DOZE);
            }
        }
    });
}
} // namespace impl
} // namespace impl


// Layer methods
// Layer methods
+1 −0
Original line number Original line Diff line number Diff line
@@ -278,6 +278,7 @@ public:
    hal::Error getPhysicalDisplayOrientation(Hwc2::AidlTransform* outTransform) const override;
    hal::Error getPhysicalDisplayOrientation(Hwc2::AidlTransform* outTransform) const override;


private:
private:
    void loadDisplayCapabilities();


    // This may fail (and return a null pointer) if no layer with this ID exists
    // This may fail (and return a null pointer) if no layer with this ID exists
    // on this display
    // on this display