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     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:
     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;
     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