Loading services/surfaceflinger/BufferStateLayer.cpp +4 −11 Original line number Diff line number Diff line Loading @@ -50,12 +50,6 @@ BufferStateLayer::BufferStateLayer(const LayerCreationArgs& args) mOverrideScalingMode = NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW; mCurrentState.dataspace = ui::Dataspace::V0_SRGB; } BufferStateLayer::~BufferStateLayer() { if (mActiveBuffer != nullptr) { auto& engine(mFlinger->getRenderEngine()); engine.unbindExternalTextureBuffer(mActiveBuffer->getId()); } } // ----------------------------------------------------------------------- // Interface implementation for Layer Loading Loading @@ -571,11 +565,6 @@ status_t BufferStateLayer::updateActiveBuffer() { return BAD_VALUE; } if (mActiveBuffer != nullptr) { // todo: get this to work with BufferStateLayerCache auto& engine(mFlinger->getRenderEngine()); engine.unbindExternalTextureBuffer(mActiveBuffer->getId()); } mActiveBuffer = s.buffer; mActiveBufferFence = s.acquireFence; auto& layerCompositionState = getCompositionLayer()->editState().frontEnd; Loading Loading @@ -621,6 +610,10 @@ void BufferStateLayer::onFirstRef() { } } void BufferStateLayer::bufferErased(const client_cache_t& clientCacheId) { mFlinger->getRenderEngine().unbindExternalTextureBuffer(clientCacheId.id); } void BufferStateLayer::HwcSlotGenerator::bufferErased(const client_cache_t& clientCacheId) { std::lock_guard lock(mMutex); if (!clientCacheId.isValid()) { Loading services/surfaceflinger/BufferStateLayer.h +3 −1 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ class SlotGenerationTest; class BufferStateLayer : public BufferLayer { public: explicit BufferStateLayer(const LayerCreationArgs&); ~BufferStateLayer() override; // ----------------------------------------------------------------------- // Interface implementation for Layer Loading Loading @@ -103,6 +102,9 @@ public: bool fenceHasSignaled() const override; bool framePresentTimeIsCurrent() const override; // Inherit from ClientCache::ErasedRecipient void bufferErased(const client_cache_t& clientCacheId) override; private: nsecs_t getDesiredPresentTime() override; std::shared_ptr<FenceTime> getCurrentFenceTime() const override; Loading services/surfaceflinger/Layer.h +9 −7 Original line number Diff line number Diff line Loading @@ -17,8 +17,6 @@ #ifndef ANDROID_LAYER_H #define ANDROID_LAYER_H #include <sys/types.h> #include <compositionengine/LayerFE.h> #include <gui/BufferQueue.h> #include <gui/ISurfaceComposerClient.h> Loading @@ -28,6 +26,7 @@ #include <math/vec4.h> #include <renderengine/Mesh.h> #include <renderengine/Texture.h> #include <sys/types.h> #include <ui/FloatRect.h> #include <ui/FrameStats.h> #include <ui/GraphicBuffer.h> Loading @@ -44,16 +43,16 @@ #include <vector> #include "Client.h" #include "ClientCache.h" #include "DisplayHardware/ComposerHal.h" #include "DisplayHardware/HWComposer.h" #include "FrameTracker.h" #include "LayerVector.h" #include "MonitoredProducer.h" #include "RenderArea.h" #include "SurfaceFlinger.h" #include "TransactionCompletedThread.h" #include "DisplayHardware/ComposerHal.h" #include "DisplayHardware/HWComposer.h" #include "RenderArea.h" using namespace android::surfaceflinger; namespace android { Loading Loading @@ -94,7 +93,7 @@ struct LayerCreationArgs { LayerMetadata metadata; }; class Layer : public virtual compositionengine::LayerFE { class Layer : public virtual compositionengine::LayerFE, public ClientCache::ErasedRecipient { static std::atomic<int32_t> sSequence; public: Loading Loading @@ -701,6 +700,9 @@ public: compositionengine::OutputLayer* findOutputLayerForDisplay( const sp<const DisplayDevice>& display) const; // Inherit from ClientCache::ErasedRecipient void bufferErased(const client_cache_t& /*clientCacheId*/) override {} protected: // constant sp<SurfaceFlinger> mFlinger; Loading services/surfaceflinger/SurfaceFlinger.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -4148,6 +4148,9 @@ uint32_t SurfaceFlinger::setClientStateLocked( sp<GraphicBuffer> buffer; if (bufferChanged && cacheIdChanged) { ClientCache::getInstance().add(s.cachedBuffer, s.buffer); ClientCache::getInstance().registerErasedRecipient(s.cachedBuffer, wp<ClientCache::ErasedRecipient>(layer)); getRenderEngine().cacheExternalTextureBuffer(s.buffer); buffer = s.buffer; } else if (cacheIdChanged) { buffer = ClientCache::getInstance().get(s.cachedBuffer); Loading Loading
services/surfaceflinger/BufferStateLayer.cpp +4 −11 Original line number Diff line number Diff line Loading @@ -50,12 +50,6 @@ BufferStateLayer::BufferStateLayer(const LayerCreationArgs& args) mOverrideScalingMode = NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW; mCurrentState.dataspace = ui::Dataspace::V0_SRGB; } BufferStateLayer::~BufferStateLayer() { if (mActiveBuffer != nullptr) { auto& engine(mFlinger->getRenderEngine()); engine.unbindExternalTextureBuffer(mActiveBuffer->getId()); } } // ----------------------------------------------------------------------- // Interface implementation for Layer Loading Loading @@ -571,11 +565,6 @@ status_t BufferStateLayer::updateActiveBuffer() { return BAD_VALUE; } if (mActiveBuffer != nullptr) { // todo: get this to work with BufferStateLayerCache auto& engine(mFlinger->getRenderEngine()); engine.unbindExternalTextureBuffer(mActiveBuffer->getId()); } mActiveBuffer = s.buffer; mActiveBufferFence = s.acquireFence; auto& layerCompositionState = getCompositionLayer()->editState().frontEnd; Loading Loading @@ -621,6 +610,10 @@ void BufferStateLayer::onFirstRef() { } } void BufferStateLayer::bufferErased(const client_cache_t& clientCacheId) { mFlinger->getRenderEngine().unbindExternalTextureBuffer(clientCacheId.id); } void BufferStateLayer::HwcSlotGenerator::bufferErased(const client_cache_t& clientCacheId) { std::lock_guard lock(mMutex); if (!clientCacheId.isValid()) { Loading
services/surfaceflinger/BufferStateLayer.h +3 −1 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ class SlotGenerationTest; class BufferStateLayer : public BufferLayer { public: explicit BufferStateLayer(const LayerCreationArgs&); ~BufferStateLayer() override; // ----------------------------------------------------------------------- // Interface implementation for Layer Loading Loading @@ -103,6 +102,9 @@ public: bool fenceHasSignaled() const override; bool framePresentTimeIsCurrent() const override; // Inherit from ClientCache::ErasedRecipient void bufferErased(const client_cache_t& clientCacheId) override; private: nsecs_t getDesiredPresentTime() override; std::shared_ptr<FenceTime> getCurrentFenceTime() const override; Loading
services/surfaceflinger/Layer.h +9 −7 Original line number Diff line number Diff line Loading @@ -17,8 +17,6 @@ #ifndef ANDROID_LAYER_H #define ANDROID_LAYER_H #include <sys/types.h> #include <compositionengine/LayerFE.h> #include <gui/BufferQueue.h> #include <gui/ISurfaceComposerClient.h> Loading @@ -28,6 +26,7 @@ #include <math/vec4.h> #include <renderengine/Mesh.h> #include <renderengine/Texture.h> #include <sys/types.h> #include <ui/FloatRect.h> #include <ui/FrameStats.h> #include <ui/GraphicBuffer.h> Loading @@ -44,16 +43,16 @@ #include <vector> #include "Client.h" #include "ClientCache.h" #include "DisplayHardware/ComposerHal.h" #include "DisplayHardware/HWComposer.h" #include "FrameTracker.h" #include "LayerVector.h" #include "MonitoredProducer.h" #include "RenderArea.h" #include "SurfaceFlinger.h" #include "TransactionCompletedThread.h" #include "DisplayHardware/ComposerHal.h" #include "DisplayHardware/HWComposer.h" #include "RenderArea.h" using namespace android::surfaceflinger; namespace android { Loading Loading @@ -94,7 +93,7 @@ struct LayerCreationArgs { LayerMetadata metadata; }; class Layer : public virtual compositionengine::LayerFE { class Layer : public virtual compositionengine::LayerFE, public ClientCache::ErasedRecipient { static std::atomic<int32_t> sSequence; public: Loading Loading @@ -701,6 +700,9 @@ public: compositionengine::OutputLayer* findOutputLayerForDisplay( const sp<const DisplayDevice>& display) const; // Inherit from ClientCache::ErasedRecipient void bufferErased(const client_cache_t& /*clientCacheId*/) override {} protected: // constant sp<SurfaceFlinger> mFlinger; Loading
services/surfaceflinger/SurfaceFlinger.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -4148,6 +4148,9 @@ uint32_t SurfaceFlinger::setClientStateLocked( sp<GraphicBuffer> buffer; if (bufferChanged && cacheIdChanged) { ClientCache::getInstance().add(s.cachedBuffer, s.buffer); ClientCache::getInstance().registerErasedRecipient(s.cachedBuffer, wp<ClientCache::ErasedRecipient>(layer)); getRenderEngine().cacheExternalTextureBuffer(s.buffer); buffer = s.buffer; } else if (cacheIdChanged) { buffer = ClientCache::getInstance().get(s.cachedBuffer); Loading