180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/*
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2012 Google Inc.
480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *
580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be
680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file.
780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SamplePipeControllers.h"
1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkBitmap.h"
1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkCanvas.h"
1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkGPipe.h"
1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkPaint.h"
1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkShader.h"
1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "Test.h"
1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// Ensures that the pipe gracefully handles drawing an invalid bitmap.
1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void testDrawingBadBitmap(SkCanvas* pipeCanvas) {
1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkBitmap badBitmap;
2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    badBitmap.setConfig(SkBitmap::kNo_Config, 5, 5);
2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    pipeCanvas->drawBitmap(badBitmap, 0, 0);
2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// Ensure that pipe gracefully handles attempting to draw after endRecording is called on the
2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// SkGPipeWriter.
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void testDrawingAfterEndRecording(SkCanvas* canvas) {
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    PipeController pc(canvas);
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkGPipeWriter writer;
2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkCanvas* pipeCanvas = writer.startRecording(&pc, SkGPipeWriter::kCrossProcess_Flag);
3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    writer.endRecording();
3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkBitmap bm;
3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bm.setConfig(SkBitmap::kARGB_8888_Config, 2, 2);
3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bm.allocPixels();
35363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    bm.eraseColor(SK_ColorTRANSPARENT);
3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkShader* shader = SkShader::CreateBitmapShader(bm, SkShader::kClamp_TileMode,
3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                                                    SkShader::kClamp_TileMode);
3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkPaint paint;
4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    paint.setShader(shader)->unref();
4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    pipeCanvas->drawPaint(paint);
4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    pipeCanvas->drawBitmap(bm, 0, 0);
4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void test_pipeTests(skiatest::Reporter*) {
4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkBitmap bitmap;
4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bitmap.setConfig(SkBitmap::kARGB_8888_Config, 64, 64);
4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkCanvas canvas(bitmap);
5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    PipeController pipeController(&canvas);
5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkGPipeWriter writer;
5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkCanvas* pipeCanvas = writer.startRecording(&pipeController);
5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    testDrawingBadBitmap(pipeCanvas);
5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    writer.endRecording();
5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    testDrawingAfterEndRecording(&canvas);
5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "TestClassDef.h"
6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruDEFINE_TESTCLASS("PipeTest", PipeTestClass, test_pipeTests)
62