/* * Copyright 2012 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "Test.h" #include "SkBitmap.h" #include "SkDeferredCanvas.h" static const int gWidth = 2; static const int gHeight = 2; static void create(SkBitmap* bm, SkBitmap::Config config, SkColor color) { bm->setConfig(config, gWidth, gHeight); bm->allocPixels(); bm->eraseColor(color); } static void TestDeferredCanvasBitmapAccess(skiatest::Reporter* reporter) { SkBitmap store; create(&store, SkBitmap::kARGB_8888_Config, 0xFFFFFFFF); SkDevice device(store); SkDeferredCanvas canvas(&device); canvas.clear(0x00000000); SkAutoLockPixels alp(store); REPORTER_ASSERT(reporter, store.getColor(0,0) == 0xFFFFFFFF); //verify that clear was deferred SkBitmap accessed = canvas.getDevice()->accessBitmap(false); REPORTER_ASSERT(reporter, store.getColor(0,0) == 0x00000000); //verify that clear was executed REPORTER_ASSERT(reporter, accessed.pixelRef() == store.pixelRef()); } static void TestDeferredCanvasFlush(skiatest::Reporter* reporter) { SkBitmap store; create(&store, SkBitmap::kARGB_8888_Config, 0xFFFFFFFF); SkDevice device(store); SkDeferredCanvas canvas(&device); canvas.clear(0x00000000); SkAutoLockPixels alp(store); REPORTER_ASSERT(reporter, store.getColor(0,0) == 0xFFFFFFFF); //verify that clear was deferred canvas.flush(); REPORTER_ASSERT(reporter, store.getColor(0,0) == 0x00000000); //verify that clear was executed } static void TestDeferredCanvas(skiatest::Reporter* reporter) { TestDeferredCanvasBitmapAccess(reporter); TestDeferredCanvasFlush(reporter); } #include "TestClassDef.h" DEFINE_TESTCLASS("DeferredCanvas", TestDeferredCanvasClass, TestDeferredCanvas)