1a3c134897602f878da9dd858109498392a5daae9reed@google.com/* 2a3c134897602f878da9dd858109498392a5daae9reed@google.com * Copyright 2013 Google Inc. 3a3c134897602f878da9dd858109498392a5daae9reed@google.com * 4a3c134897602f878da9dd858109498392a5daae9reed@google.com * Use of this source code is governed by a BSD-style license that can be 5a3c134897602f878da9dd858109498392a5daae9reed@google.com * found in the LICENSE file. 6a3c134897602f878da9dd858109498392a5daae9reed@google.com */ 7a3c134897602f878da9dd858109498392a5daae9reed@google.com 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 9a3c134897602f878da9dd858109498392a5daae9reed@google.com#include "SkRandom.h" 10a3c134897602f878da9dd858109498392a5daae9reed@google.com#include "SkRegion.h" 11a3c134897602f878da9dd858109498392a5daae9reed@google.com#include "SkString.h" 12a3c134897602f878da9dd858109498392a5daae9reed@google.com 13a3c134897602f878da9dd858109498392a5daae9reed@google.comstatic bool sect_proc(SkRegion& a, SkRegion& b) { 14a3c134897602f878da9dd858109498392a5daae9reed@google.com SkRegion result; 15a3c134897602f878da9dd858109498392a5daae9reed@google.com return result.op(a, b, SkRegion::kIntersect_Op); 16a3c134897602f878da9dd858109498392a5daae9reed@google.com} 17a3c134897602f878da9dd858109498392a5daae9reed@google.com 18f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass RegionContainBench : public Benchmark { 19a3c134897602f878da9dd858109498392a5daae9reed@google.compublic: 20a3c134897602f878da9dd858109498392a5daae9reed@google.com typedef bool (*Proc)(SkRegion& a, SkRegion& b); 21a3c134897602f878da9dd858109498392a5daae9reed@google.com SkRegion fA, fB; 22a3c134897602f878da9dd858109498392a5daae9reed@google.com Proc fProc; 23a3c134897602f878da9dd858109498392a5daae9reed@google.com SkString fName; 24a3c134897602f878da9dd858109498392a5daae9reed@google.com 25a3c134897602f878da9dd858109498392a5daae9reed@google.com enum { 26a3c134897602f878da9dd858109498392a5daae9reed@google.com W = 200, 27a3c134897602f878da9dd858109498392a5daae9reed@google.com H = 200, 28a3c134897602f878da9dd858109498392a5daae9reed@google.com COUNT = 10, 29a3c134897602f878da9dd858109498392a5daae9reed@google.com }; 30a3c134897602f878da9dd858109498392a5daae9reed@google.com 31e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkIRect randrect(SkRandom& rand, int i) { 32a3c134897602f878da9dd858109498392a5daae9reed@google.com int w = rand.nextU() % W; 33a3c134897602f878da9dd858109498392a5daae9reed@google.com return SkIRect::MakeXYWH(0, i*H/COUNT, w, H/COUNT); 34a3c134897602f878da9dd858109498392a5daae9reed@google.com } 35a3c134897602f878da9dd858109498392a5daae9reed@google.com 36410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com RegionContainBench(Proc proc, const char name[]) { 37a3c134897602f878da9dd858109498392a5daae9reed@google.com fProc = proc; 38a3c134897602f878da9dd858109498392a5daae9reed@google.com fName.printf("region_contains_%s", name); 39a3c134897602f878da9dd858109498392a5daae9reed@google.com 40e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 41a3c134897602f878da9dd858109498392a5daae9reed@google.com for (int i = 0; i < COUNT; i++) { 42a3c134897602f878da9dd858109498392a5daae9reed@google.com fA.op(randrect(rand, i), SkRegion::kXOR_Op); 43a3c134897602f878da9dd858109498392a5daae9reed@google.com } 44a3c134897602f878da9dd858109498392a5daae9reed@google.com 45a3c134897602f878da9dd858109498392a5daae9reed@google.com fB.setRect(0, 0, H, W); 46644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org } 47a3c134897602f878da9dd858109498392a5daae9reed@google.com 48644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { 49644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org return backend == kNonRendering_Backend; 50a3c134897602f878da9dd858109498392a5daae9reed@google.com } 51a3c134897602f878da9dd858109498392a5daae9reed@google.com 52a3c134897602f878da9dd858109498392a5daae9reed@google.comprotected: 53a3c134897602f878da9dd858109498392a5daae9reed@google.com virtual const char* onGetName() { return fName.c_str(); } 54a3c134897602f878da9dd858109498392a5daae9reed@google.com 553361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas*) { 56a3c134897602f878da9dd858109498392a5daae9reed@google.com Proc proc = fProc; 57a3c134897602f878da9dd858109498392a5daae9reed@google.com 583361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; ++i) { 59a3c134897602f878da9dd858109498392a5daae9reed@google.com proc(fA, fB); 60a3c134897602f878da9dd858109498392a5daae9reed@google.com } 61a3c134897602f878da9dd858109498392a5daae9reed@google.com } 62a3c134897602f878da9dd858109498392a5daae9reed@google.com 63a3c134897602f878da9dd858109498392a5daae9reed@google.comprivate: 64f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 65a3c134897602f878da9dd858109498392a5daae9reed@google.com}; 66a3c134897602f878da9dd858109498392a5daae9reed@google.com 67410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(RegionContainBench, (sect_proc, "sect")); ) 68