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