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 "GrTraceMarker.h" 102a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org#include "GrTracing.h" 112a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org#include "SkString.h" 122a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org#include "SkTSort.h" 132a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org 142a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org//////////////////////////////////////////////////////////////////////////////// 152a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org 162a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org//////////////////////////////////////////////////////////////////////////////// 172a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org 182a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.orgGrTraceMarkerSet::GrTraceMarkerSet(const GrTraceMarkerSet& other) { 19db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.com this->addSet(other); 202a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org} 212a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org 222a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.orgvoid GrTraceMarkerSet::add(const GrGpuTraceMarker& marker) { 232a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org this->fMarkerArray.push(marker); 242a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org} 252a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org 262a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.orgvoid GrTraceMarkerSet::addSet(const GrTraceMarkerSet& markerSet) { 272a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org for (Iter iter = markerSet.begin(); iter != markerSet.end(); ++iter) { 282a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org this->add(*iter); 292a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org } 302a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org} 312a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org 322a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.orgvoid GrTraceMarkerSet::remove(const GrGpuTraceMarker& marker) { 332a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org SkASSERT(-1 != fMarkerArray.find(marker)); 342a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org int index = this->fMarkerArray.find(marker); 352a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org this->fMarkerArray.remove(index); 362a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org} 372a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org 382a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.orgint GrTraceMarkerSet::count() const { 392a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org return this->fMarkerArray.count(); 402a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org} 412a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org 42d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdanielSkString GrTraceMarkerSet::toStringLast() const { 43d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel const int numMarkers = this->fMarkerArray.count(); 44d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel SkString marker_string; 45d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel if (numMarkers > 0) { 46d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel GrGpuTraceMarker& lastMarker = this->fMarkerArray[numMarkers - 1]; 47d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel marker_string.append(lastMarker.fMarker); 48d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel if (lastMarker.fID != -1) { 49d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel marker_string.append("("); 50d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel marker_string.appendS32(lastMarker.fID); 51d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel marker_string.append(")"); 52d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel } 53d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel } 54d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel return marker_string; 55d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel} 56d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel 572a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.orgSkString GrTraceMarkerSet::toString() const { 582a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org SkTQSort<GrGpuTraceMarker>(this->fMarkerArray.begin(), this->fMarkerArray.end() - 1); 592a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org SkString marker_string; 602a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org const char* prevMarkerName = ""; 612a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org int prevMarkerID = -1; 622a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org int counter = 0; 632a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org const int numMarkers = this->fMarkerArray.count(); 642a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org 65861e1037017bbb7ac52ec5ebecab3a636a82a3e8bsalomon // check used for GrGLGpu device after we've already collapsed all markers 662a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org if (1 == numMarkers && -1 == this->fMarkerArray[0].fID) { 672a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org marker_string.append(this->fMarkerArray[0].fMarker); 682a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org return marker_string; 692a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org } 702a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org 712a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org for (int i = 0; i < numMarkers; ++i ) { 722a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org GrGpuTraceMarker& currMarker = this->fMarkerArray[i]; 732a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org const char* currCmd = currMarker.fMarker; 742a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org if (currCmd != prevMarkerName) { 75d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel if (prevMarkerID != -1) { 762a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org marker_string.append(") "); 772a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org } 782a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org marker_string.append(currCmd); 79d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel if (currMarker.fID != -1) { 80d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel marker_string.append("("); 81d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel marker_string.appendS32(currMarker.fID); 82d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel } 832a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org prevMarkerName = currCmd; 842a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org } else if (currMarker.fID != prevMarkerID) { 852a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org marker_string.append(", "); 862a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org marker_string.appendS32(currMarker.fID); 872a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org } 882a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org prevMarkerID = currMarker.fID; 892a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org ++counter; 902a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org } 91d78a168ec2ec2c07c0c1845e6a1781988e4a52d9egdaniel if (counter > 0 && prevMarkerID != -1) { 922a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org marker_string.append(")"); 932a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org } 942a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org return marker_string; 952a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org} 962a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org 972a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.orgGrTraceMarkerSet::Iter GrTraceMarkerSet::begin() const { 982a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org return Iter(this, 0); 992a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org} 1002a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org 1012a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.orgGrTraceMarkerSet::Iter GrTraceMarkerSet::end() const { 1022a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org return Iter(this, this->fMarkerArray.count()); 1032a05de0c049a8648942a55016126a1f92e1c14d6commit-bot@chromium.org} 1043eee3834fba1d2e29dfb61adcb97e4624b6a3ac8egdaniel 105