1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2013 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "Benchmark.h" 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRandom.h" 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRegion.h" 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkString.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic bool sect_proc(SkRegion& a, SkRegion& b) { 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRegion result; 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return result.op(a, b, SkRegion::kIntersect_Op); 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass RegionContainBench : public Benchmark { 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef bool (*Proc)(SkRegion& a, SkRegion& b); 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRegion fA, fB; 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Proc fProc; 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString fName; 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot enum { 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot W = 200, 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot H = 200, 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot COUNT = 10, 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot }; 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkIRect randrect(SkRandom& rand, int i) { 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int w = rand.nextU() % W; 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkIRect::MakeXYWH(0, i*H/COUNT, w, H/COUNT); 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot RegionContainBench(Proc proc, const char name[]) { 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fProc = proc; 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fName.printf("region_contains_%s", name); 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRandom rand; 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 0; i < COUNT; i++) { 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fA.op(randrect(rand, i), SkRegion::kXOR_Op); 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fB.setRect(0, 0, H, W); 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool isSuitableFor(Backend backend) override { 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return backend == kNonRendering_Backend; 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const char* onGetName() override { return fName.c_str(); } 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDraw(int loops, SkCanvas*) override { 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Proc proc = fProc; 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 0; i < loops; ++i) { 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot proc(fA, fB); 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef Benchmark INHERITED; 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH(return new RegionContainBench(sect_proc, "sect");) 68