156799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org/* 256799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org * Copyright 2013 Google Inc. 356799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org * 456799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 556799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org * found in the LICENSE file. 656799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org */ 756799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org 856799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org#include "LazyDecodeBitmap.h" 956799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org 1056799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org#include "SkData.h" 112c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com#include "SkDecodingImageGenerator.h" 122c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com#include "SkDiscardableMemoryPool.h" 132d970b5128f7270cd01a93e4ce68d0c3ea67ac71commit-bot@chromium.org#include "SkImageGeneratorPriv.h" 1456799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org#include "SkForceLinking.h" 152c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com 1656799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org#include "SkCommandLineFlags.h" 1756799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org 1856799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org__SK_FORCE_IMAGE_DECODER_LINKING; 1956799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org 2056799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.orgDEFINE_bool(useVolatileCache, false, "Use a volatile cache for deferred image decoding pixels. " 2156799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org "Only meaningful if --deferImageDecoding is set to true and the platform has an " 2256799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org "implementation."); 2356799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org 242c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com// Fits SkPicture::InstallPixelRefProc call signature. 252c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com// Used in SkPicturePlayback::CreateFromStream 262c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.combool sk_tools::LazyDecodeBitmap(const void* src, 272c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com size_t length, 282c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com SkBitmap* dst) { 292c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com SkAutoDataUnref data(SkData::NewWithCopy(src, length)); 302c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com if (NULL == data.get()) { 312c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com return false; 3256799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org } 3356799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org 343d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com SkAutoTDelete<SkImageGenerator> gen( 353d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com SkDecodingImageGenerator::Create( 363d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com data, SkDecodingImageGenerator::Options())); 372c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com SkImageInfo info; 383d50ea1b87132833d7eab38964f40315ba553205halcanary@google.com if ((NULL == gen.get()) || !gen->getInfo(&info)) { 392c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com return false; 4056799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org } 412c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com SkDiscardableMemory::Factory* pool = NULL; 42bc55eec80ef376208b3c1bfc65d8dc8b672d59f0halcanary@google.com if ((!FLAGS_useVolatileCache) || (info.fWidth * info.fHeight < 32 * 1024)) { 432c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com // how to do switching with SkDiscardableMemory. 442c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com pool = SkGetGlobalDiscardableMemoryPool(); 45bc55eec80ef376208b3c1bfc65d8dc8b672d59f0halcanary@google.com // Only meaningful if platform has a default discardable 46bc55eec80ef376208b3c1bfc65d8dc8b672d59f0halcanary@google.com // memory implementation that differs from the global DM pool. 4756799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org } 48edd370f949a457f5d8f7a62efdaf685d4caf46fehalcanary@google.com return SkInstallDiscardablePixelRef(gen.detach(), dst, pool); 4956799e2ee6b74dacb74babeb5217b65367915ed8commit-bot@chromium.org} 50