Loading libs/hwui/pipeline/skia/ShaderCache.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -136,6 +136,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); } Loading Loading @@ -182,9 +184,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; Loading libs/hwui/pipeline/skia/ShaderCache.h +8 −1 Original line number Diff line number Diff line Loading @@ -73,7 +73,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. Loading Loading @@ -210,6 +210,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 }; Loading libs/hwui/tests/unit/ShaderCacheTests.cpp +5 −5 Original line number Diff line number Diff line Loading @@ -140,9 +140,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>()); Loading @@ -166,7 +166,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>()); Loading @@ -177,7 +177,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>()); Loading Loading @@ -225,7 +225,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); Loading Loading
libs/hwui/pipeline/skia/ShaderCache.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -136,6 +136,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); } Loading Loading @@ -182,9 +184,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; Loading
libs/hwui/pipeline/skia/ShaderCache.h +8 −1 Original line number Diff line number Diff line Loading @@ -73,7 +73,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. Loading Loading @@ -210,6 +210,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 }; Loading
libs/hwui/tests/unit/ShaderCacheTests.cpp +5 −5 Original line number Diff line number Diff line Loading @@ -140,9 +140,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>()); Loading @@ -166,7 +166,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>()); Loading @@ -177,7 +177,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>()); Loading Loading @@ -225,7 +225,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); Loading