aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
authorGravatar Khushal <khushalsagar@chromium.org>2018-05-22 14:30:52 -0700
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-05-22 22:01:35 +0000
commit2b8a0d1844ed236259284fbc2efe08dab0ed539f (patch)
treede59911418e1df76088f79d4945b7fbba4178bae /tests
parent5ec237d93361a32092935ba516af28cb9e406176 (diff)
fonts: Cleanup cache miss logging for font remoting.
Add hooks to notify the embedder if there is a cache miss during draw. Also remove the reference to SkStrikeClient from SkTypefaceProxy and SkScalerContextProxy, since the proxies can outlive the client. R=herb@google.com Bug: 829622 Change-Id: Ib2fd1b91ebd057856c1d4e717cf50b49f08c903b Reviewed-on: https://skia-review.googlesource.com/129402 Commit-Queue: Khusal Sagar <khushalsagar@chromium.org> Reviewed-by: Herb Derby <herb@google.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/SkRemoteGlyphCacheTest.cpp34
1 files changed, 32 insertions, 2 deletions
diff --git a/tests/SkRemoteGlyphCacheTest.cpp b/tests/SkRemoteGlyphCacheTest.cpp
index 5d4b9ff6f3..6a4a4d37cf 100644
--- a/tests/SkRemoteGlyphCacheTest.cpp
+++ b/tests/SkRemoteGlyphCacheTest.cpp
@@ -22,7 +22,7 @@
class DiscardableManager : public SkStrikeServer::DiscardableHandleManager,
public SkStrikeClient::DiscardableHandleManager {
public:
- DiscardableManager() = default;
+ DiscardableManager() { sk_bzero(&fCacheMissCount, sizeof(fCacheMissCount)); }
~DiscardableManager() override = default;
// Server implementation.
@@ -39,6 +39,7 @@ public:
// Client implementation.
bool deleteHandle(SkDiscardableHandleId id) override { return id <= fLastDeletedHandleId; }
+ void NotifyCacheMiss(SkStrikeClient::CacheMissType type) override { fCacheMissCount[type]++; }
void unlockAll() { fLockedHandles.reset(); }
void unlockAndDeleteAll() {
@@ -47,11 +48,13 @@ public:
}
const SkTHashSet<SkDiscardableHandleId>& lockedHandles() const { return fLockedHandles; }
SkDiscardableHandleId handleCount() { return fNextHandleId; }
+ int cacheMissCount(SkStrikeClient::CacheMissType type) { return fCacheMissCount[type]; }
private:
SkDiscardableHandleId fNextHandleId = 0u;
SkDiscardableHandleId fLastDeletedHandleId = 0u;
SkTHashSet<SkDiscardableHandleId> fLockedHandles;
+ int fCacheMissCount[SkStrikeClient::CacheMissType::kLast + 1u];
};
sk_sp<SkTextBlob> buildTextBlob(sk_sp<SkTypeface> tf, int glyphCount) {
@@ -114,7 +117,7 @@ DEF_TEST(SkRemoteGlyphCache_TypefaceSerialization, reporter) {
auto client_tf = client.deserializeTypeface(tf_data->data(), tf_data->size());
REPORTER_ASSERT(reporter, client_tf);
- REPORTER_ASSERT(reporter, SkTypefaceProxy::DownCast(client_tf.get())->remoteTypefaceID() ==
+ REPORTER_ASSERT(reporter, static_cast<SkTypefaceProxy*>(client_tf.get())->remoteTypefaceID() ==
server_tf->uniqueID());
}
@@ -349,4 +352,31 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextAsDFT, reporter, c
COMPARE_BLOBS(expected, actual, reporter);
SkStrikeCache::Validate();
}
+
+DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_CacheMissReporting, reporter, ctxInfo) {
+ sk_sp<DiscardableManager> discardableManager = sk_make_sp<DiscardableManager>();
+ SkStrikeServer server(discardableManager.get());
+ SkStrikeClient client(discardableManager);
+
+ auto serverTf = SkTypeface::MakeFromName("monospace", SkFontStyle());
+ auto tfData = server.serializeTypeface(serverTf.get());
+ auto clientTf = client.deserializeTypeface(tfData->data(), tfData->size());
+ REPORTER_ASSERT(reporter, clientTf);
+ int glyphCount = 10;
+ auto clientBlob = buildTextBlob(clientTf, glyphCount);
+
+ // Raster the client-side blob without the glyph data, we should get cache miss notifications.
+ SkPaint paint;
+ SkMatrix matrix = SkMatrix::I();
+ RasterBlob(clientBlob, 10, 10, paint, ctxInfo.grContext(), &matrix);
+ REPORTER_ASSERT(reporter,
+ discardableManager->cacheMissCount(SkStrikeClient::kFontMetrics) == 1);
+ REPORTER_ASSERT(reporter,
+ discardableManager->cacheMissCount(SkStrikeClient::kGlyphMetrics) == 10);
+
+ // There shouldn't be any image or path requests, since we mark the glyph as empty on a cache
+ // miss.
+ REPORTER_ASSERT(reporter, discardableManager->cacheMissCount(SkStrikeClient::kGlyphImage) == 0);
+ REPORTER_ASSERT(reporter, discardableManager->cacheMissCount(SkStrikeClient::kGlyphPath) == 0);
+}
#endif