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 "SkTDArray.h"
9 :
10 : #ifndef GrTraceMarkerSet_DEFINED
11 : #define GrTraceMarkerSet_DEFINED
12 :
13 : class GrGpuTraceMarker {
14 : public:
15 : GrGpuTraceMarker(const char* marker, int idCounter) : fMarker(marker), fID(idCounter) {}
16 :
17 0 : bool operator<(const GrGpuTraceMarker& rhs) const {
18 0 : return this->fMarker < rhs.fMarker || (this->fMarker == rhs.fMarker && this->fID < rhs.fID);
19 : }
20 :
21 0 : bool operator==(const GrGpuTraceMarker& rhs) const {
22 0 : return (this->fID == rhs.fID && this->fMarker == rhs.fMarker);
23 : }
24 :
25 : const char* fMarker;
26 : int fID;
27 : };
28 :
29 : ///////////////////////////////////////////////////////////////////////////////
30 :
31 : class SkString;
32 :
33 : class GrTraceMarkerSet {
34 : public:
35 : GrTraceMarkerSet() {}
36 :
37 : GrTraceMarkerSet(const GrTraceMarkerSet& other);
38 :
39 : // Adds marker to the set.
40 : void add(const GrGpuTraceMarker& marker);
41 : // Adds all markers from one set into this set.
42 : void addSet(const GrTraceMarkerSet& markerSet);
43 :
44 : void remove(const GrGpuTraceMarker& marker);
45 :
46 : int count() const;
47 :
48 : /**
49 : * First sorts fMarkerArray and returns a string of the format
50 : * MarkerName1(#,#,...)%MarkerName2(#,#,...):... where MarkerName is the
51 : * marker string used in the TraceMarker and the (#,#,..) is a list of instance
52 : * id's for the the given marker string
53 : */
54 : SkString toString() const;
55 :
56 : SkString toStringLast() const;
57 :
58 : class Iter;
59 :
60 : Iter begin() const;
61 :
62 : Iter end() const;
63 :
64 : private:
65 : mutable SkTDArray<GrGpuTraceMarker> fMarkerArray;
66 : };
67 :
68 : class GrTraceMarkerSet::Iter {
69 : public:
70 : Iter() {}
71 : Iter& operator=(const Iter& i) {
72 : fCurrentIndex = i.fCurrentIndex;
73 : fMarkers = i.fMarkers;
74 : return *this;
75 : }
76 0 : bool operator==(const Iter& i) const {
77 0 : return fCurrentIndex == i.fCurrentIndex && fMarkers == i.fMarkers;
78 : }
79 0 : bool operator!=(const Iter& i) const { return !(*this == i); }
80 0 : const GrGpuTraceMarker& operator*() const { return fMarkers->fMarkerArray[fCurrentIndex]; }
81 0 : Iter& operator++() {
82 0 : SkASSERT(*this != fMarkers->end());
83 0 : ++fCurrentIndex;
84 0 : return *this;
85 : }
86 :
87 : private:
88 : friend class GrTraceMarkerSet;
89 0 : Iter(const GrTraceMarkerSet* markers, int index)
90 0 : : fMarkers(markers), fCurrentIndex(index) {
91 0 : SkASSERT(markers);
92 0 : }
93 :
94 : const GrTraceMarkerSet* fMarkers;
95 : int fCurrentIndex;
96 : };
97 :
98 : #endif
|