Line data Source code
1 : /*
2 : * Copyright 2014 Google Inc.
3 : *
4 : * Use of this source code is governed by a BSD-style license that can be
5 : * found in the LICENSE file.
6 : */
7 :
8 : #include "GrTraceMarker.h"
9 : #include "GrTracing.h"
10 : #include "SkString.h"
11 : #include "SkTSort.h"
12 :
13 : ////////////////////////////////////////////////////////////////////////////////
14 :
15 : ////////////////////////////////////////////////////////////////////////////////
16 :
17 0 : GrTraceMarkerSet::GrTraceMarkerSet(const GrTraceMarkerSet& other) {
18 0 : this->addSet(other);
19 0 : }
20 :
21 0 : void GrTraceMarkerSet::add(const GrGpuTraceMarker& marker) {
22 0 : this->fMarkerArray.push(marker);
23 0 : }
24 :
25 0 : void GrTraceMarkerSet::addSet(const GrTraceMarkerSet& markerSet) {
26 0 : for (Iter iter = markerSet.begin(); iter != markerSet.end(); ++iter) {
27 0 : this->add(*iter);
28 : }
29 0 : }
30 :
31 0 : void GrTraceMarkerSet::remove(const GrGpuTraceMarker& marker) {
32 0 : SkASSERT(-1 != fMarkerArray.find(marker));
33 0 : int index = this->fMarkerArray.find(marker);
34 0 : this->fMarkerArray.remove(index);
35 0 : }
36 :
37 0 : int GrTraceMarkerSet::count() const {
38 0 : return this->fMarkerArray.count();
39 : }
40 :
41 0 : SkString GrTraceMarkerSet::toStringLast() const {
42 0 : const int numMarkers = this->fMarkerArray.count();
43 0 : SkString marker_string;
44 0 : if (numMarkers > 0) {
45 0 : GrGpuTraceMarker& lastMarker = this->fMarkerArray[numMarkers - 1];
46 0 : marker_string.append(lastMarker.fMarker);
47 0 : if (lastMarker.fID != -1) {
48 0 : marker_string.append("(");
49 0 : marker_string.appendS32(lastMarker.fID);
50 0 : marker_string.append(")");
51 : }
52 : }
53 0 : return marker_string;
54 : }
55 :
56 0 : SkString GrTraceMarkerSet::toString() const {
57 0 : SkTQSort<GrGpuTraceMarker>(this->fMarkerArray.begin(), this->fMarkerArray.end() - 1);
58 0 : SkString marker_string;
59 0 : const char* prevMarkerName = "";
60 0 : int prevMarkerID = -1;
61 0 : int counter = 0;
62 0 : const int numMarkers = this->fMarkerArray.count();
63 :
64 : // check used for GrGLGpu device after we've already collapsed all markers
65 0 : if (1 == numMarkers && -1 == this->fMarkerArray[0].fID) {
66 0 : marker_string.append(this->fMarkerArray[0].fMarker);
67 0 : return marker_string;
68 : }
69 :
70 0 : for (int i = 0; i < numMarkers; ++i ) {
71 0 : GrGpuTraceMarker& currMarker = this->fMarkerArray[i];
72 0 : const char* currCmd = currMarker.fMarker;
73 0 : if (currCmd != prevMarkerName) {
74 0 : if (prevMarkerID != -1) {
75 0 : marker_string.append(") ");
76 : }
77 0 : marker_string.append(currCmd);
78 0 : if (currMarker.fID != -1) {
79 0 : marker_string.append("(");
80 0 : marker_string.appendS32(currMarker.fID);
81 : }
82 0 : prevMarkerName = currCmd;
83 0 : } else if (currMarker.fID != prevMarkerID) {
84 0 : marker_string.append(", ");
85 0 : marker_string.appendS32(currMarker.fID);
86 : }
87 0 : prevMarkerID = currMarker.fID;
88 0 : ++counter;
89 : }
90 0 : if (counter > 0 && prevMarkerID != -1) {
91 0 : marker_string.append(")");
92 : }
93 0 : return marker_string;
94 : }
95 :
96 0 : GrTraceMarkerSet::Iter GrTraceMarkerSet::begin() const {
97 0 : return Iter(this, 0);
98 : }
99 :
100 0 : GrTraceMarkerSet::Iter GrTraceMarkerSet::end() const {
101 0 : return Iter(this, this->fMarkerArray.count());
102 : }
|