diff options
| author | 2019-08-12 16:01:52 -0700 | |
|---|---|---|
| committer | 2019-08-12 16:01:52 -0700 | |
| commit | a0fb6c30cdbb64c387808d3c070ad5db2fe81c1b (patch) | |
| tree | 6e2bc2c1bfa41001ccc3dbb367995a2f6dcb978f /services/surfaceflinger/SurfaceFlinger.cpp | |
| parent | 04b07cf876b6dc30344980f576ad258c69c71f3c (diff) | |
| parent | 2778a9fcf33c8a9afa0c161a936faab70f60d4fd (diff) | |
Merge "[SurfaceFlinger] Callback to renderengine when erasing BLAST buffers" into qt-r1-dev am: 9939d091ec
am: 2778a9fcf3
Change-Id: I150aa5c7d08e7f5037f7886d0380d157f45c4534
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 21 | 
1 files changed, 16 insertions, 5 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index d829337d3f..2b92ccb25f 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -3843,6 +3843,7 @@ void SurfaceFlinger::applyTransactionState(const Vector<ComposerState>& states,      if (uncacheBuffer.isValid()) {          ClientCache::getInstance().erase(uncacheBuffer); +        getRenderEngine().unbindExternalTextureBuffer(uncacheBuffer.id);      }      // If a synchronous transaction is explicitly requested without any changes, force a transaction @@ -4197,12 +4198,18 @@ uint32_t SurfaceFlinger::setClientStateLocked(      bool bufferChanged = what & layer_state_t::eBufferChanged;      bool cacheIdChanged = what & layer_state_t::eCachedBufferChanged;      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); +    if (bufferChanged && cacheIdChanged && s.buffer != nullptr) {          buffer = s.buffer; +        bool success = ClientCache::getInstance().add(s.cachedBuffer, s.buffer); +        if (success) { +            getRenderEngine().cacheExternalTextureBuffer(s.buffer); +            success = ClientCache::getInstance() +                              .registerErasedRecipient(s.cachedBuffer, +                                                       wp<ClientCache::ErasedRecipient>(this)); +            if (!success) { +                getRenderEngine().unbindExternalTextureBuffer(s.buffer->getId()); +            } +        }      } else if (cacheIdChanged) {          buffer = ClientCache::getInstance().get(s.cachedBuffer);      } else if (bufferChanged) { @@ -6249,6 +6256,10 @@ sp<Layer> SurfaceFlinger::fromHandle(const sp<IBinder>& handle) {      return nullptr;  } +void SurfaceFlinger::bufferErased(const client_cache_t& clientCacheId) { +    getRenderEngine().unbindExternalTextureBuffer(clientCacheId.id); +} +  } // namespace android  #if defined(__gl_h_)  |