Loading services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayer.h +0 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,6 @@ public: std::vector<LayerFE::LayerSettings> getOverrideCompositionList() const override; void dump(std::string&) const override; virtual FloatRect calculateOutputSourceCrop() const; virtual Rect calculateOutputDisplayFrame() const; virtual uint32_t calculateOutputRelativeBufferTransform( Loading services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h +2 −0 Original line number Diff line number Diff line Loading @@ -94,6 +94,8 @@ struct OutputLayerCompositionState { Rect displayFrame = {}; ui::Dataspace dataspace{ui::Dataspace::UNKNOWN}; ProjectionSpace displaySpace; Region damageRegion = Region::INVALID_REGION; Region visibleRegion; } overrideInfo; /* Loading services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/CachedSet.h +4 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ public: const LayerState* getState() const { return mState; } const std::string& getName() const { return mState->getName(); } Rect getDisplayFrame() const { return mState->getDisplayFrame(); } const Region& getVisibleRegion() const { return mState->getVisibleRegion(); } const sp<GraphicBuffer>& getBuffer() const { return mState->getOutputLayer()->getLayerFE().getCompositionState()->buffer; } Loading @@ -63,6 +64,7 @@ public: size_t getLayerCount() const { return mLayers.size(); } const Layer& getFirstLayer() const { return mLayers[0]; } const Rect& getBounds() const { return mBounds; } const Region& getVisibleRegion() const { return mVisibleRegion; } size_t getAge() const { return mAge; } const sp<GraphicBuffer>& getBuffer() const { return mTexture.getBuffer(); } const sp<Fence>& getDrawFence() const { return mDrawFence; } Loading Loading @@ -94,6 +96,7 @@ public: boundingRegion.orSelf(mBounds); boundingRegion.orSelf(other.mBounds); mBounds = boundingRegion.getBounds(); mVisibleRegion.orSelf(other.mVisibleRegion); } void incrementAge() { ++mAge; } Loading @@ -109,6 +112,7 @@ private: std::chrono::steady_clock::time_point mLastUpdate = std::chrono::steady_clock::now(); std::vector<Layer> mLayers; Rect mBounds = Rect::EMPTY_RECT; Region mVisibleRegion; size_t mAge = 0; class Texture { Loading services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h +1 −0 Original line number Diff line number Diff line Loading @@ -225,6 +225,7 @@ public: int32_t getId() const { return mId.get(); } const std::string& getName() const { return mName.get(); } Rect getDisplayFrame() const { return mDisplayFrame.get(); } const Region& getVisibleRegion() const { return mVisibleRegion.get(); } hardware::graphics::composer::hal::Composition getCompositionType() const { return mCompositionType.get(); } Loading services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp +10 −5 Original line number Diff line number Diff line Loading @@ -355,7 +355,7 @@ void OutputLayer::writeOutputDependentGeometryStateToHWC( Rect displayFrame = outputDependentState.displayFrame; FloatRect sourceCrop = outputDependentState.sourceCrop; if (outputDependentState.overrideInfo.buffer != nullptr) { // adyabr if (outputDependentState.overrideInfo.buffer != nullptr) { displayFrame = outputDependentState.overrideInfo.displayFrame; sourceCrop = displayFrame.toFloatRect(); } Loading Loading @@ -429,8 +429,10 @@ void OutputLayer::writeOutputDependentPerFrameStateToHWC(HWC2::Layer* hwcLayer) // TODO(lpique): b/121291683 outputSpaceVisibleRegion is output-dependent geometry // state and should not change every frame. if (auto error = hwcLayer->setVisibleRegion(outputDependentState.outputSpaceVisibleRegion); error != hal::Error::NONE) { Region visibleRegion = outputDependentState.overrideInfo.buffer ? Region(outputDependentState.overrideInfo.visibleRegion) : outputDependentState.outputSpaceVisibleRegion; if (auto error = hwcLayer->setVisibleRegion(visibleRegion); error != hal::Error::NONE) { ALOGE("[%s] Failed to set visible region: %s (%d)", getLayerFE().getDebugName(), to_string(error).c_str(), static_cast<int32_t>(error)); outputDependentState.outputSpaceVisibleRegion.dump(LOG_TAG); Loading Loading @@ -459,8 +461,11 @@ void OutputLayer::writeOutputIndependentPerFrameStateToHWC( to_string(error).c_str(), static_cast<int32_t>(error)); } if (auto error = hwcLayer->setSurfaceDamage(outputIndependentState.surfaceDamage); error != hal::Error::NONE) { const Region& surfaceDamage = getState().overrideInfo.buffer ? getState().overrideInfo.damageRegion : outputIndependentState.surfaceDamage; if (auto error = hwcLayer->setSurfaceDamage(surfaceDamage); error != hal::Error::NONE) { ALOGE("[%s] Failed to set surface damage: %s (%d)", getLayerFE().getDebugName(), to_string(error).c_str(), static_cast<int32_t>(error)); outputIndependentState.surfaceDamage.dump(LOG_TAG); Loading Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayer.h +0 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,6 @@ public: std::vector<LayerFE::LayerSettings> getOverrideCompositionList() const override; void dump(std::string&) const override; virtual FloatRect calculateOutputSourceCrop() const; virtual Rect calculateOutputDisplayFrame() const; virtual uint32_t calculateOutputRelativeBufferTransform( Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h +2 −0 Original line number Diff line number Diff line Loading @@ -94,6 +94,8 @@ struct OutputLayerCompositionState { Rect displayFrame = {}; ui::Dataspace dataspace{ui::Dataspace::UNKNOWN}; ProjectionSpace displaySpace; Region damageRegion = Region::INVALID_REGION; Region visibleRegion; } overrideInfo; /* Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/CachedSet.h +4 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ public: const LayerState* getState() const { return mState; } const std::string& getName() const { return mState->getName(); } Rect getDisplayFrame() const { return mState->getDisplayFrame(); } const Region& getVisibleRegion() const { return mState->getVisibleRegion(); } const sp<GraphicBuffer>& getBuffer() const { return mState->getOutputLayer()->getLayerFE().getCompositionState()->buffer; } Loading @@ -63,6 +64,7 @@ public: size_t getLayerCount() const { return mLayers.size(); } const Layer& getFirstLayer() const { return mLayers[0]; } const Rect& getBounds() const { return mBounds; } const Region& getVisibleRegion() const { return mVisibleRegion; } size_t getAge() const { return mAge; } const sp<GraphicBuffer>& getBuffer() const { return mTexture.getBuffer(); } const sp<Fence>& getDrawFence() const { return mDrawFence; } Loading Loading @@ -94,6 +96,7 @@ public: boundingRegion.orSelf(mBounds); boundingRegion.orSelf(other.mBounds); mBounds = boundingRegion.getBounds(); mVisibleRegion.orSelf(other.mVisibleRegion); } void incrementAge() { ++mAge; } Loading @@ -109,6 +112,7 @@ private: std::chrono::steady_clock::time_point mLastUpdate = std::chrono::steady_clock::now(); std::vector<Layer> mLayers; Rect mBounds = Rect::EMPTY_RECT; Region mVisibleRegion; size_t mAge = 0; class Texture { Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h +1 −0 Original line number Diff line number Diff line Loading @@ -225,6 +225,7 @@ public: int32_t getId() const { return mId.get(); } const std::string& getName() const { return mName.get(); } Rect getDisplayFrame() const { return mDisplayFrame.get(); } const Region& getVisibleRegion() const { return mVisibleRegion.get(); } hardware::graphics::composer::hal::Composition getCompositionType() const { return mCompositionType.get(); } Loading
services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp +10 −5 Original line number Diff line number Diff line Loading @@ -355,7 +355,7 @@ void OutputLayer::writeOutputDependentGeometryStateToHWC( Rect displayFrame = outputDependentState.displayFrame; FloatRect sourceCrop = outputDependentState.sourceCrop; if (outputDependentState.overrideInfo.buffer != nullptr) { // adyabr if (outputDependentState.overrideInfo.buffer != nullptr) { displayFrame = outputDependentState.overrideInfo.displayFrame; sourceCrop = displayFrame.toFloatRect(); } Loading Loading @@ -429,8 +429,10 @@ void OutputLayer::writeOutputDependentPerFrameStateToHWC(HWC2::Layer* hwcLayer) // TODO(lpique): b/121291683 outputSpaceVisibleRegion is output-dependent geometry // state and should not change every frame. if (auto error = hwcLayer->setVisibleRegion(outputDependentState.outputSpaceVisibleRegion); error != hal::Error::NONE) { Region visibleRegion = outputDependentState.overrideInfo.buffer ? Region(outputDependentState.overrideInfo.visibleRegion) : outputDependentState.outputSpaceVisibleRegion; if (auto error = hwcLayer->setVisibleRegion(visibleRegion); error != hal::Error::NONE) { ALOGE("[%s] Failed to set visible region: %s (%d)", getLayerFE().getDebugName(), to_string(error).c_str(), static_cast<int32_t>(error)); outputDependentState.outputSpaceVisibleRegion.dump(LOG_TAG); Loading Loading @@ -459,8 +461,11 @@ void OutputLayer::writeOutputIndependentPerFrameStateToHWC( to_string(error).c_str(), static_cast<int32_t>(error)); } if (auto error = hwcLayer->setSurfaceDamage(outputIndependentState.surfaceDamage); error != hal::Error::NONE) { const Region& surfaceDamage = getState().overrideInfo.buffer ? getState().overrideInfo.damageRegion : outputIndependentState.surfaceDamage; if (auto error = hwcLayer->setSurfaceDamage(surfaceDamage); error != hal::Error::NONE) { ALOGE("[%s] Failed to set surface damage: %s (%d)", getLayerFE().getDebugName(), to_string(error).c_str(), static_cast<int32_t>(error)); outputIndependentState.surfaceDamage.dump(LOG_TAG); Loading