aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/PictureTest.cpp
diff options
context:
space:
mode:
authorGravatar robertphillips <robertphillips@google.com>2014-11-12 09:32:34 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2014-11-12 09:32:34 -0800
commit82365915476caedc130d0e36012a1ce0c007c4ae (patch)
tree09a36cd23f34cdd609b4279ecad52c0b0b3868ac /tests/PictureTest.cpp
parentac6a2f964ee9821df6a4a8f3c46796322a4c37b8 (diff)
Rename GrAccelData to SkLayerInfo and move it to src/core
Diffstat (limited to 'tests/PictureTest.cpp')
-rw-r--r--tests/PictureTest.cpp384
1 files changed, 182 insertions, 202 deletions
diff --git a/tests/PictureTest.cpp b/tests/PictureTest.cpp
index 3cb145e7a4..5bc60371c9 100644
--- a/tests/PictureTest.cpp
+++ b/tests/PictureTest.cpp
@@ -16,6 +16,7 @@
#include "SkError.h"
#include "SkImageEncoder.h"
#include "SkImageGenerator.h"
+#include "SkLayerInfo.h"
#include "SkPaint.h"
#include "SkPicture.h"
#include "SkPictureRecorder.h"
@@ -29,7 +30,6 @@
#if SK_SUPPORT_GPU
#include "SkSurface.h"
#include "GrContextFactory.h"
-#include "GrPictureUtils.h"
#endif
#include "Test.h"
@@ -871,224 +871,209 @@ static void test_gpu_veto(skiatest::Reporter* reporter) {
REPORTER_ASSERT(reporter, !picture->suitableForGpuRasterization(NULL));
}
-static void test_gpu_picture_optimization(skiatest::Reporter* reporter,
- GrContextFactory* factory) {
- for (int i= 0; i < GrContextFactory::kGLContextTypeCnt; ++i) {
- GrContextFactory::GLContextType glCtxType = (GrContextFactory::GLContextType) i;
+#endif
- if (!GrContextFactory::IsRenderingGLContext(glCtxType)) {
- continue;
- }
+static void test_savelayer_extraction(skiatest::Reporter* reporter) {
+ static const int kWidth = 100;
+ static const int kHeight = 100;
- GrContext* context = factory->get(glCtxType);
+ // Create complex paint that the bounding box computation code can't
+ // optimize away
+ SkScalar blueToRedMatrix[20] = { 0 };
+ blueToRedMatrix[2] = blueToRedMatrix[18] = SK_Scalar1;
+ SkAutoTUnref<SkColorFilter> blueToRed(SkColorMatrixFilter::Create(blueToRedMatrix));
+ SkAutoTUnref<SkImageFilter> filter(SkColorFilterImageFilter::Create(blueToRed.get()));
- if (NULL == context) {
- continue;
- }
+ SkPaint complexPaint;
+ complexPaint.setImageFilter(filter);
- static const int kWidth = 100;
- static const int kHeight = 100;
+ SkAutoTUnref<SkPicture> pict, child;
+ SkRTreeFactory bbhFactory;
- // Create complex paint that the bounding box computation code can't
- // optimize away
- SkScalar blueToRedMatrix[20] = { 0 };
- blueToRedMatrix[2] = blueToRedMatrix[18] = SK_Scalar1;
- SkAutoTUnref<SkColorFilter> blueToRed(SkColorMatrixFilter::Create(blueToRedMatrix));
- SkAutoTUnref<SkImageFilter> filter(SkColorFilterImageFilter::Create(blueToRed.get()));
+ {
+ SkPictureRecorder recorder;
- SkPaint complexPaint;
- complexPaint.setImageFilter(filter);
+ SkCanvas* c = recorder.beginRecording(SkIntToScalar(kWidth), SkIntToScalar(kHeight),
+ &bbhFactory,
+ SkPictureRecorder::kComputeSaveLayerInfo_RecordFlag);
- SkAutoTUnref<SkPicture> pict, child;
- SkRTreeFactory bbhFactory;
+ c->saveLayer(NULL, &complexPaint);
+ c->restore();
- {
- SkPictureRecorder recorder;
+ child.reset(recorder.endRecording());
+ }
- SkCanvas* c = recorder.beginRecording(SkIntToScalar(kWidth), SkIntToScalar(kHeight),
- &bbhFactory,
- SkPictureRecorder::kComputeSaveLayerInfo_RecordFlag);
+ // create a picture with the structure:
+ // 1)
+ // SaveLayer
+ // Restore
+ // 2)
+ // SaveLayer
+ // Translate
+ // SaveLayer w/ bound
+ // Restore
+ // Restore
+ // 3)
+ // SaveLayer w/ copyable paint
+ // Restore
+ // 4)
+ // SaveLayer
+ // DrawPicture (which has a SaveLayer/Restore pair)
+ // Restore
+ // 5)
+ // SaveLayer
+ // DrawPicture with Matrix & Paint (with SaveLayer/Restore pair)
+ // Restore
+ {
+ SkPictureRecorder recorder;
- c->saveLayer(NULL, &complexPaint);
+ SkCanvas* c = recorder.beginRecording(SkIntToScalar(kWidth),
+ SkIntToScalar(kHeight),
+ &bbhFactory,
+ SkPictureRecorder::kComputeSaveLayerInfo_RecordFlag);
+ // 1)
+ c->saveLayer(NULL, &complexPaint); // layer #0
+ c->restore();
+
+ // 2)
+ c->saveLayer(NULL, NULL); // layer #1
+ c->translate(kWidth/2.0f, kHeight/2.0f);
+ SkRect r = SkRect::MakeXYWH(0, 0, kWidth/2, kHeight/2);
+ c->saveLayer(&r, &complexPaint); // layer #2
c->restore();
+ c->restore();
- child.reset(recorder.endRecording());
+ // 3)
+ {
+ c->saveLayer(NULL, &complexPaint); // layer #3
+ c->restore();
}
- // create a picture with the structure:
- // 1)
- // SaveLayer
- // Restore
- // 2)
- // SaveLayer
- // Translate
- // SaveLayer w/ bound
- // Restore
- // Restore
- // 3)
- // SaveLayer w/ copyable paint
- // Restore
+ SkPaint layerPaint;
+ layerPaint.setColor(SK_ColorRED); // Non-alpha only to avoid SaveLayerDrawRestoreNooper
// 4)
- // SaveLayer
- // DrawPicture (which has a SaveLayer/Restore pair)
- // Restore
- // 5)
- // SaveLayer
- // DrawPicture with Matrix & Paint (with SaveLayer/Restore pair)
- // Restore
{
- SkPictureRecorder recorder;
-
- SkCanvas* c = recorder.beginRecording(SkIntToScalar(kWidth),
- SkIntToScalar(kHeight),
- &bbhFactory,
- SkPictureRecorder::kComputeSaveLayerInfo_RecordFlag);
- // 1)
- c->saveLayer(NULL, &complexPaint); // layer #0
+ c->saveLayer(NULL, &layerPaint); // layer #4
+ c->drawPicture(child); // layer #5 inside picture
c->restore();
+ }
+ // 5
+ {
+ SkPaint picturePaint;
+ SkMatrix trans;
+ trans.setTranslate(10, 10);
- // 2)
- c->saveLayer(NULL, NULL); // layer #1
- c->translate(kWidth/2.0f, kHeight/2.0f);
- SkRect r = SkRect::MakeXYWH(0, 0, kWidth/2, kHeight/2);
- c->saveLayer(&r, &complexPaint); // layer #2
- c->restore();
+ c->saveLayer(NULL, &layerPaint); // layer #6
+ c->drawPicture(child, &trans, &picturePaint); // layer #7 inside picture
c->restore();
-
- // 3)
- {
- c->saveLayer(NULL, &complexPaint); // layer #3
- c->restore();
- }
-
- SkPaint layerPaint;
- layerPaint.setColor(SK_ColorRED); // Non-alpha only to avoid SaveLayerDrawRestoreNooper
- // 4)
- {
- c->saveLayer(NULL, &layerPaint); // layer #4
- c->drawPicture(child); // layer #5 inside picture
- c->restore();
- }
- // 5
- {
- SkPaint picturePaint;
- SkMatrix trans;
- trans.setTranslate(10, 10);
-
- c->saveLayer(NULL, &layerPaint); // layer #6
- c->drawPicture(child, &trans, &picturePaint); // layer #7 inside picture
- c->restore();
- }
-
- pict.reset(recorder.endRecording());
}
- // Now test out the SaveLayer extraction
- {
- SkPicture::AccelData::Key key = GrAccelData::ComputeAccelDataKey();
-
- const SkPicture::AccelData* data = pict->EXPERIMENTAL_getAccelData(key);
- REPORTER_ASSERT(reporter, data);
-
- const GrAccelData *gpuData = static_cast<const GrAccelData*>(data);
- REPORTER_ASSERT(reporter, 8 == gpuData->numSaveLayers());
-
- const GrAccelData::SaveLayerInfo& info0 = gpuData->saveLayerInfo(0);
- // The parent/child layers appear in reverse order
- const GrAccelData::SaveLayerInfo& info1 = gpuData->saveLayerInfo(2);
- const GrAccelData::SaveLayerInfo& info2 = gpuData->saveLayerInfo(1);
-
- const GrAccelData::SaveLayerInfo& info3 = gpuData->saveLayerInfo(3);
-
- // The parent/child layers appear in reverse order
- const GrAccelData::SaveLayerInfo& info4 = gpuData->saveLayerInfo(5);
- const GrAccelData::SaveLayerInfo& info5 = gpuData->saveLayerInfo(4);
-
- // The parent/child layers appear in reverse order
- const GrAccelData::SaveLayerInfo& info6 = gpuData->saveLayerInfo(7);
- const GrAccelData::SaveLayerInfo& info7 = gpuData->saveLayerInfo(6);
-
- REPORTER_ASSERT(reporter, NULL == info0.fPicture);
- REPORTER_ASSERT(reporter, kWidth == info0.fBounds.width() &&
- kHeight == info0.fBounds.height());
- REPORTER_ASSERT(reporter, info0.fLocalMat.isIdentity());
- REPORTER_ASSERT(reporter, info0.fPreMat.isIdentity());
- REPORTER_ASSERT(reporter, 0 == info0.fBounds.fLeft && 0 == info0.fBounds.fTop);
- REPORTER_ASSERT(reporter, NULL != info0.fPaint);
- REPORTER_ASSERT(reporter, !info0.fIsNested && !info0.fHasNestedLayers);
-
- REPORTER_ASSERT(reporter, NULL == info1.fPicture);
- REPORTER_ASSERT(reporter, kWidth/2.0 == info1.fBounds.width() &&
- kHeight/2.0 == info1.fBounds.height());
- REPORTER_ASSERT(reporter, info1.fLocalMat.isIdentity());
- REPORTER_ASSERT(reporter, info1.fPreMat.isIdentity());
- REPORTER_ASSERT(reporter, kWidth/2.0 == info1.fBounds.fLeft &&
- kHeight/2.0 == info1.fBounds.fTop);
- REPORTER_ASSERT(reporter, NULL == info1.fPaint);
- REPORTER_ASSERT(reporter, !info1.fIsNested &&
- info1.fHasNestedLayers); // has a nested SL
-
- REPORTER_ASSERT(reporter, NULL == info2.fPicture);
- REPORTER_ASSERT(reporter, kWidth / 2 == info2.fBounds.width() &&
- kHeight / 2 == info2.fBounds.height()); // bound reduces size
- REPORTER_ASSERT(reporter, !info2.fLocalMat.isIdentity());
- REPORTER_ASSERT(reporter, info2.fPreMat.isIdentity());
- REPORTER_ASSERT(reporter, kWidth / 2 == info2.fBounds.fLeft && // translated
- kHeight / 2 == info2.fBounds.fTop);
- REPORTER_ASSERT(reporter, NULL != info2.fPaint);
- REPORTER_ASSERT(reporter, info2.fIsNested && !info2.fHasNestedLayers); // is nested
-
- REPORTER_ASSERT(reporter, NULL == info3.fPicture);
- REPORTER_ASSERT(reporter, kWidth == info3.fBounds.width() &&
- kHeight == info3.fBounds.height());
- REPORTER_ASSERT(reporter, info3.fLocalMat.isIdentity());
- REPORTER_ASSERT(reporter, info3.fPreMat.isIdentity());
- REPORTER_ASSERT(reporter, 0 == info3.fBounds.fLeft && 0 == info3.fBounds.fTop);
- REPORTER_ASSERT(reporter, info3.fPaint);
- REPORTER_ASSERT(reporter, !info3.fIsNested && !info3.fHasNestedLayers);
-
- REPORTER_ASSERT(reporter, NULL == info4.fPicture);
- REPORTER_ASSERT(reporter, kWidth == info4.fBounds.width() &&
- kHeight == info4.fBounds.height());
- REPORTER_ASSERT(reporter, 0 == info4.fBounds.fLeft && 0 == info4.fBounds.fTop);
- REPORTER_ASSERT(reporter, info4.fLocalMat.isIdentity());
- REPORTER_ASSERT(reporter, info4.fPreMat.isIdentity());
- REPORTER_ASSERT(reporter, info4.fPaint);
- REPORTER_ASSERT(reporter, !info4.fIsNested &&
- info4.fHasNestedLayers); // has a nested SL
-
- REPORTER_ASSERT(reporter, child == info5.fPicture); // in a child picture
- REPORTER_ASSERT(reporter, kWidth == info5.fBounds.width() &&
- kHeight == info5.fBounds.height());
- REPORTER_ASSERT(reporter, 0 == info5.fBounds.fLeft && 0 == info5.fBounds.fTop);
- REPORTER_ASSERT(reporter, info5.fLocalMat.isIdentity());
- REPORTER_ASSERT(reporter, info5.fPreMat.isIdentity());
- REPORTER_ASSERT(reporter, NULL != info5.fPaint);
- REPORTER_ASSERT(reporter, info5.fIsNested && !info5.fHasNestedLayers); // is nested
-
- REPORTER_ASSERT(reporter, NULL == info6.fPicture);
- REPORTER_ASSERT(reporter, kWidth-10 == info6.fBounds.width() &&
- kHeight-10 == info6.fBounds.height());
- REPORTER_ASSERT(reporter, 10 == info6.fBounds.fLeft && 10 == info6.fBounds.fTop);
- REPORTER_ASSERT(reporter, info6.fLocalMat.isIdentity());
- REPORTER_ASSERT(reporter, info6.fPreMat.isIdentity());
- REPORTER_ASSERT(reporter, info6.fPaint);
- REPORTER_ASSERT(reporter, !info6.fIsNested &&
- info6.fHasNestedLayers); // has a nested SL
-
- REPORTER_ASSERT(reporter, child == info7.fPicture); // in a child picture
- REPORTER_ASSERT(reporter, kWidth == info7.fBounds.width() &&
- kHeight == info7.fBounds.height());
- REPORTER_ASSERT(reporter, 0 == info7.fBounds.fLeft && 0 == info7.fBounds.fTop);
- REPORTER_ASSERT(reporter, info7.fLocalMat.isIdentity());
- REPORTER_ASSERT(reporter, info7.fPreMat.isIdentity());
- REPORTER_ASSERT(reporter, NULL != info7.fPaint);
- REPORTER_ASSERT(reporter, info7.fIsNested && !info7.fHasNestedLayers); // is nested
- }
+ pict.reset(recorder.endRecording());
}
-}
-#endif
+ // Now test out the SaveLayer extraction
+ {
+ SkPicture::AccelData::Key key = SkLayerInfo::ComputeKey();
+
+ const SkPicture::AccelData* data = pict->EXPERIMENTAL_getAccelData(key);
+ REPORTER_ASSERT(reporter, data);
+
+ const SkLayerInfo *gpuData = static_cast<const SkLayerInfo*>(data);
+ REPORTER_ASSERT(reporter, 8 == gpuData->numBlocks());
+
+ const SkLayerInfo::BlockInfo& info0 = gpuData->block(0);
+ // The parent/child layers appear in reverse order
+ const SkLayerInfo::BlockInfo& info1 = gpuData->block(2);
+ const SkLayerInfo::BlockInfo& info2 = gpuData->block(1);
+
+ const SkLayerInfo::BlockInfo& info3 = gpuData->block(3);
+
+ // The parent/child layers appear in reverse order
+ const SkLayerInfo::BlockInfo& info4 = gpuData->block(5);
+ const SkLayerInfo::BlockInfo& info5 = gpuData->block(4);
+
+ // The parent/child layers appear in reverse order
+ const SkLayerInfo::BlockInfo& info6 = gpuData->block(7);
+ const SkLayerInfo::BlockInfo& info7 = gpuData->block(6);
+
+ REPORTER_ASSERT(reporter, NULL == info0.fPicture);
+ REPORTER_ASSERT(reporter, kWidth == info0.fBounds.width() &&
+ kHeight == info0.fBounds.height());
+ REPORTER_ASSERT(reporter, info0.fLocalMat.isIdentity());
+ REPORTER_ASSERT(reporter, info0.fPreMat.isIdentity());
+ REPORTER_ASSERT(reporter, 0 == info0.fBounds.fLeft && 0 == info0.fBounds.fTop);
+ REPORTER_ASSERT(reporter, NULL != info0.fPaint);
+ REPORTER_ASSERT(reporter, !info0.fIsNested && !info0.fHasNestedLayers);
+
+ REPORTER_ASSERT(reporter, NULL == info1.fPicture);
+ REPORTER_ASSERT(reporter, kWidth/2.0 == info1.fBounds.width() &&
+ kHeight/2.0 == info1.fBounds.height());
+ REPORTER_ASSERT(reporter, info1.fLocalMat.isIdentity());
+ REPORTER_ASSERT(reporter, info1.fPreMat.isIdentity());
+ REPORTER_ASSERT(reporter, kWidth/2.0 == info1.fBounds.fLeft &&
+ kHeight/2.0 == info1.fBounds.fTop);
+ REPORTER_ASSERT(reporter, NULL == info1.fPaint);
+ REPORTER_ASSERT(reporter, !info1.fIsNested &&
+ info1.fHasNestedLayers); // has a nested SL
+
+ REPORTER_ASSERT(reporter, NULL == info2.fPicture);
+ REPORTER_ASSERT(reporter, kWidth / 2 == info2.fBounds.width() &&
+ kHeight / 2 == info2.fBounds.height()); // bound reduces size
+ REPORTER_ASSERT(reporter, !info2.fLocalMat.isIdentity());
+ REPORTER_ASSERT(reporter, info2.fPreMat.isIdentity());
+ REPORTER_ASSERT(reporter, kWidth / 2 == info2.fBounds.fLeft && // translated
+ kHeight / 2 == info2.fBounds.fTop);
+ REPORTER_ASSERT(reporter, NULL != info2.fPaint);
+ REPORTER_ASSERT(reporter, info2.fIsNested && !info2.fHasNestedLayers); // is nested
+
+ REPORTER_ASSERT(reporter, NULL == info3.fPicture);
+ REPORTER_ASSERT(reporter, kWidth == info3.fBounds.width() &&
+ kHeight == info3.fBounds.height());
+ REPORTER_ASSERT(reporter, info3.fLocalMat.isIdentity());
+ REPORTER_ASSERT(reporter, info3.fPreMat.isIdentity());
+ REPORTER_ASSERT(reporter, 0 == info3.fBounds.fLeft && 0 == info3.fBounds.fTop);
+ REPORTER_ASSERT(reporter, info3.fPaint);
+ REPORTER_ASSERT(reporter, !info3.fIsNested && !info3.fHasNestedLayers);
+
+ REPORTER_ASSERT(reporter, NULL == info4.fPicture);
+ REPORTER_ASSERT(reporter, kWidth == info4.fBounds.width() &&
+ kHeight == info4.fBounds.height());
+ REPORTER_ASSERT(reporter, 0 == info4.fBounds.fLeft && 0 == info4.fBounds.fTop);
+ REPORTER_ASSERT(reporter, info4.fLocalMat.isIdentity());
+ REPORTER_ASSERT(reporter, info4.fPreMat.isIdentity());
+ REPORTER_ASSERT(reporter, info4.fPaint);
+ REPORTER_ASSERT(reporter, !info4.fIsNested &&
+ info4.fHasNestedLayers); // has a nested SL
+
+ REPORTER_ASSERT(reporter, child == info5.fPicture); // in a child picture
+ REPORTER_ASSERT(reporter, kWidth == info5.fBounds.width() &&
+ kHeight == info5.fBounds.height());
+ REPORTER_ASSERT(reporter, 0 == info5.fBounds.fLeft && 0 == info5.fBounds.fTop);
+ REPORTER_ASSERT(reporter, info5.fLocalMat.isIdentity());
+ REPORTER_ASSERT(reporter, info5.fPreMat.isIdentity());
+ REPORTER_ASSERT(reporter, NULL != info5.fPaint);
+ REPORTER_ASSERT(reporter, info5.fIsNested && !info5.fHasNestedLayers); // is nested
+
+ REPORTER_ASSERT(reporter, NULL == info6.fPicture);
+ REPORTER_ASSERT(reporter, kWidth-10 == info6.fBounds.width() &&
+ kHeight-10 == info6.fBounds.height());
+ REPORTER_ASSERT(reporter, 10 == info6.fBounds.fLeft && 10 == info6.fBounds.fTop);
+ REPORTER_ASSERT(reporter, info6.fLocalMat.isIdentity());
+ REPORTER_ASSERT(reporter, info6.fPreMat.isIdentity());
+ REPORTER_ASSERT(reporter, info6.fPaint);
+ REPORTER_ASSERT(reporter, !info6.fIsNested &&
+ info6.fHasNestedLayers); // has a nested SL
+
+ REPORTER_ASSERT(reporter, child == info7.fPicture); // in a child picture
+ REPORTER_ASSERT(reporter, kWidth == info7.fBounds.width() &&
+ kHeight == info7.fBounds.height());
+ REPORTER_ASSERT(reporter, 0 == info7.fBounds.fLeft && 0 == info7.fBounds.fTop);
+ REPORTER_ASSERT(reporter, info7.fLocalMat.isIdentity());
+ REPORTER_ASSERT(reporter, info7.fPreMat.isIdentity());
+ REPORTER_ASSERT(reporter, NULL != info7.fPaint);
+ REPORTER_ASSERT(reporter, info7.fIsNested && !info7.fHasNestedLayers); // is nested
+ }
+}
static void test_has_text(skiatest::Reporter* reporter) {
SkPictureRecorder recorder;
@@ -1757,14 +1742,9 @@ DEF_TEST(Picture, reporter) {
test_clip_expansion(reporter);
test_hierarchical(reporter);
test_gen_id(reporter);
+ test_savelayer_extraction(reporter);
}
-#if SK_SUPPORT_GPU
-DEF_GPUTEST(GPUPicture, reporter, factory) {
- test_gpu_picture_optimization(reporter, factory);
-}
-#endif
-
static void draw_bitmaps(const SkBitmap bitmap, SkCanvas* canvas) {
const SkPaint paint;
const SkRect rect = { 5.0f, 5.0f, 8.0f, 8.0f };