| OLD | NEW | 
|---|
| 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 | 7 | 
| 8 #include "SkBicubicImageFilter.h" | 8 #include "SkBicubicImageFilter.h" | 
| 9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" | 
| 10 #include "SkBitmapDevice.h" | 10 #include "SkBitmapDevice.h" | 
| (...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 484     recordingCanvas->saveLayer(NULL, &paint); | 484     recordingCanvas->saveLayer(NULL, &paint); | 
| 485     SkPaint solidPaint; | 485     SkPaint solidPaint; | 
| 486     solidPaint.setColor(0xFFFFFFFF); | 486     solidPaint.setColor(0xFFFFFFFF); | 
| 487     recordingCanvas->save(); | 487     recordingCanvas->save(); | 
| 488     recordingCanvas->scale(SkIntToScalar(10), SkIntToScalar(10)); | 488     recordingCanvas->scale(SkIntToScalar(10), SkIntToScalar(10)); | 
| 489     recordingCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(100, 100)), solidPain
     t); | 489     recordingCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(100, 100)), solidPain
     t); | 
| 490     recordingCanvas->restore(); // scale | 490     recordingCanvas->restore(); // scale | 
| 491     recordingCanvas->restore(); // saveLayer | 491     recordingCanvas->restore(); // saveLayer | 
| 492     SkAutoTUnref<SkPicture> picture(recorder.endRecording()); | 492     SkAutoTUnref<SkPicture> picture(recorder.endRecording()); | 
| 493 | 493 | 
| 494     canvas.drawPicture(*picture); | 494     canvas.drawPicture(picture); | 
| 495 } | 495 } | 
| 496 | 496 | 
| 497 DEF_TEST(ImageFilterPictureImageFilterTest, reporter) { | 497 DEF_TEST(ImageFilterPictureImageFilterTest, reporter) { | 
| 498 | 498 | 
| 499     SkRTreeFactory factory; | 499     SkRTreeFactory factory; | 
| 500     SkPictureRecorder recorder; | 500     SkPictureRecorder recorder; | 
| 501     SkCanvas* recordingCanvas = recorder.beginRecording(1, 1, &factory, 0); | 501     SkCanvas* recordingCanvas = recorder.beginRecording(1, 1, &factory, 0); | 
| 502 | 502 | 
| 503     // Create an SkPicture which simply draws a green 1x1 rectangle. | 503     // Create an SkPicture which simply draws a green 1x1 rectangle. | 
| 504     SkPaint greenPaint; | 504     SkPaint greenPaint; | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 522     outerCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(1, 1)), redPaintWithFilte
     r); | 522     outerCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(1, 1)), redPaintWithFilte
     r); | 
| 523     SkAutoTUnref<SkPicture> outerPicture(outerRecorder.endRecording()); | 523     SkAutoTUnref<SkPicture> outerPicture(outerRecorder.endRecording()); | 
| 524 | 524 | 
| 525     SkBitmap bitmap; | 525     SkBitmap bitmap; | 
| 526     bitmap.allocN32Pixels(1, 1); | 526     bitmap.allocN32Pixels(1, 1); | 
| 527     SkBitmapDevice device(bitmap); | 527     SkBitmapDevice device(bitmap); | 
| 528     SkCanvas canvas(&device); | 528     SkCanvas canvas(&device); | 
| 529 | 529 | 
| 530     // The result here should be green, since the filter replaces the primitive'
     s red interior. | 530     // The result here should be green, since the filter replaces the primitive'
     s red interior. | 
| 531     canvas.clear(0x0); | 531     canvas.clear(0x0); | 
| 532     canvas.drawPicture(*outerPicture); | 532     canvas.drawPicture(outerPicture); | 
| 533     uint32_t pixel = *bitmap.getAddr32(0, 0); | 533     uint32_t pixel = *bitmap.getAddr32(0, 0); | 
| 534     REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); | 534     REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); | 
| 535 | 535 | 
| 536     // Check that, for now, SkPictureImageFilter does not serialize or | 536     // Check that, for now, SkPictureImageFilter does not serialize or | 
| 537     // deserialize its contained picture when the filter is serialized | 537     // deserialize its contained picture when the filter is serialized | 
| 538     // cross-process. Do this by "laundering" it through SkValidatingReadBuffer. | 538     // cross-process. Do this by "laundering" it through SkValidatingReadBuffer. | 
| 539     SkAutoTUnref<SkData> data(SkValidatingSerializeFlattenable(imageFilter.get()
     )); | 539     SkAutoTUnref<SkData> data(SkValidatingSerializeFlattenable(imageFilter.get()
     )); | 
