blob: 579f7365c265fca62c5bd113320b172ac2d5730f [file] [log] [blame]
scroggo@google.com10dccde2012-08-08 20:43:22 +00001/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
tfarina@chromium.orge4fafb12013-12-12 21:11:12 +00008#include "Test.h"
scroggo@google.com10dccde2012-08-08 20:43:22 +00009#include "SamplePipeControllers.h"
10#include "SkBitmap.h"
11#include "SkCanvas.h"
12#include "SkGPipe.h"
scroggo@google.comd5d158b2012-08-14 20:38:28 +000013#include "SkPaint.h"
14#include "SkShader.h"
scroggo@google.com10dccde2012-08-08 20:43:22 +000015
16// Ensures that the pipe gracefully handles drawing an invalid bitmap.
scroggo@google.comd5d158b2012-08-14 20:38:28 +000017static void testDrawingBadBitmap(SkCanvas* pipeCanvas) {
scroggo@google.com10dccde2012-08-08 20:43:22 +000018 SkBitmap badBitmap;
19 badBitmap.setConfig(SkBitmap::kNo_Config, 5, 5);
20 pipeCanvas->drawBitmap(badBitmap, 0, 0);
21}
22
scroggo@google.comd5d158b2012-08-14 20:38:28 +000023// Ensure that pipe gracefully handles attempting to draw after endRecording is called on the
24// SkGPipeWriter.
25static void testDrawingAfterEndRecording(SkCanvas* canvas) {
26 PipeController pc(canvas);
27 SkGPipeWriter writer;
28 SkCanvas* pipeCanvas = writer.startRecording(&pc, SkGPipeWriter::kCrossProcess_Flag);
29 writer.endRecording();
30
31 SkBitmap bm;
32 bm.setConfig(SkBitmap::kARGB_8888_Config, 2, 2);
33 bm.allocPixels();
junov@google.comdbfac8a2012-12-06 21:47:40 +000034 bm.eraseColor(SK_ColorTRANSPARENT);
scroggo@google.comd5d158b2012-08-14 20:38:28 +000035
36 SkShader* shader = SkShader::CreateBitmapShader(bm, SkShader::kClamp_TileMode,
37 SkShader::kClamp_TileMode);
38 SkPaint paint;
39 paint.setShader(shader)->unref();
40 pipeCanvas->drawPaint(paint);
41
42 pipeCanvas->drawBitmap(bm, 0, 0);
43}
44
tfarina@chromium.orge4fafb12013-12-12 21:11:12 +000045DEF_TEST(Pipe, reporter) {
scroggo@google.com10dccde2012-08-08 20:43:22 +000046 SkBitmap bitmap;
47 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 64, 64);
48 SkCanvas canvas(bitmap);
49
50 PipeController pipeController(&canvas);
51 SkGPipeWriter writer;
52 SkCanvas* pipeCanvas = writer.startRecording(&pipeController);
scroggo@google.comd5d158b2012-08-14 20:38:28 +000053 testDrawingBadBitmap(pipeCanvas);
scroggo@google.com10dccde2012-08-08 20:43:22 +000054 writer.endRecording();
scroggo@google.comd5d158b2012-08-14 20:38:28 +000055
56 testDrawingAfterEndRecording(&canvas);
scroggo@google.com10dccde2012-08-08 20:43:22 +000057}