Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(508)

Side by Side Diff: bench/GradientBench.cpp

Issue 234603006: Add conical special cases to GradientBench (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: A wild zero appeared Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
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 #include "SkBenchmark.h" 8 #include "SkBenchmark.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkCanvas.h" 10 #include "SkCanvas.h"
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 SkPoint center0, center1; 95 SkPoint center0, center1;
96 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), 96 center0.set(SkScalarAve(pts[0].fX, pts[1].fX),
97 SkScalarAve(pts[0].fY, pts[1].fY)); 97 SkScalarAve(pts[0].fY, pts[1].fY));
98 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), 98 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5),
99 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); 99 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4));
100 return SkGradientShader::CreateTwoPointConical(center1, (pts[1].fX - pts[0]. fX) / 7, 100 return SkGradientShader::CreateTwoPointConical(center1, (pts[1].fX - pts[0]. fX) / 7,
101 center0, (pts[1].fX - pts[0]. fX) / 2, 101 center0, (pts[1].fX - pts[0]. fX) / 2,
102 data.fColors, data.fPos, data .fCount, tm, mapper); 102 data.fColors, data.fPos, data .fCount, tm, mapper);
103 } 103 }
104 104
105 /// Ignores scale
106 static SkShader* MakeConicalZeroRad(const SkPoint pts[2], const GradData& data,
107 SkShader::TileMode tm, SkUnitMapper* mapper,
108 float scale) {
109 SkPoint center0, center1;
110 center0.set(SkScalarAve(pts[0].fX, pts[1].fX),
111 SkScalarAve(pts[0].fY, pts[1].fY));
112 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5),
113 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4));
114 return SkGradientShader::CreateTwoPointConical(center1, 0.0,
115 center0, (pts[1].fX - pts[0]. fX) / 2,
116 data.fColors, data.fPos, data .fCount, tm, mapper);
117 }
118
119 /// Ignores scale
120 static SkShader* MakeConicalOutside(const SkPoint pts[2], const GradData& data,
121 SkShader::TileMode tm, SkUnitMapper* mapper,
122 float scale) {
123 SkPoint center0, center1;
124 SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 10);
125 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
126 center0.set(pts[0].fX + radius0, pts[0].fY + radius0);
127 center1.set(pts[1].fX - radius1, pts[1].fY - radius1);
128 return SkGradientShader::CreateTwoPointConical(center0, radius0,
129 center1, radius1,
130 data.fColors, data.fPos,
131 data.fCount, tm, mapper);
132 }
133
134 /// Ignores scale
135 static SkShader* MakeConicalOutsideZeroRad(const SkPoint pts[2], const GradData& data,
136 SkShader::TileMode tm, SkUnitMapper* mapper,
137 float scale) {
138 SkPoint center0, center1;
139 SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 10);
140 SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
141 center0.set(pts[0].fX + radius0, pts[0].fY + radius0);
142 center1.set(pts[1].fX - radius1, pts[1].fY - radius1);
143 return SkGradientShader::CreateTwoPointConical(center0, 0.0,
144 center1, radius1,
145 data.fColors, data.fPos,
146 data.fCount, tm, mapper);
147 }
148
105 typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, 149 typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data,
106 SkShader::TileMode tm, SkUnitMapper* mapper, 150 SkShader::TileMode tm, SkUnitMapper* mapper,
107 float scale); 151 float scale);
108 152
109 static const struct { 153 static const struct {
110 GradMaker fMaker; 154 GradMaker fMaker;
111 const char* fName; 155 const char* fName;
112 } gGrads[] = { 156 } gGrads[] = {
113 { MakeLinear, "linear" }, 157 { MakeLinear, "linear" },
114 { MakeRadial, "radial1" }, 158 { MakeRadial, "radial1" },
115 { MakeSweep, "sweep" }, 159 { MakeSweep, "sweep" },
116 { Make2Radial, "radial2" }, 160 { Make2Radial, "radial2" },
117 { MakeConical, "conical" }, 161 { MakeConical, "conical" },
162 { MakeConicalZeroRad, "conicalZero" },
163 { MakeConicalOutside, "conicalOut" },
164 { MakeConicalOutsideZeroRad, "conicalOutZero" },
118 }; 165 };
119 166
120 enum GradType { // these must match the order in gGrads 167 enum GradType { // these must match the order in gGrads
121 kLinear_GradType, 168 kLinear_GradType,
122 kRadial_GradType, 169 kRadial_GradType,
123 kSweep_GradType, 170 kSweep_GradType,
124 kRadial2_GradType, 171 kRadial2_GradType,
125 kConical_GradType 172 kConical_GradType,
173 kConicalZero_GradType,
174 kConicalOut_GradType,
175 kConicalOutZero_GradType
126 }; 176 };
127 177
128 enum GeomType { 178 enum GeomType {
129 kRect_GeomType, 179 kRect_GeomType,
130 kOval_GeomType 180 kOval_GeomType
131 }; 181 };
132 182
133 static const char* tilemodename(SkShader::TileMode tm) { 183 static const char* tilemodename(SkShader::TileMode tm) {
134 switch (tm) { 184 switch (tm) {
135 case SkShader::kClamp_TileMode: 185 case SkShader::kClamp_TileMode:
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0], SkShader::kR epeat_TileMode); ) 298 DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0], SkShader::kR epeat_TileMode); )
249 DEF_BENCH( return new GradientBench(kSweep_GradType); ) 299 DEF_BENCH( return new GradientBench(kSweep_GradType); )
250 DEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[1]); ) 300 DEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[1]); )
251 DEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[2]); ) 301 DEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[2]); )
252 DEF_BENCH( return new GradientBench(kRadial2_GradType); ) 302 DEF_BENCH( return new GradientBench(kRadial2_GradType); )
253 DEF_BENCH( return new GradientBench(kRadial2_GradType, gGradData[1]); ) 303 DEF_BENCH( return new GradientBench(kRadial2_GradType, gGradData[1]); )
254 DEF_BENCH( return new GradientBench(kRadial2_GradType, gGradData[0], SkShader::k Mirror_TileMode); ) 304 DEF_BENCH( return new GradientBench(kRadial2_GradType, gGradData[0], SkShader::k Mirror_TileMode); )
255 DEF_BENCH( return new GradientBench(kConical_GradType); ) 305 DEF_BENCH( return new GradientBench(kConical_GradType); )
256 DEF_BENCH( return new GradientBench(kConical_GradType, gGradData[1]); ) 306 DEF_BENCH( return new GradientBench(kConical_GradType, gGradData[1]); )
257 DEF_BENCH( return new GradientBench(kConical_GradType, gGradData[2]); ) 307 DEF_BENCH( return new GradientBench(kConical_GradType, gGradData[2]); )
308 DEF_BENCH( return new GradientBench(kConicalZero_GradType); )
309 DEF_BENCH( return new GradientBench(kConicalZero_GradType, gGradData[1]); )
310 DEF_BENCH( return new GradientBench(kConicalZero_GradType, gGradData[2]); )
311 DEF_BENCH( return new GradientBench(kConicalOut_GradType); )
312 DEF_BENCH( return new GradientBench(kConicalOut_GradType, gGradData[1]); )
313 DEF_BENCH( return new GradientBench(kConicalOut_GradType, gGradData[2]); )
314 DEF_BENCH( return new GradientBench(kConicalOutZero_GradType); )
315 DEF_BENCH( return new GradientBench(kConicalOutZero_GradType, gGradData[1]); )
316 DEF_BENCH( return new GradientBench(kConicalOutZero_GradType, gGradData[2]); )
258 317
259 /////////////////////////////////////////////////////////////////////////////// 318 ///////////////////////////////////////////////////////////////////////////////
260 319
261 class Gradient2Bench : public SkBenchmark { 320 class Gradient2Bench : public SkBenchmark {
262 SkString fName; 321 SkString fName;
263 bool fHasAlpha; 322 bool fHasAlpha;
264 323
265 public: 324 public:
266 Gradient2Bench(bool hasAlpha) { 325 Gradient2Bench(bool hasAlpha) {
267 fName.printf("gradient_create_%s", hasAlpha ? "alpha" : "opaque"); 326 fName.printf("gradient_create_%s", hasAlpha ? "alpha" : "opaque");
(...skipping 29 matching lines...) Expand all
297 canvas->drawRect(r, paint); 356 canvas->drawRect(r, paint);
298 } 357 }
299 } 358 }
300 359
301 private: 360 private:
302 typedef SkBenchmark INHERITED; 361 typedef SkBenchmark INHERITED;
303 }; 362 };
304 363
305 DEF_BENCH( return new Gradient2Bench(false); ) 364 DEF_BENCH( return new Gradient2Bench(false); )
306 DEF_BENCH( return new Gradient2Bench(true); ) 365 DEF_BENCH( return new Gradient2Bench(true); )
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698