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