19f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com/*
29f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com * Copyright 2012 Google Inc.
39f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com *
49f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com * Use of this source code is governed by a BSD-style license that can be
59f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com * found in the LICENSE file.
69f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com */
79f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com
89f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com#include "gm.h"
9bcbc1788b478b1e54079318ad073e8490aa66faetfarina
10bcbc1788b478b1e54079318ad073e8490aa66faetfarina#include "Resources.h"
119f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com#include "SkCanvas.h"
129f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com#include "SkData.h"
132c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com#include "SkDecodingImageGenerator.h"
142c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com#include "SkDiscardableMemoryPool.h"
152c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com#include "SkDiscardablePixelRef.h"
16f8d7d2731318cdf510ab68e6b3f5ec68ab22c8e2scroggo@google.com#include "SkImageDecoder.h"
172d970b5128f7270cd01a93e4ce68d0c3ea67ac71commit-bot@chromium.org#include "SkImageGeneratorPriv.h"
18ccd7afb6fb2df9774e57fb4d7f62f9504cabf03escroggo@google.com#include "SkOSFile.h"
199f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com#include "SkStream.h"
209f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com
219f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.comnamespace skiagm {
229f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com
239f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com/**
249f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com *  Draw a PNG created by SkBitmapFactory.
259f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com */
269f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.comclass FactoryGM : public GM {
279f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.compublic:
289f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com    FactoryGM() {}
299f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com
309f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.comprotected:
319f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com    virtual void onOnceBeforeDraw() SK_OVERRIDE {
32bcbc1788b478b1e54079318ad073e8490aa66faetfarina        SkString resourcePath = GetResourcePath();
339f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com        // Copyright-free file from http://openclipart.org/detail/29213/paper-plane-by-ddoo
34bcbc1788b478b1e54079318ad073e8490aa66faetfarina        SkString filename = SkOSPath::SkPathJoin(resourcePath.c_str(), "plane.png");
352c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com        SkAutoDataUnref data(SkData::NewFromFileName(filename.c_str()));
362c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com        if (NULL != data.get()) {
37f8d7d2731318cdf510ab68e6b3f5ec68ab22c8e2scroggo@google.com            // Create a cache which will boot the pixels out anytime the
38f8d7d2731318cdf510ab68e6b3f5ec68ab22c8e2scroggo@google.com            // bitmap is unlocked.
392c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com            SkAutoTUnref<SkDiscardableMemoryPool> pool(
40cf2f00872c559c892bb4b466bf678c7667490ccecommit-bot@chromium.org                SkDiscardableMemoryPool::Create(1));
413d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com            SkAssertResult(SkInstallDiscardablePixelRef(
423d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com                SkDecodingImageGenerator::Create(
433d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com                    data, SkDecodingImageGenerator::Options()),
443d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com                &fBitmap, pool));
459f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com        }
469f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com    }
479f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com
489f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com    virtual SkString onShortName() {
499f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com        return SkString("factory");
509f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com    }
519f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com
529f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com    virtual SkISize onISize() {
53f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina        return SkISize::Make(640, 480);
549f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com    }
559f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com
569f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com    virtual void onDraw(SkCanvas* canvas) {
579f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com        canvas->drawBitmap(fBitmap, 0, 0);
589f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com    }
599f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com
60805df1aa1ddba876e6d18f9d2207d04c09415f9dcommit-bot@chromium.org    // Skip cross process pipe due to https://code.google.com/p/skia/issues/detail?id=1520
61805df1aa1ddba876e6d18f9d2207d04c09415f9dcommit-bot@chromium.org    virtual uint32_t onGetFlags() const {
62805df1aa1ddba876e6d18f9d2207d04c09415f9dcommit-bot@chromium.org        return INHERITED::onGetFlags() | kSkipPipeCrossProcess_Flag;
63805df1aa1ddba876e6d18f9d2207d04c09415f9dcommit-bot@chromium.org    }
64805df1aa1ddba876e6d18f9d2207d04c09415f9dcommit-bot@chromium.org
659f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.comprivate:
669f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com    SkBitmap fBitmap;
679f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com
689f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com    typedef GM INHERITED;
699f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com};
709f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com
719f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com//////////////////////////////////////////////////////////////////////////////
729f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com
739f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.comstatic GM* MyFactory(void*) { return new FactoryGM; }
749f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.comstatic GMRegistry reg(MyFactory);
759f686f3639ff87e6d28b4ffcc42feebeca90f8d8scroggo@google.com
763d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com}  // namespace skiagm
77