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

Unified Diff: tests/PictureTest.cpp

Issue 214953003: split SkPictureRecorder out of SkPicture (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: update to ToT (again) Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: tests/PictureTest.cpp
===================================================================
--- tests/PictureTest.cpp (revision 14159)
+++ tests/PictureTest.cpp (working copy)
@@ -301,8 +301,8 @@
SkTDArray<SkPixelRef*> analytic[],
int count,
DrawBitmapProc proc) {
- SkPicture* pic = new SkPicture;
- SkCanvas* canvas = pic->beginRecording(1000, 1000);
+ SkPictureRecorder recorder;
+ SkCanvas* canvas = recorder.beginRecording(1000, 1000);
for (int i = 0; i < count; ++i) {
analytic[i].rewind();
canvas->save();
@@ -313,8 +313,7 @@
proc(canvas, bm[i], bm[count+i], pos[i], &analytic[i]);
canvas->restore();
}
- pic->endRecording();
- return pic;
+ return recorder.endRecording();
}
static void rand_rect(SkRect* rect, SkRandom& rand, SkScalar W, SkScalar H) {
@@ -657,22 +656,22 @@
// Ensure that deleting SkPicturePlayback does not assert. Asserts only fire in debug mode, so only
// run in debug mode.
static void test_deleting_empty_playback() {
- SkPicture picture;
+ SkPictureRecorder recorder;
// Creates an SkPictureRecord
- picture.beginRecording(0, 0);
+ recorder.beginRecording(0, 0);
// Turns that into an SkPicturePlayback
- picture.endRecording();
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
// Deletes the old SkPicturePlayback, and creates a new SkPictureRecord
- picture.beginRecording(0, 0);
+ recorder.beginRecording(0, 0);
}
// Ensure that serializing an empty picture does not assert. Likewise only runs in debug mode.
static void test_serializing_empty_picture() {
- SkPicture picture;
- picture.beginRecording(0, 0);
- picture.endRecording();
+ SkPictureRecorder recorder;
+ recorder.beginRecording(0, 0);
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
SkDynamicMemoryWStream stream;
- picture.serialize(&stream);
+ picture->serialize(&stream);
}
#endif
@@ -712,66 +711,78 @@
SkPaint paint;
SkRect rect = SkRect::MakeLTRB(-10000000, -10000000, 10000000, 10000000);
- SkPicture extra_save_picture;
- extra_save_picture.beginRecording(100, 100);
- extra_save_picture.getRecordingCanvas()->save();
- extra_save_picture.getRecordingCanvas()->translate(10, 10);
- extra_save_picture.getRecordingCanvas()->drawRect(rect, paint);
- extra_save_picture.getRecordingCanvas()->save();
- extra_save_picture.getRecordingCanvas()->translate(10, 10);
- extra_save_picture.getRecordingCanvas()->drawRect(rect, paint);
+ SkPictureRecorder recorder;
- testCanvas.drawPicture(extra_save_picture);
- REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
+ {
+ // Create picture with 2 unbalanced saves
+ SkCanvas* canvas = recorder.beginRecording(100, 100);
+ canvas->save();
+ canvas->translate(10, 10);
+ canvas->drawRect(rect, paint);
+ canvas->save();
+ canvas->translate(10, 10);
+ canvas->drawRect(rect, paint);
+ SkAutoTUnref<SkPicture> extraSavePicture(recorder.endRecording());
+ testCanvas.drawPicture(*extraSavePicture);
+ REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
+ }
+
set_canvas_to_save_count_4(&testCanvas);
- SkPicture extra_restore_picture;
- extra_restore_picture.beginRecording(100, 100);
- extra_restore_picture.getRecordingCanvas()->save();
- extra_restore_picture.getRecordingCanvas()->translate(10, 10);
- extra_restore_picture.getRecordingCanvas()->drawRect(rect, paint);
- extra_restore_picture.getRecordingCanvas()->save();
- extra_restore_picture.getRecordingCanvas()->translate(10, 10);
- extra_restore_picture.getRecordingCanvas()->drawRect(rect, paint);
- extra_restore_picture.getRecordingCanvas()->restore();
- extra_restore_picture.getRecordingCanvas()->restore();
- extra_restore_picture.getRecordingCanvas()->restore();
- extra_restore_picture.getRecordingCanvas()->restore();
+ {
+ // Create picture with 2 unbalanced restores
+ SkCanvas* canvas = recorder.beginRecording(100, 100);
+ canvas->save();
+ canvas->translate(10, 10);
+ canvas->drawRect(rect, paint);
+ canvas->save();
+ canvas->translate(10, 10);
+ canvas->drawRect(rect, paint);
+ canvas->restore();
+ canvas->restore();
+ canvas->restore();
+ canvas->restore();
+ SkAutoTUnref<SkPicture> extraRestorePicture(recorder.endRecording());
- testCanvas.drawPicture(extra_save_picture);
- REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
+ testCanvas.drawPicture(*extraRestorePicture);
+ REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
+ }
- SkPicture no_save_picture;
- extra_restore_picture.beginRecording(100, 100);
- extra_restore_picture.getRecordingCanvas()->translate(10, 10);
- extra_restore_picture.getRecordingCanvas()->drawRect(rect, paint);
+ set_canvas_to_save_count_4(&testCanvas);
- testCanvas.drawPicture(extra_save_picture);
- REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
- REPORTER_ASSERT(reporter, testCanvas.getTotalMatrix().isIdentity());
+ {
+ SkCanvas* canvas = recorder.beginRecording(100, 100);
+ canvas->translate(10, 10);
+ canvas->drawRect(rect, paint);
+ SkAutoTUnref<SkPicture> noSavePicture(recorder.endRecording());
+
+ testCanvas.drawPicture(*noSavePicture);
+ REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
+ REPORTER_ASSERT(reporter, testCanvas.getTotalMatrix().isIdentity());
+ }
}
static void test_peephole() {
SkRandom rand;
+ SkPictureRecorder recorder;
+
for (int j = 0; j < 100; j++) {
SkRandom rand2(rand); // remember the seed
- SkPicture picture;
- SkCanvas* canvas = picture.beginRecording(100, 100);
+ SkCanvas* canvas = recorder.beginRecording(100, 100);
for (int i = 0; i < 1000; ++i) {
rand_op(canvas, rand);
}
- picture.endRecording();
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
rand = rand2;
}
{
- SkPicture picture;
- SkCanvas* canvas = picture.beginRecording(100, 100);
+ SkCanvas* canvas = recorder.beginRecording(100, 100);
SkRect rect = SkRect::MakeWH(50, 50);
for (int i = 0; i < 100; ++i) {
@@ -781,7 +792,7 @@
canvas->clipRect(rect);
canvas->restore();
}
- picture.endRecording();
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
}
}
@@ -793,13 +804,13 @@
// fail.
SkBitmap bm;
bm.setConfig(SkImageInfo::MakeN32Premul(100, 100));
- SkPicture picture;
- SkCanvas* recordingCanvas = picture.beginRecording(100, 100);
+ SkPictureRecorder recorder;
+ SkCanvas* recordingCanvas = recorder.beginRecording(100, 100);
recordingCanvas->drawBitmap(bm, 0, 0);
- picture.endRecording();
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
SkCanvas canvas;
- canvas.drawPicture(picture);
+ canvas.drawPicture(*picture);
}
#endif
@@ -808,11 +819,13 @@
}
static SkData* serialized_picture_from_bitmap(const SkBitmap& bitmap) {
- SkPicture picture;
- SkCanvas* canvas = picture.beginRecording(bitmap.width(), bitmap.height());
+ SkPictureRecorder recorder;
+ SkCanvas* canvas = recorder.beginRecording(bitmap.width(), bitmap.height());
canvas->drawBitmap(bitmap, 0, 0);
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
+
SkDynamicMemoryWStream wStream;
- picture.serialize(&wStream, &encode_bitmap_to_data);
+ picture->serialize(&wStream, &encode_bitmap_to_data);
return wStream.copyToData();
}
@@ -872,21 +885,12 @@
// Before the fix, we used to crash accessing a null pointer when we
// had a picture with no paints. This test passes by not crashing.
{
- SkPicture picture;
- picture.beginRecording(1, 1);
- picture.endRecording();
- SkPicture* destPicture = picture.clone();
+ SkPictureRecorder recorder;
+ recorder.beginRecording(1, 1);
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
+ SkAutoTUnref<SkPicture> destPicture(picture->clone());
REPORTER_ASSERT(reporter, NULL != destPicture);
- destPicture->unref();
}
- {
- // Test without call to endRecording
- SkPicture picture;
- picture.beginRecording(1, 1);
- SkPicture* destPicture = picture.clone();
- REPORTER_ASSERT(reporter, NULL != destPicture);
- destPicture->unref();
- }
}
static void test_draw_empty(skiatest::Reporter* reporter) {
@@ -897,11 +901,11 @@
{
// stock SkPicture
- SkPicture picture;
- picture.beginRecording(1, 1);
- picture.endRecording();
+ SkPictureRecorder recorder;
+ recorder.beginRecording(1, 1);
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
- canvas.drawPicture(picture);
+ canvas.drawPicture(*picture);
}
{
@@ -911,29 +915,31 @@
gridInfo.fOffset.setZero();
gridInfo.fTileInterval.set(1, 1);
- SkTileGridPicture picture(1, 1, gridInfo);
- picture.beginRecording(1, 1, SkPicture::kOptimizeForClippedPlayback_RecordingFlag);
- picture.endRecording();
+ SkAutoTUnref<SkPictureFactory> factory(SkNEW_ARGS(SkTileGridPictureFactory, (gridInfo)));
+ SkPictureRecorder recorder(factory);
+ recorder.beginRecording(1, 1, SkPicture::kOptimizeForClippedPlayback_RecordingFlag);
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
- canvas.drawPicture(picture);
+ canvas.drawPicture(*picture);
}
{
// RTree
- SkPicture picture;
- picture.beginRecording(1, 1, SkPicture::kOptimizeForClippedPlayback_RecordingFlag);
- picture.endRecording();
+ SkPictureRecorder recorder;
+ recorder.beginRecording(1, 1, SkPicture::kOptimizeForClippedPlayback_RecordingFlag);
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
- canvas.drawPicture(picture);
+ canvas.drawPicture(*picture);
}
{
// quad tree
- SkQuadTreePicture picture(SkIRect::MakeWH(1, 1));
- picture.beginRecording(1, 1, SkPicture::kOptimizeForClippedPlayback_RecordingFlag);
- picture.endRecording();
+ SkAutoTUnref<SkPictureFactory> factory(SkNEW(SkQuadTreePictureFactory));
+ SkPictureRecorder recorder(factory);
+ recorder.beginRecording(1, 1, SkPicture::kOptimizeForClippedPlayback_RecordingFlag);
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
- canvas.drawPicture(picture);
+ canvas.drawPicture(*picture);
}
}
@@ -954,11 +960,11 @@
SkPath path2;
path2.addOval(rect3);
SkIRect clipBounds;
+ SkPictureRecorder recorder;
// Minimalist test set for 100% code coverage of
// SkPictureRecord::updateClipConservativelyUsingBounds
{
- SkPicture picture;
- SkCanvas* canvas = picture.beginRecording(10, 10,
+ SkCanvas* canvas = recorder.beginRecording(10, 10,
SkPicture::kUsePathBoundsForClip_RecordingFlag);
canvas->clipPath(invPath, SkRegion::kIntersect_Op);
bool nonEmpty = canvas->getClipDeviceBounds(&clipBounds);
@@ -969,8 +975,7 @@
REPORTER_ASSERT(reporter, 10 == clipBounds.fRight);
}
{
- SkPicture picture;
- SkCanvas* canvas = picture.beginRecording(10, 10,
+ SkCanvas* canvas = recorder.beginRecording(10, 10,
SkPicture::kUsePathBoundsForClip_RecordingFlag);
canvas->clipPath(path, SkRegion::kIntersect_Op);
canvas->clipPath(invPath, SkRegion::kIntersect_Op);
@@ -982,8 +987,7 @@
REPORTER_ASSERT(reporter, 8 == clipBounds.fRight);
}
{
- SkPicture picture;
- SkCanvas* canvas = picture.beginRecording(10, 10,
+ SkCanvas* canvas = recorder.beginRecording(10, 10,
SkPicture::kUsePathBoundsForClip_RecordingFlag);
canvas->clipPath(path, SkRegion::kIntersect_Op);
canvas->clipPath(invPath, SkRegion::kUnion_Op);
@@ -995,8 +999,7 @@
REPORTER_ASSERT(reporter, 10 == clipBounds.fRight);
}
{
- SkPicture picture;
- SkCanvas* canvas = picture.beginRecording(10, 10,
+ SkCanvas* canvas = recorder.beginRecording(10, 10,
SkPicture::kUsePathBoundsForClip_RecordingFlag);
canvas->clipPath(path, SkRegion::kDifference_Op);
bool nonEmpty = canvas->getClipDeviceBounds(&clipBounds);
@@ -1007,8 +1010,7 @@
REPORTER_ASSERT(reporter, 10 == clipBounds.fRight);
}
{
- SkPicture picture;
- SkCanvas* canvas = picture.beginRecording(10, 10,
+ SkCanvas* canvas = recorder.beginRecording(10, 10,
SkPicture::kUsePathBoundsForClip_RecordingFlag);
canvas->clipPath(path, SkRegion::kReverseDifference_Op);
bool nonEmpty = canvas->getClipDeviceBounds(&clipBounds);
@@ -1022,8 +1024,7 @@
REPORTER_ASSERT(reporter, 8 == clipBounds.fRight);
}
{
- SkPicture picture;
- SkCanvas* canvas = picture.beginRecording(10, 10,
+ SkCanvas* canvas = recorder.beginRecording(10, 10,
SkPicture::kUsePathBoundsForClip_RecordingFlag);
canvas->clipPath(path, SkRegion::kIntersect_Op);
canvas->clipPath(path2, SkRegion::kXOR_Op);
@@ -1081,8 +1082,8 @@
};
static void test_clip_expansion(skiatest::Reporter* reporter) {
- SkPicture picture;
- SkCanvas* canvas = picture.beginRecording(10, 10, 0);
+ SkPictureRecorder recorder;
+ SkCanvas* canvas = recorder.beginRecording(10, 10, 0);
canvas->clipRect(SkRect::MakeEmpty(), SkRegion::kReplace_Op);
// The following expanding clip should not be skipped.
@@ -1091,9 +1092,10 @@
SkPaint p;
p.setColor(SK_ColorBLUE);
canvas->drawPaint(p);
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
ClipCountingCanvas testCanvas(10, 10);
- picture.draw(&testCanvas);
+ picture->draw(&testCanvas);
// Both clips should be present on playback.
REPORTER_ASSERT(reporter, testCanvas.getClipCount() == 2);
@@ -1103,95 +1105,87 @@
SkBitmap bm;
make_bm(&bm, 10, 10, SK_ColorRED, true);
- SkCanvas* canvas;
+ SkPictureRecorder recorder;
- SkPicture childPlain;
- childPlain.beginRecording(10, 10);
- childPlain.endRecording();
- REPORTER_ASSERT(reporter, !childPlain.willPlayBackBitmaps()); // 0
+ recorder.beginRecording(10, 10);
+ SkAutoTUnref<SkPicture> childPlain(recorder.endRecording());
+ REPORTER_ASSERT(reporter, !childPlain->willPlayBackBitmaps()); // 0
- SkPicture childWithBitmap;
- childWithBitmap.beginRecording(10, 10)->drawBitmap(bm, 0, 0);
- childWithBitmap.endRecording();
- REPORTER_ASSERT(reporter, childWithBitmap.willPlayBackBitmaps()); // 1
+ recorder.beginRecording(10, 10)->drawBitmap(bm, 0, 0);
+ SkAutoTUnref<SkPicture> childWithBitmap(recorder.endRecording());
+ REPORTER_ASSERT(reporter, childWithBitmap->willPlayBackBitmaps()); // 1
- SkPicture parentPP;
- canvas = parentPP.beginRecording(10, 10);
- canvas->drawPicture(childPlain);
- parentPP.endRecording();
- REPORTER_ASSERT(reporter, !parentPP.willPlayBackBitmaps()); // 0
-
- SkPicture parentPWB;
- canvas = parentPWB.beginRecording(10, 10);
- canvas->drawPicture(childWithBitmap);
- parentPWB.endRecording();
- REPORTER_ASSERT(reporter, parentPWB.willPlayBackBitmaps()); // 1
-
- SkPicture parentWBP;
- canvas = parentWBP.beginRecording(10, 10);
- canvas->drawBitmap(bm, 0, 0);
- canvas->drawPicture(childPlain);
- parentWBP.endRecording();
- REPORTER_ASSERT(reporter, parentWBP.willPlayBackBitmaps()); // 1
-
- SkPicture parentWBWB;
- canvas = parentWBWB.beginRecording(10, 10);
- canvas->drawBitmap(bm, 0, 0);
- canvas->drawPicture(childWithBitmap);
- parentWBWB.endRecording();
- REPORTER_ASSERT(reporter, parentWBWB.willPlayBackBitmaps()); // 2
+ {
+ SkCanvas* canvas = recorder.beginRecording(10, 10);
+ canvas->drawPicture(*childPlain);
+ SkAutoTUnref<SkPicture> parentPP(recorder.endRecording());
+ REPORTER_ASSERT(reporter, !parentPP->willPlayBackBitmaps()); // 0
+ }
+ {
+ SkCanvas* canvas = recorder.beginRecording(10, 10);
+ canvas->drawPicture(*childWithBitmap);
+ SkAutoTUnref<SkPicture> parentPWB(recorder.endRecording());
+ REPORTER_ASSERT(reporter, parentPWB->willPlayBackBitmaps()); // 1
+ }
+ {
+ SkCanvas* canvas = recorder.beginRecording(10, 10);
+ canvas->drawBitmap(bm, 0, 0);
+ canvas->drawPicture(*childPlain);
+ SkAutoTUnref<SkPicture> parentWBP(recorder.endRecording());
+ REPORTER_ASSERT(reporter, parentWBP->willPlayBackBitmaps()); // 1
+ }
+ {
+ SkCanvas* canvas = recorder.beginRecording(10, 10);
+ canvas->drawBitmap(bm, 0, 0);
+ canvas->drawPicture(*childWithBitmap);
+ SkAutoTUnref<SkPicture> parentWBWB(recorder.endRecording());
+ REPORTER_ASSERT(reporter, parentWBWB->willPlayBackBitmaps()); // 2
+ }
}
static void test_gen_id(skiatest::Reporter* reporter) {
- SkPicture hasData, empty, midRecord;
+ SkPicture empty;
- uint32_t beforeID = hasData.uniqueID();
- REPORTER_ASSERT(reporter, SK_InvalidGenID != beforeID);
+ // Empty pictures should still have a valid ID
+ REPORTER_ASSERT(reporter, empty.uniqueID() != SK_InvalidGenID);
- // all 3 pictures should have different ids
- REPORTER_ASSERT(reporter, beforeID != empty.uniqueID());
- REPORTER_ASSERT(reporter, beforeID != midRecord.uniqueID());
- REPORTER_ASSERT(reporter, empty.uniqueID() != midRecord.uniqueID());
+ SkPictureRecorder recorder;
- hasData.beginRecording(1, 1);
- // gen ID should be invalid mid-record
- REPORTER_ASSERT(reporter, SK_InvalidGenID == hasData.uniqueID());
- hasData.endRecording();
- // picture should get a new (non-zero) id after recording
- REPORTER_ASSERT(reporter, hasData.uniqueID() != beforeID);
- REPORTER_ASSERT(reporter, hasData.uniqueID() != SK_InvalidGenID);
+ SkCanvas* canvas = recorder.beginRecording(1, 1);
+ canvas->drawARGB(255, 255, 255, 255);
+ SkAutoTUnref<SkPicture> hasData(recorder.endRecording());
+ // picture should have a non-zero id after recording
+ REPORTER_ASSERT(reporter, hasData->uniqueID() != SK_InvalidGenID);
- midRecord.beginRecording(1, 1);
- REPORTER_ASSERT(reporter, SK_InvalidGenID == midRecord.uniqueID());
+ // both pictures should have different ids
+ REPORTER_ASSERT(reporter, hasData->uniqueID() != empty.uniqueID());
// test out copy constructor
- SkPicture copyWithData(hasData);
- REPORTER_ASSERT(reporter, hasData.uniqueID() == copyWithData.uniqueID());
+ SkPicture copyWithData(*hasData);
+ REPORTER_ASSERT(reporter, hasData->uniqueID() == copyWithData.uniqueID());
SkPicture emptyCopy(empty);
REPORTER_ASSERT(reporter, empty.uniqueID() != emptyCopy.uniqueID());
- SkPicture copyMidRecord(midRecord);
- REPORTER_ASSERT(reporter, midRecord.uniqueID() != copyMidRecord.uniqueID());
- REPORTER_ASSERT(reporter, copyMidRecord.uniqueID() != SK_InvalidGenID);
-
// test out swap
- beforeID = copyMidRecord.uniqueID();
- copyWithData.swap(copyMidRecord);
- REPORTER_ASSERT(reporter, copyWithData.uniqueID() == beforeID);
- REPORTER_ASSERT(reporter, copyMidRecord.uniqueID() == hasData.uniqueID());
+ {
+ SkPicture swapWithData;
+ uint32_t beforeID1 = swapWithData.uniqueID();
+ uint32_t beforeID2 = copyWithData.uniqueID();
+ swapWithData.swap(copyWithData);
+ REPORTER_ASSERT(reporter, copyWithData.uniqueID() == beforeID1);
+ REPORTER_ASSERT(reporter, swapWithData.uniqueID() == beforeID2);
+ }
// test out clone
- SkAutoTUnref<SkPicture> cloneWithData(hasData.clone());
- REPORTER_ASSERT(reporter, hasData.uniqueID() == cloneWithData->uniqueID());
+ {
+ SkAutoTUnref<SkPicture> cloneWithData(hasData->clone());
+ REPORTER_ASSERT(reporter, hasData->uniqueID() == cloneWithData->uniqueID());
- SkAutoTUnref<SkPicture> emptyClone(empty.clone());
- REPORTER_ASSERT(reporter, empty.uniqueID() != emptyClone->uniqueID());
-
- SkAutoTUnref<SkPicture> cloneMidRecord(midRecord.clone());
- REPORTER_ASSERT(reporter, midRecord.uniqueID() != cloneMidRecord->uniqueID());
- REPORTER_ASSERT(reporter, cloneMidRecord->uniqueID() != SK_InvalidGenID);
+ SkAutoTUnref<SkPicture> emptyClone(empty.clone());
+ REPORTER_ASSERT(reporter, empty.uniqueID() != emptyClone->uniqueID());
+ }
}
DEF_TEST(Picture, reporter) {
@@ -1235,9 +1229,9 @@
}
DEF_TEST(Picture_EmptyBitmap, r) {
- SkPicture picture;
- test_draw_bitmaps(picture.beginRecording(10, 10));
- picture.endRecording();
+ SkPictureRecorder recorder;
+ test_draw_bitmaps(recorder.beginRecording(10, 10));
+ SkAutoTUnref<SkPicture> picture(recorder.endRecording());
}
DEF_TEST(Canvas_EmptyBitmap, r) {

Powered by Google App Engine
This is Rietveld 408576698