Index: tests/PictureTest.cpp |
diff --git a/tests/PictureTest.cpp b/tests/PictureTest.cpp |
index 16d98b324517d670339181410e8892deb53ea898..0ccef3f0a92f2b8403278fc3cdd7326349001847 100644 |
--- a/tests/PictureTest.cpp |
+++ b/tests/PictureTest.cpp |
@@ -23,6 +23,7 @@ |
#include "SkPictureUtils.h" |
#include "SkPixelRef.h" |
#include "SkPixelSerializer.h" |
+#include "SkMiniRecorder.h" |
#include "SkRRect.h" |
#include "SkRandom.h" |
#include "SkRecord.h" |
@@ -363,9 +364,10 @@ static void test_savelayer_extraction(skiatest::Reporter* reporter) { |
// Now test out the SaveLayer extraction |
if (!SkCanvas::Internal_Private_GetIgnoreSaveLayerBounds()) { |
- SkPicture::AccelData::Key key = SkLayerInfo::ComputeKey(); |
+ const SkBigPicture* bp = pict->asSkBigPicture(); |
+ REPORTER_ASSERT(reporter, bp); |
- const SkPicture::AccelData* data = pict->EXPERIMENTAL_getAccelData(key); |
+ const SkBigPicture::AccelData* data = bp->accelData(); |
REPORTER_ASSERT(reporter, data); |
const SkLayerInfo *gpuData = static_cast<const SkLayerInfo*>(data); |
@@ -1107,30 +1109,6 @@ static void test_gen_id(skiatest::Reporter* reporter) { |
REPORTER_ASSERT(reporter, hasData->uniqueID() != empty->uniqueID()); |
} |
-static void test_bytes_used(skiatest::Reporter* reporter) { |
- SkPictureRecorder recorder; |
- |
- recorder.beginRecording(0, 0); |
- SkAutoTUnref<SkPicture> empty(recorder.endRecording()); |
- |
- // Sanity check to make sure we aren't under-measuring. |
- REPORTER_ASSERT(reporter, SkPictureUtils::ApproximateBytesUsed(empty.get()) >= |
- sizeof(SkPicture) + sizeof(SkRecord)); |
- |
- // Protect against any unintentional bloat. |
- size_t approxUsed = SkPictureUtils::ApproximateBytesUsed(empty.get()); |
- REPORTER_ASSERT(reporter, approxUsed <= 432); |
- |
- // Sanity check of nested SkPictures. |
- SkPictureRecorder r2; |
- r2.beginRecording(0, 0); |
- r2.getRecordingCanvas()->drawPicture(empty.get()); |
- SkAutoTUnref<SkPicture> nested(r2.endRecording()); |
- |
- REPORTER_ASSERT(reporter, SkPictureUtils::ApproximateBytesUsed(nested.get()) >= |
- SkPictureUtils::ApproximateBytesUsed(empty.get())); |
-} |
- |
DEF_TEST(Picture, reporter) { |
#ifdef SK_DEBUG |
test_deleting_empty_picture(); |
@@ -1151,7 +1129,6 @@ DEF_TEST(Picture, reporter) { |
test_hierarchical(reporter); |
test_gen_id(reporter); |
test_savelayer_extraction(reporter); |
- test_bytes_used(reporter); |
} |
static void draw_bitmaps(const SkBitmap bitmap, SkCanvas* canvas) { |
@@ -1267,7 +1244,10 @@ DEF_TEST(Picture_SkipBBH, r) { |
SpoonFedBBHFactory factory(&bbh); |
SkPictureRecorder recorder; |
- recorder.beginRecording(bound, &factory); |
+ SkCanvas* c = recorder.beginRecording(bound, &factory); |
+ // Record a few ops so we don't hit a small- or empty- picture optimization. |
+ c->drawRect(bound, SkPaint()); |
+ c->drawRect(bound, SkPaint()); |
SkAutoTUnref<const SkPicture> picture(recorder.endRecording()); |
SkCanvas big(640, 480), small(300, 200); |
@@ -1323,3 +1303,13 @@ DEF_TEST(Picture_getRecordingCanvas, r) { |
REPORTER_ASSERT(r, !rec.getRecordingCanvas()); |
} |
} |
+ |
+DEF_TEST(MiniRecorderLeftHanging, r) { |
+ // Any shader or other ref-counted effect will do just fine here. |
+ SkPaint paint; |
+ paint.setShader(SkShader::CreateColorShader(SK_ColorRED))->unref(); |
+ |
+ SkMiniRecorder rec; |
+ REPORTER_ASSERT(r, rec.drawRect(SkRect::MakeWH(20,30), paint)); |
+ // Don't call rec.detachPicture(). Test succeeds by not asserting or leaking the shader. |
+} |