OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 #include "Test.h" | 8 #include "Test.h" |
9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
10 #include "SkBitmapProcShader.h" | 10 #include "SkBitmapProcShader.h" |
11 #include "SkDeferredCanvas.h" | 11 #include "SkDeferredCanvas.h" |
12 #include "SkDevice.h" | 12 #include "SkDevice.h" |
| 13 #include "SkGradientShader.h" |
13 #include "SkShader.h" | 14 #include "SkShader.h" |
14 | 15 |
15 static const int gWidth = 2; | 16 static const int gWidth = 2; |
16 static const int gHeight = 2; | 17 static const int gHeight = 2; |
17 | 18 |
18 static void create(SkBitmap* bm, SkBitmap::Config config, SkColor color) { | 19 static void create(SkBitmap* bm, SkBitmap::Config config, SkColor color) { |
19 bm->setConfig(config, gWidth, gHeight); | 20 bm->setConfig(config, gWidth, gHeight); |
20 bm->allocPixels(); | 21 bm->allocPixels(); |
21 bm->eraseColor(color); | 22 bm->eraseColor(color); |
22 } | 23 } |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 canvas.save(SkCanvas::kMatrixClip_SaveFlag); | 91 canvas.save(SkCanvas::kMatrixClip_SaveFlag); |
91 canvas.clipRect(partialRect, SkRegion::kIntersect_Op, false); | 92 canvas.clipRect(partialRect, SkRegion::kIntersect_Op, false); |
92 canvas.clear(0x00000000); | 93 canvas.clear(0x00000000); |
93 canvas.restore(); | 94 canvas.restore(); |
94 REPORTER_ASSERT(reporter, canvas.isFreshFrame()); | 95 REPORTER_ASSERT(reporter, canvas.isFreshFrame()); |
95 | 96 |
96 // Verify that full frame rects with different forms of opaque paint | 97 // Verify that full frame rects with different forms of opaque paint |
97 // trigger frames to be marked as fresh | 98 // trigger frames to be marked as fresh |
98 { | 99 { |
99 SkPaint paint; | 100 SkPaint paint; |
100 paint.setStyle( SkPaint::kFill_Style ); | 101 paint.setStyle(SkPaint::kFill_Style); |
101 paint.setAlpha( 255 ); | 102 paint.setAlpha(255); |
102 canvas.drawRect(fullRect, paint); | 103 canvas.drawRect(fullRect, paint); |
103 REPORTER_ASSERT(reporter, canvas.isFreshFrame()); | 104 REPORTER_ASSERT(reporter, canvas.isFreshFrame()); |
104 } | 105 } |
105 { | 106 { |
106 SkPaint paint; | 107 SkPaint paint; |
107 paint.setStyle( SkPaint::kFill_Style ); | 108 paint.setStyle(SkPaint::kFill_Style); |
108 paint.setAlpha( 255 ); | 109 paint.setAlpha(255); |
109 paint.setXfermodeMode(SkXfermode::kSrcIn_Mode); | 110 paint.setXfermodeMode(SkXfermode::kSrcIn_Mode); |
110 canvas.drawRect(fullRect, paint); | 111 canvas.drawRect(fullRect, paint); |
111 REPORTER_ASSERT(reporter, !canvas.isFreshFrame()); | 112 REPORTER_ASSERT(reporter, !canvas.isFreshFrame()); |
112 } | 113 } |
113 { | 114 { |
114 SkPaint paint; | 115 SkPaint paint; |
115 paint.setStyle( SkPaint::kFill_Style ); | 116 paint.setStyle(SkPaint::kFill_Style); |
116 SkBitmap bmp; | 117 SkBitmap bmp; |
117 create(&bmp, SkBitmap::kARGB_8888_Config, 0xFFFFFFFF); | 118 create(&bmp, SkBitmap::kARGB_8888_Config, 0xFFFFFFFF); |
118 bmp.setIsOpaque(true); | 119 bmp.setIsOpaque(true); |
119 SkShader* shader = SkShader::CreateBitmapShader(bmp, | 120 SkShader* shader = SkShader::CreateBitmapShader(bmp, |
120 SkShader::kClamp_TileMode, SkShader::kClamp_TileMode); | 121 SkShader::kClamp_TileMode, SkShader::kClamp_TileMode); |
121 paint.setShader(shader)->unref(); | 122 paint.setShader(shader)->unref(); |
122 canvas.drawRect(fullRect, paint); | 123 canvas.drawRect(fullRect, paint); |
123 REPORTER_ASSERT(reporter, canvas.isFreshFrame()); | 124 REPORTER_ASSERT(reporter, canvas.isFreshFrame()); |
124 } | 125 } |
125 | 126 |
126 // Verify that full frame rects with different forms of non-opaque paint | 127 // Verify that full frame rects with different forms of non-opaque paint |
127 // do not trigger frames to be marked as fresh | 128 // do not trigger frames to be marked as fresh |
128 { | 129 { |
129 SkPaint paint; | 130 SkPaint paint; |
130 paint.setStyle( SkPaint::kFill_Style ); | 131 paint.setStyle(SkPaint::kFill_Style); |
131 paint.setAlpha( 254 ); | 132 paint.setAlpha(254); |
132 canvas.drawRect(fullRect, paint); | 133 canvas.drawRect(fullRect, paint); |
133 REPORTER_ASSERT(reporter, !canvas.isFreshFrame()); | 134 REPORTER_ASSERT(reporter, !canvas.isFreshFrame()); |
134 } | 135 } |
135 { | 136 { |
136 SkPaint paint; | 137 SkPaint paint; |
137 paint.setStyle( SkPaint::kFill_Style ); | 138 paint.setStyle(SkPaint::kFill_Style); |
| 139 // Defining a cone that partially overlaps the canvas |
| 140 const SkPoint pt1 = SkPoint::Make(SkIntToScalar(0), SkIntToScalar(0)); |
| 141 const SkScalar r1 = SkIntToScalar(1); |
| 142 const SkPoint pt2 = SkPoint::Make(SkIntToScalar(10), SkIntToScalar(0)); |
| 143 const SkScalar r2 = SkIntToScalar(5); |
| 144 const SkColor colors[2] = {SK_ColorWHITE, SK_ColorWHITE}; |
| 145 const SkScalar pos[2] = {0, SK_Scalar1}; |
| 146 SkShader* shader = SkGradientShader::CreateTwoPointConical( |
| 147 pt1, r1, pt2, r2, colors, pos, 2, SkShader::kClamp_TileMode, NULL); |
| 148 paint.setShader(shader)->unref(); |
| 149 canvas.drawRect(fullRect, paint); |
| 150 REPORTER_ASSERT(reporter, !canvas.isFreshFrame()); |
| 151 } |
| 152 { |
| 153 SkPaint paint; |
| 154 paint.setStyle(SkPaint::kFill_Style); |
138 SkBitmap bmp; | 155 SkBitmap bmp; |
139 create(&bmp, SkBitmap::kARGB_8888_Config, 0xFFFFFFFF); | 156 create(&bmp, SkBitmap::kARGB_8888_Config, 0xFFFFFFFF); |
140 bmp.setIsOpaque(false); | 157 bmp.setIsOpaque(false); |
141 SkShader* shader = SkShader::CreateBitmapShader(bmp, | 158 SkShader* shader = SkShader::CreateBitmapShader(bmp, |
142 SkShader::kClamp_TileMode, SkShader::kClamp_TileMode); | 159 SkShader::kClamp_TileMode, SkShader::kClamp_TileMode); |
143 paint.setShader(shader)->unref(); | 160 paint.setShader(shader)->unref(); |
144 canvas.drawRect(fullRect, paint); | 161 canvas.drawRect(fullRect, paint); |
145 REPORTER_ASSERT(reporter, !canvas.isFreshFrame()); | 162 REPORTER_ASSERT(reporter, !canvas.isFreshFrame()); |
146 } | 163 } |
147 | 164 |
(...skipping 14 matching lines...) Expand all Loading... |
162 SkPaint paint; | 179 SkPaint paint; |
163 paint.setStyle(SkPaint::kFill_Style); | 180 paint.setStyle(SkPaint::kFill_Style); |
164 paint.setAlpha(255); | 181 paint.setAlpha(255); |
165 canvas.drawRect(fullRect, paint); | 182 canvas.drawRect(fullRect, paint); |
166 canvas.restore(); | 183 canvas.restore(); |
167 REPORTER_ASSERT(reporter, !canvas.isFreshFrame()); | 184 REPORTER_ASSERT(reporter, !canvas.isFreshFrame()); |
168 } | 185 } |
169 { | 186 { |
170 canvas.save(SkCanvas::kMatrixClip_SaveFlag); | 187 canvas.save(SkCanvas::kMatrixClip_SaveFlag); |
171 SkPaint paint; | 188 SkPaint paint; |
172 paint.setStyle( SkPaint::kFill_Style ); | 189 paint.setStyle(SkPaint::kFill_Style); |
173 paint.setAlpha( 255 ); | 190 paint.setAlpha(255); |
174 SkPath path; | 191 SkPath path; |
175 path.addCircle(SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(2)); | 192 path.addCircle(SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(2)); |
176 canvas.clipPath(path, SkRegion::kIntersect_Op, false); | 193 canvas.clipPath(path, SkRegion::kIntersect_Op, false); |
177 canvas.drawRect(fullRect, paint); | 194 canvas.drawRect(fullRect, paint); |
178 canvas.restore(); | 195 canvas.restore(); |
179 REPORTER_ASSERT(reporter, !canvas.isFreshFrame()); | 196 REPORTER_ASSERT(reporter, !canvas.isFreshFrame()); |
180 } | 197 } |
181 | 198 |
182 // Verify that stroked rect does not trigger a fresh frame | 199 // Verify that stroked rect does not trigger a fresh frame |
183 { | 200 { |
184 SkPaint paint; | 201 SkPaint paint; |
185 paint.setStyle( SkPaint::kStroke_Style ); | 202 paint.setStyle(SkPaint::kStroke_Style); |
186 paint.setAlpha( 255 ); | 203 paint.setAlpha(255); |
187 canvas.drawRect(fullRect, paint); | 204 canvas.drawRect(fullRect, paint); |
188 REPORTER_ASSERT(reporter, !canvas.isFreshFrame()); | 205 REPORTER_ASSERT(reporter, !canvas.isFreshFrame()); |
189 } | 206 } |
190 | 207 |
191 // Verify kSrcMode triggers a fresh frame even with transparent color | 208 // Verify kSrcMode triggers a fresh frame even with transparent color |
192 { | 209 { |
193 SkPaint paint; | 210 SkPaint paint; |
194 paint.setStyle( SkPaint::kFill_Style ); | 211 paint.setStyle(SkPaint::kFill_Style); |
195 paint.setAlpha( 100 ); | 212 paint.setAlpha(100); |
196 paint.setXfermodeMode(SkXfermode::kSrc_Mode); | 213 paint.setXfermodeMode(SkXfermode::kSrc_Mode); |
197 canvas.drawRect(fullRect, paint); | 214 canvas.drawRect(fullRect, paint); |
198 REPORTER_ASSERT(reporter, canvas.isFreshFrame()); | 215 REPORTER_ASSERT(reporter, canvas.isFreshFrame()); |
199 } | 216 } |
200 } | 217 } |
201 | 218 |
202 class MockDevice : public SkDevice { | 219 class MockDevice : public SkDevice { |
203 public: | 220 public: |
204 MockDevice(const SkBitmap& bm) : SkDevice(bm) { | 221 MockDevice(const SkBitmap& bm) : SkDevice(bm) { |
205 fDrawBitmapCallCount = 0; | 222 fDrawBitmapCallCount = 0; |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 TestDeferredCanvasFreshFrame(reporter); | 471 TestDeferredCanvasFreshFrame(reporter); |
455 TestDeferredCanvasMemoryLimit(reporter); | 472 TestDeferredCanvasMemoryLimit(reporter); |
456 TestDeferredCanvasBitmapCaching(reporter); | 473 TestDeferredCanvasBitmapCaching(reporter); |
457 TestDeferredCanvasSkip(reporter); | 474 TestDeferredCanvasSkip(reporter); |
458 TestDeferredCanvasBitmapShaderNoLeak(reporter); | 475 TestDeferredCanvasBitmapShaderNoLeak(reporter); |
459 TestDeferredCanvasBitmapSizeThreshold(reporter); | 476 TestDeferredCanvasBitmapSizeThreshold(reporter); |
460 } | 477 } |
461 | 478 |
462 #include "TestClassDef.h" | 479 #include "TestClassDef.h" |
463 DEFINE_TESTCLASS("DeferredCanvas", TestDeferredCanvasClass, TestDeferredCanvas) | 480 DEFINE_TESTCLASS("DeferredCanvas", TestDeferredCanvasClass, TestDeferredCanvas) |
OLD | NEW |