Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / tests / RecordTest.cpp
index 96f3ad4..2fcc1e9 100644 (file)
@@ -7,7 +7,11 @@
 
 #include "Test.h"
 
+#include "SkBitmap.h"
+#include "SkImageInfo.h"
+#include "SkShader.h"
 #include "SkRecord.h"
+#include "SkRecordAnalysis.h"
 #include "SkRecords.h"
 
 // Sums the area of any DrawRect command it sees.
@@ -48,6 +52,8 @@ struct Stretch {
     }
 };
 
+#define APPEND(record, type, ...) SkNEW_PLACEMENT_ARGS(record.append<type>(), type, (__VA_ARGS__))
+
 // Basic tests for the low-level SkRecord code.
 DEF_TEST(Record, r) {
     SkRecord record;
@@ -55,7 +61,7 @@ DEF_TEST(Record, r) {
     // Add a simple DrawRect command.
     SkRect rect = SkRect::MakeWH(10, 10);
     SkPaint paint;
-    SkNEW_PLACEMENT_ARGS(record.append<SkRecords::DrawRect>(), SkRecords::DrawRect, (paint, rect));
+    APPEND(record, SkRecords::DrawRect, paint, rect);
 
     // Its area should be 100.
     AreaSummer summer;
@@ -70,3 +76,38 @@ DEF_TEST(Record, r) {
     summer.apply(record);
     REPORTER_ASSERT(r, summer.area() == 500);
 }
+
+DEF_TEST(RecordAnalysis, r) {
+    SkRecord record;
+
+    SkRect rect = SkRect::MakeWH(10, 10);
+    SkPaint paint;
+    APPEND(record, SkRecords::DrawRect, paint, rect);
+    REPORTER_ASSERT(r, !SkRecordWillPlaybackBitmaps(record));
+
+    SkBitmap bitmap;
+    APPEND(record, SkRecords::DrawBitmap, &paint, bitmap, 0.0f, 0.0f);
+    REPORTER_ASSERT(r, SkRecordWillPlaybackBitmaps(record));
+
+    SkNEW_PLACEMENT_ARGS(record.replace<SkRecords::DrawRect>(1),
+                         SkRecords::DrawRect, (paint, rect));
+    REPORTER_ASSERT(r, !SkRecordWillPlaybackBitmaps(record));
+
+    SkPaint paint2;
+    // CreateBitmapShader is too smart for us; an empty (or 1x1) bitmap shader
+    // gets optimized into a non-bitmap form, so we create a 2x2 bitmap here.
+    SkBitmap bitmap2;
+    bitmap2.allocPixels(SkImageInfo::MakeN32Premul(2, 2));
+    bitmap2.eraseColor(SK_ColorBLUE);
+    *(bitmap2.getAddr32(0, 0)) = SK_ColorGREEN;
+    SkShader* shader = SkShader::CreateBitmapShader(bitmap2, SkShader::kClamp_TileMode,
+                                                    SkShader::kClamp_TileMode);
+    paint2.setShader(shader)->unref();
+    REPORTER_ASSERT(r, shader->asABitmap(NULL, NULL, NULL) == SkShader::kDefault_BitmapType);
+
+    APPEND(record, SkRecords::DrawRect, paint2, rect);
+    REPORTER_ASSERT(r, SkRecordWillPlaybackBitmaps(record));
+}
+
+#undef APPEND
+