| 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 |