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