diff options
| author | 2021-10-06 22:53:36 +0000 | |
|---|---|---|
| committer | 2021-10-06 22:53:36 +0000 | |
| commit | 097d2a50873100486d65a69cb1cbabf37fb3b188 (patch) | |
| tree | c2f19f92e4503b2de0afeebdd9bf7aeb1bb2e9c1 /services/surfaceflinger/ClientCache.cpp | |
| parent | cbfb18e134845deeace954bbba818acda48cb80f (diff) | |
| parent | adcb6a2733c1baf66e5ad72365965ab504f5f959 (diff) | |
Merge Android 12
Bug: 202323961
Merged-In: Ifb27b3eb12454fa96f07e6797745c697b4f831c4
Change-Id: I2a7f5931477fddb51564c2eabcdc96ce58888ce8
Diffstat (limited to 'services/surfaceflinger/ClientCache.cpp')
| -rw-r--r-- | services/surfaceflinger/ClientCache.cpp | 29 | 
1 files changed, 25 insertions, 4 deletions
diff --git a/services/surfaceflinger/ClientCache.cpp b/services/surfaceflinger/ClientCache.cpp index a5be01c75c..f310738423 100644 --- a/services/surfaceflinger/ClientCache.cpp +++ b/services/surfaceflinger/ClientCache.cpp @@ -25,6 +25,8 @@  namespace android { +using base::StringAppendF; +  ANDROID_SINGLETON_STATIC_INSTANCE(ClientCache);  ClientCache::ClientCache() : mDeathRecipient(new CacheDeathRecipient) {} @@ -46,7 +48,7 @@ bool ClientCache::getBuffer(const client_cache_t& cacheId,      auto bufItr = processBuffers.find(id);      if (bufItr == processBuffers.end()) { -        ALOGE("failed to get buffer, invalid buffer id"); +        ALOGV("failed to get buffer, invalid buffer id");          return false;      } @@ -100,7 +102,12 @@ bool ClientCache::add(const client_cache_t& cacheId, const sp<GraphicBuffer>& bu          return false;      } -    processBuffers[id].buffer = buffer; +    LOG_ALWAYS_FATAL_IF(mRenderEngine == nullptr, +                        "Attempted to build the ClientCache before a RenderEngine instance was " +                        "ready!"); +    processBuffers[id].buffer = std::make_shared< +            renderengine::ExternalTexture>(buffer, *mRenderEngine, +                                           renderengine::ExternalTexture::Usage::READABLE);      return true;  } @@ -130,7 +137,7 @@ void ClientCache::erase(const client_cache_t& cacheId) {      }  } -sp<GraphicBuffer> ClientCache::get(const client_cache_t& cacheId) { +std::shared_ptr<renderengine::ExternalTexture> ClientCache::get(const client_cache_t& cacheId) {      std::lock_guard lock(mMutex);      ClientCacheBuffer* buf = nullptr; @@ -148,7 +155,7 @@ bool ClientCache::registerErasedRecipient(const client_cache_t& cacheId,      ClientCacheBuffer* buf = nullptr;      if (!getBuffer(cacheId, &buf)) { -        ALOGE("failed to register erased recipient, could not retrieve buffer"); +        ALOGV("failed to register erased recipient, could not retrieve buffer");          return false;      }      buf->recipients.insert(recipient); @@ -203,4 +210,18 @@ void ClientCache::CacheDeathRecipient::binderDied(const wp<IBinder>& who) {      ClientCache::getInstance().removeProcess(who);  } +void ClientCache::dump(std::string& result) { +    std::lock_guard lock(mMutex); +    for (auto i : mBuffers) { +        const sp<IBinder>& cacheOwner = i.second.first; +        StringAppendF(&result," Cache owner: %p\n", cacheOwner.get()); +        auto &buffers = i.second.second; +        for (auto& [id, clientCacheBuffer] : buffers) { +            StringAppendF(&result, "\t ID: %d, Width/Height: %d,%d\n", (int)id, +                          (int)clientCacheBuffer.buffer->getBuffer()->getWidth(), +                          (int)clientCacheBuffer.buffer->getBuffer()->getHeight()); +        } +    } +} +  }; // namespace android  |