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