Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 | |
| 2 /* | |
| 3 * Copyright 2014 Google Inc. | |
| 4 * | |
| 5 * Use of this source code is governed by a BSD-style license that can be | |
| 6 * found in the LICENSE file. | |
| 7 */ | |
| 8 | |
| 9 #include "GrDrawTarget.h" | |
| 10 #include "GrTracing.h" | |
| 11 #include "SkString.h" | |
| 12 #include "SkTDArray.h" | |
| 13 #include "SkTSort.h" | |
| 14 | |
| 15 //////////////////////////////////////////////////////////////////////////////// | |
| 16 | |
| 17 class GrTraceMarkerSet::Iter { | |
| 18 public: | |
| 19 Iter() {}; | |
| 20 Iter& operator=(const Iter& i) { | |
| 21 fCurrentIndex = i.fCurrentIndex; | |
| 22 fMarkers = i.fMarkers; | |
| 23 return *this; | |
| 24 } | |
| 25 bool operator==(const Iter& i) const { | |
| 26 return fCurrentIndex == i.fCurrentIndex && fMarkers == i.fMarkers; | |
| 27 } | |
| 28 bool operator!=(const Iter& i) const { return !(*this == i); } | |
| 29 const GrGpuTraceMarker& operator*() const { return fMarkers->fMarkerArray[fC urrentIndex]; } | |
| 30 Iter& operator++() { | |
| 31 SkASSERT(*this != fMarkers->end()); | |
| 32 ++fCurrentIndex; | |
| 33 return *this; | |
| 34 } | |
| 35 | |
| 36 private: | |
| 37 friend class GrTraceMarkerSet; | |
| 38 explicit Iter(const GrTraceMarkerSet* markers, int index) | |
|
bsalomon
2014/03/20 16:32:53
don't need explicit with 2 args, right?
| |
| 39 : fMarkers(markers), fCurrentIndex(index) { | |
| 40 SkASSERT(markers); | |
| 41 } | |
| 42 | |
| 43 const GrTraceMarkerSet* fMarkers; | |
| 44 int fCurrentIndex; | |
| 45 }; | |
| 46 | |
| 47 //////////////////////////////////////////////////////////////////////////////// | |
| 48 | |
| 49 GrTraceMarkerSet::GrTraceMarkerSet(const GrTraceMarkerSet& other) { | |
| 50 this->addSet(other); | |
| 51 } | |
| 52 | |
| 53 void GrTraceMarkerSet::add(const GrGpuTraceMarker& marker) { | |
| 54 this->fMarkerArray.push(marker); | |
| 55 } | |
| 56 | |
| 57 void GrTraceMarkerSet::addSet(const GrTraceMarkerSet& markerSet) { | |
| 58 for (Iter iter = markerSet.begin(); iter != markerSet.end(); ++iter) { | |
| 59 this->add(*iter); | |
| 60 } | |
| 61 } | |
| 62 | |
| 63 void GrTraceMarkerSet::remove(const GrGpuTraceMarker& marker) { | |
| 64 SkASSERT(-1 != fMarkerArray.find(marker)); | |
| 65 int index = this->fMarkerArray.find(marker); | |
| 66 this->fMarkerArray.remove(index); | |
| 67 } | |
| 68 | |
| 69 int GrTraceMarkerSet::count() const { | |
| 70 return this->fMarkerArray.count(); | |
| 71 } | |
| 72 | |
| 73 SkString GrTraceMarkerSet::toString() const { | |
| 74 SkTQSort<GrGpuTraceMarker>(this->fMarkerArray.begin(), this->fMarkerArray.en d() - 1); | |
| 75 SkString marker_string; | |
| 76 const char* prevMarkerName = ""; | |
| 77 int prevMarkerID = -1; | |
| 78 int counter = 0; | |
| 79 const int numMarkers = this->fMarkerArray.count(); | |
| 80 | |
| 81 // check used for GrGpuGL device after we've already collapsed all markers | |
| 82 if (1 == numMarkers && -1 == this->fMarkerArray[0].fID) { | |
| 83 marker_string.append(this->fMarkerArray[0].fMarker); | |
| 84 return marker_string; | |
| 85 } | |
| 86 | |
| 87 for (int i = 0; i < numMarkers; ++i ) { | |
| 88 GrGpuTraceMarker& currMarker = this->fMarkerArray[i]; | |
| 89 const char* currCmd = currMarker.fMarker; | |
| 90 if (currCmd != prevMarkerName) { | |
| 91 if (counter != 0) { | |
| 92 marker_string.append(")%"); | |
| 93 } | |
| 94 marker_string.append(currCmd); | |
| 95 marker_string.append("("); | |
| 96 marker_string.appendS32(currMarker.fID); | |
| 97 prevMarkerName = currCmd; | |
| 98 } else if (currMarker.fID != prevMarkerID) { | |
| 99 marker_string.append(", "); | |
| 100 marker_string.appendS32(currMarker.fID); | |
| 101 } | |
| 102 prevMarkerID = currMarker.fID; | |
| 103 ++counter; | |
| 104 } | |
| 105 if (counter > 0) { | |
| 106 marker_string.append(")"); | |
| 107 } | |
| 108 return marker_string; | |
| 109 } | |
| 110 | |
| 111 GrTraceMarkerSet::Iter GrTraceMarkerSet::begin() const { | |
| 112 return Iter(this, 0); | |
| 113 } | |
| 114 | |
| 115 GrTraceMarkerSet::Iter GrTraceMarkerSet::end() const { | |
| 116 return Iter(this, this->fMarkerArray.count()); | |
| 117 } | |
| 118 | |
| 119 //////////////////////////////////////////////////////////////////////////////// | |
| 120 | |
| 121 GrGpuTraceMarkerGenerator::GrGpuTraceMarkerGenerator(const char* marker_str, int * marker_counter, | |
| 122 GrDrawTarget* target) | |
| 123 : fTarget(target), fTraceMarker(marker_str, *marker_counter) { | |
| 124 if (fTarget->isGpuTracingEnabled()) { | |
| 125 fTarget->addGpuTraceMarker(&fTraceMarker); | |
| 126 } | |
| 127 } | |
| 128 | |
| 129 GrGpuTraceMarkerGenerator::~GrGpuTraceMarkerGenerator() { | |
| 130 if (fTarget->isGpuTracingEnabled()) { | |
| 131 fTarget->removeGpuTraceMarker(&fTraceMarker); | |
| 132 } | |
| 133 } | |
| 134 | |
| OLD | NEW |