Index: src/gpu/GrDrawTarget.cpp |
diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp |
index fb4c9a1509a4ffffce549d8fe3116c88f373b10e..b0627e472aa4d4647f889b2c3694c9873ebddaf9 100644 |
--- a/src/gpu/GrDrawTarget.cpp |
+++ b/src/gpu/GrDrawTarget.cpp |
@@ -17,6 +17,7 @@ |
#include "GrVertexBuffer.h" |
#include "SkStrokeRec.h" |
+#include "SkTSort.h" |
//////////////////////////////////////////////////////////////////////////////// |
@@ -89,7 +90,7 @@ void GrDrawTarget::DrawInfo::adjustStartIndex(int indexOffset) { |
GrDrawTarget::GrDrawTarget(GrContext* context) |
: fClip(NULL) |
, fContext(context) |
- , fPushGpuTraceCount(0) { |
+ , fGpuTraceMarkerCount(0) { |
SkASSERT(NULL != context); |
fDrawState = &fDefaultDrawState; |
@@ -548,28 +549,74 @@ void GrDrawTarget::drawPath(const GrPath* path, SkPath::FillType fill) { |
this->onDrawPath(path, fill, dstCopy.texture() ? &dstCopy : NULL); |
} |
-void GrDrawTarget::instantGpuTraceEvent(const char* marker) { |
- if (this->caps()->gpuTracingSupport()) { |
- this->onInstantGpuTraceEvent(marker); |
+SkString GrDrawTarget::getTraceString(SkTDArray<GpuTraceMarker>* markerArray, |
+ int startIdx, int numMarkers) { |
+ SkTQSort<GpuTraceMarker>(markerArray->begin() + startIdx, |
+ markerArray->begin() + startIdx + numMarkers - 1); |
+ SkString marker_string; |
+ const char* currBaseCmd = ""; |
bsalomon
2014/03/17 17:50:38
It took me a little bit to understand what this is
egdaniel
2014/03/17 19:49:12
Agree.
On 2014/03/17 17:50:38, bsalomon wrote:
|
+ int counter = 0; |
+ |
+ // check used for GrGpuGL device after we've already collapsed all markers |
+ if (1 == numMarkers && -1 == (*markerArray)[0].fID) { |
+ marker_string.append((*markerArray)[0].fMarker); |
+ return marker_string; |
+ } |
+ |
+ for (int i = startIdx; counter < numMarkers; ++i ) { |
+ GpuTraceMarker& currMarker = markerArray->getAt(i); |
+ const char* currCmd = currMarker.fMarker; |
+ if (currCmd != currBaseCmd) { |
+ if (counter != 0) { |
+ marker_string.append("):"); |
+ } |
+ marker_string.append(currCmd); |
+ marker_string.append("("); |
+ marker_string.appendS32(currMarker.fID); |
+ currBaseCmd = currCmd; |
+ } else { |
+ marker_string.append(", "); |
+ marker_string.appendS32(currMarker.fID); |
+ } |
+ ++counter; |
} |
+ if (counter > 0) { |
+ marker_string.append(")"); |
+ } |
+ return marker_string; |
+} |
+ |
+void GrDrawTarget::addTraceMarkerActiveSet(GpuTraceMarker* marker) { |
+ this->fActiveTraceMarkers.push(*marker); |
} |
-void GrDrawTarget::pushGpuTraceEvent(const char* marker) { |
- SkASSERT(fPushGpuTraceCount >= 0); |
+void GrDrawTarget::removeTraceMarkerActiveSet(GpuTraceMarker* marker) { |
+ SkASSERT(-1 != this->fActiveTraceMarkers.find(*marker)); |
+ int index = this->fActiveTraceMarkers.find(*marker); |
+ this->fActiveTraceMarkers.remove(index); |
+} |
+ |
+void GrDrawTarget::addGpuTraceMarker(GpuTraceMarker* marker) { |
if (this->caps()->gpuTracingSupport()) { |
- this->onPushGpuTraceEvent(marker); |
- ++fPushGpuTraceCount; |
+ SkASSERT(fGpuTraceMarkerCount >= 0); |
+ this->addTraceMarkerActiveSet(marker); |
+ this->onAddGpuTraceMarker(); |
+ ++fGpuTraceMarkerCount; |
} |
} |
-void GrDrawTarget::popGpuTraceEvent() { |
- SkASSERT(fPushGpuTraceCount >= 1); |
+void GrDrawTarget::removeGpuTraceMarker(GpuTraceMarker* marker) { |
if (this->caps()->gpuTracingSupport()) { |
- this->onPopGpuTraceEvent(); |
- --fPushGpuTraceCount; |
+ SkASSERT(fGpuTraceMarkerCount >= 1); |
+ this->removeTraceMarkerActiveSet(marker); |
+ this->onRemoveGpuTraceMarker(); |
+ --fGpuTraceMarkerCount; |
} |
} |
+bool GrDrawTarget::gpuTracingEnabled() const { |
+ return this->getContext()->gpuTracingEnabled(); |
+} |
//////////////////////////////////////////////////////////////////////////////// |
bool GrDrawTarget::willUseHWAALines() const { |