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