blob: c4d2ad4cef040f53830e2cfc9a89fd4485122ffa [file] [log] [blame]
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +00001/*
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
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000015////////////////////////////////////////////////////////////////////////////////
16
17GrTraceMarkerSet::GrTraceMarkerSet(const GrTraceMarkerSet& other) {
skia.committer@gmail.comdb35dab2014-03-27 03:02:48 +000018 this->addSet(other);
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000019}
20
21void GrTraceMarkerSet::add(const GrGpuTraceMarker& marker) {
22 this->fMarkerArray.push(marker);
23}
24
25void GrTraceMarkerSet::addSet(const GrTraceMarkerSet& markerSet) {
26 for (Iter iter = markerSet.begin(); iter != markerSet.end(); ++iter) {
27 this->add(*iter);
28 }
29}
30
31void GrTraceMarkerSet::remove(const GrGpuTraceMarker& marker) {
32 SkASSERT(-1 != fMarkerArray.find(marker));
33 int index = this->fMarkerArray.find(marker);
34 this->fMarkerArray.remove(index);
35}
36
37int GrTraceMarkerSet::count() const {
38 return this->fMarkerArray.count();
39}
40
egdanield78a1682014-07-09 10:41:26 -070041SkString GrTraceMarkerSet::toStringLast() const {
42 const int numMarkers = this->fMarkerArray.count();
43 SkString marker_string;
44 if (numMarkers > 0) {
45 GrGpuTraceMarker& lastMarker = this->fMarkerArray[numMarkers - 1];
46 marker_string.append(lastMarker.fMarker);
47 if (lastMarker.fID != -1) {
48 marker_string.append("(");
49 marker_string.appendS32(lastMarker.fID);
50 marker_string.append(")");
51 }
52 }
53 return marker_string;
54}
55
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000056SkString GrTraceMarkerSet::toString() const {
57 SkTQSort<GrGpuTraceMarker>(this->fMarkerArray.begin(), this->fMarkerArray.end() - 1);
58 SkString marker_string;
59 const char* prevMarkerName = "";
60 int prevMarkerID = -1;
61 int counter = 0;
62 const int numMarkers = this->fMarkerArray.count();
63
bsalomon861e1032014-12-16 07:33:49 -080064 // check used for GrGLGpu device after we've already collapsed all markers
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000065 if (1 == numMarkers && -1 == this->fMarkerArray[0].fID) {
66 marker_string.append(this->fMarkerArray[0].fMarker);
67 return marker_string;
68 }
69
70 for (int i = 0; i < numMarkers; ++i ) {
71 GrGpuTraceMarker& currMarker = this->fMarkerArray[i];
72 const char* currCmd = currMarker.fMarker;
73 if (currCmd != prevMarkerName) {
egdanield78a1682014-07-09 10:41:26 -070074 if (prevMarkerID != -1) {
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000075 marker_string.append(") ");
76 }
77 marker_string.append(currCmd);
egdanield78a1682014-07-09 10:41:26 -070078 if (currMarker.fID != -1) {
79 marker_string.append("(");
80 marker_string.appendS32(currMarker.fID);
81 }
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000082 prevMarkerName = currCmd;
83 } else if (currMarker.fID != prevMarkerID) {
84 marker_string.append(", ");
85 marker_string.appendS32(currMarker.fID);
86 }
87 prevMarkerID = currMarker.fID;
88 ++counter;
89 }
egdanield78a1682014-07-09 10:41:26 -070090 if (counter > 0 && prevMarkerID != -1) {
commit-bot@chromium.org2a05de02014-03-25 15:17:32 +000091 marker_string.append(")");
92 }
93 return marker_string;
94}
95
96GrTraceMarkerSet::Iter GrTraceMarkerSet::begin() const {
97 return Iter(this, 0);
98}
99
100GrTraceMarkerSet::Iter GrTraceMarkerSet::end() const {
101 return Iter(this, this->fMarkerArray.count());
102}