Home | History | Annotate | Download | only in gpu
      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:
     16     GrGpuTraceMarker() {};
     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:
     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:
     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;
     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