• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2012 The Android Open Source Project
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 "Benchmark.h"
9 #include "SkCanvas.h"
10 
11 
12 /**
13  * This bench mark tests the use case where the user writes the a canvas
14  * and then reads small chunks from it repeatedly. This can cause trouble
15  * for the GPU as readbacks are very expensive.
16  */
17 class ReadPixBench : public Benchmark {
18 public:
ReadPixBench()19     ReadPixBench() {}
20 
21 protected:
onGetName()22     const char* onGetName() override {
23         return "readpix";
24     }
25 
onDraw(int loops,SkCanvas * canvas)26     void onDraw(int loops, SkCanvas* canvas) override {
27         canvas->clear(SK_ColorBLACK);
28 
29         SkISize size = canvas->getBaseLayerSize();
30 
31         int offX = (size.width() - kWindowSize) / kNumStepsX;
32         int offY = (size.height() - kWindowSize) / kNumStepsY;
33 
34         SkPaint paint;
35 
36         paint.setColor(SK_ColorBLUE);
37 
38         canvas->drawCircle(SkIntToScalar(size.width()/2),
39                            SkIntToScalar(size.height()/2),
40                            SkIntToScalar(size.width()/2),
41                            paint);
42 
43         SkBitmap bitmap;
44 
45         bitmap.setInfo(SkImageInfo::MakeN32Premul(kWindowSize, kWindowSize));
46 
47         for (int i = 0; i < loops; i++) {
48             for (int x = 0; x < kNumStepsX; ++x) {
49                 for (int y = 0; y < kNumStepsY; ++y) {
50                     canvas->readPixels(&bitmap, x * offX, y * offY);
51                 }
52             }
53         }
54     }
55 
56 private:
57     static const int kNumStepsX = 30;
58     static const int kNumStepsY = 30;
59     static const int kWindowSize = 5;
60 
61     typedef Benchmark INHERITED;
62 };
63 
64 ////////////////////////////////////////////////////////////////////////////////
65 
66 DEF_BENCH( return new ReadPixBench(); )
67