Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 /* | |
| 2 * Copyright 2013 Google Inc. | |
| 3 * | |
| 4 * Use of this source code is governed by a BSD-style license that can be | |
| 5 * found in the LICENSE file. | |
| 6 */ | |
| 7 #include "SkBenchmark.h" | |
| 8 #include "SkBitmapSource.h" | |
| 9 #include "SkCanvas.h" | |
| 10 #include "SkDevice.h" | |
| 11 #include "SkLightingImageFilter.h" | |
| 12 | |
| 13 #define FILTER_WIDTH_SMALL SkIntToScalar(32) | |
| 14 #define FILTER_HEIGHT_SMALL SkIntToScalar(32) | |
| 15 #define FILTER_WIDTH_LARGE SkIntToScalar(256) | |
| 16 #define FILTER_HEIGHT_LARGE SkIntToScalar(256) | |
| 17 | |
| 18 class LightingBaseBench : public SkBenchmark { | |
| 19 public: | |
| 20 LightingBaseBench(void* param, bool small) : INHERITED(param), fIsSmall(smal l) { | |
| 21 } | |
| 22 | |
| 23 protected: | |
| 24 SkRect getFilterRect() const { | |
| 25 return fIsSmall ? SkRect::MakeWH(FILTER_WIDTH_SMALL, FILTER_HEIGHT_SMALL ) : | |
| 26 SkRect::MakeWH(FILTER_WIDTH_LARGE, FILTER_HEIGHT_LARGE ); | |
| 27 } | |
| 28 | |
| 29 bool fIsSmall; | |
| 30 typedef SkBenchmark INHERITED; | |
| 31 }; | |
| 32 | |
| 33 class LightingPointLitDiffuseBench : public LightingBaseBench { | |
| 34 public: | |
| 35 LightingPointLitDiffuseBench(void* param, bool small) : INHERITED(param, sma ll) { | |
| 36 } | |
| 37 | |
| 38 protected: | |
| 39 virtual const char* onGetName() SK_OVERRIDE { | |
| 40 return fIsSmall ? "lightingpointlitdiffuse_small" : "lightingpointlitdif fuse_large"; | |
| 41 } | |
| 42 | |
| 43 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { | |
| 44 SkRect r = getFilterRect(); | |
| 45 | |
| 46 SkPoint3 pointLocation(0, 0, SkIntToScalar(10)); | |
| 47 SkScalar kd = SkIntToScalar(2); | |
| 48 SkScalar surfaceScale = SkIntToScalar(1); | |
| 49 SkColor white(0xFFFFFFFF); | |
| 50 | |
| 51 SkPaint paint; | |
| 52 paint.setImageFilter(SkLightingImageFilter::CreatePointLitDiffuse( | |
| 53 pointLocation, white, surfaceScale, kd))->unref(); | |
| 54 canvas->drawRect(r, paint); | |
| 55 } | |
| 56 | |
| 57 private: | |
| 58 typedef LightingBaseBench INHERITED; | |
| 59 }; | |
| 60 | |
| 61 class LightingDistantLitDiffuseBench : public LightingBaseBench { | |
| 62 public: | |
| 63 LightingDistantLitDiffuseBench(void* param, bool small) : INHERITED(param, s mall) { | |
| 64 } | |
| 65 | |
| 66 protected: | |
| 67 virtual const char* onGetName() SK_OVERRIDE { | |
| 68 return fIsSmall ? "lightingdistantlitdiffuse_small" : "lightingdistantli tdiffuse_large"; | |
| 69 } | |
| 70 | |
| 71 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { | |
| 72 SkRect r = getFilterRect(); | |
| 73 | |
| 74 SkScalar azimuthRad = SkDegreesToRadians(SkIntToScalar(225)); | |
| 75 SkScalar elevationRad = SkDegreesToRadians(SkIntToScalar(5)); | |
| 76 SkPoint3 distantDirection(SkScalarMul(SkScalarCos(azimuthRad), SkScalarC os(elevationRad)), | |
| 77 SkScalarMul(SkScalarSin(azimuthRad), SkScalarC os(elevationRad)), | |
| 78 SkScalarSin(elevationRad)); | |
| 79 SkScalar kd = SkIntToScalar(2); | |
| 80 SkScalar surfaceScale = SkIntToScalar(1); | |
| 81 SkColor white(0xFFFFFFFF); | |
| 82 | |
| 83 SkPaint paint; | |
| 84 paint.setImageFilter(SkLightingImageFilter::CreateDistantLitDiffuse( | |
| 85 distantDirection, white, surfaceScale, kd))->unref(); | |
| 86 canvas->drawRect(r, paint); | |
| 87 } | |
| 88 | |
| 89 private: | |
| 90 typedef LightingBaseBench INHERITED; | |
| 91 }; | |
| 92 | |
| 93 class LightingSpotLitDiffuseBench : public LightingBaseBench { | |
| 94 public: | |
| 95 LightingSpotLitDiffuseBench(void* param, bool small) : INHERITED(param, smal l) { | |
| 96 } | |
| 97 | |
| 98 protected: | |
| 99 virtual const char* onGetName() SK_OVERRIDE { | |
| 100 return fIsSmall ? "lightingspotlitdiffuse_small" : "lightingspotlitdiffu se_large"; | |
| 101 } | |
| 102 | |
| 103 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { | |
| 104 SkRect r = getFilterRect(); | |
| 105 | |
| 106 SkPoint3 spotLocation(SkIntToScalar(-10), SkIntToScalar(-10), SkIntToSca lar(20)); | |
| 107 SkPoint3 spotTarget(SkIntToScalar(40), SkIntToScalar(40), 0); | |
| 108 SkScalar spotExponent = SK_Scalar1; | |
| 109 SkScalar cutoffAngle = SkIntToScalar(15); | |
| 110 SkScalar kd = SkIntToScalar(2); | |
| 111 SkScalar surfaceScale = SkIntToScalar(1); | |
| 112 SkColor white(0xFFFFFFFF); | |
| 113 | |
| 114 SkPaint paint; | |
| 115 paint.setImageFilter(SkLightingImageFilter::CreateSpotLitDiffuse(spotLoc ation, | |
| 116 spotTarget, spotExponent, cutoffAngle, white, surfaceScale, kd))->un ref(); | |
| 117 canvas->drawRect(r, paint); | |
| 118 } | |
| 119 | |
| 120 private: | |
| 121 typedef LightingBaseBench INHERITED; | |
| 122 }; | |
| 123 | |
| 124 class LightingPointLitSpecularBench : public LightingBaseBench { | |
| 125 public: | |
| 126 LightingPointLitSpecularBench(void* param, bool small) : INHERITED(param, sm all) { | |
| 127 } | |
| 128 | |
| 129 protected: | |
| 130 virtual const char* onGetName() SK_OVERRIDE { | |
| 131 return fIsSmall ? "lightingpointlitspecular_small" : "lightingpointlitsp ecular_large"; | |
| 132 } | |
| 133 | |
| 134 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { | |
| 135 SkRect r = getFilterRect(); | |
| 136 | |
| 137 SkPoint3 pointLocation(0, 0, SkIntToScalar(10)); | |
| 138 SkScalar ks = SkIntToScalar(1); | |
| 139 SkScalar shininess = SkIntToScalar(8); | |
| 140 SkScalar surfaceScale = SkIntToScalar(1); | |
| 141 SkColor white(0xFFFFFFFF); | |
| 142 | |
| 143 SkPaint paint; | |
| 144 paint.setImageFilter(SkLightingImageFilter::CreatePointLitSpecular( | |
| 145 pointLocation, white, surfaceScale, ks, shininess))->unref(); | |
| 146 canvas->drawRect(r, paint); | |
| 147 } | |
| 148 | |
| 149 private: | |
| 150 typedef LightingBaseBench INHERITED; | |
| 151 }; | |
| 152 | |
| 153 class LightingDistantLitSpecularBench : public LightingBaseBench { | |
| 154 public: | |
| 155 LightingDistantLitSpecularBench(void* param, bool small) : INHERITED(param, small) { | |
| 156 } | |
| 157 | |
| 158 protected: | |
| 159 virtual const char* onGetName() SK_OVERRIDE { | |
| 160 return fIsSmall ? "lightingdistantlitspecular_small" : "lightingdistantl itspecular_large"; | |
| 161 } | |
| 162 | |
| 163 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { | |
| 164 SkRect r = getFilterRect(); | |
| 165 | |
| 166 SkScalar azimuthRad = SkDegreesToRadians(SkIntToScalar(225)); | |
|
Stephen White
2013/04/24 17:35:56
Nit: looks like there are lots of opportunities f
sugoi1
2013/04/24 18:49:10
Done. I made some base class functionality to redu
| |
| 167 SkScalar elevationRad = SkDegreesToRadians(SkIntToScalar(5)); | |
| 168 SkPoint3 distantDirection(SkScalarMul(SkScalarCos(azimuthRad), SkScalarC os(elevationRad)), | |
| 169 SkScalarMul(SkScalarSin(azimuthRad), SkScalarC os(elevationRad)), | |
| 170 SkScalarSin(elevationRad)); | |
| 171 SkScalar ks = SkIntToScalar(1); | |
| 172 SkScalar shininess = SkIntToScalar(8); | |
| 173 SkScalar surfaceScale = SkIntToScalar(1); | |
| 174 SkColor white(0xFFFFFFFF); | |
| 175 | |
| 176 SkPaint paint; | |
| 177 paint.setImageFilter(SkLightingImageFilter::CreateDistantLitSpecular( | |
| 178 distantDirection, white, surfaceScale, ks, shininess))->unref(); | |
| 179 canvas->drawRect(r, paint); | |
| 180 } | |
| 181 | |
| 182 private: | |
| 183 typedef LightingBaseBench INHERITED; | |
| 184 }; | |
| 185 | |
| 186 class LightingSpotLitSpecularBench : public LightingBaseBench { | |
| 187 public: | |
| 188 LightingSpotLitSpecularBench(void* param, bool small) : INHERITED(param, sma ll) { | |
| 189 } | |
| 190 | |
| 191 protected: | |
| 192 virtual const char* onGetName() SK_OVERRIDE { | |
| 193 return fIsSmall ? "lightingspotlitspecular_small" : "lightingspotlitspec ular_large"; | |
| 194 } | |
| 195 | |
| 196 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { | |
| 197 SkRect r = getFilterRect(); | |
| 198 | |
| 199 SkPoint3 spotLocation(SkIntToScalar(-10), SkIntToScalar(-10), SkIntToSca lar(20)); | |
| 200 SkPoint3 spotTarget(SkIntToScalar(40), SkIntToScalar(40), 0); | |
| 201 SkScalar spotExponent = SK_Scalar1; | |
| 202 SkScalar cutoffAngle = SkIntToScalar(15); | |
| 203 SkScalar ks = SkIntToScalar(1); | |
| 204 SkScalar shininess = SkIntToScalar(8); | |
| 205 SkScalar surfaceScale = SkIntToScalar(1); | |
| 206 SkColor white(0xFFFFFFFF); | |
| 207 | |
| 208 SkPaint paint; | |
| 209 paint.setImageFilter(SkLightingImageFilter::CreateSpotLitSpecular(spotLo cation, | |
| 210 spotTarget, spotExponent, cutoffAngle, white, surfaceScale, ks, shin iness))->unref(); | |
| 211 canvas->drawRect(r, paint); | |
| 212 } | |
| 213 | |
| 214 private: | |
| 215 typedef LightingBaseBench INHERITED; | |
| 216 }; | |
| 217 | |
| 218 /////////////////////////////////////////////////////////////////////////////// | |
| 219 | |
| 220 DEF_BENCH( return new LightingPointLitDiffuseBench(p, true); ) | |
| 221 DEF_BENCH( return new LightingPointLitDiffuseBench(p, false); ) | |
| 222 DEF_BENCH( return new LightingDistantLitDiffuseBench(p, true); ) | |
| 223 DEF_BENCH( return new LightingDistantLitDiffuseBench(p, false); ) | |
| 224 DEF_BENCH( return new LightingSpotLitDiffuseBench(p, true); ) | |
| 225 DEF_BENCH( return new LightingSpotLitDiffuseBench(p, false); ) | |
| 226 DEF_BENCH( return new LightingPointLitSpecularBench(p, true); ) | |
| 227 DEF_BENCH( return new LightingPointLitSpecularBench(p, false); ) | |
| 228 DEF_BENCH( return new LightingDistantLitSpecularBench(p, true); ) | |
| 229 DEF_BENCH( return new LightingDistantLitSpecularBench(p, false); ) | |
| 230 DEF_BENCH( return new LightingSpotLitSpecularBench(p, true); ) | |
| 231 DEF_BENCH( return new LightingSpotLitSpecularBench(p, false); ) | |
| 232 | |
| OLD | NEW |