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

Side by Side Diff: tests/CanvasTest.cpp

Issue 617093004: Remove globals from tests/CanvasTest.cpp (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 2012 Google Inc. 2 * Copyright 2012 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 /* Description: 8 /* Description:
9 * This test defines a series of elementatry test steps that perform 9 * This test defines a series of elementatry test steps that perform
10 * a single or a small group of canvas API calls. Each test step is 10 * a single or a small group of canvas API calls. Each test step is
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 #include "SkPictureRecorder.h" 58 #include "SkPictureRecorder.h"
59 #include "SkProxyCanvas.h" 59 #include "SkProxyCanvas.h"
60 #include "SkRect.h" 60 #include "SkRect.h"
61 #include "SkRegion.h" 61 #include "SkRegion.h"
62 #include "SkShader.h" 62 #include "SkShader.h"
63 #include "SkStream.h" 63 #include "SkStream.h"
64 #include "SkSurface.h" 64 #include "SkSurface.h"
65 #include "SkTDArray.h" 65 #include "SkTDArray.h"
66 #include "Test.h" 66 #include "Test.h"
67 67
68 static const int kWidth = 2, kHeight = 2;
69
70 static void createBitmap(SkBitmap* bm, SkColor color) {
71 bm->allocN32Pixels(kWidth, kHeight);
72 bm->eraseColor(color);
73 }
74
75 static SkSurface* createSurface(SkColor color) {
76 SkSurface* surface = SkSurface::NewRasterPMColor(kWidth, kHeight);
77 surface->getCanvas()->clear(color);
78 return surface;
79 }
80
81 ///////////////////////////////////////////////////////////////////////////////
82 // Constants used by test steps
83 const SkPoint hkTestPoints[] = {
84 {SkIntToScalar(0), SkIntToScalar(0)},
85 {SkIntToScalar(2), SkIntToScalar(1)},
86 {SkIntToScalar(0), SkIntToScalar(2)}
87 };
88 const SkPoint hkTestPoints2[] = {
89 { SkIntToScalar(0), SkIntToScalar(1) },
90 { SkIntToScalar(1), SkIntToScalar(1) },
91 { SkIntToScalar(2), SkIntToScalar(1) },
92 { SkIntToScalar(3), SkIntToScalar(1) },
93 { SkIntToScalar(4), SkIntToScalar(1) },
94 { SkIntToScalar(5), SkIntToScalar(1) },
95 { SkIntToScalar(6), SkIntToScalar(1) },
96 { SkIntToScalar(7), SkIntToScalar(1) },
97 { SkIntToScalar(8), SkIntToScalar(1) },
98 { SkIntToScalar(9), SkIntToScalar(1) },
99 { SkIntToScalar(10), SkIntToScalar(1) }
100 };
101
102 struct TestData {
103 public:
104 TestData()
105 : fTestRect(SkRect::MakeXYWH(SkIntToScalar(0), SkIntToScalar(0),
106 SkIntToScalar(2), SkIntToScalar(1)))
107 , fTestMatrix(testMatrix())
108 , fTestPath(test_path())
109 , fNearlyZeroLengthPath(test_nearly_zero_length_path())
110 , fTestIRect(SkIRect::MakeXYWH(0, 0, 2, 1))
111 , fTestRegion(testRegion())
112 , fTestColor(0x01020304)
113 , fTestPoints(hkTestPoints)
114 , fTestPointCount(3)
115 , fWidth(2)
116 , fHeight(2)
117 , fTestText("Hello World")
118 , fTestPoints2(hkTestPoints2)
119 , fTestBitmap(testBitmap())
120 { }
121
122 const SkRect fTestRect;
123 const SkMatrix fTestMatrix;;
124 const SkPath fTestPath;
125 const SkPath fNearlyZeroLengthPath;
126 const SkIRect fTestIRect;
127 const SkRegion fTestRegion;
128 const SkColor fTestColor;
129 const SkPaint fTestPaint;
130 const SkPoint* fTestPoints;
131 const size_t fTestPointCount;
132 const int fWidth;
133 const int fHeight;
134 const SkString fTestText;
135 const SkPoint* fTestPoints2;
136 const SkBitmap fTestBitmap;
137 private:
138 static SkMatrix testMatrix() {
139 SkMatrix matrix;
140 matrix.reset();
141 matrix.setScale(SkIntToScalar(2), SkIntToScalar(3));
142
143 return matrix;
144 }
145 static SkPath test_path() {
146 SkPath path;
147 path.addRect(SkRect::MakeXYWH(SkIntToScalar(0), SkIntToScalar(0),
148 SkIntToScalar(2), SkIntToScalar(1)));
149 return path;
150 }
151 static SkPath test_nearly_zero_length_path() {
reed1 2014/10/02 19:53:06 nit: Static methods are Capitalized
Rémi Piotaix 2014/10/02 20:02:26 Done.
152 SkPath path;
153 SkPoint pt1 = { 0, 0 };
154 SkPoint pt2 = { 0, SK_ScalarNearlyZero };
155 SkPoint pt3 = { SkIntToScalar(1), 0 };
156 SkPoint pt4 = { SkIntToScalar(1), SK_ScalarNearlyZero/2 };
157 path.moveTo(pt1);
158 path.lineTo(pt2);
159 path.lineTo(pt3);
160 path.lineTo(pt4);
161 return path;
162 }
163 static SkRegion testRegion() {
reed1 2014/10/02 19:53:06 same static function nit
Rémi Piotaix 2014/10/02 20:02:26 Done.
164 SkRegion region;
165 SkIRect rect = SkIRect::MakeXYWH(0, 0, 2, 1);
166 region.setRect(rect);
167 return region;
168 }
169 static SkBitmap testBitmap() {
170 SkBitmap bitmap;
171 createBitmap(&bitmap, 0x05060708);
172 return bitmap;
173 }
174 };
175
68 static bool equal_clips(const SkCanvas& a, const SkCanvas& b) { 176 static bool equal_clips(const SkCanvas& a, const SkCanvas& b) {
69 if (a.isClipEmpty()) { 177 if (a.isClipEmpty()) {
70 return b.isClipEmpty(); 178 return b.isClipEmpty();
71 } 179 }
72 if (!a.isClipRect()) { 180 if (!a.isClipRect()) {
73 // this is liberally true, since we don't expose a way to know this exac tly (for non-rects) 181 // this is liberally true, since we don't expose a way to know this exac tly (for non-rects)
74 return !b.isClipRect(); 182 return !b.isClipRect();
75 } 183 }
76 SkIRect ar, br; 184 SkIRect ar, br;
77 a.getClipDeviceBounds(&ar); 185 a.getClipDeviceBounds(&ar);
(...skipping 25 matching lines...) Expand all
103 SkBitmap bm; 211 SkBitmap bm;
104 bm.setInfo(SkImageInfo::MakeN32Premul(size.width(), size.height())); 212 bm.setInfo(SkImageInfo::MakeN32Premul(size.width(), size.height()));
105 SkCanvas c(bm); 213 SkCanvas c(bm);
106 214
107 Canvas2CanvasClipVisitor visitor(&c); 215 Canvas2CanvasClipVisitor visitor(&c);
108 canvas->replayClips(&visitor); 216 canvas->replayClips(&visitor);
109 217
110 REPORTER_ASSERT(reporter, equal_clips(c, *canvas)); 218 REPORTER_ASSERT(reporter, equal_clips(c, *canvas));
111 } 219 }
112 220
113 static const int kWidth = 2;
114 static const int kHeight = 2;
115
116 // Format strings that describe the test context. The %s token is where 221 // Format strings that describe the test context. The %s token is where
117 // the name of the test step is inserted. The context is required for 222 // the name of the test step is inserted. The context is required for
118 // disambiguating the error in the case of failures that are reported in 223 // disambiguating the error in the case of failures that are reported in
119 // functions that are called multiple times in different contexts (test 224 // functions that are called multiple times in different contexts (test
120 // cases and test steps). 225 // cases and test steps).
121 static const char* const kDefaultAssertMessageFormat = "%s"; 226 static const char* const kDefaultAssertMessageFormat = "%s";
122 static const char* const kCanvasDrawAssertMessageFormat = 227 static const char* const kCanvasDrawAssertMessageFormat =
123 "Drawing test step %s with SkCanvas"; 228 "Drawing test step %s with SkCanvas";
124 static const char* const kDeferredDrawAssertMessageFormat = 229 static const char* const kDeferredDrawAssertMessageFormat =
125 "Drawing test step %s with SkDeferredCanvas"; 230 "Drawing test step %s with SkDeferredCanvas";
(...skipping 13 matching lines...) Expand all
139 "test step %s, SkProxyCanvas indirect canvas state consistency"; 244 "test step %s, SkProxyCanvas indirect canvas state consistency";
140 static const char* const kNWayStateAssertMessageFormat = 245 static const char* const kNWayStateAssertMessageFormat =
141 "test step %s, SkNWayCanvas state consistency"; 246 "test step %s, SkNWayCanvas state consistency";
142 static const char* const kNWayIndirect1StateAssertMessageFormat = 247 static const char* const kNWayIndirect1StateAssertMessageFormat =
143 "test step %s, SkNWayCanvas indirect canvas 1 state consistency"; 248 "test step %s, SkNWayCanvas indirect canvas 1 state consistency";
144 static const char* const kNWayIndirect2StateAssertMessageFormat = 249 static const char* const kNWayIndirect2StateAssertMessageFormat =
145 "test step %s, SkNWayCanvas indirect canvas 2 state consistency"; 250 "test step %s, SkNWayCanvas indirect canvas 2 state consistency";
146 static const char* const kPdfAssertMessageFormat = 251 static const char* const kPdfAssertMessageFormat =
147 "PDF sanity check failed %s"; 252 "PDF sanity check failed %s";
148 253
149 static void createBitmap(SkBitmap* bm, SkColor color) {
150 bm->allocN32Pixels(kWidth, kHeight);
151 bm->eraseColor(color);
152 }
153
154 static SkSurface* createSurface(SkColor color) {
155 SkSurface* surface = SkSurface::NewRasterPMColor(kWidth, kHeight);
156 surface->getCanvas()->clear(color);
157 return surface;
158 }
159
160 class CanvasTestStep; 254 class CanvasTestStep;
161 static SkTDArray<CanvasTestStep*>& testStepArray() { 255 static SkTDArray<CanvasTestStep*>& testStepArray() {
162 static SkTDArray<CanvasTestStep*> theTests; 256 static SkTDArray<CanvasTestStep*> theTests;
163 return theTests; 257 return theTests;
164 } 258 }
165 259
166 class CanvasTestStep { 260 class CanvasTestStep {
167 public: 261 public:
168 CanvasTestStep(bool fEnablePdfTesting = true) { 262 CanvasTestStep(bool fEnablePdfTesting = true) {
169 *testStepArray().append() = this; 263 *testStepArray().append() = this;
170 fAssertMessageFormat = kDefaultAssertMessageFormat; 264 fAssertMessageFormat = kDefaultAssertMessageFormat;
171 this->fEnablePdfTesting = fEnablePdfTesting; 265 this->fEnablePdfTesting = fEnablePdfTesting;
172 } 266 }
173 virtual ~CanvasTestStep() { } 267 virtual ~CanvasTestStep() { }
174 268
175 virtual void draw(SkCanvas*, skiatest::Reporter*) = 0; 269 virtual void draw(SkCanvas*, const TestData&, skiatest::Reporter*) = 0;
176 virtual const char* name() const = 0; 270 virtual const char* name() const = 0;
177 271
178 const char* assertMessage() { 272 const char* assertMessage() {
179 fAssertMessage.printf(fAssertMessageFormat, name()); 273 fAssertMessage.printf(fAssertMessageFormat, name());
180 return fAssertMessage.c_str(); 274 return fAssertMessage.c_str();
181 } 275 }
182 276
183 void setAssertMessageFormat(const char* format) { 277 void setAssertMessageFormat(const char* format) {
184 fAssertMessageFormat = format; 278 fAssertMessageFormat = format;
185 } 279 }
186 280
187 bool enablePdfTesting() { return fEnablePdfTesting; } 281 bool enablePdfTesting() { return fEnablePdfTesting; }
188 282
189 private: 283 private:
190 SkString fAssertMessage; 284 SkString fAssertMessage;
191 const char* fAssertMessageFormat; 285 const char* fAssertMessageFormat;
192 bool fEnablePdfTesting; 286 bool fEnablePdfTesting;
193 }; 287 };
194 288
195 /////////////////////////////////////////////////////////////////////////////// 289 ///////////////////////////////////////////////////////////////////////////////
196 // Constants used by test steps
197
198 const SkRect kTestRect =
199 SkRect::MakeXYWH(SkIntToScalar(0), SkIntToScalar(0),
200 SkIntToScalar(2), SkIntToScalar(1));
201 static SkMatrix testMatrix() {
202 SkMatrix matrix;
203 matrix.reset();
204 matrix.setScale(SkIntToScalar(2), SkIntToScalar(3));
205 return matrix;
206 }
207 const SkMatrix kTestMatrix = testMatrix();
208 static SkPath test_path() {
209 SkPath path;
210 path.addRect(SkRect::MakeXYWH(SkIntToScalar(0), SkIntToScalar(0),
211 SkIntToScalar(2), SkIntToScalar(1)));
212 return path;
213 }
214 const SkPath kTestPath = test_path();
215 static SkPath test_nearly_zero_length_path() {
216 SkPath path;
217 SkPoint pt1 = { 0, 0 };
218 SkPoint pt2 = { 0, SK_ScalarNearlyZero };
219 SkPoint pt3 = { SkIntToScalar(1), 0 };
220 SkPoint pt4 = { SkIntToScalar(1), SK_ScalarNearlyZero/2 };
221 path.moveTo(pt1);
222 path.lineTo(pt2);
223 path.lineTo(pt3);
224 path.lineTo(pt4);
225 return path;
226 }
227 const SkPath kNearlyZeroLengthPath = test_nearly_zero_length_path();
228 static SkRegion testRegion() {
229 SkRegion region;
230 SkIRect rect = SkIRect::MakeXYWH(0, 0, 2, 1);
231 region.setRect(rect);
232 return region;
233 }
234 const SkIRect kTestIRect = SkIRect::MakeXYWH(0, 0, 2, 1);
235 const SkRegion kTestRegion = testRegion();
236 const SkColor kTestColor = 0x01020304;
237 const SkPaint kTestPaint;
238 const SkPoint kTestPoints[3] = {
239 {SkIntToScalar(0), SkIntToScalar(0)},
240 {SkIntToScalar(2), SkIntToScalar(1)},
241 {SkIntToScalar(0), SkIntToScalar(2)}
242 };
243 const size_t kTestPointCount = 3;
244 static SkBitmap testBitmap() {
245 SkBitmap bitmap;
246 createBitmap(&bitmap, 0x05060708);
247 return bitmap;
248 }
249 SkBitmap kTestBitmap; // cannot be created during static init
250 SkString kTestText("Hello World");
251 SkPoint kTestPoints2[] = {
252 { SkIntToScalar(0), SkIntToScalar(1) },
253 { SkIntToScalar(1), SkIntToScalar(1) },
254 { SkIntToScalar(2), SkIntToScalar(1) },
255 { SkIntToScalar(3), SkIntToScalar(1) },
256 { SkIntToScalar(4), SkIntToScalar(1) },
257 { SkIntToScalar(5), SkIntToScalar(1) },
258 { SkIntToScalar(6), SkIntToScalar(1) },
259 { SkIntToScalar(7), SkIntToScalar(1) },
260 { SkIntToScalar(8), SkIntToScalar(1) },
261 { SkIntToScalar(9), SkIntToScalar(1) },
262 { SkIntToScalar(10), SkIntToScalar(1) },
263 };
264
265
266 ///////////////////////////////////////////////////////////////////////////////
267 // Macros for defining test steps 290 // Macros for defining test steps
268 291
269 #define TEST_STEP(NAME, FUNCTION) \ 292 #define TEST_STEP(NAME, FUNCTION) \
270 class NAME##_TestStep : public CanvasTestStep{ \ 293 class NAME##_TestStep : public CanvasTestStep{ \
271 public: \ 294 public: \
272 virtual void draw(SkCanvas* canvas, skiatest::Reporter* reporter) { \ 295 virtual void draw(SkCanvas* canvas, const TestData& testData, \
273 FUNCTION (canvas, reporter, this); \ 296 skiatest::Reporter* reporter) { \
297 FUNCTION (canvas, testData, reporter, this); \
274 } \ 298 } \
275 virtual const char* name() const {return #NAME ;} \ 299 virtual const char* name() const {return #NAME ;} \
276 }; \ 300 }; \
277 static NAME##_TestStep NAME##_TestStepInstance; 301 static NAME##_TestStep NAME##_TestStepInstance;
278 302
279 #define TEST_STEP_NO_PDF(NAME, FUNCTION) \ 303 #define TEST_STEP_NO_PDF(NAME, FUNCTION) \
280 class NAME##_TestStep : public CanvasTestStep{ \ 304 class NAME##_TestStep : public CanvasTestStep{ \
281 public: \ 305 public: \
282 NAME##_TestStep() : CanvasTestStep(false) {} \ 306 NAME##_TestStep() : CanvasTestStep(false) {} \
283 virtual void draw(SkCanvas* canvas, skiatest::Reporter* reporter) { \ 307 virtual void draw(SkCanvas* canvas, const TestData& testData, \
284 FUNCTION (canvas, reporter, this); \ 308 skiatest::Reporter* reporter) { \
309 FUNCTION (canvas, testData, reporter, this); \
285 } \ 310 } \
286 virtual const char* name() const {return #NAME ;} \ 311 virtual const char* name() const {return #NAME ;} \
287 }; \ 312 }; \
288 static NAME##_TestStep NAME##_TestStepInstance; 313 static NAME##_TestStep NAME##_TestStepInstance;
289 314
290 #define SIMPLE_TEST_STEP(NAME, CALL) \ 315 #define SIMPLE_TEST_STEP(NAME, CALL) \
291 static void NAME##TestStep(SkCanvas* canvas, skiatest::Reporter*, \ 316 static void NAME##TestStep(SkCanvas* canvas, const TestData& testData, \
292 CanvasTestStep*) { \ 317 skiatest::Reporter*, CanvasTestStep*) { \
293 canvas-> CALL ; \ 318 canvas-> CALL ; \
294 } \ 319 } \
295 TEST_STEP(NAME, NAME##TestStep ) 320 TEST_STEP(NAME, NAME##TestStep )
296 321
297 #define SIMPLE_TEST_STEP_WITH_ASSERT(NAME, CALL) \ 322 #define SIMPLE_TEST_STEP_WITH_ASSERT(NAME, CALL) \
298 static void NAME##TestStep(SkCanvas* canvas, skiatest::Reporter* reporter, \ 323 static void NAME##TestStep(SkCanvas* canvas, const TestData& testData, \
299 CanvasTestStep* testStep) { \ 324 skiatest::Reporter*, CanvasTestStep* testStep) { \
300 REPORTER_ASSERT_MESSAGE(reporter, canvas-> CALL , \ 325 REPORTER_ASSERT_MESSAGE(reporter, canvas-> CALL , \
301 testStep->assertMessage()); \ 326 testStep->assertMessage()); \
302 } \ 327 } \
303 TEST_STEP(NAME, NAME##TestStep ) 328 TEST_STEP(NAME, NAME##TestStep )
304 329
305 330
306 /////////////////////////////////////////////////////////////////////////////// 331 ///////////////////////////////////////////////////////////////////////////////
307 // Basic test steps for most virtual methods in SkCanvas that draw or affect 332 // Basic test steps for most virtual methods in SkCanvas that draw or affect
308 // the state of the canvas. 333 // the state of the canvas.
309 334
310 SIMPLE_TEST_STEP(Translate, translate(SkIntToScalar(1), SkIntToScalar(2))); 335 SIMPLE_TEST_STEP(Translate, translate(SkIntToScalar(1), SkIntToScalar(2)));
311 SIMPLE_TEST_STEP(Scale, scale(SkIntToScalar(1), SkIntToScalar(2))); 336 SIMPLE_TEST_STEP(Scale, scale(SkIntToScalar(1), SkIntToScalar(2)));
312 SIMPLE_TEST_STEP(Rotate, rotate(SkIntToScalar(1))); 337 SIMPLE_TEST_STEP(Rotate, rotate(SkIntToScalar(1)));
313 SIMPLE_TEST_STEP(Skew, skew(SkIntToScalar(1), SkIntToScalar(2))); 338 SIMPLE_TEST_STEP(Skew, skew(SkIntToScalar(1), SkIntToScalar(2)));
314 SIMPLE_TEST_STEP(Concat, concat(kTestMatrix)); 339 SIMPLE_TEST_STEP(Concat, concat(testData.fTestMatrix));
315 SIMPLE_TEST_STEP(SetMatrix, setMatrix(kTestMatrix)); 340 SIMPLE_TEST_STEP(SetMatrix, setMatrix(testData.fTestMatrix));
316 SIMPLE_TEST_STEP(ClipRect, clipRect(kTestRect)); 341 SIMPLE_TEST_STEP(ClipRect, clipRect(testData.fTestRect));
317 SIMPLE_TEST_STEP(ClipPath, clipPath(kTestPath)); 342 SIMPLE_TEST_STEP(ClipPath, clipPath(testData.fTestPath));
318 SIMPLE_TEST_STEP(ClipRegion, 343 SIMPLE_TEST_STEP(ClipRegion,
319 clipRegion(kTestRegion, SkRegion::kReplace_Op)); 344 clipRegion(testData.fTestRegion, SkRegion::kReplace_Op));
320 SIMPLE_TEST_STEP(Clear, clear(kTestColor)); 345 SIMPLE_TEST_STEP(Clear, clear(testData.fTestColor));
321 SIMPLE_TEST_STEP(DrawPaint, drawPaint(kTestPaint)); 346 SIMPLE_TEST_STEP(DrawPaint, drawPaint(testData.fTestPaint));
322 SIMPLE_TEST_STEP(DrawPointsPoints, drawPoints(SkCanvas::kPoints_PointMode, 347 SIMPLE_TEST_STEP(DrawPointsPoints, drawPoints(SkCanvas::kPoints_PointMode,
323 kTestPointCount, kTestPoints, kTestPaint)); 348 testData.fTestPointCount, testData.fTestPoints, testData.fTestPaint));
324 SIMPLE_TEST_STEP(DrawPointsLiness, drawPoints(SkCanvas::kLines_PointMode, 349 SIMPLE_TEST_STEP(DrawPointsLiness, drawPoints(SkCanvas::kLines_PointMode,
325 kTestPointCount, kTestPoints, kTestPaint)); 350 testData.fTestPointCount, testData.fTestPoints, testData.fTestPaint));
326 SIMPLE_TEST_STEP(DrawPointsPolygon, drawPoints(SkCanvas::kPolygon_PointMode, 351 SIMPLE_TEST_STEP(DrawPointsPolygon, drawPoints(SkCanvas::kPolygon_PointMode,
327 kTestPointCount, kTestPoints, kTestPaint)); 352 testData.fTestPointCount, testData.fTestPoints, testData.fTestPaint));
328 SIMPLE_TEST_STEP(DrawRect, drawRect(kTestRect, kTestPaint)); 353 SIMPLE_TEST_STEP(DrawRect, drawRect(testData.fTestRect, testData.fTestPaint));
329 SIMPLE_TEST_STEP(DrawPath, drawPath(kTestPath, kTestPaint)); 354 SIMPLE_TEST_STEP(DrawPath, drawPath(testData.fTestPath, testData.fTestPaint));
330 SIMPLE_TEST_STEP(DrawBitmap, drawBitmap(kTestBitmap, 0, 0)); 355 SIMPLE_TEST_STEP(DrawBitmap, drawBitmap(testData.fTestBitmap, 0, 0));
331 SIMPLE_TEST_STEP(DrawBitmapPaint, drawBitmap(kTestBitmap, 0, 0, &kTestPaint)); 356 SIMPLE_TEST_STEP(DrawBitmapPaint, drawBitmap(testData.fTestBitmap, 0, 0, &testDa ta.fTestPaint));
332 SIMPLE_TEST_STEP(DrawBitmapRect, drawBitmapRect(kTestBitmap, NULL, kTestRect, 357 SIMPLE_TEST_STEP(DrawBitmapRect, drawBitmapRect(testData.fTestBitmap, NULL, test Data.fTestRect,
333 NULL)); 358 NULL));
334 SIMPLE_TEST_STEP(DrawBitmapRectSrcRect, drawBitmapRect(kTestBitmap, 359 SIMPLE_TEST_STEP(DrawBitmapRectSrcRect, drawBitmapRect(testData.fTestBitmap,
335 &kTestIRect, kTestRect, NULL)); 360 &testData.fTestIRect, testData.fTestRect, NULL));
336 SIMPLE_TEST_STEP(DrawBitmapRectPaint, drawBitmapRect(kTestBitmap, NULL, 361 SIMPLE_TEST_STEP(DrawBitmapRectPaint, drawBitmapRect(testData.fTestBitmap, NULL,
337 kTestRect, &kTestPaint)); 362 testData.fTestRect, &testData.fTestPaint));
338 SIMPLE_TEST_STEP(DrawBitmapMatrix, drawBitmapMatrix(kTestBitmap, kTestMatrix, 363 SIMPLE_TEST_STEP(DrawBitmapMatrix, drawBitmapMatrix(testData.fTestBitmap, testDa ta.fTestMatrix,
339 NULL)); 364 NULL));
340 SIMPLE_TEST_STEP(DrawBitmapMatrixPaint, drawBitmapMatrix(kTestBitmap, 365 SIMPLE_TEST_STEP(DrawBitmapMatrixPaint, drawBitmapMatrix(testData.fTestBitmap,
341 kTestMatrix, &kTestPaint)); 366 testData.fTestMatrix, &testData.fTestPaint));
342 SIMPLE_TEST_STEP(DrawBitmapNine, drawBitmapNine(kTestBitmap, kTestIRect, 367 SIMPLE_TEST_STEP(DrawBitmapNine, drawBitmapNine(testData.fTestBitmap, testData.f TestIRect,
343 kTestRect, NULL)); 368 testData.fTestRect, NULL));
344 SIMPLE_TEST_STEP(DrawBitmapNinePaint, drawBitmapNine(kTestBitmap, kTestIRect, 369 SIMPLE_TEST_STEP(DrawBitmapNinePaint, drawBitmapNine(testData.fTestBitmap, testD ata.fTestIRect,
345 kTestRect, &kTestPaint)); 370 testData.fTestRect, &testData.fTestPaint));
346 SIMPLE_TEST_STEP(DrawSprite, drawSprite(kTestBitmap, 0, 0, NULL)); 371 SIMPLE_TEST_STEP(DrawSprite, drawSprite(testData.fTestBitmap, 0, 0, NULL));
347 SIMPLE_TEST_STEP(DrawSpritePaint, drawSprite(kTestBitmap, 0, 0, &kTestPaint)); 372 SIMPLE_TEST_STEP(DrawSpritePaint, drawSprite(testData.fTestBitmap, 0, 0, &testDa ta.fTestPaint));
348 SIMPLE_TEST_STEP(DrawText, drawText(kTestText.c_str(), kTestText.size(), 373 SIMPLE_TEST_STEP(DrawText, drawText(testData.fTestText.c_str(), testData.fTestTe xt.size(),
349 0, 1, kTestPaint)); 374 0, 1, testData.fTestPaint));
350 SIMPLE_TEST_STEP(DrawPosText, drawPosText(kTestText.c_str(), 375 SIMPLE_TEST_STEP(DrawPosText, drawPosText(testData.fTestText.c_str(),
351 kTestText.size(), kTestPoints2, kTestPaint)); 376 testData.fTestText.size(), testData.fTestPoints2, testData.fTestPaint));
352 SIMPLE_TEST_STEP(DrawTextOnPath, drawTextOnPath(kTestText.c_str(), 377 SIMPLE_TEST_STEP(DrawTextOnPath, drawTextOnPath(testData.fTestText.c_str(),
353 kTestText.size(), kTestPath, NULL, kTestPaint)); 378 testData.fTestText.size(), testData.fTestPath, NULL, testData.fTestPaint));
354 SIMPLE_TEST_STEP(DrawTextOnPathMatrix, drawTextOnPath(kTestText.c_str(), 379 SIMPLE_TEST_STEP(DrawTextOnPathMatrix, drawTextOnPath(testData.fTestText.c_str() ,
355 kTestText.size(), kTestPath, &kTestMatrix, kTestPaint)); 380 testData.fTestText.size(), testData.fTestPath, &testData.fTestMatrix, testDa ta.fTestPaint));
356 SIMPLE_TEST_STEP(DrawData, drawData(kTestText.c_str(), kTestText.size())); 381 SIMPLE_TEST_STEP(DrawData, drawData(testData.fTestText.c_str(), testData.fTestTe xt.size()));
357 SIMPLE_TEST_STEP(BeginGroup, beginCommentGroup(kTestText.c_str())); 382 SIMPLE_TEST_STEP(BeginGroup, beginCommentGroup(testData.fTestText.c_str()));
358 SIMPLE_TEST_STEP(AddComment, addComment(kTestText.c_str(), kTestText.c_str())); 383 SIMPLE_TEST_STEP(AddComment, addComment(testData.fTestText.c_str(), testData.fTe stText.c_str()));
359 SIMPLE_TEST_STEP(EndGroup, endCommentGroup()); 384 SIMPLE_TEST_STEP(EndGroup, endCommentGroup());
360 385
361 /////////////////////////////////////////////////////////////////////////////// 386 ///////////////////////////////////////////////////////////////////////////////
362 // Complex test steps 387 // Complex test steps
363 388
364 static void SaveMatrixClipStep(SkCanvas* canvas, 389 static void SaveMatrixClipStep(SkCanvas* canvas, const TestData& testData,
365 skiatest::Reporter* reporter, 390 skiatest::Reporter* reporter, CanvasTestStep* tes tStep) {
366 CanvasTestStep* testStep) {
367 int saveCount = canvas->getSaveCount(); 391 int saveCount = canvas->getSaveCount();
368 canvas->save(); 392 canvas->save();
369 canvas->translate(SkIntToScalar(1), SkIntToScalar(2)); 393 canvas->translate(SkIntToScalar(1), SkIntToScalar(2));
370 canvas->clipRegion(kTestRegion); 394 canvas->clipRegion(testData.fTestRegion);
371 canvas->restore(); 395 canvas->restore();
372 REPORTER_ASSERT_MESSAGE(reporter, canvas->getSaveCount() == saveCount, 396 REPORTER_ASSERT_MESSAGE(reporter, canvas->getSaveCount() == saveCount,
373 testStep->assertMessage()); 397 testStep->assertMessage());
374 REPORTER_ASSERT_MESSAGE(reporter, canvas->getTotalMatrix().isIdentity(), 398 REPORTER_ASSERT_MESSAGE(reporter, canvas->getTotalMatrix().isIdentity(),
375 testStep->assertMessage()); 399 testStep->assertMessage());
376 // REPORTER_ASSERT_MESSAGE(reporter, canvas->getTotalClip() != kTestRegion, t estStep->assertMessage()); 400 // REPORTER_ASSERT_MESSAGE(reporter, canvas->getTotalClip() != kTestRegion, t estStep->assertMessage());
377 } 401 }
378 TEST_STEP(SaveMatrixClip, SaveMatrixClipStep); 402 TEST_STEP(SaveMatrixClip, SaveMatrixClipStep);
379 403
380 static void SaveLayerStep(SkCanvas* canvas, 404 static void SaveLayerStep(SkCanvas* canvas, const TestData& testData,
381 skiatest::Reporter* reporter, 405 skiatest::Reporter* reporter, CanvasTestStep* testStep ) {
382 CanvasTestStep* testStep) {
383 int saveCount = canvas->getSaveCount(); 406 int saveCount = canvas->getSaveCount();
384 canvas->saveLayer(NULL, NULL); 407 canvas->saveLayer(NULL, NULL);
385 canvas->restore(); 408 canvas->restore();
386 REPORTER_ASSERT_MESSAGE(reporter, canvas->getSaveCount() == saveCount, 409 REPORTER_ASSERT_MESSAGE(reporter, canvas->getSaveCount() == saveCount,
387 testStep->assertMessage()); 410 testStep->assertMessage());
388 } 411 }
389 TEST_STEP(SaveLayer, SaveLayerStep); 412 TEST_STEP(SaveLayer, SaveLayerStep);
390 413
391 static void BoundedSaveLayerStep(SkCanvas* canvas, 414 static void BoundedSaveLayerStep(SkCanvas* canvas, const TestData& testData,
392 skiatest::Reporter* reporter, 415 skiatest::Reporter* reporter, CanvasTestStep* t estStep) {
393 CanvasTestStep* testStep) {
394 int saveCount = canvas->getSaveCount(); 416 int saveCount = canvas->getSaveCount();
395 canvas->saveLayer(&kTestRect, NULL); 417 canvas->saveLayer(&testData.fTestRect, NULL);
396 canvas->restore(); 418 canvas->restore();
397 REPORTER_ASSERT_MESSAGE(reporter, canvas->getSaveCount() == saveCount, 419 REPORTER_ASSERT_MESSAGE(reporter, canvas->getSaveCount() == saveCount,
398 testStep->assertMessage()); 420 testStep->assertMessage());
399 } 421 }
400 TEST_STEP(BoundedSaveLayer, BoundedSaveLayerStep); 422 TEST_STEP(BoundedSaveLayer, BoundedSaveLayerStep);
401 423
402 static void PaintSaveLayerStep(SkCanvas* canvas, 424 static void PaintSaveLayerStep(SkCanvas* canvas, const TestData& testData,
403 skiatest::Reporter* reporter, 425 skiatest::Reporter* reporter, CanvasTestStep* tes tStep) {
404 CanvasTestStep* testStep) {
405 int saveCount = canvas->getSaveCount(); 426 int saveCount = canvas->getSaveCount();
406 canvas->saveLayer(NULL, &kTestPaint); 427 canvas->saveLayer(NULL, &testData.fTestPaint);
407 canvas->restore(); 428 canvas->restore();
408 REPORTER_ASSERT_MESSAGE(reporter, canvas->getSaveCount() == saveCount, 429 REPORTER_ASSERT_MESSAGE(reporter, canvas->getSaveCount() == saveCount,
409 testStep->assertMessage()); 430 testStep->assertMessage());
410 } 431 }
411 TEST_STEP(PaintSaveLayer, PaintSaveLayerStep); 432 TEST_STEP(PaintSaveLayer, PaintSaveLayerStep);
412 433
413 static void TwoClipOpsStep(SkCanvas* canvas, 434 static void TwoClipOpsStep(SkCanvas* canvas, const TestData& testData,
414 skiatest::Reporter*, 435 skiatest::Reporter*, CanvasTestStep*) {
415 CanvasTestStep*) {
416 // This test exercises a functionality in SkPicture that leads to the 436 // This test exercises a functionality in SkPicture that leads to the
417 // recording of restore offset placeholders. This test will trigger an 437 // recording of restore offset placeholders. This test will trigger an
418 // assertion at playback time if the placeholders are not properly 438 // assertion at playback time if the placeholders are not properly
419 // filled when the recording ends. 439 // filled when the recording ends.
420 canvas->clipRect(kTestRect); 440 canvas->clipRect(testData.fTestRect);
421 canvas->clipRegion(kTestRegion); 441 canvas->clipRegion(testData.fTestRegion);
422 } 442 }
423 TEST_STEP(TwoClipOps, TwoClipOpsStep); 443 TEST_STEP(TwoClipOps, TwoClipOpsStep);
424 444
425 // exercise fix for http://code.google.com/p/skia/issues/detail?id=560 445 // exercise fix for http://code.google.com/p/skia/issues/detail?id=560
426 // ('SkPathStroker::lineTo() fails for line with length SK_ScalarNearlyZero') 446 // ('SkPathStroker::lineTo() fails for line with length SK_ScalarNearlyZero')
427 static void DrawNearlyZeroLengthPathTestStep(SkCanvas* canvas, 447 static void DrawNearlyZeroLengthPathTestStep(SkCanvas* canvas, const TestData& t estData,
428 skiatest::Reporter*, 448 skiatest::Reporter*, CanvasTestStep *) {
429 CanvasTestStep*) {
430 SkPaint paint; 449 SkPaint paint;
431 paint.setStrokeWidth(SkIntToScalar(1)); 450 paint.setStrokeWidth(SkIntToScalar(1));
432 paint.setStyle(SkPaint::kStroke_Style); 451 paint.setStyle(SkPaint::kStroke_Style);
433 452
434 canvas->drawPath(kNearlyZeroLengthPath, paint); 453 canvas->drawPath(testData.fNearlyZeroLengthPath, paint);
435 } 454 }
436 TEST_STEP(DrawNearlyZeroLengthPath, DrawNearlyZeroLengthPathTestStep); 455 TEST_STEP(DrawNearlyZeroLengthPath, DrawNearlyZeroLengthPathTestStep);
437 456
438 static void DrawVerticesShaderTestStep(SkCanvas* canvas, 457 static void DrawVerticesShaderTestStep(SkCanvas* canvas, const TestData& testDat a,
439 skiatest::Reporter*, 458 skiatest::Reporter*, CanvasTestStep*) {
440 CanvasTestStep*) {
441 SkPoint pts[4]; 459 SkPoint pts[4];
442 pts[0].set(0, 0); 460 pts[0].set(0, 0);
443 pts[1].set(SkIntToScalar(kWidth), 0); 461 pts[1].set(SkIntToScalar(testData.fWidth), 0);
444 pts[2].set(SkIntToScalar(kWidth), SkIntToScalar(kHeight)); 462 pts[2].set(SkIntToScalar(testData.fWidth), SkIntToScalar(testData.fHeight));
445 pts[3].set(0, SkIntToScalar(kHeight)); 463 pts[3].set(0, SkIntToScalar(testData.fHeight));
446 SkPaint paint; 464 SkPaint paint;
447 SkShader* shader = SkShader::CreateBitmapShader(kTestBitmap, 465 SkShader* shader = SkShader::CreateBitmapShader(testData.fTestBitmap,
448 SkShader::kClamp_TileMode, SkShader::kClamp_TileMode); 466 SkShader::kClamp_TileMode, SkShader::kClamp_TileMode);
449 paint.setShader(shader)->unref(); 467 paint.setShader(shader)->unref();
450 canvas->drawVertices(SkCanvas::kTriangleFan_VertexMode, 4, pts, pts, 468 canvas->drawVertices(SkCanvas::kTriangleFan_VertexMode, 4, pts, pts,
451 NULL, NULL, NULL, 0, paint); 469 NULL, NULL, NULL, 0, paint);
452 } 470 }
453 // NYI: issue 240. 471 // NYI: issue 240.
454 TEST_STEP_NO_PDF(DrawVerticesShader, DrawVerticesShaderTestStep); 472 TEST_STEP_NO_PDF(DrawVerticesShader, DrawVerticesShaderTestStep);
455 473
456 static void DrawPictureTestStep(SkCanvas* canvas, 474 static void DrawPictureTestStep(SkCanvas* canvas, const TestData& testData,
457 skiatest::Reporter*, 475 skiatest::Reporter*, CanvasTestStep*) {
458 CanvasTestStep*) {
459 SkPictureRecorder recorder; 476 SkPictureRecorder recorder;
460 SkCanvas* testCanvas = recorder.beginRecording(SkIntToScalar(kWidth), SkIntT oScalar(kHeight), 477 SkCanvas* testCanvas = recorder.beginRecording(SkIntToScalar(testData.fWidth ), SkIntToScalar(testData.fHeight),
461 NULL, 0); 478 NULL, 0);
462 testCanvas->scale(SkIntToScalar(2), SkIntToScalar(1)); 479 testCanvas->scale(SkIntToScalar(2), SkIntToScalar(1));
463 testCanvas->clipRect(kTestRect); 480 testCanvas->clipRect(testData.fTestRect);
464 testCanvas->drawRect(kTestRect, kTestPaint); 481 testCanvas->drawRect(testData.fTestRect, testData.fTestPaint);
465 SkAutoTUnref<SkPicture> testPicture(recorder.endRecording()); 482 SkAutoTUnref<SkPicture> testPicture(recorder.endRecording());
466 483
467 canvas->drawPicture(testPicture); 484 canvas->drawPicture(testPicture);
468 } 485 }
469 TEST_STEP(DrawPicture, DrawPictureTestStep); 486 TEST_STEP(DrawPicture, DrawPictureTestStep);
470 487
471 static void SaveRestoreTestStep(SkCanvas* canvas, 488 static void SaveRestoreTestStep(SkCanvas* canvas, const TestData& testData,
472 skiatest::Reporter* reporter, 489 skiatest::Reporter* reporter, CanvasTestStep* te stStep) {
473 CanvasTestStep* testStep) {
474 int baseSaveCount = canvas->getSaveCount(); 490 int baseSaveCount = canvas->getSaveCount();
475 int n = canvas->save(); 491 int n = canvas->save();
476 REPORTER_ASSERT_MESSAGE(reporter, baseSaveCount == n, testStep->assertMessag e()); 492 REPORTER_ASSERT_MESSAGE(reporter, baseSaveCount == n, testStep->assertMessag e());
477 REPORTER_ASSERT_MESSAGE(reporter, baseSaveCount + 1 == canvas->getSaveCount( ), 493 REPORTER_ASSERT_MESSAGE(reporter, baseSaveCount + 1 == canvas->getSaveCount( ),
478 testStep->assertMessage()); 494 testStep->assertMessage());
479 canvas->save(); 495 canvas->save();
480 canvas->save(); 496 canvas->save();
481 REPORTER_ASSERT_MESSAGE(reporter, baseSaveCount + 3 == canvas->getSaveCount( ), 497 REPORTER_ASSERT_MESSAGE(reporter, baseSaveCount + 3 == canvas->getSaveCount( ),
482 testStep->assertMessage()); 498 testStep->assertMessage());
483 canvas->restoreToCount(baseSaveCount + 1); 499 canvas->restoreToCount(baseSaveCount + 1);
484 REPORTER_ASSERT_MESSAGE(reporter, baseSaveCount + 1 == canvas->getSaveCount( ), 500 REPORTER_ASSERT_MESSAGE(reporter, baseSaveCount + 1 == canvas->getSaveCount( ),
485 testStep->assertMessage()); 501 testStep->assertMessage());
486 502
487 // should this pin to 1, or be a no-op, or crash? 503 // should this pin to 1, or be a no-op, or crash?
488 canvas->restoreToCount(0); 504 canvas->restoreToCount(0);
489 REPORTER_ASSERT_MESSAGE(reporter, 1 == canvas->getSaveCount(), 505 REPORTER_ASSERT_MESSAGE(reporter, 1 == canvas->getSaveCount(),
490 testStep->assertMessage()); 506 testStep->assertMessage());
491 } 507 }
492 TEST_STEP(SaveRestore, SaveRestoreTestStep); 508 TEST_STEP(SaveRestore, SaveRestoreTestStep);
493 509
494 static void DrawLayerTestStep(SkCanvas* canvas, 510 static void DrawLayerTestStep(SkCanvas* canvas, const TestData& testData,
495 skiatest::Reporter* reporter, 511 skiatest::Reporter* reporter, CanvasTestStep* test Step) {
496 CanvasTestStep* testStep) {
497 REPORTER_ASSERT_MESSAGE(reporter, !canvas->isDrawingToLayer(), 512 REPORTER_ASSERT_MESSAGE(reporter, !canvas->isDrawingToLayer(),
498 testStep->assertMessage()); 513 testStep->assertMessage());
499 canvas->save(); 514 canvas->save();
500 REPORTER_ASSERT_MESSAGE(reporter, !canvas->isDrawingToLayer(), 515 REPORTER_ASSERT_MESSAGE(reporter, !canvas->isDrawingToLayer(),
501 testStep->assertMessage()); 516 testStep->assertMessage());
502 canvas->restore(); 517 canvas->restore();
503 518
504 const SkRect* bounds = NULL; // null means include entire bounds 519 const SkRect* bounds = NULL; // null means include entire bounds
505 const SkPaint* paint = NULL; 520 const SkPaint* paint = NULL;
506 521
(...skipping 11 matching lines...) Expand all
518 canvas->restore(); 533 canvas->restore();
519 REPORTER_ASSERT_MESSAGE(reporter, canvas->isDrawingToLayer(), 534 REPORTER_ASSERT_MESSAGE(reporter, canvas->isDrawingToLayer(),
520 testStep->assertMessage()); 535 testStep->assertMessage());
521 canvas->restore(); 536 canvas->restore();
522 // now layer count should be 0 537 // now layer count should be 0
523 REPORTER_ASSERT_MESSAGE(reporter, !canvas->isDrawingToLayer(), 538 REPORTER_ASSERT_MESSAGE(reporter, !canvas->isDrawingToLayer(),
524 testStep->assertMessage()); 539 testStep->assertMessage());
525 } 540 }
526 TEST_STEP(DrawLayer, DrawLayerTestStep); 541 TEST_STEP(DrawLayer, DrawLayerTestStep);
527 542
528 static void NestedSaveRestoreWithSolidPaintTestStep(SkCanvas* canvas, 543 static void NestedSaveRestoreWithSolidPaintTestStep(SkCanvas* canvas, const Test Data& testData,
529 skiatest::Reporter*, 544 skiatest::Reporter*, CanvasT estStep*) {
530 CanvasTestStep*) {
531 // This test step challenges the TestDeferredCanvasStateConsistency 545 // This test step challenges the TestDeferredCanvasStateConsistency
532 // test cases because the opaque paint can trigger an optimization 546 // test cases because the opaque paint can trigger an optimization
533 // that discards previously recorded commands. The challenge is to maintain 547 // that discards previously recorded commands. The challenge is to maintain
534 // correct clip and matrix stack state. 548 // correct clip and matrix stack state.
535 canvas->resetMatrix(); 549 canvas->resetMatrix();
536 canvas->rotate(SkIntToScalar(30)); 550 canvas->rotate(SkIntToScalar(30));
537 canvas->save(); 551 canvas->save();
538 canvas->translate(SkIntToScalar(2), SkIntToScalar(1)); 552 canvas->translate(SkIntToScalar(2), SkIntToScalar(1));
539 canvas->save(); 553 canvas->save();
540 canvas->scale(SkIntToScalar(3), SkIntToScalar(3)); 554 canvas->scale(SkIntToScalar(3), SkIntToScalar(3));
541 SkPaint paint; 555 SkPaint paint;
542 paint.setColor(0xFFFFFFFF); 556 paint.setColor(0xFFFFFFFF);
543 canvas->drawPaint(paint); 557 canvas->drawPaint(paint);
544 canvas->restore(); 558 canvas->restore();
545 canvas->restore(); 559 canvas->restore();
546 } 560 }
547 TEST_STEP(NestedSaveRestoreWithSolidPaint, \ 561 TEST_STEP(NestedSaveRestoreWithSolidPaint, \
548 NestedSaveRestoreWithSolidPaintTestStep); 562 NestedSaveRestoreWithSolidPaintTestStep);
549 563
550 static void NestedSaveRestoreWithFlushTestStep(SkCanvas* canvas, 564 static void NestedSaveRestoreWithFlushTestStep(SkCanvas* canvas, const TestData& testData,
551 skiatest::Reporter*, 565 skiatest::Reporter*, CanvasTestSt ep*) {
552 CanvasTestStep*) {
553 // This test step challenges the TestDeferredCanvasStateConsistency 566 // This test step challenges the TestDeferredCanvasStateConsistency
554 // test case because the canvas flush on a deferred canvas will 567 // test case because the canvas flush on a deferred canvas will
555 // reset the recording session. The challenge is to maintain correct 568 // reset the recording session. The challenge is to maintain correct
556 // clip and matrix stack state on the playback canvas. 569 // clip and matrix stack state on the playback canvas.
557 canvas->resetMatrix(); 570 canvas->resetMatrix();
558 canvas->rotate(SkIntToScalar(30)); 571 canvas->rotate(SkIntToScalar(30));
559 canvas->save(); 572 canvas->save();
560 canvas->translate(SkIntToScalar(2), SkIntToScalar(1)); 573 canvas->translate(SkIntToScalar(2), SkIntToScalar(1));
561 canvas->save(); 574 canvas->save();
562 canvas->scale(SkIntToScalar(3), SkIntToScalar(3)); 575 canvas->scale(SkIntToScalar(3), SkIntToScalar(3));
563 canvas->drawRect(kTestRect,kTestPaint); 576 canvas->drawRect(testData.fTestRect,testData.fTestPaint);
564 canvas->flush(); 577 canvas->flush();
565 canvas->restore(); 578 canvas->restore();
566 canvas->restore(); 579 canvas->restore();
567 } 580 }
568 TEST_STEP(NestedSaveRestoreWithFlush, \ 581 TEST_STEP(NestedSaveRestoreWithFlush, NestedSaveRestoreWithFlushTestStep);
569 NestedSaveRestoreWithFlushTestStep);
570 582
571 static void AssertCanvasStatesEqual(skiatest::Reporter* reporter, 583 static void AssertCanvasStatesEqual(skiatest::Reporter* reporter, const TestData & testData,
572 const SkCanvas* canvas1, 584 const SkCanvas* canvas1, const SkCanvas* can vas2,
573 const SkCanvas* canvas2,
574 CanvasTestStep* testStep) { 585 CanvasTestStep* testStep) {
575 REPORTER_ASSERT_MESSAGE(reporter, canvas1->getDeviceSize() == 586 REPORTER_ASSERT_MESSAGE(reporter, canvas1->getDeviceSize() ==
576 canvas2->getDeviceSize(), testStep->assertMessage()); 587 canvas2->getDeviceSize(), testStep->assertMessage());
577 REPORTER_ASSERT_MESSAGE(reporter, canvas1->getSaveCount() == 588 REPORTER_ASSERT_MESSAGE(reporter, canvas1->getSaveCount() ==
578 canvas2->getSaveCount(), testStep->assertMessage()); 589 canvas2->getSaveCount(), testStep->assertMessage());
579 REPORTER_ASSERT_MESSAGE(reporter, canvas1->isDrawingToLayer() == 590 REPORTER_ASSERT_MESSAGE(reporter, canvas1->isDrawingToLayer() ==
580 canvas2->isDrawingToLayer(), testStep->assertMessage()); 591 canvas2->isDrawingToLayer(), testStep->assertMessage());
581 592
582 SkRect bounds1, bounds2; 593 SkRect bounds1, bounds2;
583 REPORTER_ASSERT_MESSAGE(reporter, 594 REPORTER_ASSERT_MESSAGE(reporter,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 (*referenceRecord->fPathHeap)[i] == 679 (*referenceRecord->fPathHeap)[i] ==
669 (*testRecord->fPathHeap)[i], testStep->assertMessage()); 680 (*testRecord->fPathHeap)[i], testStep->assertMessage());
670 } 681 }
671 } 682 }
672 */ 683 */
673 684
674 } 685 }
675 }; 686 };
676 687
677 static void TestPdfDevice(skiatest::Reporter* reporter, 688 static void TestPdfDevice(skiatest::Reporter* reporter,
689 const TestData& testData,
678 CanvasTestStep* testStep) { 690 CanvasTestStep* testStep) {
679 SkISize pageSize = SkISize::Make(kWidth, kHeight); 691 SkISize pageSize = SkISize::Make(testData.fWidth, testData.fHeight);
680 SkPDFDevice device(pageSize, pageSize, SkMatrix::I()); 692 SkPDFDevice device(pageSize, pageSize, SkMatrix::I());
681 SkCanvas canvas(&device); 693 SkCanvas canvas(&device);
682 testStep->setAssertMessageFormat(kPdfAssertMessageFormat); 694 testStep->setAssertMessageFormat(kPdfAssertMessageFormat);
683 testStep->draw(&canvas, reporter); 695 testStep->draw(&canvas, testData, reporter);
684 SkPDFDocument doc; 696 SkPDFDocument doc;
685 doc.appendPage(&device); 697 doc.appendPage(&device);
686 SkDynamicMemoryWStream stream; 698 SkDynamicMemoryWStream stream;
687 doc.emitPDF(&stream); 699 doc.emitPDF(&stream);
688 } 700 }
689 701
690 // The following class groups static functions that need to access 702 // The following class groups static functions that need to access
691 // the privates members of SkDeferredCanvas 703 // the privates members of SkDeferredCanvas
692 class SkDeferredCanvasTester { 704 class SkDeferredCanvasTester {
693 public: 705 public:
694 static void TestDeferredCanvasStateConsistency( 706 static void TestDeferredCanvasStateConsistency(
695 skiatest::Reporter* reporter, 707 skiatest::Reporter* reporter,
708 const TestData& testData,
696 CanvasTestStep* testStep, 709 CanvasTestStep* testStep,
697 const SkCanvas& referenceCanvas, bool silent) { 710 const SkCanvas& referenceCanvas, bool silent) {
698 711
699 SkAutoTUnref<SkSurface> surface(createSurface(0xFFFFFFFF)); 712 SkAutoTUnref<SkSurface> surface(createSurface(0xFFFFFFFF));
700 SkAutoTUnref<SkDeferredCanvas> deferredCanvas(SkDeferredCanvas::Create(s urface.get())); 713 SkAutoTUnref<SkDeferredCanvas> deferredCanvas(SkDeferredCanvas::Create(s urface.get()));
701 714
702 testStep->setAssertMessageFormat(kDeferredDrawAssertMessageFormat); 715 testStep->setAssertMessageFormat(kDeferredDrawAssertMessageFormat);
703 testStep->draw(deferredCanvas, reporter); 716 testStep->draw(deferredCanvas, testData, reporter);
704 testStep->setAssertMessageFormat(kDeferredPreFlushAssertMessageFormat); 717 testStep->setAssertMessageFormat(kDeferredPreFlushAssertMessageFormat);
705 AssertCanvasStatesEqual(reporter, deferredCanvas, &referenceCanvas, 718 AssertCanvasStatesEqual(reporter, testData, deferredCanvas, &referenceCa nvas, testStep);
706 testStep);
707 719
708 if (silent) { 720 if (silent) {
709 deferredCanvas->silentFlush(); 721 deferredCanvas->silentFlush();
710 } else { 722 } else {
711 deferredCanvas->flush(); 723 deferredCanvas->flush();
712 } 724 }
713 725
714 testStep->setAssertMessageFormat( 726 testStep->setAssertMessageFormat(
715 silent ? kDeferredPostSilentFlushPlaybackAssertMessageFormat : 727 silent ? kDeferredPostSilentFlushPlaybackAssertMessageFormat :
716 kDeferredPostFlushPlaybackAssertMessageFormat); 728 kDeferredPostFlushPlaybackAssertMessageFormat);
717 AssertCanvasStatesEqual(reporter, 729 AssertCanvasStatesEqual(reporter, testData, deferredCanvas->immediateCan vas(),
718 deferredCanvas->immediateCanvas(), 730 &referenceCanvas, testStep);
719 &referenceCanvas, testStep);
720 731
721 // Verified that deferred canvas state is not affected by flushing 732 // Verified that deferred canvas state is not affected by flushing
722 // pending draw operations 733 // pending draw operations
723 734
724 // The following test code is commented out because it currently fails. 735 // The following test code is commented out because it currently fails.
725 // Issue: http://code.google.com/p/skia/issues/detail?id=496 736 // Issue: http://code.google.com/p/skia/issues/detail?id=496
726 /* 737 /*
727 testStep->setAssertMessageFormat(kDeferredPostFlushAssertMessageFormat); 738 testStep->setAssertMessageFormat(kDeferredPostFlushAssertMessageFormat);
728 AssertCanvasStatesEqual(reporter, &deferredCanvas, &referenceCanvas, 739 AssertCanvasStatesEqual(reporter, &deferredCanvas, &referenceCanvas,
729 testStep); 740 testStep);
730 */ 741 */
731 } 742 }
732 }; 743 };
733 744
734 // unused 745 // unused
735 static void TestProxyCanvasStateConsistency( 746 static void TestProxyCanvasStateConsistency(
736 skiatest::Reporter* reporter, 747 skiatest::Reporter* reporter,
748 const TestData& testData,
737 CanvasTestStep* testStep, 749 CanvasTestStep* testStep,
738 const SkCanvas& referenceCanvas) { 750 const SkCanvas& referenceCanvas) {
739 751
740 SkBitmap indirectStore; 752 SkBitmap indirectStore;
741 createBitmap(&indirectStore, 0xFFFFFFFF); 753 createBitmap(&indirectStore, 0xFFFFFFFF);
742 SkCanvas indirectCanvas(indirectStore); 754 SkCanvas indirectCanvas(indirectStore);
743 SkProxyCanvas proxyCanvas(&indirectCanvas); 755 SkProxyCanvas proxyCanvas(&indirectCanvas);
744 testStep->setAssertMessageFormat(kProxyDrawAssertMessageFormat); 756 testStep->setAssertMessageFormat(kProxyDrawAssertMessageFormat);
745 testStep->draw(&proxyCanvas, reporter); 757 testStep->draw(&proxyCanvas, testData, reporter);
746 // Verify that the SkProxyCanvas reports consitent state 758 // Verify that the SkProxyCanvas reports consitent state
747 testStep->setAssertMessageFormat(kProxyStateAssertMessageFormat); 759 testStep->setAssertMessageFormat(kProxyStateAssertMessageFormat);
748 AssertCanvasStatesEqual(reporter, &proxyCanvas, &referenceCanvas, 760 AssertCanvasStatesEqual(reporter, testData, &proxyCanvas, &referenceCanvas, testStep);
749 testStep);
750 // Verify that the indirect canvas reports consitent state 761 // Verify that the indirect canvas reports consitent state
751 testStep->setAssertMessageFormat(kProxyIndirectStateAssertMessageFormat); 762 testStep->setAssertMessageFormat(kProxyIndirectStateAssertMessageFormat);
752 AssertCanvasStatesEqual(reporter, &indirectCanvas, &referenceCanvas, 763 AssertCanvasStatesEqual(reporter, testData, &indirectCanvas, &referenceCanva s, testStep);
753 testStep);
754 } 764 }
755 765
756 // unused 766 // unused
757 static void TestNWayCanvasStateConsistency( 767 static void TestNWayCanvasStateConsistency(
758 skiatest::Reporter* reporter, 768 skiatest::Reporter* reporter,
769 const TestData& testData,
759 CanvasTestStep* testStep, 770 CanvasTestStep* testStep,
760 const SkCanvas& referenceCanvas) { 771 const SkCanvas& referenceCanvas) {
761 772
762 SkBitmap indirectStore1; 773 SkBitmap indirectStore1;
763 createBitmap(&indirectStore1, 0xFFFFFFFF); 774 createBitmap(&indirectStore1, 0xFFFFFFFF);
764 SkCanvas indirectCanvas1(indirectStore1); 775 SkCanvas indirectCanvas1(indirectStore1);
765 776
766 SkBitmap indirectStore2; 777 SkBitmap indirectStore2;
767 createBitmap(&indirectStore2, 0xFFFFFFFF); 778 createBitmap(&indirectStore2, 0xFFFFFFFF);
768 SkCanvas indirectCanvas2(indirectStore2); 779 SkCanvas indirectCanvas2(indirectStore2);
769 780
770 SkISize canvasSize = referenceCanvas.getDeviceSize(); 781 SkISize canvasSize = referenceCanvas.getDeviceSize();
771 SkNWayCanvas nWayCanvas(canvasSize.width(), canvasSize.height()); 782 SkNWayCanvas nWayCanvas(canvasSize.width(), canvasSize.height());
772 nWayCanvas.addCanvas(&indirectCanvas1); 783 nWayCanvas.addCanvas(&indirectCanvas1);
773 nWayCanvas.addCanvas(&indirectCanvas2); 784 nWayCanvas.addCanvas(&indirectCanvas2);
774 785
775 testStep->setAssertMessageFormat(kNWayDrawAssertMessageFormat); 786 testStep->setAssertMessageFormat(kNWayDrawAssertMessageFormat);
776 testStep->draw(&nWayCanvas, reporter); 787 testStep->draw(&nWayCanvas, testData, reporter);
777 // Verify that the SkProxyCanvas reports consitent state 788 // Verify that the SkProxyCanvas reports consitent state
778 testStep->setAssertMessageFormat(kNWayStateAssertMessageFormat); 789 testStep->setAssertMessageFormat(kNWayStateAssertMessageFormat);
779 AssertCanvasStatesEqual(reporter, &nWayCanvas, &referenceCanvas, 790 AssertCanvasStatesEqual(reporter, testData, &nWayCanvas, &referenceCanvas, t estStep);
780 testStep);
781 // Verify that the indirect canvases report consitent state 791 // Verify that the indirect canvases report consitent state
782 testStep->setAssertMessageFormat(kNWayIndirect1StateAssertMessageFormat); 792 testStep->setAssertMessageFormat(kNWayIndirect1StateAssertMessageFormat);
783 AssertCanvasStatesEqual(reporter, &indirectCanvas1, &referenceCanvas, 793 AssertCanvasStatesEqual(reporter, testData, &indirectCanvas1, &referenceCanv as, testStep);
784 testStep);
785 testStep->setAssertMessageFormat(kNWayIndirect2StateAssertMessageFormat); 794 testStep->setAssertMessageFormat(kNWayIndirect2StateAssertMessageFormat);
786 AssertCanvasStatesEqual(reporter, &indirectCanvas2, &referenceCanvas, 795 AssertCanvasStatesEqual(reporter, testData, &indirectCanvas2, &referenceCanv as, testStep);
787 testStep);
788 } 796 }
789 797
790 /* 798 /*
791 * This sub-test verifies that the test step passes when executed 799 * This sub-test verifies that the test step passes when executed
792 * with SkCanvas and with classes derrived from SkCanvas. It also verifies 800 * with SkCanvas and with classes derrived from SkCanvas. It also verifies
793 * that the all canvas derivatives report the same state as an SkCanvas 801 * that the all canvas derivatives report the same state as an SkCanvas
794 * after having executed the test step. 802 * after having executed the test step.
795 */ 803 */
796 static void TestOverrideStateConsistency(skiatest::Reporter* reporter, 804 static void TestOverrideStateConsistency(skiatest::Reporter* reporter, const Tes tData& testData,
797 CanvasTestStep* testStep) { 805 CanvasTestStep* testStep) {
798 SkBitmap referenceStore; 806 SkBitmap referenceStore;
799 createBitmap(&referenceStore, 0xFFFFFFFF); 807 createBitmap(&referenceStore, 0xFFFFFFFF);
800 SkCanvas referenceCanvas(referenceStore); 808 SkCanvas referenceCanvas(referenceStore);
801 testStep->setAssertMessageFormat(kCanvasDrawAssertMessageFormat); 809 testStep->setAssertMessageFormat(kCanvasDrawAssertMessageFormat);
802 testStep->draw(&referenceCanvas, reporter); 810 testStep->draw(&referenceCanvas, testData, reporter);
803 811
804 SkDeferredCanvasTester::TestDeferredCanvasStateConsistency(reporter, testSte p, referenceCanvas, false); 812 SkDeferredCanvasTester::TestDeferredCanvasStateConsistency(reporter, testDat a, testStep, referenceCanvas, false);
805 813
806 SkDeferredCanvasTester::TestDeferredCanvasStateConsistency(reporter, testSte p, referenceCanvas, true); 814 SkDeferredCanvasTester::TestDeferredCanvasStateConsistency(reporter, testDat a, testStep, referenceCanvas, true);
807 815
808 // The following test code is disabled because SkProxyCanvas is 816 // The following test code is disabled because SkProxyCanvas is
809 // missing a lot of virtual overrides on get* methods, which are used 817 // missing a lot of virtual overrides on get* methods, which are used
810 // to verify canvas state. 818 // to verify canvas state.
811 // Issue: http://code.google.com/p/skia/issues/detail?id=500 819 // Issue: http://code.google.com/p/skia/issues/detail?id=500
812 820
813 if (false) { // avoid bit rot, suppress warning 821 if (false) { // avoid bit rot, suppress warning
814 TestProxyCanvasStateConsistency(reporter, testStep, referenceCanvas); 822 TestProxyCanvasStateConsistency(reporter, testData, testStep, referenceC anvas);
815 } 823 }
816 824
817 // The following test code is disabled because SkNWayCanvas does not 825 // The following test code is disabled because SkNWayCanvas does not
818 // report correct clipping and device bounds information 826 // report correct clipping and device bounds information
819 // Issue: http://code.google.com/p/skia/issues/detail?id=501 827 // Issue: http://code.google.com/p/skia/issues/detail?id=501
820 828
821 if (false) { // avoid bit rot, suppress warning 829 if (false) { // avoid bit rot, suppress warning
822 TestNWayCanvasStateConsistency(reporter, testStep, referenceCanvas); 830 TestNWayCanvasStateConsistency(reporter, testData, testStep, referenceCa nvas);
823 } 831 }
824 832
825 if (false) { // avoid bit rot, suppress warning 833 if (false) { // avoid bit rot, suppress warning
826 test_clipVisitor(reporter, &referenceCanvas); 834 test_clipVisitor(reporter, &referenceCanvas);
827 } 835 }
828 } 836 }
829 837
830 static void test_newraster(skiatest::Reporter* reporter) { 838 static void test_newraster(skiatest::Reporter* reporter) {
831 SkImageInfo info = SkImageInfo::MakeN32Premul(10, 10); 839 SkImageInfo info = SkImageInfo::MakeN32Premul(10, 10);
832 SkCanvas* canvas = SkCanvas::NewRaster(info); 840 SkCanvas* canvas = SkCanvas::NewRaster(info);
(...skipping 27 matching lines...) Expand all
860 // We should succeed with a zero-sized valid info 868 // We should succeed with a zero-sized valid info
861 info = SkImageInfo::MakeN32Premul(0, 0); 869 info = SkImageInfo::MakeN32Premul(0, 0);
862 canvas = SkCanvas::NewRaster(info); 870 canvas = SkCanvas::NewRaster(info);
863 REPORTER_ASSERT(reporter, canvas); 871 REPORTER_ASSERT(reporter, canvas);
864 SkDELETE(canvas); 872 SkDELETE(canvas);
865 } 873 }
866 874
867 DEF_TEST(Canvas, reporter) { 875 DEF_TEST(Canvas, reporter) {
868 // Init global here because bitmap pixels cannot be alocated during 876 // Init global here because bitmap pixels cannot be alocated during
869 // static initialization 877 // static initialization
870 kTestBitmap = testBitmap(); 878 // kTestBitmap = testBitmap();
reed1 2014/10/02 19:53:06 can we remove this // line?
Rémi Piotaix 2014/10/02 20:02:26 Done.
879 TestData testData;
871 880
872 for (int testStep = 0; testStep < testStepArray().count(); testStep++) { 881 for (int testStep = 0; testStep < testStepArray().count(); testStep++) {
873 TestOverrideStateConsistency(reporter, testStepArray()[testStep]); 882 TestOverrideStateConsistency(reporter, testData, testStepArray()[testSte p]);
874 if (testStepArray()[testStep]->enablePdfTesting()) { 883 if (testStepArray()[testStep]->enablePdfTesting()) {
875 TestPdfDevice(reporter, testStepArray()[testStep]); 884 TestPdfDevice(reporter, testData, testStepArray()[testStep]);
876 } 885 }
877 } 886 }
878 887
879 // Explicitly call reset(), so we don't leak the pixels (since kTestBitmap i s a global) 888 // Explicitly call reset(), so we don't leak the pixels (since kTestBitmap i s a global)
880 kTestBitmap.reset(); 889 // kTestBitmap.reset();
reed1 2014/10/02 19:53:06 can we remove this reset()?
Rémi Piotaix 2014/10/02 20:02:26 Done.
881 890
882 test_newraster(reporter); 891 test_newraster(reporter);
883 } 892 }
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