RegionContainBench.cpp revision e0e7cfe44bb9d66d76120a79e5275c294bacaa22
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 8a3c134897602f878da9dd858109498392a5daae9reed@google.com#include "SkBenchmark.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 18a3c134897602f878da9dd858109498392a5daae9reed@google.comclass RegionContainBench : public SkBenchmark { 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 N = SkBENCHLOOP(20000) 30a3c134897602f878da9dd858109498392a5daae9reed@google.com }; 31a3c134897602f878da9dd858109498392a5daae9reed@google.com 32e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkIRect randrect(SkRandom& rand, int i) { 33a3c134897602f878da9dd858109498392a5daae9reed@google.com int w = rand.nextU() % W; 34a3c134897602f878da9dd858109498392a5daae9reed@google.com return SkIRect::MakeXYWH(0, i*H/COUNT, w, H/COUNT); 35a3c134897602f878da9dd858109498392a5daae9reed@google.com } 36a3c134897602f878da9dd858109498392a5daae9reed@google.com 37a3c134897602f878da9dd858109498392a5daae9reed@google.com RegionContainBench(void* param, Proc proc, const char name[]) : INHERITED(param) { 38a3c134897602f878da9dd858109498392a5daae9reed@google.com fProc = proc; 39a3c134897602f878da9dd858109498392a5daae9reed@google.com fName.printf("region_contains_%s", name); 40a3c134897602f878da9dd858109498392a5daae9reed@google.com 41e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 42a3c134897602f878da9dd858109498392a5daae9reed@google.com for (int i = 0; i < COUNT; i++) { 43a3c134897602f878da9dd858109498392a5daae9reed@google.com fA.op(randrect(rand, i), SkRegion::kXOR_Op); 44a3c134897602f878da9dd858109498392a5daae9reed@google.com } 45a3c134897602f878da9dd858109498392a5daae9reed@google.com 46a3c134897602f878da9dd858109498392a5daae9reed@google.com fB.setRect(0, 0, H, W); 47a3c134897602f878da9dd858109498392a5daae9reed@google.com 48a3c134897602f878da9dd858109498392a5daae9reed@google.com fIsRendering = false; 49a3c134897602f878da9dd858109498392a5daae9reed@google.com } 50a3c134897602f878da9dd858109498392a5daae9reed@google.com 51a3c134897602f878da9dd858109498392a5daae9reed@google.comprotected: 52a3c134897602f878da9dd858109498392a5daae9reed@google.com virtual const char* onGetName() { return fName.c_str(); } 53a3c134897602f878da9dd858109498392a5daae9reed@google.com 5477472f06f88b85e85fb690584c85d0a42e74b685sugoi@google.com virtual void onDraw(SkCanvas*) { 55a3c134897602f878da9dd858109498392a5daae9reed@google.com Proc proc = fProc; 56a3c134897602f878da9dd858109498392a5daae9reed@google.com 57a3c134897602f878da9dd858109498392a5daae9reed@google.com for (int i = 0; i < N; ++i) { 58a3c134897602f878da9dd858109498392a5daae9reed@google.com proc(fA, fB); 59a3c134897602f878da9dd858109498392a5daae9reed@google.com } 60a3c134897602f878da9dd858109498392a5daae9reed@google.com } 61a3c134897602f878da9dd858109498392a5daae9reed@google.com 62a3c134897602f878da9dd858109498392a5daae9reed@google.comprivate: 63a3c134897602f878da9dd858109498392a5daae9reed@google.com typedef SkBenchmark INHERITED; 64a3c134897602f878da9dd858109498392a5daae9reed@google.com}; 65a3c134897602f878da9dd858109498392a5daae9reed@google.com 66a3c134897602f878da9dd858109498392a5daae9reed@google.comstatic SkBenchmark* gF0(void* p) { return SkNEW_ARGS(RegionContainBench, (p, sect_proc, "sect")); } 67a3c134897602f878da9dd858109498392a5daae9reed@google.com 68a3c134897602f878da9dd858109498392a5daae9reed@google.comstatic BenchRegistry gR0(gF0); 69