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