• 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     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:
Iter()70     Iter() {};
71     Iter& operator=(const Iter& i) {
72         fCurrentIndex = i.fCurrentIndex;
73         fMarkers = i.fMarkers;
74         return *this;
75     }
76     bool operator==(const Iter& i) const {
77         return fCurrentIndex == i.fCurrentIndex && fMarkers == i.fMarkers;
78     }
79     bool operator!=(const Iter& i) const { return !(*this == i); }
80     const GrGpuTraceMarker& operator*() const { return fMarkers->fMarkerArray[fCurrentIndex]; }
81     Iter& operator++() {
82         SkASSERT(*this != fMarkers->end());
83         ++fCurrentIndex;
84         return *this;
85     }
86 
87 private:
88     friend class GrTraceMarkerSet;
Iter(const GrTraceMarkerSet * markers,int index)89     Iter(const GrTraceMarkerSet* markers, int index)
90             : fMarkers(markers), fCurrentIndex(index) {
91         SkASSERT(markers);
92     }
93 
94     const GrTraceMarkerSet* fMarkers;
95     int fCurrentIndex;
96 };
97 
98 #endif
99