OLD | NEW |
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 "Benchmark.h" | 8 #include "Benchmark.h" |
9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 static SkShader* MakeSweep(const SkPoint pts[2], const GradData& data, | 65 static SkShader* MakeSweep(const SkPoint pts[2], const GradData& data, |
66 SkShader::TileMode tm, float scale) { | 66 SkShader::TileMode tm, float scale) { |
67 SkPoint center; | 67 SkPoint center; |
68 center.set(SkScalarAve(pts[0].fX, pts[1].fX), | 68 center.set(SkScalarAve(pts[0].fX, pts[1].fX), |
69 SkScalarAve(pts[0].fY, pts[1].fY)); | 69 SkScalarAve(pts[0].fY, pts[1].fY)); |
70 return SkGradientShader::CreateSweep(center.fX, center.fY, data.fColors, | 70 return SkGradientShader::CreateSweep(center.fX, center.fY, data.fColors, |
71 data.fPos, data.fCount); | 71 data.fPos, data.fCount); |
72 } | 72 } |
73 | 73 |
74 /// Ignores scale | 74 /// Ignores scale |
75 static SkShader* Make2Radial(const SkPoint pts[2], const GradData& data, | |
76 SkShader::TileMode tm, float scale) { | |
77 SkPoint center0, center1; | |
78 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), | |
79 SkScalarAve(pts[0].fY, pts[1].fY)); | |
80 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), | |
81 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); | |
82 return SkGradientShader::CreateTwoPointRadial( | |
83 center1, (pts[1].fX - pts[0].f
X) / 7, | |
84 center0, (pts[1].fX - pts[0].f
X) / 2, | |
85 data.fColors, data.fPos, data.
fCount, tm); | |
86 } | |
87 | |
88 /// Ignores scale | |
89 static SkShader* MakeConical(const SkPoint pts[2], const GradData& data, | 75 static SkShader* MakeConical(const SkPoint pts[2], const GradData& data, |
90 SkShader::TileMode tm, float scale) { | 76 SkShader::TileMode tm, float scale) { |
91 SkPoint center0, center1; | 77 SkPoint center0, center1; |
92 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), | 78 center0.set(SkScalarAve(pts[0].fX, pts[1].fX), |
93 SkScalarAve(pts[0].fY, pts[1].fY)); | 79 SkScalarAve(pts[0].fY, pts[1].fY)); |
94 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), | 80 center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), |
95 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); | 81 SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); |
96 return SkGradientShader::CreateTwoPointConical(center1, (pts[1].fX - pts[0].
fX) / 7, | 82 return SkGradientShader::CreateTwoPointConical(center1, (pts[1].fX - pts[0].
fX) / 7, |
97 center0, (pts[1].fX - pts[0].
fX) / 2, | 83 center0, (pts[1].fX - pts[0].
fX) / 2, |
98 data.fColors, data.fPos, data
.fCount, tm); | 84 data.fColors, data.fPos, data
.fCount, tm); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, | 128 typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, |
143 SkShader::TileMode tm, float scale); | 129 SkShader::TileMode tm, float scale); |
144 | 130 |
145 static const struct { | 131 static const struct { |
146 GradMaker fMaker; | 132 GradMaker fMaker; |
147 const char* fName; | 133 const char* fName; |
148 } gGrads[] = { | 134 } gGrads[] = { |
149 { MakeLinear, "linear" }, | 135 { MakeLinear, "linear" }, |
150 { MakeRadial, "radial1" }, | 136 { MakeRadial, "radial1" }, |
151 { MakeSweep, "sweep" }, | 137 { MakeSweep, "sweep" }, |
152 { Make2Radial, "radial2" }, | |
153 { MakeConical, "conical" }, | 138 { MakeConical, "conical" }, |
154 { MakeConicalZeroRad, "conicalZero" }, | 139 { MakeConicalZeroRad, "conicalZero" }, |
155 { MakeConicalOutside, "conicalOut" }, | 140 { MakeConicalOutside, "conicalOut" }, |
156 { MakeConicalOutsideZeroRad, "conicalOutZero" }, | 141 { MakeConicalOutsideZeroRad, "conicalOutZero" }, |
157 }; | 142 }; |
158 | 143 |
159 enum GradType { // these must match the order in gGrads | 144 enum GradType { // these must match the order in gGrads |
160 kLinear_GradType, | 145 kLinear_GradType, |
161 kRadial_GradType, | 146 kRadial_GradType, |
162 kSweep_GradType, | 147 kSweep_GradType, |
163 kRadial2_GradType, | |
164 kConical_GradType, | 148 kConical_GradType, |
165 kConicalZero_GradType, | 149 kConicalZero_GradType, |
166 kConicalOut_GradType, | 150 kConicalOut_GradType, |
167 kConicalOutZero_GradType | 151 kConicalOutZero_GradType |
168 }; | 152 }; |
169 | 153 |
170 enum GeomType { | 154 enum GeomType { |
171 kRect_GeomType, | 155 kRect_GeomType, |
172 kOval_GeomType | 156 kOval_GeomType |
173 }; | 157 }; |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 | 290 |
307 // Draw a radial gradient on a circle of equal size; all the lines should | 291 // Draw a radial gradient on a circle of equal size; all the lines should |
308 // hit the unpinned fast path (so long as GradientBench.W == H) | 292 // hit the unpinned fast path (so long as GradientBench.W == H) |
309 DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0], SkShader::kC
lamp_TileMode, kOval_GeomType); ) | 293 DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0], SkShader::kC
lamp_TileMode, kOval_GeomType); ) |
310 | 294 |
311 DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0], SkShader::kM
irror_TileMode); ) | 295 DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0], SkShader::kM
irror_TileMode); ) |
312 DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0], SkShader::kR
epeat_TileMode); ) | 296 DEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0], SkShader::kR
epeat_TileMode); ) |
313 DEF_BENCH( return new GradientBench(kSweep_GradType); ) | 297 DEF_BENCH( return new GradientBench(kSweep_GradType); ) |
314 DEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[1]); ) | 298 DEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[1]); ) |
315 DEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[2]); ) | 299 DEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[2]); ) |
316 DEF_BENCH( return new GradientBench(kRadial2_GradType); ) | |
317 DEF_BENCH( return new GradientBench(kRadial2_GradType, gGradData[1]); ) | |
318 DEF_BENCH( return new GradientBench(kRadial2_GradType, gGradData[0], SkShader::k
Mirror_TileMode); ) | |
319 DEF_BENCH( return new GradientBench(kConical_GradType); ) | 300 DEF_BENCH( return new GradientBench(kConical_GradType); ) |
320 DEF_BENCH( return new GradientBench(kConical_GradType, gGradData[1]); ) | 301 DEF_BENCH( return new GradientBench(kConical_GradType, gGradData[1]); ) |
321 DEF_BENCH( return new GradientBench(kConical_GradType, gGradData[2]); ) | 302 DEF_BENCH( return new GradientBench(kConical_GradType, gGradData[2]); ) |
322 DEF_BENCH( return new GradientBench(kConicalZero_GradType); ) | 303 DEF_BENCH( return new GradientBench(kConicalZero_GradType); ) |
323 DEF_BENCH( return new GradientBench(kConicalZero_GradType, gGradData[1]); ) | 304 DEF_BENCH( return new GradientBench(kConicalZero_GradType, gGradData[1]); ) |
324 DEF_BENCH( return new GradientBench(kConicalZero_GradType, gGradData[2]); ) | 305 DEF_BENCH( return new GradientBench(kConicalZero_GradType, gGradData[2]); ) |
325 DEF_BENCH( return new GradientBench(kConicalOut_GradType); ) | 306 DEF_BENCH( return new GradientBench(kConicalOut_GradType); ) |
326 DEF_BENCH( return new GradientBench(kConicalOut_GradType, gGradData[1]); ) | 307 DEF_BENCH( return new GradientBench(kConicalOut_GradType, gGradData[1]); ) |
327 DEF_BENCH( return new GradientBench(kConicalOut_GradType, gGradData[2]); ) | 308 DEF_BENCH( return new GradientBench(kConicalOut_GradType, gGradData[2]); ) |
328 DEF_BENCH( return new GradientBench(kConicalOutZero_GradType); ) | 309 DEF_BENCH( return new GradientBench(kConicalOutZero_GradType); ) |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 canvas->drawRect(r, paint); | 361 canvas->drawRect(r, paint); |
381 } | 362 } |
382 } | 363 } |
383 | 364 |
384 private: | 365 private: |
385 typedef Benchmark INHERITED; | 366 typedef Benchmark INHERITED; |
386 }; | 367 }; |
387 | 368 |
388 DEF_BENCH( return new Gradient2Bench(false); ) | 369 DEF_BENCH( return new Gradient2Bench(false); ) |
389 DEF_BENCH( return new Gradient2Bench(true); ) | 370 DEF_BENCH( return new Gradient2Bench(true); ) |
OLD | NEW |