14fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org/* 24fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org * Copyright 2014 Google Inc. 34fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org * 44fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 54fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org * found in the LICENSE file. 64fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org */ 74fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 94fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org#include "SkCanvas.h" 104fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org#include "SkRandom.h" 114fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org#include "SkString.h" 124fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org#if SK_SUPPORT_GPU 134fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org#include "GrOrderedSet.h" 144fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 154fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.orgstatic const int NUM_ELEMENTS = 1000; 164fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 174fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org// Time how long it takes to build a set 18f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass GrOrderedSetBuildBench : public Benchmark { 194fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.orgpublic: 204fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org GrOrderedSetBuildBench() { 214fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org fName.append("ordered_set_build"); 224fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 234fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 244fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { 254fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org return kNonRendering_Backend == backend; 264fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 274fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 284fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org virtual ~GrOrderedSetBuildBench() {} 294fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 304fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.orgprotected: 314fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org virtual const char* onGetName() SK_OVERRIDE { 324fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org return fName.c_str(); 334fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 344fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 354fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org virtual void onPreDraw() SK_OVERRIDE { 364fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org SkRandom rand; 374fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org for (int j = 0; j < NUM_ELEMENTS; ++j) { 384fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org fData[j] = rand.nextU() % NUM_ELEMENTS; 394fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 404fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 414fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 424fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 434fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org for (int i = 0; i < loops; ++i) { 444fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org GrOrderedSet<int> set; 454fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org for (int j = 0; j < NUM_ELEMENTS; ++j) { 464fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org set.insert(fData[j]); 474fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 484fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org set.reset(); 494fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 504fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 514fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 524fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.orgprivate: 534fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org SkString fName; 544fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org int fData[NUM_ELEMENTS]; 55f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 564fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org}; 574fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 584fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org// Time how long it takes to find elements in a set 59f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass GrOrderedSetFindBench : public Benchmark { 604fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.orgpublic: 614fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org GrOrderedSetFindBench() { 624fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org fName.append("ordered_set_find"); 634fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 644fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 654fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { 664fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org return kNonRendering_Backend == backend; 674fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 684fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 694fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org virtual ~GrOrderedSetFindBench() {} 704fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 714fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.orgprotected: 724fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org virtual const char* onGetName() SK_OVERRIDE { 734fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org return fName.c_str(); 744fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 754fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 764fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org virtual void onPreDraw() SK_OVERRIDE { 774fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org SkRandom rand; 784fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org for (int j = 0; j < NUM_ELEMENTS; ++j) { 794fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org fData[j] = rand.nextU() % 1500; 804fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org fSet.insert(rand.nextU() % NUM_ELEMENTS); 814fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 824fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 834fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 844fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 854fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org for (int i = 0; i < loops; ++i) { 864fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org for (int j = 0; j < NUM_ELEMENTS; ++j) { 874fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org fSet.find(fData[j]); 884fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 894fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 904fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 914fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 924fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.orgprivate: 934fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org SkString fName; 944fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org int fData[NUM_ELEMENTS]; 954fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org GrOrderedSet<int> fSet; 96f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 974fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org}; 984fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 994fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org// Time how long it takes to iterate over and remove all elements from set 100f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass GrOrderedSetRemoveBench : public Benchmark { 1014fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.orgpublic: 1024fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org GrOrderedSetRemoveBench() { 1034fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org fName.append("ordered_set_remove"); 1044fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 1054fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 1064fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { 1074fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org return kNonRendering_Backend == backend; 1084fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 1094fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 1104fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org virtual ~GrOrderedSetRemoveBench() {} 1114fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 1124fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.orgprotected: 1134fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org virtual const char* onGetName() SK_OVERRIDE { 1144fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org return fName.c_str(); 1154fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 1164fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 1174fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org virtual void onPreDraw() SK_OVERRIDE { 1184fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org SkRandom rand; 1194fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org for (int j = 0; j < NUM_ELEMENTS; ++j) { 1204fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org fSet.insert(rand.nextU() % NUM_ELEMENTS); 1214fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 1224fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 1234fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 1244fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 1254fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org typedef GrOrderedSet<int>::Iter SetIter; 1264fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org for (int i = 0; i < loops; ++i) { 1274fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org GrOrderedSet<int> testSet; 1284fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org for (SetIter s = fSet.begin(); fSet.end() != s; ++s) { 1294fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org testSet.insert(*s); 1304fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 1314fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org for (int j = 0; j < NUM_ELEMENTS; ++j) { 1324fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org testSet.remove(testSet.find(j)); 1334fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 1344fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 1354fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org } 1364fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 1374fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.orgprivate: 1384fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org SkString fName; 1394fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org GrOrderedSet<int> fSet; 140f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 1414fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org}; 1424fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 1434fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org/////////////////////////////////////////////////////////////////////////////// 1444fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org 1454fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.orgDEF_BENCH(return SkNEW_ARGS(GrOrderedSetBuildBench, ());) 1464fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.orgDEF_BENCH(return SkNEW_ARGS(GrOrderedSetFindBench, ());) 1474fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.orgDEF_BENCH(return SkNEW_ARGS(GrOrderedSetRemoveBench, ());) 1484fcc3ca4112754f99a7d94b07e8ebbb0cb8c09eacommit-bot@chromium.org#endif 149