| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "Benchmark.h" | 8 #include "Benchmark.h" |
| 9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
| 10 #include "SkGradientShader.h" | 10 #include "SkGradientShader.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 SkScalar s = SkIntToScalar(SkMin32(w, h)); | 44 SkScalar s = SkIntToScalar(SkMin32(w, h)); |
| 45 static const SkPoint kPts0[] = { { 0, 0 }, { s, s } }; | 45 static const SkPoint kPts0[] = { { 0, 0 }, { s, s } }; |
| 46 static const SkPoint kPts1[] = { { s/2, 0 }, { s/2, s } }; | 46 static const SkPoint kPts1[] = { { s/2, 0 }, { s/2, s } }; |
| 47 static const SkScalar kPos[] = { 0, SK_Scalar1/2, SK_Scalar1 }; | 47 static const SkScalar kPos[] = { 0, SK_Scalar1/2, SK_Scalar1 }; |
| 48 static const SkColor kColors0[] = {0x80F00080, 0xF0F08000, 0x800080F0 }; | 48 static const SkColor kColors0[] = {0x80F00080, 0xF0F08000, 0x800080F0 }; |
| 49 static const SkColor kColors1[] = {0xF08000F0, 0x8080F000, 0xF000F080 }; | 49 static const SkColor kColors1[] = {0xF08000F0, 0x8080F000, 0xF000F080 }; |
| 50 | 50 |
| 51 | 51 |
| 52 SkPaint paint; | 52 SkPaint paint; |
| 53 | 53 |
| 54 paint.setShader(SkGradientShader::MakeLinear(kPts0, kColors0, kPos, SK_ARRAY
_COUNT(kColors0), | 54 paint.setShader(SkGradientShader::CreateLinear(kPts0, kColors0, kPos, |
| 55 SkShader::kClamp_TileMode)); | 55 SK_ARRAY_COUNT(kColors0), SkShader::kClamp_TileMode))->unref
(); |
| 56 canvas.drawPaint(paint); | 56 canvas.drawPaint(paint); |
| 57 paint.setShader(SkGradientShader::MakeLinear(kPts1, kColors1, kPos, SK_ARRAY
_COUNT(kColors1), | 57 paint.setShader(SkGradientShader::CreateLinear(kPts1, kColors1, kPos, |
| 58 SkShader::kClamp_TileMode)); | 58 SK_ARRAY_COUNT(kColors1), SkShader::kClamp_TileMode))->unref
(); |
| 59 canvas.drawPaint(paint); | 59 canvas.drawPaint(paint); |
| 60 } | 60 } |
| 61 | 61 |
| 62 /** | 62 /** |
| 63 * This bench draws a grid of either rects or filled paths, with two alternating
color patterns. | 63 * This bench draws a grid of either rects or filled paths, with two alternating
color patterns. |
| 64 * This color patterns are passed in as enums to the class. The options are: | 64 * This color patterns are passed in as enums to the class. The options are: |
| 65 * 1) solid white color | 65 * 1) solid white color |
| 66 * 2) solid blue color | 66 * 2) solid blue color |
| 67 * 3) opaque bitmap | 67 * 3) opaque bitmap |
| 68 * 4) partial alpha bitmap | 68 * 4) partial alpha bitmap |
| 69 * The same color pattern can be set for both arguments to create a uniform patt
ern on all draws. | 69 * The same color pattern can be set for both arguments to create a uniform patt
ern on all draws. |
| 70 * | 70 * |
| 71 * The bench is used to test a few things. First it can test any optimizations m
ade for a specific | 71 * The bench is used to test a few things. First it can test any optimizations m
ade for a specific |
| 72 * color pattern (for example drawing an opaque bitmap versus one with partial a
lpha). Also it can | 72 * color pattern (for example drawing an opaque bitmap versus one with partial a
lpha). Also it can |
| 73 * be used to test the cost of program switching and/or batching when alternatin
g between different | 73 * be used to test the cost of program switching and/or batching when alternatin
g between different |
| 74 * patterns when on the gpu. | 74 * patterns when on the gpu. |
| 75 */ | 75 */ |
| 76 class AlternatingColorPatternBench : public Benchmark { | 76 class AlternatingColorPatternBench : public Benchmark { |
| 77 public: | 77 public: |
| 78 enum { | 78 enum { |
| 79 NX = 5, | 79 NX = 5, |
| 80 NY = 5, | 80 NY = 5, |
| 81 NUM_DRAWS = NX * NY, | 81 NUM_DRAWS = NX * NY, |
| 82 }; | 82 }; |
| 83 sk_sp<SkShader> fBmShader; | 83 SkShader* fBmShader; |
| 84 | 84 |
| 85 SkPath fPaths[NUM_DRAWS]; | 85 SkPath fPaths[NUM_DRAWS]; |
| 86 SkRect fRects[NUM_DRAWS]; | 86 SkRect fRects[NUM_DRAWS]; |
| 87 SkColor fColors[NUM_DRAWS]; | 87 SkColor fColors[NUM_DRAWS]; |
| 88 sk_sp<SkShader> fShaders[NUM_DRAWS]; | 88 SkShader* fShaders[NUM_DRAWS]; |
| 89 | 89 |
| 90 SkString fName; | 90 SkString fName; |
| 91 ColorPatternData fPattern1; | 91 ColorPatternData fPattern1; |
| 92 ColorPatternData fPattern2; | 92 ColorPatternData fPattern2; |
| 93 DrawType fDrawType; | 93 DrawType fDrawType; |
| 94 SkBitmap fBmp; | 94 SkBitmap fBmp; |
| 95 | 95 |
| 96 | 96 |
| 97 AlternatingColorPatternBench(ColorPattern pattern1, ColorPattern pattern2, D
rawType drawType) { | 97 AlternatingColorPatternBench(ColorPattern pattern1, ColorPattern pattern2, D
rawType drawType) |
| 98 : fBmShader(nullptr) { |
| 98 fPattern1 = gColorPatterns[pattern1]; | 99 fPattern1 = gColorPatterns[pattern1]; |
| 99 fPattern2 = gColorPatterns[pattern2]; | 100 fPattern2 = gColorPatterns[pattern2]; |
| 100 fName.printf("colorPattern_%s_%s_%s", | 101 fName.printf("colorPattern_%s_%s_%s", |
| 101 fPattern1.fName, fPattern2.fName, | 102 fPattern1.fName, fPattern2.fName, |
| 102 kRect_DrawType == drawType ? "rect" : "path"); | 103 kRect_DrawType == drawType ? "rect" : "path"); |
| 103 fDrawType = drawType; | 104 fDrawType = drawType; |
| 104 } | 105 } |
| 105 | 106 |
| 107 virtual ~AlternatingColorPatternBench() { |
| 108 SkSafeUnref(fBmShader); |
| 109 } |
| 110 |
| 106 protected: | 111 protected: |
| 107 const char* onGetName() override { | 112 const char* onGetName() override { |
| 108 return fName.c_str(); | 113 return fName.c_str(); |
| 109 } | 114 } |
| 110 | 115 |
| 111 void onDelayedSetup() override { | 116 void onDelayedSetup() override { |
| 112 int w = 40; | 117 int w = 40; |
| 113 int h = 40; | 118 int h = 40; |
| 114 makebm(&fBmp, w, h); | 119 makebm(&fBmp, w, h); |
| 115 fBmShader = SkShader::MakeBitmapShader(fBmp, | 120 fBmShader = SkShader::CreateBitmapShader(fBmp, |
| 116 SkShader::kRepeat_TileMode, | 121 SkShader::kRepeat_TileMode, |
| 117 SkShader::kRepeat_TileMode); | 122 SkShader::kRepeat_TileMode); |
| 118 int offset = 2; | 123 int offset = 2; |
| 119 int count = 0; | 124 int count = 0; |
| 120 for (int j = 0; j < NY; ++j) { | 125 for (int j = 0; j < NY; ++j) { |
| 121 for (int i = 0; i < NX; ++i) { | 126 for (int i = 0; i < NX; ++i) { |
| 122 int x = (w + offset) * i; | 127 int x = (w + offset) * i; |
| 123 int y = (h * offset) * j; | 128 int y = (h * offset) * j; |
| 124 if (kRect_DrawType == fDrawType) { | 129 if (kRect_DrawType == fDrawType) { |
| 125 fRects[count].set(SkIntToScalar(x), SkIntToScalar(y), | 130 fRects[count].set(SkIntToScalar(x), SkIntToScalar(y), |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 | 191 |
| 187 DEF_BENCH(return new AlternatingColorPatternBench(kOpaqueBitmap_ColorPattern, | 192 DEF_BENCH(return new AlternatingColorPatternBench(kOpaqueBitmap_ColorPattern, |
| 188 kOpaqueBitmap_ColorPattern, | 193 kOpaqueBitmap_ColorPattern, |
| 189 kRect_DrawType);) | 194 kRect_DrawType);) |
| 190 DEF_BENCH(return new AlternatingColorPatternBench(kAlphaBitmap_ColorPattern, | 195 DEF_BENCH(return new AlternatingColorPatternBench(kAlphaBitmap_ColorPattern, |
| 191 kAlphaBitmap_ColorPattern, | 196 kAlphaBitmap_ColorPattern, |
| 192 kRect_DrawType);) | 197 kRect_DrawType);) |
| 193 DEF_BENCH(return new AlternatingColorPatternBench(kOpaqueBitmap_ColorPattern, | 198 DEF_BENCH(return new AlternatingColorPatternBench(kOpaqueBitmap_ColorPattern, |
| 194 kAlphaBitmap_ColorPattern, | 199 kAlphaBitmap_ColorPattern, |
| 195 kRect_DrawType);) | 200 kRect_DrawType);) |
| OLD | NEW |