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 |