Merge "Add traces of the size of HWUI shader cache in RAM" into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
b8b3c2d6f3
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user