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

Side by Side Diff: samplecode/SampleFilterFuzz.cpp

Issue 677713003: Adding color cube to fuzzer (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 2 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 * Copyright 2013 Google Inc. 2 * Copyright 2013 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 #include "SampleCode.h" 7 #include "SampleCode.h"
8 #include "SkAlphaThresholdFilter.h" 8 #include "SkAlphaThresholdFilter.h"
9 #include "SkBitmapSource.h" 9 #include "SkBitmapSource.h"
10 #include "SkBlurImageFilter.h" 10 #include "SkBlurImageFilter.h"
11 #include "SkCanvas.h" 11 #include "SkCanvas.h"
12 #include "SkColorCubeFilter.h"
12 #include "SkColorFilter.h" 13 #include "SkColorFilter.h"
13 #include "SkColorFilterImageFilter.h" 14 #include "SkColorFilterImageFilter.h"
14 #include "SkComposeImageFilter.h" 15 #include "SkComposeImageFilter.h"
15 #include "SkData.h" 16 #include "SkData.h"
16 #include "SkDisplacementMapEffect.h" 17 #include "SkDisplacementMapEffect.h"
17 #include "SkDropShadowImageFilter.h" 18 #include "SkDropShadowImageFilter.h"
18 #include "SkFlattenableSerialization.h" 19 #include "SkFlattenableSerialization.h"
19 #include "SkLightingImageFilter.h" 20 #include "SkLightingImageFilter.h"
20 #include "SkMagnifierImageFilter.h" 21 #include "SkMagnifierImageFilter.h"
21 #include "SkMatrixImageFilter.h" 22 #include "SkMatrixImageFilter.h"
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 static SkBitmap bitmap[2]; 204 static SkBitmap bitmap[2];
204 static bool initialized = false; 205 static bool initialized = false;
205 if (!initialized) { 206 if (!initialized) {
206 make_g_bitmap(bitmap[0]); 207 make_g_bitmap(bitmap[0]);
207 make_checkerboard_bitmap(bitmap[1]); 208 make_checkerboard_bitmap(bitmap[1]);
208 initialized = true; 209 initialized = true;
209 } 210 }
210 return bitmap[R(2)]; 211 return bitmap[R(2)];
211 } 212 }
212 213
214 static SkData* make_3Dlut(int* cubeDimension, bool invR, bool invG, bool invB) {
215 int size = 4;
216 switch (R(5)) {
Stephen White 2014/10/24 22:48:37 Nit: couldn't this also be int size = 4 << R(5) ?
sugoi1 2014/10/27 14:55:32 Done.
217 case 4:
218 size *= 2; // 64
219 case 3:
220 size *= 2; // 32
221 case 2:
222 size *= 2; // 16
223 case 1:
224 size *= 2; // 8
225 default:
226 break;
227 }
228
229 SkData* data = SkData::NewUninitialized(sizeof(SkColor) * size * size * size );
Stephen White 2014/10/24 22:48:38 Should we also be trying to give the fuzzer trunca
sugoi1 2014/10/27 14:55:32 Yeah, the fuzzer should take care of that case aut
230 SkColor* pixels = (SkColor*)(data->writable_data());
231 SkAutoMalloc lutMemory(size);
232 SkAutoMalloc invLutMemory(size);
233 uint8_t* lut = (uint8_t*)lutMemory.get();
234 uint8_t* invLut = (uint8_t*)invLutMemory.get();
235 const int maxIndex = size - 1;
236 for (int i = 0; i < size; i++) {
237 lut[i] = (i * 255) / maxIndex;
238 invLut[i] = ((maxIndex - i) * 255) / maxIndex;
239 }
240 for (int r = 0; r < size; ++r) {
241 for (int g = 0; g < size; ++g) {
242 for (int b = 0; b < size; ++b) {
243 pixels[(size * ((size * b) + g)) + r] = SkColorSetARGB(0xFF,
244 invR ? invLut[r] : lut[r],
245 invG ? invLut[g] : lut[g],
246 invB ? invLut[b] : lut[b]);
247 }
248 }
249 }
250 if (cubeDimension) {
251 *cubeDimension = size;
252 }
253 return data;
254 }
255
213 static void drawSomething(SkCanvas* canvas) { 256 static void drawSomething(SkCanvas* canvas) {
214 SkPaint paint; 257 SkPaint paint;
215 258
216 canvas->save(); 259 canvas->save();
217 canvas->scale(0.5f, 0.5f); 260 canvas->scale(0.5f, 0.5f);
218 canvas->drawBitmap(make_bitmap(), 0, 0, NULL); 261 canvas->drawBitmap(make_bitmap(), 0, 0, NULL);
219 canvas->restore(); 262 canvas->restore();
220 263
221 const char beforeStr[] = "before circle"; 264 const char beforeStr[] = "before circle";
222 const char afterStr[] = "after circle"; 265 const char afterStr[] = "after circle";
223 266
224 paint.setAntiAlias(true); 267 paint.setAntiAlias(true);
225 268
226 paint.setColor(SK_ColorRED); 269 paint.setColor(SK_ColorRED);
227 canvas->drawData(beforeStr, sizeof(beforeStr)); 270 canvas->drawData(beforeStr, sizeof(beforeStr));
228 canvas->drawCircle(SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/2 ), SkIntToScalar(kBitmapSize/3), paint); 271 canvas->drawCircle(SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/2 ), SkIntToScalar(kBitmapSize/3), paint);
229 canvas->drawData(afterStr, sizeof(afterStr)); 272 canvas->drawData(afterStr, sizeof(afterStr));
230 paint.setColor(SK_ColorBLACK); 273 paint.setColor(SK_ColorBLACK);
231 paint.setTextSize(SkIntToScalar(kBitmapSize/3)); 274 paint.setTextSize(SkIntToScalar(kBitmapSize/3));
232 canvas->drawText("Picture", 7, SkIntToScalar(kBitmapSize/2), SkIntToScalar(k BitmapSize/4), paint); 275 canvas->drawText("Picture", 7, SkIntToScalar(kBitmapSize/2), SkIntToScalar(k BitmapSize/4), paint);
233 } 276 }
234 277
235 static SkImageFilter* make_image_filter(bool canBeNull = true) { 278 static SkImageFilter* make_image_filter(bool canBeNull = true) {
236 SkImageFilter* filter = 0; 279 SkImageFilter* filter = 0;
237 280
238 // Add a 1 in 3 chance to get a NULL input 281 // Add a 1 in 3 chance to get a NULL input
239 if (canBeNull && (R(3) == 1)) { return filter; } 282 if (canBeNull && (R(3) == 1)) { return filter; }
240 283
241 enum { ALPHA_THRESHOLD, MERGE, COLOR, BLUR, MAGNIFIER, 284 enum { ALPHA_THRESHOLD, MERGE, COLOR, LUT3D, BLUR, MAGNIFIER,
242 DOWN_SAMPLE, XFERMODE, OFFSET, MATRIX, MATRIX_CONVOLUTION, COMPOSE, 285 DOWN_SAMPLE, XFERMODE, OFFSET, MATRIX, MATRIX_CONVOLUTION, COMPOSE,
243 DISTANT_LIGHT, POINT_LIGHT, SPOT_LIGHT, NOISE, DROP_SHADOW, 286 DISTANT_LIGHT, POINT_LIGHT, SPOT_LIGHT, NOISE, DROP_SHADOW,
244 MORPHOLOGY, BITMAP, DISPLACE, TILE, PICTURE, NUM_FILTERS }; 287 MORPHOLOGY, BITMAP, DISPLACE, TILE, PICTURE, NUM_FILTERS };
245 288
246 switch (R(NUM_FILTERS)) { 289 switch (R(NUM_FILTERS)) {
247 case ALPHA_THRESHOLD: 290 case ALPHA_THRESHOLD:
248 filter = SkAlphaThresholdFilter::Create(make_region(), make_scalar(), ma ke_scalar()); 291 filter = SkAlphaThresholdFilter::Create(make_region(), make_scalar(), ma ke_scalar());
249 break; 292 break;
250 case MERGE: 293 case MERGE:
251 filter = SkMergeImageFilter::Create(make_image_filter(), make_image_filt er(), make_xfermode()); 294 filter = SkMergeImageFilter::Create(make_image_filter(), make_image_filt er(), make_xfermode());
252 break; 295 break;
253 case COLOR: 296 case COLOR:
254 { 297 {
255 SkAutoTUnref<SkColorFilter> cf((R(2) == 1) ? 298 SkAutoTUnref<SkColorFilter> cf((R(2) == 1) ?
256 SkColorFilter::CreateModeFilter(make_color(), make_xfermode()) : 299 SkColorFilter::CreateModeFilter(make_color(), make_xfermode()) :
257 SkColorFilter::CreateLightingFilter(make_color(), make_color()) ); 300 SkColorFilter::CreateLightingFilter(make_color(), make_color()) );
258 filter = cf.get() ? SkColorFilterImageFilter::Create(cf, make_image_filt er()) : 0; 301 filter = cf.get() ? SkColorFilterImageFilter::Create(cf, make_image_filt er()) : 0;
259 } 302 }
260 break; 303 break;
304 case LUT3D:
305 {
306 int cubeDimension;
307 SkAutoDataUnref lut3D(make_3Dlut(&cubeDimension, (R(2) == 1), (R(2) == 1 ), (R(2) == 1)));
308 SkAutoTUnref<SkColorFilter> cf(SkColorCubeFilter::Create(lut3D, cubeDime nsion));
309 filter = cf.get() ? SkColorFilterImageFilter::Create(cf, make_image_filt er()) : 0;
310 }
311 break;
261 case BLUR: 312 case BLUR:
262 filter = SkBlurImageFilter::Create(make_scalar(true), make_scalar(true), make_image_filter()); 313 filter = SkBlurImageFilter::Create(make_scalar(true), make_scalar(true), make_image_filter());
263 break; 314 break;
264 case MAGNIFIER: 315 case MAGNIFIER:
265 filter = SkMagnifierImageFilter::Create(make_rect(), make_scalar(true)); 316 filter = SkMagnifierImageFilter::Create(make_rect(), make_scalar(true));
266 break; 317 break;
267 case DOWN_SAMPLE: 318 case DOWN_SAMPLE:
268 filter = SkDownSampleImageFilter::Create(make_scalar()); 319 filter = SkDownSampleImageFilter::Create(make_scalar());
269 break; 320 break;
270 case XFERMODE: 321 case XFERMODE:
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 } 532 }
482 533
483 private: 534 private:
484 typedef SkView INHERITED; 535 typedef SkView INHERITED;
485 }; 536 };
486 537
487 ////////////////////////////////////////////////////////////////////////////// 538 //////////////////////////////////////////////////////////////////////////////
488 539
489 static SkView* MyFactory() { return new ImageFilterFuzzView; } 540 static SkView* MyFactory() { return new ImageFilterFuzzView; }
490 static SkViewRegister reg(MyFactory); 541 static SkViewRegister reg(MyFactory);
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