| 540     SkAutoTUnref<SkFlattenable> flattenable(SkValidatingDeserializeFlattenable( | 540     SkAutoTUnref<SkFlattenable> flattenable(SkValidatingDeserializeFlattenable( | 
| 541         data->data(), data->size(), SkImageFilter::GetFlattenableType())); | 541         data->data(), data->size(), SkImageFilter::GetFlattenableType())); | 
| 542     SkImageFilter* unflattenedFilter = static_cast<SkImageFilter*>(flattenable.g
     et()); | 542     SkImageFilter* unflattenedFilter = static_cast<SkImageFilter*>(flattenable.g
     et()); | 
| 543 | 543 | 
| 544     redPaintWithFilter.setImageFilter(unflattenedFilter); | 544     redPaintWithFilter.setImageFilter(unflattenedFilter); | 
| 545     SkPictureRecorder crossProcessRecorder; | 545     SkPictureRecorder crossProcessRecorder; | 
| 546     SkCanvas* crossProcessCanvas = crossProcessRecorder.beginRecording(1, 1, &fa
     ctory, 0); | 546     SkCanvas* crossProcessCanvas = crossProcessRecorder.beginRecording(1, 1, &fa
     ctory, 0); | 
| 547     crossProcessCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(1, 1)), redPaintWi
     thFilter); | 547     crossProcessCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(1, 1)), redPaintWi
     thFilter); | 
| 548     SkAutoTUnref<SkPicture> crossProcessPicture(crossProcessRecorder.endRecordin
     g()); | 548     SkAutoTUnref<SkPicture> crossProcessPicture(crossProcessRecorder.endRecordin
     g()); | 
