diff options
author | 2022-05-06 13:57:10 +0000 | |
---|---|---|
committer | 2022-05-06 13:57:10 +0000 | |
commit | b6f044c2b341bf882d1f0472b584af3a9249f16c (patch) | |
tree | 387000e08bcc5191a84bded42987b687b0855264 | |
parent | acb15660ab6a2ec4a03818a006d67ad9cd9f6097 (diff) | |
parent | 000e44171262a2585ea856d9c4e7f72fcd947908 (diff) |
Merge "Add tracepoints for monitoring HWUI's (persistent) ShaderCache" into tm-dev am: 78020a0196 am: 000e441712
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18149799
Change-Id: I08646baa731ca578e7c13f9f35b137a36b612cb5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | libs/hwui/pipeline/skia/ShaderCache.cpp | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/libs/hwui/pipeline/skia/ShaderCache.cpp b/libs/hwui/pipeline/skia/ShaderCache.cpp index ef3f1ca3c41d..e9f08e5f5f60 100644 --- a/libs/hwui/pipeline/skia/ShaderCache.cpp +++ b/libs/hwui/pipeline/skia/ShaderCache.cpp @@ -140,12 +140,43 @@ sk_sp<SkData> ShaderCache::load(const SkData& key) { return SkData::MakeFromMalloc(valueBuffer, valueSize); } +namespace { +// Helper for BlobCache::set to trace the result. +void set(BlobCache* cache, const void* key, size_t keySize, const void* value, size_t valueSize) { + switch (cache->set(key, keySize, value, valueSize)) { + case BlobCache::InsertResult::kInserted: + // This is what we expect/hope. It means the cache is large enough. + return; + case BlobCache::InsertResult::kDidClean: { + ATRACE_FORMAT("ShaderCache: evicted an entry to fit {key: %lu value %lu}!", keySize, + valueSize); + return; + } + case BlobCache::InsertResult::kNotEnoughSpace: { + ATRACE_FORMAT("ShaderCache: could not fit {key: %lu value %lu}!", keySize, valueSize); + return; + } + case BlobCache::InsertResult::kInvalidValueSize: + case BlobCache::InsertResult::kInvalidKeySize: { + ATRACE_FORMAT("ShaderCache: invalid size {key: %lu value %lu}!", keySize, valueSize); + return; + } + case BlobCache::InsertResult::kKeyTooBig: + case BlobCache::InsertResult::kValueTooBig: + case BlobCache::InsertResult::kCombinedTooBig: { + ATRACE_FORMAT("ShaderCache: entry too big: {key: %lu value %lu}!", keySize, valueSize); + return; + } + } +} +} // namespace + void ShaderCache::saveToDiskLocked() { ATRACE_NAME("ShaderCache::saveToDiskLocked"); if (mInitialized && mBlobCache && mSavePending) { if (mIDHash.size()) { auto key = sIDKey; - mBlobCache->set(&key, sizeof(key), mIDHash.data(), mIDHash.size()); + set(mBlobCache.get(), &key, sizeof(key), mIDHash.data(), mIDHash.size()); } mBlobCache->writeToFile(); } @@ -188,7 +219,7 @@ void ShaderCache::store(const SkData& key, const SkData& data) { mNewPipelineCacheSize = -1; mTryToStorePipelineCache = true; } - bc->set(key.data(), keySize, value, valueSize); + set(bc, key.data(), keySize, value, valueSize); if (!mSavePending && mDeferredSaveDelay > 0) { mSavePending = true; |