diff options
author | Khushal <khushalsagar@chromium.org> | 2018-05-01 15:30:38 -0700 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-05-01 22:55:37 +0000 |
commit | ef4142a9bc5fb5fe3158139e18f41e7da867ff93 (patch) | |
tree | f283b81c0fbfca90f683f4b6e12e5a562d8a6ee1 | |
parent | 1b97b860b0bcc9b54484b188cc14ecb8c7145d92 (diff) |
fonts: Bandaid fix for desc mismatch in SkRemoteGlyphCache.
Since the typeface proxies on the client don't perform the same
filtering done on the server during SkDescriptor generation, it causes
the desc mismatches during raster. Disable this filtering on the server
until this is resolved.
Bug: 831354
Change-Id: I5683372fb497a4874dede5aec9c734cd1392872c
Reviewed-on: https://skia-review.googlesource.com/125140
Commit-Queue: Khusal Sagar <khushalsagar@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
-rw-r--r-- | src/core/SkRemoteGlyphCache.cpp | 3 | ||||
-rw-r--r-- | src/core/SkScalerContext.cpp | 7 | ||||
-rw-r--r-- | src/core/SkScalerContext.h | 3 | ||||
-rw-r--r-- | tests/SkRemoteGlyphCacheTest.cpp | 3 |
4 files changed, 9 insertions, 7 deletions
diff --git a/src/core/SkRemoteGlyphCache.cpp b/src/core/SkRemoteGlyphCache.cpp index 06db562a9f..439c06975d 100644 --- a/src/core/SkRemoteGlyphCache.cpp +++ b/src/core/SkRemoteGlyphCache.cpp @@ -354,9 +354,10 @@ void SkTextBlobCacheDiffCanvas::processGlyphRun( // TODO(crbug.com/831354): The typeface proxy on the client does not replicate the // filtering done by the typeface on the server. + const bool enableTypefaceFiltering = false; SkScalerContext::MakeRecAndEffects(runPaint, &fSurfaceProps, &runMatrix, SkScalerContextFlags::kFakeGammaAndBoostContrast, &rec, - &effects); + &effects, enableTypefaceFiltering); TRACE_EVENT1("skia", "RecForDesc", "rec", TRACE_STR_COPY(rec.dump().c_str())); auto desc = SkScalerContext::DescriptorGivenRecAndEffects(rec, effects); diff --git a/src/core/SkScalerContext.cpp b/src/core/SkScalerContext.cpp index 57d8bc1ddf..7ad3a030bb 100644 --- a/src/core/SkScalerContext.cpp +++ b/src/core/SkScalerContext.cpp @@ -817,7 +817,8 @@ void SkScalerContext::MakeRecAndEffects(const SkPaint& paint, const SkMatrix* deviceMatrix, SkScalerContextFlags scalerContextFlags, SkScalerContextRec* rec, - SkScalerContextEffects* effects) { + SkScalerContextEffects* effects, + bool enableTypefaceFiltering) { SkASSERT(deviceMatrix == nullptr || !deviceMatrix->hasPerspective()); SkTypeface* typeface = SkPaintPriv::GetTypefaceOrDefault(paint); @@ -963,7 +964,9 @@ void SkScalerContext::MakeRecAndEffects(const SkPaint& paint, // cache. This way if we're asking for something that they will ignore, // they can modify our rec up front, so we don't create duplicate cache // entries. - typeface->onFilterRec(rec); + if (enableTypefaceFiltering) { + typeface->onFilterRec(rec); + } if (!SkToBool(scalerContextFlags & SkScalerContextFlags::kFakeGamma)) { rec->ignoreGamma(); diff --git a/src/core/SkScalerContext.h b/src/core/SkScalerContext.h index 9995fd9292..556ec18c67 100644 --- a/src/core/SkScalerContext.h +++ b/src/core/SkScalerContext.h @@ -310,7 +310,8 @@ public: const SkMatrix* deviceMatrix, SkScalerContextFlags scalerContextFlags, SkScalerContextRec* rec, - SkScalerContextEffects* effects); + SkScalerContextEffects* effects, + bool enableTypefaceFiltering = true); static SkDescriptor* MakeDescriptorForPaths(SkFontID fontID, SkAutoDescriptor* ad); diff --git a/tests/SkRemoteGlyphCacheTest.cpp b/tests/SkRemoteGlyphCacheTest.cpp index 7369acec15..5193a39f29 100644 --- a/tests/SkRemoteGlyphCacheTest.cpp +++ b/tests/SkRemoteGlyphCacheTest.cpp @@ -89,8 +89,6 @@ DEF_TEST(SkRemoteGlyphCache_TypefaceSerialization, reporter) { server_tf->uniqueID()); } -#if 0 -TODO(khushalsagar): Re-enable once crbug.com/831354 is fixed. DEF_TEST(SkRemoteGlyphCache_StrikeSerialization, reporter) { sk_sp<DiscardableManager> discardableManager = sk_make_sp<DiscardableManager>(); SkStrikeServer server(discardableManager.get()); @@ -124,7 +122,6 @@ DEF_TEST(SkRemoteGlyphCache_StrikeSerialization, reporter) { } } } -#endif DEF_TEST(SkRemoteGlyphCache_StrikeLockingServer, reporter) { sk_sp<DiscardableManager> discardableManager = sk_make_sp<DiscardableManager>(); |