3 * Copyright 2013 Google Inc.
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
15 static void create_gradient(SkBitmap* bm) {
16 SkASSERT(1 == bm->width());
17 const int height = bm->height();
19 float deltaB = 255.0f / height;
22 SkAutoLockPixels lock(*bm);
23 for (int y = 0; y < height; y++) {
24 *bm->getAddr32(0, y) = SkColorSetRGB(0, 0, (U8CPU) blue);
29 // Test out the special case of a tiled 1xN texture. Test out opacity,
30 // filtering and the different tiling modes
31 class ConstXTileBench : public Benchmark {
37 static const int kWidth = 1;
38 static const int kHeight = 300;
41 ConstXTileBench(SkShader::TileMode xTile,
42 SkShader::TileMode yTile,
51 bm.allocN32Pixels(kWidth, kHeight, true);
52 bm.eraseColor(SK_ColorWHITE);
56 SkShader* s = SkShader::CreateBitmapShader(bm, xTile, yTile);
57 fPaint.setShader(s)->unref();
59 fName.printf("constXTile_");
61 static const char* gTileModeStr[SkShader::kTileModeCount] = { "C", "R", "M" };
62 fName.append(gTileModeStr[xTile]);
63 fName.append(gTileModeStr[yTile]);
66 fName.append("_filter");
70 fName.append("_trans");
74 fName.append("_scale");
79 virtual const char* onGetName() {
83 virtual void onDraw(int loops, SkCanvas* canvas) {
84 SkPaint paint(fPaint);
85 this->setupPaint(&paint);
86 paint.setFilterQuality(fDoFilter ? kLow_SkFilterQuality
87 : kNone_SkFilterQuality);
89 paint.setColor(SkColorSetARGBMacro(0x80, 0xFF, 0xFF, 0xFF));
95 r = SkRect::MakeWH(SkIntToScalar(2 * 640), SkIntToScalar(2 * 480));
96 canvas->scale(SK_ScalarHalf, SK_ScalarHalf);
98 r = SkRect::MakeWH(SkIntToScalar(640), SkIntToScalar(480));
102 bgPaint.setColor(SK_ColorWHITE);
104 for (int i = 0; i < loops; i++) {
106 canvas->drawRect(r, bgPaint);
109 canvas->drawRect(r, paint);
114 typedef Benchmark INHERITED;
117 // Scaled benches are trending towards free. Seems like caching.
118 // TODO(mtklein, reed): fix and reenable
120 //DEF_BENCH(return new ConstXTileBench(SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, false, false, true))
121 DEF_BENCH(return new ConstXTileBench(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, false, false, false))
122 //DEF_BENCH(return new ConstXTileBench(SkShader::kMirror_TileMode, SkShader::kMirror_TileMode, false, false, true))
124 DEF_BENCH(return new ConstXTileBench(SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, true, false, false))
125 //DEF_BENCH(return new ConstXTileBench(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, true, false, true))
126 DEF_BENCH(return new ConstXTileBench(SkShader::kMirror_TileMode, SkShader::kMirror_TileMode, true, false, false))
128 //DEF_BENCH(return new ConstXTileBench(SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, false, true, true))
129 DEF_BENCH(return new ConstXTileBench(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, false, true, false))
130 //DEF_BENCH(return new ConstXTileBench(SkShader::kMirror_TileMode, SkShader::kMirror_TileMode, false, true, true))
132 DEF_BENCH(return new ConstXTileBench(SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, true, true, false))
133 //DEF_BENCH(return new ConstXTileBench(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, true, true, true))
134 DEF_BENCH(return new ConstXTileBench(SkShader::kMirror_TileMode, SkShader::kMirror_TileMode, true, true, false))