diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/GlyphRunTest.cpp | 4 | ||||
-rw-r--r-- | tests/SkRemoteGlyphCacheTest.cpp | 46 |
2 files changed, 46 insertions, 4 deletions
diff --git a/tests/GlyphRunTest.cpp b/tests/GlyphRunTest.cpp index cd2a221719..8107f2075c 100644 --- a/tests/GlyphRunTest.cpp +++ b/tests/GlyphRunTest.cpp @@ -75,7 +75,7 @@ DEF_TEST(GlyphRunBlob, reporter) { paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); SkGlyphRunBuilder runBuilder; - runBuilder.prepareTextBlob(font, *blob, SkPoint::Make(0, 0)); + runBuilder.prepareTextBlob(font, *blob, SkPoint::Make(0, 0), nullptr); auto runList = runBuilder.useGlyphRunList(); @@ -96,4 +96,4 @@ DEF_TEST(GlyphRunBlob, reporter) { runIndex += 1; } -}
\ No newline at end of file +} diff --git a/tests/SkRemoteGlyphCacheTest.cpp b/tests/SkRemoteGlyphCacheTest.cpp index 4a7bd86dc0..6986a7bb03 100644 --- a/tests/SkRemoteGlyphCacheTest.cpp +++ b/tests/SkRemoteGlyphCacheTest.cpp @@ -69,6 +69,8 @@ sk_sp<SkTextBlob> buildTextBlob(sk_sp<SkTypeface> tf, int glyphCount) { font.setStyle(SkPaint::kFill_Style); font.setHinting(SkPaint::kNormal_Hinting); font.setTextSize(1u); + font.setAntiAlias(true); + font.setSubpixelText(true); SkTextBlobBuilder builder; SkRect bounds = SkRect::MakeWH(10, 10); @@ -99,12 +101,13 @@ SkTextBlobCacheDiffCanvas::Settings MakeSettings(GrContext* context) { } SkBitmap RasterBlob(sk_sp<SkTextBlob> blob, int width, int height, const SkPaint& paint, - GrContext* context, const SkMatrix* matrix = nullptr) { + GrContext* context, const SkMatrix* matrix = nullptr, + SkScalar x = 0) { const SkImageInfo info = SkImageInfo::Make(width, height, kN32_SkColorType, kPremul_SkAlphaType); auto surface = SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, info); if (matrix) surface->getCanvas()->concat(*matrix); - surface->getCanvas()->drawTextBlob(blob.get(), 0u, 0u, paint); + surface->getCanvas()->drawTextBlob(blob.get(), x, 0, paint); SkBitmap bitmap; bitmap.allocN32Pixels(width, height); surface->readPixels(bitmap, 0, 0); @@ -332,6 +335,45 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextAsPath, reporter, discardableManager->unlockAndDeleteAll(); } +DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextXY, reporter, ctxInfo) { + sk_sp<DiscardableManager> discardableManager = sk_make_sp<DiscardableManager>(); + SkStrikeServer server(discardableManager.get()); + SkStrikeClient client(discardableManager, false); + SkPaint paint; + paint.setAntiAlias(true); + paint.setSubpixelText(true); + paint.setLCDRenderText(true); + + // Server. + auto serverTf = SkTypeface::MakeFromName("monospace", SkFontStyle()); + auto serverTfData = server.serializeTypeface(serverTf.get()); + + int glyphCount = 10; + auto serverBlob = buildTextBlob(serverTf, glyphCount); + const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); + SkTextBlobCacheDiffCanvas cache_diff_canvas(10, 10, SkMatrix::I(), props, &server, + MakeSettings(ctxInfo.grContext())); + cache_diff_canvas.drawTextBlob(serverBlob.get(), 0.5, 0, paint); + + std::vector<uint8_t> serverStrikeData; + server.writeStrikeData(&serverStrikeData); + + // Client. + auto clientTf = client.deserializeTypeface(serverTfData->data(), serverTfData->size()); + REPORTER_ASSERT(reporter, + client.readStrikeData(serverStrikeData.data(), serverStrikeData.size())); + auto clientBlob = buildTextBlob(clientTf, glyphCount); + + SkBitmap expected = RasterBlob(serverBlob, 10, 10, paint, ctxInfo.grContext(), nullptr, 0.5); + SkBitmap actual = RasterBlob(clientBlob, 10, 10, paint, ctxInfo.grContext(), nullptr, 0.5); + COMPARE_BLOBS(expected, actual, reporter); + REPORTER_ASSERT(reporter, !discardableManager->hasCacheMiss()); + SkStrikeCache::ValidateGlyphCacheDataSize(); + + // Must unlock everything on termination, otherwise valgrind complains about memory leaks. + discardableManager->unlockAndDeleteAll(); +} + DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextAsDFT, reporter, ctxInfo) { sk_sp<DiscardableManager> discardableManager = sk_make_sp<DiscardableManager>(); SkStrikeServer server(discardableManager.get()); |