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

Unified Diff: src/gpu/GrInOrderDrawBuffer.cpp

Issue 184443003: Add Gpu Tracing to Ganesh (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Merge fixes 2 Created 6 years, 9 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') | src/gpu/GrTraceMarker.h » ('j') | 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 d9cbc914b015a78c655a3fc7f877fd6f65bf958c..1421af788f37dce601f968f9ff5540aac7b045fc 100644
--- a/src/gpu/GrInOrderDrawBuffer.cpp
+++ b/src/gpu/GrInOrderDrawBuffer.cpp
@@ -118,6 +118,23 @@ static void set_vertex_attributes(GrDrawState* drawState,
};
+enum {
+ kTraceCmdBit = 0x80,
+ kCmdMask = 0x7f,
+};
+
+static uint8_t add_trace_bit(uint8_t cmd) {
+ return cmd | kTraceCmdBit;
+}
+
+static uint8_t strip_trace_bit(uint8_t cmd) {
+ return cmd & kCmdMask;
+}
+
+static bool cmd_has_trace_marker(uint8_t cmd) {
+ return cmd & kTraceCmdBit;
+}
+
void GrInOrderDrawBuffer::onDrawRect(const SkRect& rect,
const SkMatrix* matrix,
const SkRect* localRect,
@@ -256,7 +273,7 @@ int GrInOrderDrawBuffer::concatInstancedDraw(const DrawInfo& info) {
}
// Check if there is a draw info that is compatible that uses the same VB from the pool and
// the same IB
- if (kDraw_Cmd != fCmds.back()) {
+ if (kDraw_Cmd != strip_trace_bit(fCmds.back())) {
return 0;
}
@@ -291,6 +308,17 @@ int GrInOrderDrawBuffer::concatInstancedDraw(const DrawInfo& info) {
poolState.fUsedPoolVertexBytes = GrMax(poolState.fUsedPoolVertexBytes, vertexBytes);
draw->adjustInstanceCount(instancesToConcat);
+
+ // update last fGpuCmdMarkers to include any additional trace markers that have been added
+ if (this->getActiveTraceMarkers().count() > 0) {
+ if (cmd_has_trace_marker(fCmds.back())) {
+ fGpuCmdMarkers.back().addSet(this->getActiveTraceMarkers());
+ } else {
+ fGpuCmdMarkers.push_back(this->getActiveTraceMarkers());
+ fCmds.back() = add_trace_bit(fCmds.back());
+ }
+ }
+
return instancesToConcat;
}
@@ -483,18 +511,6 @@ void GrInOrderDrawBuffer::clear(const SkIRect* rect, GrColor color,
renderTarget->ref();
}
-void GrInOrderDrawBuffer::onInstantGpuTraceEvent(const char* marker) {
- // TODO: adds command to buffer
-}
-
-void GrInOrderDrawBuffer::onPushGpuTraceEvent(const char* marker) {
- // TODO: adds command to buffer
-}
-
-void GrInOrderDrawBuffer::onPopGpuTraceEvent() {
- // TODO: adds command to buffer
-}
-
void GrInOrderDrawBuffer::reset() {
SkASSERT(1 == fGeoPoolStateStack.count());
this->resetVertexSource();
@@ -518,6 +534,7 @@ void GrInOrderDrawBuffer::reset() {
fClips.reset();
fClipOrigins.reset();
fCopySurfaces.reset();
+ fGpuCmdMarkers.reset();
fClipSet = true;
}
@@ -558,9 +575,17 @@ void GrInOrderDrawBuffer::flush() {
int currDrawPath = 0;
int currDrawPaths = 0;
int currCopySurface = 0;
+ int currCmdMarker = 0;
for (int c = 0; c < numCmds; ++c) {
- switch (fCmds[c]) {
+ GrGpuTraceMarker newMarker("", -1);
+ if (cmd_has_trace_marker(fCmds[c])) {
+ SkString traceString = fGpuCmdMarkers[currCmdMarker].toString();
+ newMarker.fMarker = traceString.c_str();
+ fDstGpu->addGpuTraceMarker(&newMarker);
+ ++currCmdMarker;
+ }
+ switch (strip_trace_bit(fCmds[c])) {
case kDraw_Cmd: {
const DrawRecord& draw = fDraws[currDraw];
fDstGpu->setVertexSourceToBuffer(draw.fVertexBuffer);
@@ -568,7 +593,6 @@ void GrInOrderDrawBuffer::flush() {
fDstGpu->setIndexSourceToBuffer(draw.fIndexBuffer);
}
fDstGpu->executeDraw(draw);
-
++currDraw;
break;
}
@@ -620,6 +644,9 @@ void GrInOrderDrawBuffer::flush() {
++currCopySurface;
break;
}
+ if (cmd_has_trace_marker(fCmds[c])) {
+ fDstGpu->removeGpuTraceMarker(&newMarker);
+ }
}
// we should have consumed all the states, clips, etc.
SkASSERT(fStates.count() == currState);
@@ -628,6 +655,7 @@ void GrInOrderDrawBuffer::flush() {
SkASSERT(fClears.count() == currClear);
SkASSERT(fDraws.count() == currDraw);
SkASSERT(fCopySurfaces.count() == currCopySurface);
+ SkASSERT(fGpuCmdMarkers.count() == currCmdMarker);
fDstGpu->setDrawState(prevDrawState);
prevDrawState->unref();
@@ -883,45 +911,56 @@ bool GrInOrderDrawBuffer::needsNewClip() const {
return false;
}
+void GrInOrderDrawBuffer::addToCmdBuffer(uint8_t cmd) {
+ SkASSERT(!cmd_has_trace_marker(cmd));
+ const GrTraceMarkerSet& activeTraceMarkers = this->getActiveTraceMarkers();
+ if (activeTraceMarkers.count() > 0) {
+ fCmds.push_back(add_trace_bit(cmd));
+ fGpuCmdMarkers.push_back(activeTraceMarkers);
+ } else {
+ fCmds.push_back(cmd);
+ }
+}
+
void GrInOrderDrawBuffer::recordClip() {
- fClips.push_back() = *this->getClip()->fClipStack;
+ fClips.push_back(*this->getClip()->fClipStack);
fClipOrigins.push_back() = this->getClip()->fOrigin;
fClipSet = false;
- fCmds.push_back(kSetClip_Cmd);
+ this->addToCmdBuffer(kSetClip_Cmd);
}
void GrInOrderDrawBuffer::recordState() {
fStates.push_back().saveFrom(this->getDrawState());
- fCmds.push_back(kSetState_Cmd);
+ this->addToCmdBuffer(kSetState_Cmd);
}
GrInOrderDrawBuffer::DrawRecord* GrInOrderDrawBuffer::recordDraw(const DrawInfo& info) {
- fCmds.push_back(kDraw_Cmd);
+ this->addToCmdBuffer(kDraw_Cmd);
return &fDraws.push_back(info);
}
GrInOrderDrawBuffer::StencilPath* GrInOrderDrawBuffer::recordStencilPath() {
- fCmds.push_back(kStencilPath_Cmd);
+ this->addToCmdBuffer(kStencilPath_Cmd);
return &fStencilPaths.push_back();
}
GrInOrderDrawBuffer::DrawPath* GrInOrderDrawBuffer::recordDrawPath() {
- fCmds.push_back(kDrawPath_Cmd);
+ this->addToCmdBuffer(kDrawPath_Cmd);
return &fDrawPath.push_back();
}
GrInOrderDrawBuffer::DrawPaths* GrInOrderDrawBuffer::recordDrawPaths() {
- fCmds.push_back(kDrawPaths_Cmd);
+ this->addToCmdBuffer(kDrawPaths_Cmd);
return &fDrawPaths.push_back();
}
GrInOrderDrawBuffer::Clear* GrInOrderDrawBuffer::recordClear() {
- fCmds.push_back(kClear_Cmd);
+ this->addToCmdBuffer(kClear_Cmd);
return &fClears.push_back();
}
GrInOrderDrawBuffer::CopySurface* GrInOrderDrawBuffer::recordCopySurface() {
- fCmds.push_back(kCopySurface_Cmd);
+ this->addToCmdBuffer(kCopySurface_Cmd);
return &fCopySurfaces.push_back();
}
« no previous file with comments | « src/gpu/GrInOrderDrawBuffer.h ('k') | src/gpu/GrTraceMarker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698