diff options
author | Khushal <khushalsagar@chromium.org> | 2018-05-22 14:30:52 -0700 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-05-22 22:01:35 +0000 |
commit | 2b8a0d1844ed236259284fbc2efe08dab0ed539f (patch) | |
tree | de59911418e1df76088f79d4945b7fbba4178bae /tests | |
parent | 5ec237d93361a32092935ba516af28cb9e406176 (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.cpp | 34 |
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 |