SkISize size (gm->getISize());
setup_bitmap(gRec, size, bitmap);
+ SkAutoTUnref<SkCanvas> canvas;
+
if (gRec.fBackend == kRaster_Backend) {
- SkCanvas* canvas;
+ SkAutoTUnref<SkDevice> device(new SkDevice(*bitmap));
if (deferred) {
- canvas = new SkDeferredCanvas;
- canvas->setDevice(new SkDevice(*bitmap))->unref();
+ canvas.reset(new SkDeferredCanvas(device));
} else {
- canvas = new SkCanvas(*bitmap);
+ canvas.reset(new SkCanvas(device));
}
- SkAutoUnref canvasUnref(canvas);
invokeGM(gm, canvas);
canvas->flush();
}
if (NULL == context) {
return ERROR_NO_GPU_CONTEXT;
}
- SkCanvas* gc;
+ SkAutoTUnref<SkDevice> device(new SkGpuDevice(context, rt));
if (deferred) {
- gc = new SkDeferredCanvas;
+ canvas.reset(new SkDeferredCanvas(device));
} else {
- gc = new SkGpuCanvas(context, rt);
+ canvas.reset(new SkCanvas(device));
}
- SkAutoUnref gcUnref(gc);
- gc->setDevice(new SkGpuDevice(context, rt))->unref();
- invokeGM(gm, gc);
+ invokeGM(gm, canvas);
// the device is as large as the current rendertarget, so we explicitly
// only readback the amount we expect (in size)
// overwrite our previous allocation
bitmap->setConfig(SkBitmap::kARGB_8888_Config, size.fWidth,
size.fHeight);
- gc->readPixels(bitmap, 0, 0);
+ canvas->readPixels(bitmap, 0, 0);
}
#endif
return ERROR_NONE;
static void make_bitmap(SkBitmap* bitmap, GrContext* ctx, SkIRect* center) {
SkDevice* dev;
- SkCanvas canvas;
const int kFixed = 28;
const int kStretchy = 8;
dev = new SkDevice(*bitmap);
}
- canvas.setDevice(dev)->unref();
+ SkCanvas canvas(dev);
+ dev->unref();
canvas.clear(0);
SkRect r = SkRect::MakeWH(SkIntToScalar(kSize), SkIntToScalar(kSize));
void PremulAlphaRoundTripTest(skiatest::Reporter* reporter,
GrContext* context) {
- SkCanvas canvas;
+ SkAutoTUnref<SkDevice> device;
for (int dtype = 0; dtype < 2; ++dtype) {
if (0 == dtype) {
- canvas.setDevice(new SkDevice(SkBitmap::kARGB_8888_Config,
+ device.reset(new SkDevice(SkBitmap::kARGB_8888_Config,
256,
256,
- false))->unref();
+ false));
} else {
#if !SK_SUPPORT_GPU || defined(SK_SCALAR_IS_FIXED)
// GPU device known not to work in the fixed pt build.
continue;
#else
- canvas.setDevice(new SkGpuDevice(context,
+ device.reset(new SkGpuDevice(context,
SkBitmap::kARGB_8888_Config,
256,
- 256))->unref();
+ 256));
#endif
}
+ SkCanvas canvas(device);
SkBitmap readBmp1;
readBmp1.setConfig(SkBitmap::kARGB_8888_Config, 256, 256);
static SkBitmap bmp;
if (bmp.isNull()) {
bmp.setConfig(SkBitmap::kARGB_8888_Config, DEV_W, DEV_H);
- bool alloc = bmp.allocPixels();
+ SkDEBUGCODE(bool alloc =) bmp.allocPixels();
SkASSERT(alloc);
SkAutoLockPixels alp(bmp);
intptr_t pixels = reinterpret_cast<intptr_t>(bmp.getPixels());
}
void ReadPixelsTest(skiatest::Reporter* reporter, GrContext* context) {
- SkCanvas canvas;
-
const SkIRect testRects[] = {
// entire thing
DEV_RECT,
};
for (int dtype = 0; dtype < 2; ++dtype) {
-
+ SkAutoTUnref<SkDevice> device;
if (0 == dtype) {
- canvas.setDevice(new SkDevice(SkBitmap::kARGB_8888_Config,
+ device.reset(new SkDevice(SkBitmap::kARGB_8888_Config,
DEV_W,
DEV_H,
- false))->unref();
+ false));
} else {
// GPU device known not to work in the fixed pt build.
#if defined(SK_SCALAR_IS_FIXED) || !SK_SUPPORT_GPU
continue;
#else
- canvas.setDevice(new SkGpuDevice(context,
+ device.reset(new SkGpuDevice(context,
SkBitmap::kARGB_8888_Config,
DEV_W,
- DEV_H))->unref();
+ DEV_H));
#endif
}
+ SkCanvas canvas(device);
fillCanvas(&canvas);
static const SkCanvas::Config8888 gReadConfigs[] = {
REPORTER_ASSERT(reporter, match);
// Now try writing on the single channel texture
- SkCanvas canvas;
-
- canvas.setDevice(new SkGpuDevice(context, texture->asRenderTarget()))->unref();
+ SkAutoTUnref<SkDevice> device(new SkGpuDevice(context, texture->asRenderTarget()));
+ SkCanvas canvas(device);
SkPaint paint;
#endif
};
-bool setupCanvas(SkCanvas* canvas, const CanvasConfig& c, GrContext* grCtx) {
+SkDevice* createDevice(const CanvasConfig& c, GrContext* grCtx) {
switch (c.fDevType) {
case kRaster_DevType: {
SkBitmap bmp;
size_t rowBytes = c.fTightRowBytes ? 0 : 4 * DEV_W + 100;
bmp.setConfig(SkBitmap::kARGB_8888_Config, DEV_W, DEV_H, rowBytes);
if (!bmp.allocPixels()) {
- return false;
+ sk_throw();
+ return NULL;
}
// if rowBytes isn't tight then set the padding to a known value
if (rowBytes) {
SkAutoLockPixels alp(bmp);
memset(bmp.getPixels(), DEV_PAD, bmp.getSafeSize());
}
- canvas->setDevice(new SkDevice(bmp))->unref();
- break;
+ return new SkDevice(bmp);
}
#if SK_SUPPORT_GPU
case kGpu_DevType:
- canvas->setDevice(new SkGpuDevice(grCtx,
- SkBitmap::kARGB_8888_Config,
- DEV_W, DEV_H))->unref();
- break;
+ return new SkGpuDevice(grCtx, SkBitmap::kARGB_8888_Config, DEV_W, DEV_H);
#endif
}
- return true;
+ return NULL;
}
bool setupBitmap(SkBitmap* bitmap,
};
for (size_t i = 0; i < SK_ARRAY_COUNT(gCanvasConfigs); ++i) {
- REPORTER_ASSERT(reporter, setupCanvas(&canvas, gCanvasConfigs[i], context));
+ SkAutoTUnref<SkDevice> device(createDevice(gCanvasConfigs[i], context));
+ SkCanvas canvas(device);
static const SkCanvas::Config8888 gSrcConfigs[] = {
SkCanvas::kNative_Premul_Config8888,