Home | History | Annotate | Download | only in tools
      1 /*
      2  * Copyright 2013 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "LazyDecodeBitmap.h"
      9 
     10 #include "SkData.h"
     11 #include "SkDecodingImageGenerator.h"
     12 #include "SkDiscardableMemoryPool.h"
     13 #include "SkImageGeneratorPriv.h"
     14 #include "SkForceLinking.h"
     15 
     16 #include "SkCommandLineFlags.h"
     17 
     18 __SK_FORCE_IMAGE_DECODER_LINKING;
     19 
     20 DEFINE_bool(useVolatileCache, false, "Use a volatile cache for deferred image decoding pixels. "
     21             "Only meaningful if --deferImageDecoding is set to true and the platform has an "
     22             "implementation.");
     23 
     24 //  Fits SkPicture::InstallPixelRefProc call signature.
     25 //  Used in SkPicturePlayback::CreateFromStream
     26 bool sk_tools::LazyDecodeBitmap(const void* src,
     27                                 size_t length,
     28                                 SkBitmap* dst) {
     29     SkAutoDataUnref data(SkData::NewWithCopy(src, length));
     30     if (NULL == data.get()) {
     31         return false;
     32     }
     33 
     34     SkAutoTDelete<SkImageGenerator> gen(
     35         SkDecodingImageGenerator::Create(
     36             data, SkDecodingImageGenerator::Options()));
     37     SkImageInfo info;
     38     if ((NULL == gen.get()) || !gen->getInfo(&info)) {
     39         return false;
     40     }
     41     SkDiscardableMemory::Factory* pool = NULL;
     42     if ((!FLAGS_useVolatileCache) || (info.fWidth * info.fHeight < 32 * 1024)) {
     43         // how to do switching with SkDiscardableMemory.
     44         pool = SkGetGlobalDiscardableMemoryPool();
     45         // Only meaningful if platform has a default discardable
     46         // memory implementation that differs from the global DM pool.
     47     }
     48     return SkInstallDiscardablePixelRef(gen.detach(), dst, pool);
     49 }
     50