diff options
author | 2022-05-06 14:05:13 +0000 | |
---|---|---|
committer | 2022-05-06 14:05:13 +0000 | |
commit | cae80977d78ca7cbebbf7cfb8070c4a4a9793c05 (patch) | |
tree | 10e93944c9029be7e62dfed83924856d9d1a137b | |
parent | b6f044c2b341bf882d1f0472b584af3a9249f16c (diff) | |
parent | d13b5729ee5e3905ca0edba82656e213744e6f04 (diff) |
Merge "Add traces of the size of HWUI shader cache in RAM" into tm-dev am: b8b3c2d6f3 am: d13b5729ee
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18149800
Change-Id: I39d7dbccd7fe4aa37e99805280e81b06418f2435
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | libs/hwui/pipeline/skia/ShaderCache.cpp | 6 | ||||
-rw-r--r-- | libs/hwui/pipeline/skia/ShaderCache.h | 9 | ||||
-rw-r--r-- | libs/hwui/tests/unit/ShaderCacheTests.cpp | 10 |
3 files changed, 18 insertions, 7 deletions
diff --git a/libs/hwui/pipeline/skia/ShaderCache.cpp b/libs/hwui/pipeline/skia/ShaderCache.cpp index e9f08e5f5f60..a55de95035a7 100644 --- a/libs/hwui/pipeline/skia/ShaderCache.cpp +++ b/libs/hwui/pipeline/skia/ShaderCache.cpp @@ -137,6 +137,8 @@ sk_sp<SkData> ShaderCache::load(const SkData& key) { free(valueBuffer); return nullptr; } + mNumShadersCachedInRam++; + ATRACE_FORMAT("HWUI RAM cache: %d shaders", mNumShadersCachedInRam); return SkData::MakeFromMalloc(valueBuffer, valueSize); } @@ -183,9 +185,11 @@ void ShaderCache::saveToDiskLocked() { mSavePending = false; } -void ShaderCache::store(const SkData& key, const SkData& data) { +void ShaderCache::store(const SkData& key, const SkData& data, const SkString& /*description*/) { ATRACE_NAME("ShaderCache::store"); std::lock_guard<std::mutex> lock(mMutex); + mNumShadersCachedInRam++; + ATRACE_FORMAT("HWUI RAM cache: %d shaders", mNumShadersCachedInRam); if (!mInitialized) { return; diff --git a/libs/hwui/pipeline/skia/ShaderCache.h b/libs/hwui/pipeline/skia/ShaderCache.h index dd57d428ba31..bc35fa5f9987 100644 --- a/libs/hwui/pipeline/skia/ShaderCache.h +++ b/libs/hwui/pipeline/skia/ShaderCache.h @@ -76,7 +76,7 @@ public: * "store" attempts to insert a new key/value blob pair into the cache. * This will be called by Skia after it compiled a new SKSL shader */ - void store(const SkData& key, const SkData& data) override; + void store(const SkData& key, const SkData& data, const SkString& description) override; /** * "onVkFrameFlushed" tries to store Vulkan pipeline cache state. @@ -213,6 +213,13 @@ private: */ static constexpr uint8_t sIDKey = 0; + /** + * Most of this class concerns persistent storage for shaders, but it's also + * interesting to keep track of how many shaders are stored in RAM. This + * class provides a convenient entry point for that. + */ + int mNumShadersCachedInRam = 0; + friend class ShaderCacheTestUtils; // used for unit testing }; diff --git a/libs/hwui/tests/unit/ShaderCacheTests.cpp b/libs/hwui/tests/unit/ShaderCacheTests.cpp index 105fea408736..576e9466d322 100644 --- a/libs/hwui/tests/unit/ShaderCacheTests.cpp +++ b/libs/hwui/tests/unit/ShaderCacheTests.cpp @@ -142,9 +142,9 @@ TEST(ShaderCacheTest, testWriteAndRead) { // write to the in-memory cache without storing on disk and verify we read the same values sk_sp<SkData> inVS; setShader(inVS, "sassas"); - ShaderCache::get().store(GrProgramDescTest(100), *inVS.get()); + ShaderCache::get().store(GrProgramDescTest(100), *inVS.get(), SkString()); setShader(inVS, "someVS"); - ShaderCache::get().store(GrProgramDescTest(432), *inVS.get()); + ShaderCache::get().store(GrProgramDescTest(432), *inVS.get(), SkString()); ASSERT_NE((outVS = ShaderCache::get().load(GrProgramDescTest(100))), sk_sp<SkData>()); ASSERT_TRUE(checkShader(outVS, "sassas")); ASSERT_NE((outVS = ShaderCache::get().load(GrProgramDescTest(432))), sk_sp<SkData>()); @@ -168,7 +168,7 @@ TEST(ShaderCacheTest, testWriteAndRead) { // change data, store to disk, read back again and verify data has been changed setShader(inVS, "ewData1"); - ShaderCache::get().store(GrProgramDescTest(432), *inVS.get()); + ShaderCache::get().store(GrProgramDescTest(432), *inVS.get(), SkString()); ShaderCacheTestUtils::terminate(ShaderCache::get(), true); ShaderCache::get().initShaderDiskCache(); ASSERT_NE((outVS2 = ShaderCache::get().load(GrProgramDescTest(432))), sk_sp<SkData>()); @@ -179,7 +179,7 @@ TEST(ShaderCacheTest, testWriteAndRead) { std::vector<uint8_t> dataBuffer(dataSize); genRandomData(dataBuffer); setShader(inVS, dataBuffer); - ShaderCache::get().store(GrProgramDescTest(432), *inVS.get()); + ShaderCache::get().store(GrProgramDescTest(432), *inVS.get(), SkString()); ShaderCacheTestUtils::terminate(ShaderCache::get(), true); ShaderCache::get().initShaderDiskCache(); ASSERT_NE((outVS2 = ShaderCache::get().load(GrProgramDescTest(432))), sk_sp<SkData>()); @@ -227,7 +227,7 @@ TEST(ShaderCacheTest, testCacheValidation) { setShader(data, dataBuffer); blob = std::make_pair(key, data); - ShaderCache::get().store(*key.get(), *data.get()); + ShaderCache::get().store(*key.get(), *data.get(), SkString()); } ShaderCacheTestUtils::terminate(ShaderCache::get(), true); |