Loading services/surfaceflinger/DisplayHardware/HWC2.cpp +30 −23 Original line number Diff line number Diff line Loading @@ -78,6 +78,9 @@ Display::Display(android::Hwc2::Composer& composer, DisplayType type) : mComposer(composer), mCapabilities(capabilities), mId(id), mType(type) { ALOGV("Created display %" PRIu64, id); if (mType == hal::DisplayType::VIRTUAL) { loadDisplayCapabilities(); } } Display::~Display() { Loading Loading @@ -482,29 +485,7 @@ Error Display::setPowerMode(PowerMode mode) auto intError = mComposer.setPowerMode(mId, intMode); if (mode == PowerMode::ON) { 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); } } }); loadDisplayCapabilities(); } return static_cast<Error>(intError); Loading Loading @@ -636,6 +617,32 @@ std::shared_ptr<HWC2::Layer> Display::getLayerById(HWLayerId id) const { auto it = mLayers.find(id); 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 // Layer methods Loading services/surfaceflinger/DisplayHardware/HWC2.h +1 −0 Original line number Diff line number Diff line Loading @@ -276,6 +276,7 @@ public: hal::Error getPhysicalDisplayOrientation(Hwc2::AidlTransform* outTransform) const override; private: void loadDisplayCapabilities(); // This may fail (and return a null pointer) if no layer with this ID exists // on this display Loading Loading
services/surfaceflinger/DisplayHardware/HWC2.cpp +30 −23 Original line number Diff line number Diff line Loading @@ -78,6 +78,9 @@ Display::Display(android::Hwc2::Composer& composer, DisplayType type) : mComposer(composer), mCapabilities(capabilities), mId(id), mType(type) { ALOGV("Created display %" PRIu64, id); if (mType == hal::DisplayType::VIRTUAL) { loadDisplayCapabilities(); } } Display::~Display() { Loading Loading @@ -482,29 +485,7 @@ Error Display::setPowerMode(PowerMode mode) auto intError = mComposer.setPowerMode(mId, intMode); if (mode == PowerMode::ON) { 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); } } }); loadDisplayCapabilities(); } return static_cast<Error>(intError); Loading Loading @@ -636,6 +617,32 @@ std::shared_ptr<HWC2::Layer> Display::getLayerById(HWLayerId id) const { auto it = mLayers.find(id); 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 // Layer methods Loading
services/surfaceflinger/DisplayHardware/HWC2.h +1 −0 Original line number Diff line number Diff line Loading @@ -276,6 +276,7 @@ public: hal::Error getPhysicalDisplayOrientation(Hwc2::AidlTransform* outTransform) const override; private: void loadDisplayCapabilities(); // This may fail (and return a null pointer) if no layer with this ID exists // on this display Loading