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