Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 | 7 |
| 8 #include "SkBlurMask.h" | 8 #include "SkBlurMask.h" |
| 9 #include "SkBlurMaskFilter.h" | 9 #include "SkBlurMaskFilter.h" |
| 10 #include "SkBlurDrawLooper.h" | 10 #include "SkBlurDrawLooper.h" |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 92 refColor = bgColor; | 92 refColor = bgColor; |
| 93 } | 93 } |
| 94 if (refColor != testColor) { | 94 if (refColor != testColor) { |
| 95 return false; | 95 return false; |
| 96 } | 96 } |
| 97 } | 97 } |
| 98 } | 98 } |
| 99 return true; | 99 return true; |
| 100 } | 100 } |
| 101 | 101 |
| 102 static void test_blur_drawing(skiatest::Reporter* reporter) { | 102 DEF_TEST(BlurDrawing, reporter) { |
| 103 | |
| 104 SkPaint paint; | 103 SkPaint paint; |
| 105 paint.setColor(SK_ColorGRAY); | 104 paint.setColor(SK_ColorGRAY); |
| 106 paint.setStyle(SkPaint::kStroke_Style); | 105 paint.setStyle(SkPaint::kStroke_Style); |
| 107 paint.setStrokeWidth(SkIntToScalar(strokeWidth)); | 106 paint.setStrokeWidth(SkIntToScalar(strokeWidth)); |
| 108 | 107 |
| 109 SkScalar sigma = SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(5)); | 108 SkScalar sigma = SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(5)); |
| 110 for (int style = 0; style <= kLastEnum_SkBlurStyle; ++style) { | 109 for (int style = 0; style <= kLastEnum_SkBlurStyle; ++style) { |
| 111 SkBlurStyle blurStyle = static_cast<SkBlurStyle>(style); | 110 SkBlurStyle blurStyle = static_cast<SkBlurStyle>(style); |
| 112 | 111 |
| 113 const uint32_t flagPermutations = SkBlurMaskFilter::kAll_BlurFlag; | 112 const uint32_t flagPermutations = SkBlurMaskFilter::kAll_BlurFlag; |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 269 bitmap.allocN32Pixels(resultCount, 30); | 268 bitmap.allocN32Pixels(resultCount, 30); |
| 270 SkCanvas canvas(bitmap); | 269 SkCanvas canvas(bitmap); |
| 271 | 270 |
| 272 blur_path(&canvas, path, gaussianSigma); | 271 blur_path(&canvas, path, gaussianSigma); |
| 273 readback(&canvas, result, resultCount); | 272 readback(&canvas, result, resultCount); |
| 274 } | 273 } |
| 275 | 274 |
| 276 #if SK_SUPPORT_GPU | 275 #if SK_SUPPORT_GPU |
| 277 #if 0 | 276 #if 0 |
| 278 // temporary disable; see below for explanation | 277 // temporary disable; see below for explanation |
| 279 static bool gpu_blur_path(GrContextFactory* factory, const SkPath& path, | 278 static bool gpu_blur_path(GrContext* context, const SkPath& path, |
| 280 SkScalar gaussianSigma, | 279 SkScalar gaussianSigma, |
| 281 int* result, int resultCount) { | 280 int* result, int resultCount) { |
| 282 | |
| 283 GrContext* grContext = factory->get(GrContextFactory::kNative_GLContextType) ; | |
| 284 if (nullptr == grContext) { | |
| 285 return false; | |
| 286 } | |
| 287 | |
| 288 GrSurfaceDesc desc; | 281 GrSurfaceDesc desc; |
| 289 desc.fConfig = kSkia8888_GrPixelConfig; | 282 desc.fConfig = kSkia8888_GrPixelConfig; |
| 290 desc.fFlags = kRenderTarget_GrSurfaceFlag; | 283 desc.fFlags = kRenderTarget_GrSurfaceFlag; |
| 291 desc.fWidth = resultCount; | 284 desc.fWidth = resultCount; |
| 292 desc.fHeight = 30; | 285 desc.fHeight = 30; |
| 293 desc.fSampleCnt = 0; | 286 desc.fSampleCnt = 0; |
| 294 | 287 |
| 295 SkAutoTUnref<GrTexture> texture(grContext->createTexture(desc, false, nullpt r, 0)); | 288 SkAutoTUnref<GrTexture> texture(grContext->createTexture(desc, false, nullpt r, 0)); |
| 296 SkAutoTUnref<SkGpuDevice> device(new SkGpuDevice (grContext, texture.get()) ); | 289 SkAutoTUnref<SkGpuDevice> device(new SkGpuDevice (grContext, texture.get()) ); |
| 297 SkCanvas canvas(device.get()); | 290 SkCanvas canvas(device.get()); |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 319 delta = first[i] - second[i]; | 312 delta = first[i] - second[i]; |
| 320 if (delta > tol || delta < -tol) { | 313 if (delta > tol || delta < -tol) { |
| 321 return false; | 314 return false; |
| 322 } | 315 } |
| 323 } | 316 } |
| 324 | 317 |
| 325 return true; | 318 return true; |
| 326 } | 319 } |
| 327 | 320 |
| 328 // Test out the normal blur style with a wide range of sigmas | 321 // Test out the normal blur style with a wide range of sigmas |
| 329 static void test_sigma_range(skiatest::Reporter* reporter, GrContextFactory* fac tory) { | 322 DEF_GPUTEST_FOR_NATIVE_CONTEXT(BlurSigmaRange, reporter, context) { |
|
bsalomon
2015/11/30 15:35:35
Might as well make these do all rendering contexts
Kimmo Kinnunen
2015/12/01 06:57:14
Done.
| |
| 330 | |
| 331 static const int kSize = 100; | 323 static const int kSize = 100; |
| 332 | 324 |
| 333 // The geometry is offset a smidge to trigger: | 325 // The geometry is offset a smidge to trigger: |
| 334 // https://code.google.com/p/chromium/issues/detail?id=282418 | 326 // https://code.google.com/p/chromium/issues/detail?id=282418 |
| 335 SkPath rectPath; | 327 SkPath rectPath; |
| 336 rectPath.addRect(0.3f, 0.3f, 100.3f, 100.3f); | 328 rectPath.addRect(0.3f, 0.3f, 100.3f, 100.3f); |
| 337 | 329 |
| 338 SkPoint polyPts[] = { | 330 SkPoint polyPts[] = { |
| 339 { 0.3f, 0.3f }, | 331 { 0.3f, 0.3f }, |
| 340 { 100.3f, 0.3f }, | 332 { 100.3f, 0.3f }, |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 358 cpu_blur_path(polyPath, sigma, generalCaseResult, kSize); | 350 cpu_blur_path(polyPath, sigma, generalCaseResult, kSize); |
| 359 | 351 |
| 360 ground_truth_2d(100, 100, sigma, groundTruthResult, kSize); | 352 ground_truth_2d(100, 100, sigma, groundTruthResult, kSize); |
| 361 brute_force_1d(-50.0f, 50.0f, sigma, bruteForce1DResult, kSize); | 353 brute_force_1d(-50.0f, 50.0f, sigma, bruteForce1DResult, kSize); |
| 362 | 354 |
| 363 REPORTER_ASSERT(reporter, match(rectSpecialCaseResult, bruteForce1DResul t, kSize, 5)); | 355 REPORTER_ASSERT(reporter, match(rectSpecialCaseResult, bruteForce1DResul t, kSize, 5)); |
| 364 REPORTER_ASSERT(reporter, match(generalCaseResult, bruteForce1DResult, k Size, 15)); | 356 REPORTER_ASSERT(reporter, match(generalCaseResult, bruteForce1DResult, k Size, 15)); |
| 365 #if SK_SUPPORT_GPU | 357 #if SK_SUPPORT_GPU |
| 366 #if 0 | 358 #if 0 |
| 367 int gpuResult[kSize]; | 359 int gpuResult[kSize]; |
| 368 bool haveGPUResult = gpu_blur_path(factory, rectPath, sigma, gpuResult, kSize); | 360 bool haveGPUResult = gpu_blur_path(context, rectPath, sigma, gpuResult, kSize); |
| 369 // Disabling this test for now -- I don't think it's a legit comparison. | 361 // Disabling this test for now -- I don't think it's a legit comparison. |
| 370 // Will continue to investigate this. | 362 // Will continue to investigate this. |
| 371 if (haveGPUResult) { | 363 if (haveGPUResult) { |
| 372 // 1 works everywhere but: Ubuntu13 & Nexus4 | 364 // 1 works everywhere but: Ubuntu13 & Nexus4 |
| 373 REPORTER_ASSERT(reporter, match(gpuResult, bruteForce1DResult, kSize , 10)); | 365 REPORTER_ASSERT(reporter, match(gpuResult, bruteForce1DResult, kSize , 10)); |
| 374 } | 366 } |
| 375 #endif | 367 #endif |
| 376 #endif | 368 #endif |
| 377 REPORTER_ASSERT(reporter, match(groundTruthResult, bruteForce1DResult, k Size, 1)); | 369 REPORTER_ASSERT(reporter, match(groundTruthResult, bruteForce1DResult, k Size, 1)); |
| 378 | 370 |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 500 make_blur_layer(&builder, mf); | 492 make_blur_layer(&builder, mf); |
| 501 test_delete_looper(reporter, builder.detachLooper(), sigma, style, quality, expectSuccess); | 493 test_delete_looper(reporter, builder.detachLooper(), sigma, style, quality, expectSuccess); |
| 502 | 494 |
| 503 // 3 layers is too many | 495 // 3 layers is too many |
| 504 make_noop_layer(&builder); | 496 make_noop_layer(&builder); |
| 505 make_blur_layer(&builder, mf); | 497 make_blur_layer(&builder, mf); |
| 506 make_noop_layer(&builder); | 498 make_noop_layer(&builder); |
| 507 test_delete_looper(reporter, builder.detachLooper(), sigma, style, quality, false); | 499 test_delete_looper(reporter, builder.detachLooper(), sigma, style, quality, false); |
| 508 } | 500 } |
| 509 | 501 |
| 510 static void test_asABlur(skiatest::Reporter* reporter) { | 502 DEF_TEST(BlurAsABlur, reporter) { |
| 511 const SkBlurStyle styles[] = { | 503 const SkBlurStyle styles[] = { |
| 512 kNormal_SkBlurStyle, kSolid_SkBlurStyle, kOuter_SkBlurStyle, kInner_SkBl urStyle | 504 kNormal_SkBlurStyle, kSolid_SkBlurStyle, kOuter_SkBlurStyle, kInner_SkBl urStyle |
| 513 }; | 505 }; |
| 514 const SkScalar sigmas[] = { | 506 const SkScalar sigmas[] = { |
| 515 // values <= 0 should not success for a blur | 507 // values <= 0 should not success for a blur |
| 516 -1, 0, 0.5f, 2 | 508 -1, 0, 0.5f, 2 |
| 517 }; | 509 }; |
| 518 | 510 |
| 519 // Test asABlur for SkBlurMaskFilter | 511 // Test asABlur for SkBlurMaskFilter |
| 520 // | 512 // |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 559 if (mf.get()) { | 551 if (mf.get()) { |
| 560 SkMaskFilter::BlurRec rec; | 552 SkMaskFilter::BlurRec rec; |
| 561 bool success = mf->asABlur(&rec); | 553 bool success = mf->asABlur(&rec); |
| 562 REPORTER_ASSERT(reporter, !success); | 554 REPORTER_ASSERT(reporter, !success); |
| 563 } | 555 } |
| 564 } | 556 } |
| 565 } | 557 } |
| 566 } | 558 } |
| 567 | 559 |
| 568 //////////////////////////////////////////////////////////////////////////////// /////////// | 560 //////////////////////////////////////////////////////////////////////////////// /////////// |
| 569 | |
| 570 DEF_GPUTEST(Blur, reporter, factory) { | |
| 571 test_blur_drawing(reporter); | |
| 572 test_sigma_range(reporter, factory); | |
| 573 test_asABlur(reporter); | |
| 574 } | |
| OLD | NEW |