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