diff options
Diffstat (limited to 'chromium/third_party/skia/src/gpu/GrTraceMarker.h')
-rw-r--r-- | chromium/third_party/skia/src/gpu/GrTraceMarker.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/chromium/third_party/skia/src/gpu/GrTraceMarker.h b/chromium/third_party/skia/src/gpu/GrTraceMarker.h new file mode 100644 index 00000000000..fa4904e0c9c --- /dev/null +++ b/chromium/third_party/skia/src/gpu/GrTraceMarker.h @@ -0,0 +1,98 @@ + +/* + * Copyright 2014 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkTDArray.h" + +#ifndef GrTraceMarkerSet_DEFINED +#define GrTraceMarkerSet_DEFINED + +class GrGpuTraceMarker { +public: + GrGpuTraceMarker() {}; + GrGpuTraceMarker(const char* marker, int idCounter) : fMarker(marker), fID(idCounter) {} + + bool operator<(const GrGpuTraceMarker& rhs) const { + return this->fMarker < rhs.fMarker || (this->fMarker == rhs.fMarker && this->fID < rhs.fID); + } + + bool operator==(const GrGpuTraceMarker& rhs) const { + return (this->fID == rhs.fID && this->fMarker == rhs.fMarker); + } + + const char* fMarker; + int fID; +}; + +/////////////////////////////////////////////////////////////////////////////// + +class SkString; + +class GrTraceMarkerSet { +public: + GrTraceMarkerSet() {} + + GrTraceMarkerSet(const GrTraceMarkerSet& other); + + // Adds marker to the set. + void add(const GrGpuTraceMarker& marker); + // Adds all markers from one set into this set. + void addSet(const GrTraceMarkerSet& markerSet); + + void remove(const GrGpuTraceMarker& marker); + + int count() const; + + /** + * First sorts fMarkerArray and returns a string of the format + * MarkerName1(#,#,...)%MarkerName2(#,#,...):... where MarkerName is the + * marker string used in the TraceMarker and the (#,#,..) is a list of instance + * id's for the the given marker string + */ + SkString toString() const; + + class Iter; + + Iter begin() const; + + Iter end() const; + +private: + mutable SkTDArray<GrGpuTraceMarker> fMarkerArray; +}; + +class GrTraceMarkerSet::Iter { +public: + Iter() {}; + Iter& operator=(const Iter& i) { + fCurrentIndex = i.fCurrentIndex; + fMarkers = i.fMarkers; + return *this; + } + bool operator==(const Iter& i) const { + return fCurrentIndex == i.fCurrentIndex && fMarkers == i.fMarkers; + } + bool operator!=(const Iter& i) const { return !(*this == i); } + const GrGpuTraceMarker& operator*() const { return fMarkers->fMarkerArray[fCurrentIndex]; } + Iter& operator++() { + SkASSERT(*this != fMarkers->end()); + ++fCurrentIndex; + return *this; + } + +private: + friend class GrTraceMarkerSet; + Iter(const GrTraceMarkerSet* markers, int index) + : fMarkers(markers), fCurrentIndex(index) { + SkASSERT(markers); + } + + const GrTraceMarkerSet* fMarkers; + int fCurrentIndex; +}; + +#endif |