OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2012 The Android Open Source Project | 3 * Copyright 2012 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "SkBenchmark.h" | 9 #include "SkBenchmark.h" |
10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
11 | 11 |
12 | 12 |
13 /** | 13 /** |
14 * This bench mark tests the use case where the user writes the a canvas | 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 | 15 * and then reads small chunks from it repeatedly. This can cause trouble |
16 * for the GPU as readbacks are very expensive. | 16 * for the GPU as readbacks are very expensive. |
17 */ | 17 */ |
18 class ReadPixBench : public SkBenchmark { | 18 class ReadPixBench : public SkBenchmark { |
19 public: | 19 public: |
20 ReadPixBench() {} | 20 ReadPixBench() {} |
21 | 21 |
22 protected: | 22 protected: |
23 virtual const char* onGetName() SK_OVERRIDE { | 23 virtual const char* onGetName() SK_OVERRIDE { |
24 return "readpix"; | 24 return "readpix"; |
25 } | 25 } |
26 | 26 |
27 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { | 27 virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { |
28 canvas->clear(SK_ColorBLACK); | 28 canvas->clear(SK_ColorBLACK); |
29 | 29 |
30 SkISize size = canvas->getDeviceSize(); | 30 SkISize size = canvas->getDeviceSize(); |
31 | 31 |
32 int offX = (size.width() - kWindowSize) / kNumStepsX; | 32 int offX = (size.width() - kWindowSize) / kNumStepsX; |
33 int offY = (size.height() - kWindowSize) / kNumStepsY; | 33 int offY = (size.height() - kWindowSize) / kNumStepsY; |
34 | 34 |
35 SkPaint paint; | 35 SkPaint paint; |
36 | 36 |
37 paint.setColor(SK_ColorBLUE); | 37 paint.setColor(SK_ColorBLUE); |
38 | 38 |
39 canvas->drawCircle(SkIntToScalar(size.width()/2), | 39 canvas->drawCircle(SkIntToScalar(size.width()/2), |
40 SkIntToScalar(size.height()/2), | 40 SkIntToScalar(size.height()/2), |
41 SkIntToScalar(size.width()/2), | 41 SkIntToScalar(size.width()/2), |
42 paint); | 42 paint); |
43 | 43 |
44 SkBitmap bitmap; | 44 SkBitmap bitmap; |
45 | 45 |
46 bitmap.setConfig(SkBitmap::kARGB_8888_Config, kWindowSize, kWindowSize); | 46 bitmap.setConfig(SkBitmap::kARGB_8888_Config, kWindowSize, kWindowSize); |
47 | 47 |
48 for (int i = 0; i < this->getLoops(); i++) { | 48 for (int i = 0; i < loops; i++) { |
49 for (int x = 0; x < kNumStepsX; ++x) { | 49 for (int x = 0; x < kNumStepsX; ++x) { |
50 for (int y = 0; y < kNumStepsY; ++y) { | 50 for (int y = 0; y < kNumStepsY; ++y) { |
51 canvas->readPixels(&bitmap, x * offX, y * offY); | 51 canvas->readPixels(&bitmap, x * offX, y * offY); |
52 } | 52 } |
53 } | 53 } |
54 } | 54 } |
55 } | 55 } |
56 | 56 |
57 private: | 57 private: |
58 static const int kNumStepsX = 30; | 58 static const int kNumStepsX = 30; |
59 static const int kNumStepsY = 30; | 59 static const int kNumStepsY = 30; |
60 static const int kWindowSize = 5; | 60 static const int kWindowSize = 5; |
61 | 61 |
62 typedef SkBenchmark INHERITED; | 62 typedef SkBenchmark INHERITED; |
63 }; | 63 }; |
64 | 64 |
65 //////////////////////////////////////////////////////////////////////////////// | 65 //////////////////////////////////////////////////////////////////////////////// |
66 | 66 |
67 DEF_BENCH( return new ReadPixBench(); ) | 67 DEF_BENCH( return new ReadPixBench(); ) |
OLD | NEW |