Merge "Merge "Add traces of the size of HWUI shader cache in RAM" into tm-dev am: b8b3c2d6f3 am: 9719bb8970 am: a9559097c0" into tm-qpr-dev-plus-aosp

This commit is contained in:
Automerger Merge Worker
2022-05-06 15:58:18 +00:00
committed by Android (Google) Code Review
3 changed files with 18 additions and 7 deletions

View File

@@ -136,6 +136,8 @@ sk_sp<SkData> ShaderCache::load(const SkData& key) {
free(valueBuffer); free(valueBuffer);
return nullptr; return nullptr;
} }
mNumShadersCachedInRam++;
ATRACE_FORMAT("HWUI RAM cache: %d shaders", mNumShadersCachedInRam);
return SkData::MakeFromMalloc(valueBuffer, valueSize); return SkData::MakeFromMalloc(valueBuffer, valueSize);
} }
@@ -182,9 +184,11 @@ void ShaderCache::saveToDiskLocked() {
mSavePending = false; 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"); ATRACE_NAME("ShaderCache::store");
std::lock_guard<std::mutex> lock(mMutex); std::lock_guard<std::mutex> lock(mMutex);
mNumShadersCachedInRam++;
ATRACE_FORMAT("HWUI RAM cache: %d shaders", mNumShadersCachedInRam);
if (!mInitialized) { if (!mInitialized) {
return; return;

View File

@@ -73,7 +73,7 @@ public:
* "store" attempts to insert a new key/value blob pair into the cache. * "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 * 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. * "onVkFrameFlushed" tries to store Vulkan pipeline cache state.
@@ -210,6 +210,13 @@ private:
*/ */
static constexpr uint8_t sIDKey = 0; 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 friend class ShaderCacheTestUtils; // used for unit testing
}; };

View File

@@ -140,9 +140,9 @@ TEST(ShaderCacheTest, testWriteAndRead) {
// write to the in-memory cache without storing on disk and verify we read the same values // write to the in-memory cache without storing on disk and verify we read the same values
sk_sp<SkData> inVS; sk_sp<SkData> inVS;
setShader(inVS, "sassas"); setShader(inVS, "sassas");
ShaderCache::get().store(GrProgramDescTest(100), *inVS.get()); ShaderCache::get().store(GrProgramDescTest(100), *inVS.get(), SkString());
setShader(inVS, "someVS"); 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_NE((outVS = ShaderCache::get().load(GrProgramDescTest(100))), sk_sp<SkData>());
ASSERT_TRUE(checkShader(outVS, "sassas")); ASSERT_TRUE(checkShader(outVS, "sassas"));
ASSERT_NE((outVS = ShaderCache::get().load(GrProgramDescTest(432))), sk_sp<SkData>()); ASSERT_NE((outVS = ShaderCache::get().load(GrProgramDescTest(432))), sk_sp<SkData>());
@@ -166,7 +166,7 @@ TEST(ShaderCacheTest, testWriteAndRead) {
// change data, store to disk, read back again and verify data has been changed // change data, store to disk, read back again and verify data has been changed
setShader(inVS, "ewData1"); setShader(inVS, "ewData1");
ShaderCache::get().store(GrProgramDescTest(432), *inVS.get()); ShaderCache::get().store(GrProgramDescTest(432), *inVS.get(), SkString());
ShaderCacheTestUtils::terminate(ShaderCache::get(), true); ShaderCacheTestUtils::terminate(ShaderCache::get(), true);
ShaderCache::get().initShaderDiskCache(); ShaderCache::get().initShaderDiskCache();
ASSERT_NE((outVS2 = ShaderCache::get().load(GrProgramDescTest(432))), sk_sp<SkData>()); ASSERT_NE((outVS2 = ShaderCache::get().load(GrProgramDescTest(432))), sk_sp<SkData>());
@@ -177,7 +177,7 @@ TEST(ShaderCacheTest, testWriteAndRead) {
std::vector<uint8_t> dataBuffer(dataSize); std::vector<uint8_t> dataBuffer(dataSize);
genRandomData(dataBuffer); genRandomData(dataBuffer);
setShader(inVS, dataBuffer); setShader(inVS, dataBuffer);
ShaderCache::get().store(GrProgramDescTest(432), *inVS.get()); ShaderCache::get().store(GrProgramDescTest(432), *inVS.get(), SkString());
ShaderCacheTestUtils::terminate(ShaderCache::get(), true); ShaderCacheTestUtils::terminate(ShaderCache::get(), true);
ShaderCache::get().initShaderDiskCache(); ShaderCache::get().initShaderDiskCache();
ASSERT_NE((outVS2 = ShaderCache::get().load(GrProgramDescTest(432))), sk_sp<SkData>()); ASSERT_NE((outVS2 = ShaderCache::get().load(GrProgramDescTest(432))), sk_sp<SkData>());
@@ -225,7 +225,7 @@ TEST(ShaderCacheTest, testCacheValidation) {
setShader(data, dataBuffer); setShader(data, dataBuffer);
blob = std::make_pair(key, data); 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); ShaderCacheTestUtils::terminate(ShaderCache::get(), true);