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

Unified Diff: src/gpu/GrInOrderDrawBuffer.cpp

Issue 963183002: Increase GrInOrderDrawBuffer's encapsulation of trace markers (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Address code review issue Created 5 years, 10 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
« no previous file with comments | « src/gpu/GrInOrderDrawBuffer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrInOrderDrawBuffer.cpp
diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp
index 0807bf3d47aba50098fb84b16a79d8dd3ea63d35..8c2bea95a020f31f21832a70142738a07f53254a 100644
--- a/src/gpu/GrInOrderDrawBuffer.cpp
+++ b/src/gpu/GrInOrderDrawBuffer.cpp
@@ -35,6 +35,15 @@ GrInOrderDrawBuffer::~GrInOrderDrawBuffer() {
this->reset();
}
+void GrInOrderDrawBuffer::closeBatch() {
+ if (fDrawBatch) {
+ fBatchTarget.resetNumberOfDraws();
+ fDrawBatch->execute(this->getGpu(), fPrevState);
+ fDrawBatch->fBatch->setNumberOfDraws(fBatchTarget.numberOfDraws());
+ fDrawBatch = NULL;
+ }
+}
+
////////////////////////////////////////////////////////////////////////////////
/** We always use per-vertex colors so that rects can be batched across color changes. Sometimes we
@@ -354,15 +363,7 @@ int GrInOrderDrawBuffer::concatInstancedDraw(const DrawInfo& info) {
draw->fInfo.adjustInstanceCount(instancesToConcat);
// update last fGpuCmdMarkers to include any additional trace markers that have been added
- if (this->getActiveTraceMarkers().count() > 0) {
- if (draw->isTraced()) {
- fGpuCmdMarkers.back().addSet(this->getActiveTraceMarkers());
- } else {
- fGpuCmdMarkers.push_back(this->getActiveTraceMarkers());
- draw->makeTraced();
- }
- }
-
+ this->recordTraceMarkersIfNecessary(draw);
return instancesToConcat;
}
@@ -388,7 +389,7 @@ void GrInOrderDrawBuffer::onDraw(const GrGeometryProcessor* gp,
} else {
draw = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Draw, (info));
}
- this->recordTraceMarkersIfNecessary();
+ this->recordTraceMarkersIfNecessary(draw);
}
void GrInOrderDrawBuffer::onDrawBatch(GrBatch* batch,
@@ -400,17 +401,16 @@ void GrInOrderDrawBuffer::onDrawBatch(GrBatch* batch,
// Check if there is a Batch Draw we can batch with
if (Cmd::kDrawBatch_Cmd != fCmdBuffer.back().type()) {
fDrawBatch = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawBatch, (batch, &fBatchTarget));
+ this->recordTraceMarkersIfNecessary(fDrawBatch);
return;
}
- DrawBatch* draw = static_cast<DrawBatch*>(&fCmdBuffer.back());
- if (draw->fBatch->combineIfPossible(batch)) {
- return;
- } else {
+ SkASSERT(&fCmdBuffer.back() == fDrawBatch);
+ if (!fDrawBatch->fBatch->combineIfPossible(batch)) {
this->closeBatch();
fDrawBatch = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawBatch, (batch, &fBatchTarget));
}
- this->recordTraceMarkersIfNecessary();
+ this->recordTraceMarkersIfNecessary(fDrawBatch);
}
void GrInOrderDrawBuffer::onStencilPath(const GrPipelineBuilder& pipelineBuilder,
@@ -427,7 +427,7 @@ void GrInOrderDrawBuffer::onStencilPath(const GrPipelineBuilder& pipelineBuilder
sp->fUseHWAA = pipelineBuilder.isHWAntialias();
sp->fViewMatrix = pathProc->viewMatrix();
sp->fStencil = stencilSettings;
- this->recordTraceMarkersIfNecessary();
+ this->recordTraceMarkersIfNecessary(sp);
}
void GrInOrderDrawBuffer::onDrawPath(const GrPathProcessor* pathProc,
@@ -442,7 +442,7 @@ void GrInOrderDrawBuffer::onDrawPath(const GrPathProcessor* pathProc,
}
DrawPath* dp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawPath, (path));
dp->fStencilSettings = stencilSettings;
- this->recordTraceMarkersIfNecessary();
+ this->recordTraceMarkersIfNecessary(dp);
}
void GrInOrderDrawBuffer::onDrawPaths(const GrPathProcessor* pathProc,
@@ -512,7 +512,7 @@ void GrInOrderDrawBuffer::onDrawPaths(const GrPathProcessor* pathProc,
dp->fCount = count;
dp->fStencilSettings = stencilSettings;
- this->recordTraceMarkersIfNecessary();
+ this->recordTraceMarkersIfNecessary(dp);
}
void GrInOrderDrawBuffer::onClear(const SkIRect* rect, GrColor color,
@@ -533,7 +533,7 @@ void GrInOrderDrawBuffer::onClear(const SkIRect* rect, GrColor color,
clr->fColor = color;
clr->fRect = *rect;
clr->fCanIgnoreRect = canIgnoreRect;
- this->recordTraceMarkersIfNecessary();
+ this->recordTraceMarkersIfNecessary(clr);
}
void GrInOrderDrawBuffer::clearStencilClip(const SkIRect& rect,
@@ -545,7 +545,7 @@ void GrInOrderDrawBuffer::clearStencilClip(const SkIRect& rect,
ClearStencilClip* clr = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, ClearStencilClip, (renderTarget));
clr->fRect = rect;
clr->fInsideClip = insideClip;
- this->recordTraceMarkersIfNecessary();
+ this->recordTraceMarkersIfNecessary(clr);
}
void GrInOrderDrawBuffer::discard(GrRenderTarget* renderTarget) {
@@ -557,7 +557,7 @@ void GrInOrderDrawBuffer::discard(GrRenderTarget* renderTarget) {
}
Clear* clr = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Clear, (renderTarget));
clr->fColor = GrColor_ILLEGAL;
- this->recordTraceMarkersIfNecessary();
+ this->recordTraceMarkersIfNecessary(clr);
}
void GrInOrderDrawBuffer::onReset() {
@@ -595,7 +595,7 @@ void GrInOrderDrawBuffer::onFlush() {
GrGpuTraceMarker newMarker("", -1);
SkString traceString;
if (iter->isTraced()) {
- traceString = fGpuCmdMarkers[currCmdMarker].toString();
+ traceString = this->getCmdString(currCmdMarker);
newMarker.fMarker = traceString.c_str();
this->getGpu()->addGpuTraceMarker(&newMarker);
++currCmdMarker;
@@ -702,7 +702,7 @@ bool GrInOrderDrawBuffer::onCopySurface(GrSurface* dst,
CopySurface* cs = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, CopySurface, (dst, src));
cs->fSrcRect = srcRect;
cs->fDstPoint = dstPoint;
- this->recordTraceMarkersIfNecessary();
+ this->recordTraceMarkersIfNecessary(cs);
return true;
}
return false;
@@ -729,7 +729,7 @@ bool GrInOrderDrawBuffer::setupPipelineAndShouldDraw(const GrPrimitiveProcessor*
fCmdBuffer.pop_back();
} else {
fPrevState = ss;
- this->recordTraceMarkersIfNecessary();
+ this->recordTraceMarkersIfNecessary(ss);
}
return true;
}
@@ -752,18 +752,23 @@ bool GrInOrderDrawBuffer::setupPipelineAndShouldDraw(GrBatch* batch,
} else {
this->closeBatch();
fPrevState = ss;
- this->recordTraceMarkersIfNecessary();
+ this->recordTraceMarkersIfNecessary(ss);
}
return true;
}
-void GrInOrderDrawBuffer::recordTraceMarkersIfNecessary() {
- SkASSERT(!fCmdBuffer.empty());
- SkASSERT(!fCmdBuffer.back().isTraced());
+void GrInOrderDrawBuffer::recordTraceMarkersIfNecessary(Cmd* cmd) {
+ if (!cmd) {
+ return;
+ }
const GrTraceMarkerSet& activeTraceMarkers = this->getActiveTraceMarkers();
if (activeTraceMarkers.count() > 0) {
- fCmdBuffer.back().makeTraced();
- fGpuCmdMarkers.push_back(activeTraceMarkers);
+ if (cmd->isTraced()) {
+ fGpuCmdMarkers.back().addSet(activeTraceMarkers);
+ } else {
+ cmd->makeTraced();
+ fGpuCmdMarkers.push_back(activeTraceMarkers);
+ }
}
}
« no previous file with comments | « src/gpu/GrInOrderDrawBuffer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698