Home | History | Annotate | Download | only in bench
      1 /*
      2  * Copyright 2013 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "SkBenchmark.h"
      9 #include "SkRandom.h"
     10 #include "SkRegion.h"
     11 #include "SkString.h"
     12 
     13 static bool sect_proc(SkRegion& a, SkRegion& b) {
     14     SkRegion result;
     15     return result.op(a, b, SkRegion::kIntersect_Op);
     16 }
     17 
     18 class RegionContainBench : public SkBenchmark {
     19 public:
     20     typedef bool (*Proc)(SkRegion& a, SkRegion& b);
     21     SkRegion fA, fB;
     22     Proc     fProc;
     23     SkString fName;
     24 
     25     enum {
     26         W = 200,
     27         H = 200,
     28         COUNT = 10,
     29         N = SkBENCHLOOP(20000)
     30     };
     31 
     32     SkIRect randrect(SkRandom& rand, int i) {
     33         int w = rand.nextU() % W;
     34         return SkIRect::MakeXYWH(0, i*H/COUNT, w, H/COUNT);
     35     }
     36 
     37     RegionContainBench(void* param, Proc proc, const char name[]) : INHERITED(param) {
     38         fProc = proc;
     39         fName.printf("region_contains_%s", name);
     40 
     41         SkRandom rand;
     42         for (int i = 0; i < COUNT; i++) {
     43             fA.op(randrect(rand, i), SkRegion::kXOR_Op);
     44         }
     45 
     46         fB.setRect(0, 0, H, W);
     47 
     48         fIsRendering = false;
     49     }
     50 
     51 protected:
     52     virtual const char* onGetName() { return fName.c_str(); }
     53 
     54     virtual void onDraw(SkCanvas*) {
     55         Proc proc = fProc;
     56 
     57         for (int i = 0; i < N; ++i) {
     58            proc(fA, fB);
     59         }
     60     }
     61 
     62 private:
     63     typedef SkBenchmark INHERITED;
     64 };
     65 
     66 static SkBenchmark* gF0(void* p) { return SkNEW_ARGS(RegionContainBench, (p, sect_proc, "sect")); }
     67 
     68 static BenchRegistry gR0(gF0);
     69