12a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
22a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org/*
32a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org * Copyright 2014 Google Inc.
42a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org *
52a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be
62a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org * found in the LICENSE file.
72a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org */
82a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
92a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org#include "SkTDArray.h"
102a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
112a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org#ifndef GrTraceMarkerSet_DEFINED
122a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org#define GrTraceMarkerSet_DEFINED
132a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
142a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.orgclass GrGpuTraceMarker {
152a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.orgpublic:
162a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    GrGpuTraceMarker() {};
172a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    GrGpuTraceMarker(const char* marker, int idCounter) : fMarker(marker), fID(idCounter) {}
182a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
192a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    bool operator<(const GrGpuTraceMarker& rhs) const {
202a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org        return this->fMarker < rhs.fMarker || (this->fMarker == rhs.fMarker && this->fID < rhs.fID);
212a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    }
222a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
232a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    bool operator==(const GrGpuTraceMarker& rhs) const {
242a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org        return (this->fID == rhs.fID && this->fMarker == rhs.fMarker);
252a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    }
262a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
272a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    const char* fMarker;
282a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    int fID;
292a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org};
302a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
312a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org///////////////////////////////////////////////////////////////////////////////
322a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
332a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.orgclass SkString;
342a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
352a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.orgclass GrTraceMarkerSet {
362a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.orgpublic:
372a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    GrTraceMarkerSet() {}
382a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
392a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    GrTraceMarkerSet(const GrTraceMarkerSet& other);
402a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
412a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    // Adds marker to the set.
42db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.com    void add(const GrGpuTraceMarker& marker);
432a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    // Adds all markers from one set into this set.
442a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    void addSet(const GrTraceMarkerSet& markerSet);
452a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
462a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    void remove(const GrGpuTraceMarker& marker);
472a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
482a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    int count() const;
492a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
502a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    /**
512a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org     * First sorts fMarkerArray and returns a string of the format
522a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org     * MarkerName1(#,#,...)%MarkerName2(#,#,...):... where MarkerName is the
532a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org     * marker string used in the TraceMarker and the (#,#,..) is a list of instance
542a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org     * id's for the the given marker string
552a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org     */
56db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.com    SkString toString() const;
572a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
58d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel    SkString toStringLast() const;
59d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel
602a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    class Iter;
612a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
622a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    Iter begin() const;
632a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
642a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    Iter end() const;
652a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
662a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.orgprivate:
672a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org    mutable SkTDArray<GrGpuTraceMarker> fMarkerArray;
682a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org};
692a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org
703eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdanielclass GrTraceMarkerSet::Iter {
713eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdanielpublic:
723eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel    Iter() {};
733eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel    Iter& operator=(const Iter& i) {
743eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel        fCurrentIndex = i.fCurrentIndex;
753eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel        fMarkers = i.fMarkers;
763eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel        return *this;
773eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel    }
783eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel    bool operator==(const Iter& i) const {
793eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel        return fCurrentIndex == i.fCurrentIndex && fMarkers == i.fMarkers;
803eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel    }
813eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel    bool operator!=(const Iter& i) const { return !(*this == i); }
823eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel    const GrGpuTraceMarker& operator*() const { return fMarkers->fMarkerArray[fCurrentIndex]; }
833eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel    Iter& operator++() {
843eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel        SkASSERT(*this != fMarkers->end());
853eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel        ++fCurrentIndex;
863eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel        return *this;
873eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel    }
883eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel
893eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdanielprivate:
903eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel    friend class GrTraceMarkerSet;
913eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel    Iter(const GrTraceMarkerSet* markers, int index)
923eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel            : fMarkers(markers), fCurrentIndex(index) {
933eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel        SkASSERT(markers);
943eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel    }
953eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel
963eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel    const GrTraceMarkerSet* fMarkers;
973eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel    int fCurrentIndex;
983eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel};
993eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel
1002a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org#endif
101