aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Khushal <khushalsagar@chromium.org>2018-05-01 15:30:38 -0700
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-05-01 22:55:37 +0000
commitef4142a9bc5fb5fe3158139e18f41e7da867ff93 (patch)
treef283b81c0fbfca90f683f4b6e12e5a562d8a6ee1
parent1b97b860b0bcc9b54484b188cc14ecb8c7145d92 (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.cpp3
-rw-r--r--src/core/SkScalerContext.cpp7
-rw-r--r--src/core/SkScalerContext.h3
-rw-r--r--tests/SkRemoteGlyphCacheTest.cpp3
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>();