GpuDrawPathTest.cpp revision 19dd017a6256be636ccb550752bb563c4e7caeb5
119dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org
219dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org/*
319dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org * Copyright 2013 Google Inc.
419dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org *
519dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be
619dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org * found in the LICENSE file.
719dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org */
819dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org
919dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org#if SK_SUPPORT_GPU
1019dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org
1119dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org#include "GrContext.h"
1219dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org#include "GrContextFactory.h"
1319dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org#include "SkBitmap.h"
1419dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org#include "SkCanvas.h"
1519dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org#include "SkColor.h"
1619dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org#include "SkGpuDevice.h"
1719dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org#include "SkPaint.h"
1819dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org#include "SkRect.h"
1919dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org#include "SkRRect.h"
2019dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org#include "Test.h"
2119dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org
2219dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.orgstatic void test_drawPathEmpty(skiatest::Reporter*, SkCanvas* canvas)
2319dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org{
2419dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    // Filling an empty path should not crash.
2519dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    SkPaint paint;
2619dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    canvas->drawRect(SkRect(), paint);
2719dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    canvas->drawPath(SkPath(), paint);
2819dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    canvas->drawOval(SkRect(), paint);
2919dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    canvas->drawRect(SkRect(), paint);
3019dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    canvas->drawRRect(SkRRect(), paint);
3119dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org
3219dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    // Stroking an empty path should not crash.
3319dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    paint.setAntiAlias(true);
3419dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    paint.setStyle(SkPaint::kStroke_Style);
3519dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    paint.setColor(SK_ColorGRAY);
3619dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    paint.setStrokeWidth(SkIntToScalar(20));
3719dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    paint.setStrokeJoin(SkPaint::kRound_Join);
3819dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    canvas->drawRect(SkRect(), paint);
3919dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    canvas->drawPath(SkPath(), paint);
4019dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    canvas->drawOval(SkRect(), paint);
4119dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    canvas->drawRect(SkRect(), paint);
4219dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    canvas->drawRRect(SkRRect(), paint);
4319dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org}
4419dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org
4519dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org
4619dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.orgstatic void TestGpuDrawPath(skiatest::Reporter* reporter, GrContextFactory* factory) {
4719dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) {
4819dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org        GrContextFactory::GLContextType glType = static_cast<GrContextFactory::GLContextType>(type);
4919dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org
5019dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org        GrContext* grContext = factory->get(glType);
5119dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org        if (NULL == grContext) {
5219dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org            continue;
5319dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org        }
5419dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org        static const int sampleCounts[] = { 0, 4, 16 };
5519dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org
5619dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org        for (size_t i = 0; i < SK_ARRAY_COUNT(sampleCounts); ++i) {
5719dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org            const int W = 255;
5819dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org            const int H = 255;
5919dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org
6019dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org            GrTextureDesc desc;
6119dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org            desc.fConfig = kSkia8888_GrPixelConfig;
6219dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org            desc.fFlags = kRenderTarget_GrTextureFlagBit;
6319dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org            desc.fWidth = W;
6419dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org            desc.fHeight = H;
6519dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org            desc.fSampleCnt = sampleCounts[i];
6619dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org            SkAutoTUnref<GrTexture> texture(grContext->createUncachedTexture(desc, NULL, 0));
6719dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org            SkAutoTUnref<SkGpuDevice> device(SkNEW_ARGS(SkGpuDevice, (grContext, texture.get())));
6819dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org            SkCanvas drawingCanvas(device.get());
6919dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org
7019dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org            test_drawPathEmpty(reporter, &drawingCanvas);
7119dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org        }
7219dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org    }
7319dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org}
7419dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org
7519dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org#include "TestClassDef.h"
7619dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.orgDEFINE_GPUTESTCLASS("GpuDrawPath", TestGpuDrawPathClass, TestGpuDrawPath)
7719dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org
7819dd017a6256be636ccb550752bb563c4e7caeb5commit-bot@chromium.org#endif
79