| 549 | 549 | 
| 550     canvas.clear(0x0); | 550     canvas.clear(0x0); | 
| 551     canvas.drawPicture(*crossProcessPicture); | 551     canvas.drawPicture(crossProcessPicture); | 
| 552     pixel = *bitmap.getAddr32(0, 0); | 552     pixel = *bitmap.getAddr32(0, 0); | 
| 553     // The result here should not be green, since the filter draws nothing. | 553     // The result here should not be green, since the filter draws nothing. | 
| 554     REPORTER_ASSERT(reporter, pixel != SK_ColorGREEN); | 554     REPORTER_ASSERT(reporter, pixel != SK_ColorGREEN); | 
| 555 } | 555 } | 
| 556 | 556 | 
| 557 DEF_TEST(ImageFilterEmptySaveLayerTest, reporter) { | 557 DEF_TEST(ImageFilterEmptySaveLayerTest, reporter) { | 
| 558 | 558 | 
| 559     // Even when there's an empty saveLayer()/restore(), ensure that an image | 559     // Even when there's an empty saveLayer()/restore(), ensure that an image | 
| 560     // filter or color filter which affects transparent black still draws. | 560     // filter or color filter which affects transparent black still draws. | 
| 561 | 561 | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 577     colorFilterPaint.setColorFilter(green.get()); | 577     colorFilterPaint.setColorFilter(green.get()); | 
| 578 | 578 | 
| 579     SkRect bounds = SkRect::MakeWH(10, 10); | 579     SkRect bounds = SkRect::MakeWH(10, 10); | 
| 580 | 580 | 
| 581     SkCanvas* recordingCanvas = recorder.beginRecording(10, 10, &factory, 0); | 581     SkCanvas* recordingCanvas = recorder.beginRecording(10, 10, &factory, 0); | 
| 582     recordingCanvas->saveLayer(&bounds, &imageFilterPaint); | 582     recordingCanvas->saveLayer(&bounds, &imageFilterPaint); | 
| 583     recordingCanvas->restore(); | 583     recordingCanvas->restore(); | 
| 584     SkAutoTUnref<SkPicture> picture(recorder.endRecording()); | 584     SkAutoTUnref<SkPicture> picture(recorder.endRecording()); | 
| 585 | 585 | 
| 586     canvas.clear(0); | 586     canvas.clear(0); | 
| 587     canvas.drawPicture(*picture); | 587     canvas.drawPicture(picture); | 
| 588     uint32_t pixel = *bitmap.getAddr32(0, 0); | 588     uint32_t pixel = *bitmap.getAddr32(0, 0); | 
| 589     REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); | 589     REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); | 
| 590 | 590 | 
| 591     recordingCanvas = recorder.beginRecording(10, 10, &factory, 0); | 591     recordingCanvas = recorder.beginRecording(10, 10, &factory, 0); | 
| 592     recordingCanvas->saveLayer(NULL, &imageFilterPaint); | 592     recordingCanvas->saveLayer(NULL, &imageFilterPaint); | 
| 593     recordingCanvas->restore(); | 593     recordingCanvas->restore(); | 
| 594     SkAutoTUnref<SkPicture> picture2(recorder.endRecording()); | 594     SkAutoTUnref<SkPicture> picture2(recorder.endRecording()); | 
| 595 | 595 | 
| 596     canvas.clear(0); | 596     canvas.clear(0); | 
| 597     canvas.drawPicture(*picture2); | 597     canvas.drawPicture(picture2); | 
| 598     pixel = *bitmap.getAddr32(0, 0); | 598     pixel = *bitmap.getAddr32(0, 0); | 
| 599     REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); | 599     REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); | 
| 600 | 600 | 
| 601     recordingCanvas = recorder.beginRecording(10, 10, &factory, 0); | 601     recordingCanvas = recorder.beginRecording(10, 10, &factory, 0); | 
| 602     recordingCanvas->saveLayer(&bounds, &colorFilterPaint); | 602     recordingCanvas->saveLayer(&bounds, &colorFilterPaint); | 
| 603     recordingCanvas->restore(); | 603     recordingCanvas->restore(); | 
| 604     SkAutoTUnref<SkPicture> picture3(recorder.endRecording()); | 604     SkAutoTUnref<SkPicture> picture3(recorder.endRecording()); | 
| 605 | 605 | 
| 606     canvas.clear(0); | 606     canvas.clear(0); | 
| 607     canvas.drawPicture(*picture3); | 607     canvas.drawPicture(picture3); | 
| 608     pixel = *bitmap.getAddr32(0, 0); | 608     pixel = *bitmap.getAddr32(0, 0); | 
| 609     REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); | 609     REPORTER_ASSERT(reporter, pixel == SK_ColorGREEN); | 
| 610 } | 610 } | 
| 611 | 611 | 
| 612 static void test_huge_blur(SkBaseDevice* device, skiatest::Reporter* reporter) { | 612 static void test_huge_blur(SkBaseDevice* device, skiatest::Reporter* reporter) { | 
| 613     SkCanvas canvas(device); | 613     SkCanvas canvas(device); | 
| 614 | 614 | 
| 615     SkBitmap bitmap; | 615     SkBitmap bitmap; | 
| 616     bitmap.allocN32Pixels(100, 100); | 616     bitmap.allocN32Pixels(100, 100); | 
| 617     bitmap.eraseARGB(0, 0, 0, 0); | 617     bitmap.eraseARGB(0, 0, 0, 0); | 
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 753 } | 753 } | 
| 754 | 754 | 
| 755 DEF_GPUTEST(XfermodeImageFilterCroppedInputGPU, reporter, factory) { | 755 DEF_GPUTEST(XfermodeImageFilterCroppedInputGPU, reporter, factory) { | 
| 756     GrContext* context = factory->get(static_cast<GrContextFactory::GLContextTyp
     e>(0)); | 756     GrContext* context = factory->get(static_cast<GrContextFactory::GLContextTyp
     e>(0)); | 
| 757     SkAutoTUnref<SkGpuDevice> device(SkGpuDevice::Create(context, | 757     SkAutoTUnref<SkGpuDevice> device(SkGpuDevice::Create(context, | 
| 758                                                          SkImageInfo::MakeN32Pre
     mul(1, 1), | 758                                                          SkImageInfo::MakeN32Pre
     mul(1, 1), | 
| 759                                                          0)); | 759                                                          0)); | 
| 760     test_xfermode_cropped_input(device, reporter); | 760     test_xfermode_cropped_input(device, reporter); | 
| 761 } | 761 } | 
| 762 #endif | 762 #endif | 
| OLD | NEW | 
|---|