Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(118)

Unified Diff: src/gpu/GrDrawContext.cpp

Issue 1375153007: Dynamically allocate the GrDrawContexts (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix more bugs Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/gpu/GrDrawContext.cpp
diff --git a/src/gpu/GrDrawContext.cpp b/src/gpu/GrDrawContext.cpp
index 0a63eb8ebfb9f45f11a27329380456d83f5325ef..7e1e66fb556c1c236cf5007af3b301584a2c8eef 100644
--- a/src/gpu/GrDrawContext.cpp
+++ b/src/gpu/GrDrawContext.cpp
@@ -16,6 +16,7 @@
#include "GrRenderTargetPriv.h"
#include "GrResourceProvider.h"
#include "GrStencilAndCoverTextContext.h"
+#include "SkSurfacePriv.h"
#include "batches/GrBatch.h"
#include "batches/GrDrawAtlasBatch.h"
@@ -23,9 +24,9 @@
#include "batches/GrRectBatchFactory.h"
#define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == fContext)
-#define RETURN_IF_ABANDONED if (!fDrawTarget) { return; }
-#define RETURN_FALSE_IF_ABANDONED if (!fDrawTarget) { return false; }
-#define RETURN_NULL_IF_ABANDONED if (!fDrawTarget) { return nullptr; }
+#define RETURN_IF_ABANDONED if (fContext->abandoned()) { return; }
+#define RETURN_FALSE_IF_ABANDONED if (fContext->abandoned()) { return false; }
+#define RETURN_NULL_IF_ABANDONED if (fContext->abandoned()) { return nullptr; }
class AutoCheckFlush {
public:
@@ -38,20 +39,21 @@ private:
GrDrawContext::GrDrawContext(GrContext* context,
GrDrawTarget* drawTarget,
- const SkSurfaceProps& surfaceProps)
+ const SkSurfaceProps* surfaceProps)
: fContext(context)
, fDrawTarget(SkRef(drawTarget))
, fTextContext(nullptr)
- , fSurfaceProps(surfaceProps) {
+ , fSurfaceProps(SkSurfacePropsCopyOrDefault(surfaceProps)) {
}
GrDrawContext::~GrDrawContext() {
SkSafeUnref(fDrawTarget);
- delete fTextContext;
}
void GrDrawContext::copySurface(GrRenderTarget* dst, GrSurface* src,
const SkIRect& srcRect, const SkIPoint& dstPoint) {
+ RETURN_IF_ABANDONED
+
if (!this->prepareToDraw(dst)) {
return;
}
@@ -59,28 +61,16 @@ void GrDrawContext::copySurface(GrRenderTarget* dst, GrSurface* src,
fDrawTarget->copySurface(dst, src, srcRect, dstPoint);
}
-GrTextContext* GrDrawContext::createTextContext(GrRenderTarget* renderTarget,
- const SkSurfaceProps& surfaceProps) {
- if (fContext->caps()->shaderCaps()->pathRenderingSupport() &&
- renderTarget->isStencilBufferMultisampled() &&
- fSurfaceProps.isUseDeviceIndependentFonts()) {
- GrStencilAttachment* sb =
- fContext->resourceProvider()->attachStencilAttachment(renderTarget);
- if (sb) {
- return GrStencilAndCoverTextContext::Create(fContext, surfaceProps);
- }
- }
-
- return GrAtlasTextContext::Create(fContext, surfaceProps);
-}
void GrDrawContext::drawText(GrRenderTarget* rt, const GrClip& clip, const GrPaint& grPaint,
const SkPaint& skPaint,
const SkMatrix& viewMatrix,
const char text[], size_t byteLength,
SkScalar x, SkScalar y, const SkIRect& clipBounds) {
+ RETURN_IF_ABANDONED
+
if (!fTextContext) {
- fTextContext = this->createTextContext(rt, fSurfaceProps);
+ fTextContext = fContext->textContext(fSurfaceProps, rt);
}
fTextContext->drawText(this, rt, clip, grPaint, skPaint, viewMatrix,
@@ -93,8 +83,10 @@ void GrDrawContext::drawPosText(GrRenderTarget* rt, const GrClip& clip, const Gr
const char text[], size_t byteLength,
const SkScalar pos[], int scalarsPerPosition,
const SkPoint& offset, const SkIRect& clipBounds) {
+ RETURN_IF_ABANDONED
+
if (!fTextContext) {
- fTextContext = this->createTextContext(rt, fSurfaceProps);
+ fTextContext = fContext->textContext(fSurfaceProps, rt);
}
fTextContext->drawPosText(this, rt, clip, grPaint, skPaint, viewMatrix, text, byteLength,
@@ -105,8 +97,10 @@ void GrDrawContext::drawTextBlob(GrRenderTarget* rt, const GrClip& clip, const S
const SkMatrix& viewMatrix, const SkTextBlob* blob,
SkScalar x, SkScalar y,
SkDrawFilter* filter, const SkIRect& clipBounds) {
+ RETURN_IF_ABANDONED
+
if (!fTextContext) {
- fTextContext = this->createTextContext(rt, fSurfaceProps);
+ fTextContext = fContext->textContext(fSurfaceProps, rt);
}
fTextContext->drawTextBlob(this, rt,
@@ -119,6 +113,8 @@ void GrDrawContext::drawPathsFromRange(const GrPipelineBuilder* pipelineBuilder,
GrColor color,
GrPathRangeDraw* draw,
int /*GrPathRendering::FillType*/ fill) {
+ RETURN_IF_ABANDONED
+
fDrawTarget->drawPathsFromRange(*pipelineBuilder, viewMatrix, localMatrix, color, draw,
(GrPathRendering::FillType) fill);
}
@@ -761,5 +757,7 @@ bool GrDrawContext::prepareToDraw(GrRenderTarget* rt) {
}
void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, GrDrawBatch* batch) {
+ RETURN_IF_ABANDONED
+
fDrawTarget->drawBatch(*pipelineBuilder, batch);
}
« include/gpu/GrContext.h ('K') | « src/gpu/GrContext.cpp ('k') | src/gpu/GrTextContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698