Chromium Code Reviews| 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 { |