Delete GrTextContext
TBR=bsalomon@google.com
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1699073004
Review URL: https://codereview.chromium.org/1699073004
diff --git a/gyp/gpu.gypi b/gyp/gpu.gypi
index f995bf0..13ca46d 100644
--- a/gyp/gpu.gypi
+++ b/gyp/gpu.gypi
@@ -308,8 +308,6 @@
'<(skia_src_path)/gpu/text/GrStencilAndCoverTextContext.h',
'<(skia_src_path)/gpu/text/GrTextBlobCache.cpp',
'<(skia_src_path)/gpu/text/GrTextBlobCache.h',
- '<(skia_src_path)/gpu/text/GrTextContext.cpp',
- '<(skia_src_path)/gpu/text/GrTextContext.h',
'<(skia_src_path)/gpu/text/GrTextUtils.cpp',
'<(skia_src_path)/gpu/text/GrTextUtils.h',
diff --git a/include/gpu/GrDrawContext.h b/include/gpu/GrDrawContext.h
index bf0de33..44d5fe4 100644
--- a/include/gpu/GrDrawContext.h
+++ b/include/gpu/GrDrawContext.h
@@ -14,6 +14,7 @@
#include "SkSurfaceProps.h"
#include "../private/GrSingleOwner.h"
+class GrAtlasTextContext;
class GrAuditTrail;
class GrClip;
class GrContext;
@@ -27,7 +28,6 @@
class GrRenderTarget;
class GrStrokeInfo;
class GrSurface;
-class GrTextContext;
class SkDrawFilter;
struct SkIPoint;
struct SkIRect;
@@ -310,17 +310,17 @@
GrDrawTarget* getDrawTarget();
- GrDrawingManager* fDrawingManager;
- GrRenderTarget* fRenderTarget;
+ GrDrawingManager* fDrawingManager;
+ GrRenderTarget* fRenderTarget;
// In MDB-mode the drawTarget can be closed by some other drawContext that has picked
// it up. For this reason, the drawTarget should only ever be accessed via 'getDrawTarget'.
- GrDrawTarget* fDrawTarget;
- GrTextContext* fAtlasTextContext; // lazily gotten from GrContext::DrawingManager
- GrContext* fContext;
+ GrDrawTarget* fDrawTarget;
+ GrAtlasTextContext* fAtlasTextContext;
+ GrContext* fContext;
- SkSurfaceProps fSurfaceProps;
- GrAuditTrail* fAuditTrail;
+ SkSurfaceProps fSurfaceProps;
+ GrAuditTrail* fAuditTrail;
// In debug builds we guard against improper thread handling
SkDEBUGCODE(mutable GrSingleOwner* fSingleOwner;)
diff --git a/src/gpu/GrDrawingManager.h b/src/gpu/GrDrawingManager.h
index d82a3a2..0a4c3e3 100644
--- a/src/gpu/GrDrawingManager.h
+++ b/src/gpu/GrDrawingManager.h
@@ -18,13 +18,8 @@
class GrDrawContext;
class GrSingleOWner;
class GrSoftwarePathRenderer;
-class GrTextContext;
-// Currently the DrawingManager creates a separate GrTextContext for each
-// combination of text drawing options (pixel geometry x DFT use)
-// and hands the appropriate one back given the DrawContext's request.
-//
-// It allocates a new GrDrawContext for each GrRenderTarget
+// The GrDrawingManager allocates a new GrDrawContext for each GrRenderTarget
// but all of them still land in the same GrDrawTarget!
//
// In the future this class will allocate a new GrDrawContext for
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 060b2a1..cb92ab3 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -46,7 +46,7 @@
#include "effects/GrDashingEffect.h"
#include "effects/GrSimpleTextureEffect.h"
#include "effects/GrTextureDomain.h"
-#include "text/GrTextContext.h"
+#include "text/GrTextUtils.h"
#if SK_SUPPORT_GPU
@@ -1755,7 +1755,7 @@
///////////////////////////////////////////////////////////////////////////////
bool SkGpuDevice::onShouldDisableLCD(const SkPaint& paint) const {
- return GrTextContext::ShouldDisableLCD(paint);
+ return GrTextUtils::ShouldDisableLCD(paint);
}
void SkGpuDevice::flush() {
diff --git a/src/gpu/text/GrAtlasTextBlob.cpp b/src/gpu/text/GrAtlasTextBlob.cpp
index 2775098..f2ca3d2 100644
--- a/src/gpu/text/GrAtlasTextBlob.cpp
+++ b/src/gpu/text/GrAtlasTextBlob.cpp
@@ -366,7 +366,7 @@
return;
}
- runPaint.setFlags(GrTextContext::FilterTextFlags(props, runPaint));
+ runPaint.setFlags(GrTextUtils::FilterTextFlags(props, runPaint));
switch (it.positioning()) {
case SkTextBlob::kDefault_Positioning:
diff --git a/src/gpu/text/GrAtlasTextBlob.h b/src/gpu/text/GrAtlasTextBlob.h
index 63eb56b..8b175c8 100644
--- a/src/gpu/text/GrAtlasTextBlob.h
+++ b/src/gpu/text/GrAtlasTextBlob.h
@@ -20,7 +20,6 @@
class GrBlobRegenHelper;
struct GrDistanceFieldAdjustTable;
class GrMemoryPool;
-class GrTextContext;
class SkDrawFilter;
class SkTextBlob;
class SkTextBlobRunIterator;
diff --git a/src/gpu/text/GrAtlasTextBlob_regenInBatch.cpp b/src/gpu/text/GrAtlasTextBlob_regenInBatch.cpp
index 6443d41..14bf4a5 100644
--- a/src/gpu/text/GrAtlasTextBlob_regenInBatch.cpp
+++ b/src/gpu/text/GrAtlasTextBlob_regenInBatch.cpp
@@ -8,6 +8,7 @@
#include "GrAtlasTextBlob.h"
#include "GrBatchFlushState.h"
+#include "GrTextUtils.h"
#include "SkDistanceFieldGen.h"
#include "SkGlyphCache.h"
@@ -146,7 +147,7 @@
}
*desc = newDesc;
*cache = SkGlyphCache::DetachCache(run->fTypeface, *desc);
- *scaler = GrTextContext::GetGrFontScaler(*cache);
+ *scaler = GrTextUtils::GetGrFontScaler(*cache);
*typeface = run->fTypeface;
}
diff --git a/src/gpu/text/GrAtlasTextContext.cpp b/src/gpu/text/GrAtlasTextContext.cpp
index 8f45731..0f36fe3 100644
--- a/src/gpu/text/GrAtlasTextContext.cpp
+++ b/src/gpu/text/GrAtlasTextContext.cpp
@@ -190,7 +190,7 @@
continue;
}
- runPaint.setFlags(FilterTextFlags(props, runPaint));
+ runPaint.setFlags(GrTextUtils::FilterTextFlags(props, runPaint));
cacheBlob->push_back_run(run);
@@ -373,9 +373,6 @@
gContextID = context->uniqueID();
delete gTextContext;
- // We don't yet test the fall back to paths in the GrTextContext base class. This is mostly
- // because we don't really want to have a gpu device here.
- // We enable distance fields by twiddling a knob on the paint
gTextContext = GrAtlasTextContext::Create();
}
diff --git a/src/gpu/text/GrAtlasTextContext.h b/src/gpu/text/GrAtlasTextContext.h
index c4948db..edc1575 100644
--- a/src/gpu/text/GrAtlasTextContext.h
+++ b/src/gpu/text/GrAtlasTextContext.h
@@ -8,8 +8,6 @@
#ifndef GrAtlasTextContext_DEFINED
#define GrAtlasTextContext_DEFINED
-#include "GrTextContext.h"
-
#include "GrAtlasTextBlob.h"
#include "GrDistanceFieldAdjustTable.h"
#include "GrGeometryProcessor.h"
@@ -27,9 +25,9 @@
class SkGlyph;
/*
- * This class implements GrTextContext using standard bitmap fonts, and can also process textblobs.
+ * Renders text using some kind of an atlas, ie BitmapText or DistanceField text
*/
-class GrAtlasTextContext : public GrTextContext {
+class GrAtlasTextContext {
public:
static GrAtlasTextContext* Create();
@@ -38,16 +36,16 @@
void drawText(GrContext*, GrDrawContext*, const GrClip&, const GrPaint&, const SkPaint&,
const SkMatrix& viewMatrix, const SkSurfaceProps&, const char text[],
size_t byteLength, SkScalar x, SkScalar y,
- const SkIRect& regionClipBounds) override;
+ const SkIRect& regionClipBounds);
void drawPosText(GrContext*, GrDrawContext*, const GrClip&, const GrPaint&,
const SkPaint&, const SkMatrix& viewMatrix, const SkSurfaceProps&,
const char text[], size_t byteLength,
const SkScalar pos[], int scalarsPerPosition,
- const SkPoint& offset, const SkIRect& regionClipBounds) override;
+ const SkPoint& offset, const SkIRect& regionClipBounds);
void drawTextBlob(GrContext*, GrDrawContext*, const GrClip&, const SkPaint&,
const SkMatrix& viewMatrix, const SkSurfaceProps&, const SkTextBlob*,
SkScalar x, SkScalar y,
- SkDrawFilter*, const SkIRect& clipBounds) override;
+ SkDrawFilter*, const SkIRect& clipBounds);
private:
GrAtlasTextContext();
@@ -87,8 +85,6 @@
#ifdef GR_TEST_UTILS
DRAW_BATCH_TEST_FRIEND(TextBlobBatch);
#endif
-
- typedef GrTextContext INHERITED;
};
#endif
diff --git a/src/gpu/text/GrStencilAndCoverTextContext.cpp b/src/gpu/text/GrStencilAndCoverTextContext.cpp
index 08487d9..205c6d9 100644
--- a/src/gpu/text/GrStencilAndCoverTextContext.cpp
+++ b/src/gpu/text/GrStencilAndCoverTextContext.cpp
@@ -159,7 +159,7 @@
continue;
}
- runPaint.setFlags(FilterTextFlags(props, runPaint));
+ runPaint.setFlags(GrTextUtils::FilterTextFlags(props, runPaint));
GrPaint grPaint;
if (!SkPaintToGrPaint(context, runPaint, viewMatrix, &grPaint)) {
@@ -572,7 +572,7 @@
const SkSurfaceProps& props,
SkScalar x, SkScalar y,
const SkIRect& clipBounds,
- GrTextContext* fallbackTextContext,
+ GrAtlasTextContext* fallbackTextContext,
const SkPaint& originalSkPaint) const {
SkASSERT(fInstanceData);
SkASSERT(dc->accessRenderTarget()->isStencilBufferMultisampled() || !fFont.isAntiAlias());
diff --git a/src/gpu/text/GrStencilAndCoverTextContext.h b/src/gpu/text/GrStencilAndCoverTextContext.h
index 302df0b..892e279 100644
--- a/src/gpu/text/GrStencilAndCoverTextContext.h
+++ b/src/gpu/text/GrStencilAndCoverTextContext.h
@@ -8,9 +8,10 @@
#ifndef GrStencilAndCoverTextContext_DEFINED
#define GrStencilAndCoverTextContext_DEFINED
-#include "GrTextContext.h"
#include "GrDrawTarget.h"
#include "GrStrokeInfo.h"
+#include "SkDrawFilter.h"
+#include "SkTextBlob.h"
#include "SkTHash.h"
#include "SkTInternalLList.h"
#include "SkTLList.h"
@@ -24,9 +25,8 @@
/*
* This class implements text rendering using stencil and cover path rendering
* (by the means of GrDrawTarget::drawPath).
- * This class exposes the functionality through GrTextContext interface.
*/
-class GrStencilAndCoverTextContext : public GrTextContext {
+class GrStencilAndCoverTextContext {
public:
static GrStencilAndCoverTextContext* Create();
@@ -34,17 +34,17 @@
const GrClip&, const GrPaint&, const SkPaint&,
const SkMatrix& viewMatrix, const SkSurfaceProps&, const char text[],
size_t byteLength, SkScalar x,
- SkScalar y, const SkIRect& clipBounds) override;
+ SkScalar y, const SkIRect& clipBounds);
void drawPosText(GrContext*, GrDrawContext*,
const GrClip&, const GrPaint&, const SkPaint&,
const SkMatrix& viewMatrix, const SkSurfaceProps&,
const char text[], size_t byteLength,
const SkScalar pos[], int scalarsPerPosition,
- const SkPoint& offset, const SkIRect& clipBounds) override;
+ const SkPoint& offset, const SkIRect& clipBounds);
void drawTextBlob(GrContext*, GrDrawContext*, const GrClip&, const SkPaint&,
const SkMatrix& viewMatrix, const SkSurfaceProps&, const SkTextBlob*,
SkScalar x, SkScalar y,
- SkDrawFilter*, const SkIRect& clipBounds) override;
+ SkDrawFilter*, const SkIRect& clipBounds);
virtual ~GrStencilAndCoverTextContext();
@@ -81,7 +81,7 @@
void draw(GrContext*, GrDrawContext*, GrPipelineBuilder*, GrColor, const SkMatrix&,
const SkSurfaceProps&,
SkScalar x, SkScalar y, const SkIRect& clipBounds,
- GrTextContext* fallbackTextContext, const SkPaint& originalSkPaint) const;
+ GrAtlasTextContext* fallbackTextContext, const SkPaint& originalSkPaint) const;
void releaseGlyphCache() const;
@@ -152,8 +152,6 @@
SkTHashTable<TextBlob*, const TextBlob::Key&, TextBlob> fBlobKeyCache;
SkTInternalLList<TextBlob> fLRUList;
size_t fCacheSize;
-
- typedef GrTextContext INHERITED;
};
#endif
diff --git a/src/gpu/text/GrTextContext.cpp b/src/gpu/text/GrTextContext.cpp
deleted file mode 100644
index 1e2d290..0000000
--- a/src/gpu/text/GrTextContext.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "GrTextContext.h"
-#include "GrFontScaler.h"
-
-#include "SkGlyphCache.h"
-
-bool GrTextContext::ShouldDisableLCD(const SkPaint& paint) {
- if (!SkXfermode::AsMode(paint.getXfermode(), nullptr) ||
- paint.getMaskFilter() ||
- paint.getRasterizer() ||
- paint.getPathEffect() ||
- paint.isFakeBoldText() ||
- paint.getStyle() != SkPaint::kFill_Style)
- {
- return true;
- }
- return false;
-}
-
-uint32_t GrTextContext::FilterTextFlags(const SkSurfaceProps& surfaceProps, const SkPaint& paint) {
- uint32_t flags = paint.getFlags();
-
- if (!paint.isLCDRenderText() || !paint.isAntiAlias()) {
- return flags;
- }
-
- if (kUnknown_SkPixelGeometry == surfaceProps.pixelGeometry() || ShouldDisableLCD(paint)) {
- flags &= ~SkPaint::kLCDRenderText_Flag;
- flags |= SkPaint::kGenA8FromLCD_Flag;
- }
-
- return flags;
-}
-
-static void GlyphCacheAuxProc(void* data) {
- GrFontScaler* scaler = (GrFontScaler*)data;
- SkSafeUnref(scaler);
-}
-
-GrFontScaler* GrTextContext::GetGrFontScaler(SkGlyphCache* cache) {
- void* auxData;
- GrFontScaler* scaler = nullptr;
-
- if (cache->getAuxProcData(GlyphCacheAuxProc, &auxData)) {
- scaler = (GrFontScaler*)auxData;
- }
- if (nullptr == scaler) {
- scaler = new GrFontScaler(cache);
- cache->setAuxProc(GlyphCacheAuxProc, scaler);
- }
-
- return scaler;
-}
diff --git a/src/gpu/text/GrTextContext.h b/src/gpu/text/GrTextContext.h
deleted file mode 100644
index 04959a0..0000000
--- a/src/gpu/text/GrTextContext.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef GrTextContext_DEFINED
-#define GrTextContext_DEFINED
-
-#include "GrClip.h"
-#include "GrGlyph.h"
-#include "GrPaint.h"
-#include "SkSurfaceProps.h"
-#include "SkPostConfig.h"
-
-class GrClip;
-class GrContext;
-class GrDrawContext;
-class GrFontScaler;
-class SkDrawFilter;
-class SkTextBlob;
-
-/*
- * This class wraps the state for a single text render
- */
-class GrTextContext {
-public:
- virtual ~GrTextContext() {}
-
- virtual void drawText(GrContext*, GrDrawContext* dc,
- const GrClip&, const GrPaint&, const SkPaint&,
- const SkMatrix& viewMatrix,
- const SkSurfaceProps& props, const char text[], size_t byteLength,
- SkScalar x, SkScalar y, const SkIRect& clipBounds) = 0;
- virtual void drawPosText(GrContext*, GrDrawContext* dc,
- const GrClip&, const GrPaint&, const SkPaint&,
- const SkMatrix& viewMatrix,
- const SkSurfaceProps& props,
- const char text[], size_t byteLength,
- const SkScalar pos[], int scalarsPerPosition,
- const SkPoint& offset, const SkIRect& clipBounds) = 0;
- virtual void drawTextBlob(GrContext*, GrDrawContext* dc, const GrClip&,
- const SkPaint&, const SkMatrix& viewMatrix,
- const SkSurfaceProps& props, const SkTextBlob*,
- SkScalar x, SkScalar y,
- SkDrawFilter*, const SkIRect& clipBounds) = 0;
-
- static bool ShouldDisableLCD(const SkPaint& paint);
-
-protected:
- static GrFontScaler* GetGrFontScaler(SkGlyphCache* cache);
- static uint32_t FilterTextFlags(const SkSurfaceProps& surfaceProps, const SkPaint& paint);
-
- friend class GrAtlasTextBatch;
- friend class GrAtlasTextBlob; // for FilterTextFlags
- friend class GrTextUtils; // for some static functions
-};
-
-#endif
diff --git a/src/gpu/text/GrTextUtils.cpp b/src/gpu/text/GrTextUtils.cpp
index 96b12b0..59ecbc0 100644
--- a/src/gpu/text/GrTextUtils.cpp
+++ b/src/gpu/text/GrTextUtils.cpp
@@ -13,7 +13,6 @@
#include "GrCaps.h"
#include "GrContext.h"
#include "GrDrawContext.h"
-#include "GrTextContext.h"
#include "SkDistanceFieldGen.h"
#include "SkDrawProcs.h"
@@ -59,7 +58,7 @@
// Get GrFontScaler from cache
SkGlyphCache* cache = blob->setupCache(runIndex, props, skPaint, &viewMatrix, false);
- GrFontScaler* fontScaler = GrTextContext::GetGrFontScaler(cache);
+ GrFontScaler* fontScaler = GrTextUtils::GetGrFontScaler(cache);
SkFindAndPlaceGlyph::ProcessText(
skPaint.getTextEncoding(), text, byteLength,
@@ -100,7 +99,7 @@
// Get GrFontScaler from cache
SkGlyphCache* cache = blob->setupCache(runIndex, props, skPaint, &viewMatrix, false);
- GrFontScaler* fontScaler = GrTextContext::GetGrFontScaler(cache);
+ GrFontScaler* fontScaler = GrTextUtils::GetGrFontScaler(cache);
SkFindAndPlaceGlyph::ProcessPosText(
skPaint.getTextEncoding(), text, byteLength,
@@ -342,7 +341,7 @@
SkGlyphCache* cache = blob->setupCache(runIndex, props, dfPaint, nullptr, true);
SkDrawCacheProc glyphCacheProc = dfPaint.getDrawCacheProc();
- GrFontScaler* fontScaler = GrTextContext::GetGrFontScaler(cache);
+ GrFontScaler* fontScaler = GrTextUtils::GetGrFontScaler(cache);
const char* stop = text + byteLength;
@@ -536,3 +535,47 @@
pos += scalarsPerPosition;
}
}
+
+bool GrTextUtils::ShouldDisableLCD(const SkPaint& paint) {
+ return !SkXfermode::AsMode(paint.getXfermode(), nullptr) ||
+ paint.getMaskFilter() ||
+ paint.getRasterizer() ||
+ paint.getPathEffect() ||
+ paint.isFakeBoldText() ||
+ paint.getStyle() != SkPaint::kFill_Style;
+}
+
+uint32_t GrTextUtils::FilterTextFlags(const SkSurfaceProps& surfaceProps, const SkPaint& paint) {
+ uint32_t flags = paint.getFlags();
+
+ if (!paint.isLCDRenderText() || !paint.isAntiAlias()) {
+ return flags;
+ }
+
+ if (kUnknown_SkPixelGeometry == surfaceProps.pixelGeometry() || ShouldDisableLCD(paint)) {
+ flags &= ~SkPaint::kLCDRenderText_Flag;
+ flags |= SkPaint::kGenA8FromLCD_Flag;
+ }
+
+ return flags;
+}
+
+static void glyph_cache_aux_proc(void* data) {
+ GrFontScaler* scaler = (GrFontScaler*)data;
+ SkSafeUnref(scaler);
+}
+
+GrFontScaler* GrTextUtils::GetGrFontScaler(SkGlyphCache* cache) {
+ void* auxData;
+ GrFontScaler* scaler = nullptr;
+
+ if (cache->getAuxProcData(glyph_cache_aux_proc, &auxData)) {
+ scaler = (GrFontScaler*)auxData;
+ }
+ if (nullptr == scaler) {
+ scaler = new GrFontScaler(cache);
+ cache->setAuxProc(glyph_cache_aux_proc, scaler);
+ }
+
+ return scaler;
+}
diff --git a/src/gpu/text/GrTextUtils.h b/src/gpu/text/GrTextUtils.h
index d6b7e94..096434b 100644
--- a/src/gpu/text/GrTextUtils.h
+++ b/src/gpu/text/GrTextUtils.h
@@ -81,6 +81,12 @@
const char text[], size_t byteLength,
const SkScalar pos[], int scalarsPerPosition,
const SkPoint& offset, const SkIRect& clipBounds);
+
+ static bool ShouldDisableLCD(const SkPaint& paint);
+
+ static GrFontScaler* GetGrFontScaler(SkGlyphCache* cache);
+ static uint32_t FilterTextFlags(const SkSurfaceProps& surfaceProps, const SkPaint& paint);
+
private:
static void InitDistanceFieldPaint(GrAtlasTextBlob* blob,
SkPaint* skPaint,