aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gyp/images.gyp9
-rw-r--r--gyp/public_headers.gypi3
-rw-r--r--include/images/SkImageRef.h104
-rw-r--r--include/images/SkImageRef_GlobalPool.h62
-rw-r--r--include/images/SkImages.h14
-rw-r--r--src/images/SkImageRef.cpp212
-rw-r--r--src/images/SkImageRefPool.cpp192
-rw-r--r--src/images/SkImageRefPool.h49
-rw-r--r--src/images/SkImageRef_GlobalPool.cpp100
-rw-r--r--src/images/SkImageRef_ashmem.cpp230
-rw-r--r--src/images/SkImageRef_ashmem.h47
-rw-r--r--src/images/SkImages.cpp21
-rw-r--r--src/ports/SkGlobalInitialization_chromium.cpp2
-rw-r--r--src/ports/SkGlobalInitialization_default.cpp2
-rw-r--r--src/ports/SkImageDecoder_empty.cpp6
15 files changed, 0 insertions, 1053 deletions
diff --git a/gyp/images.gyp b/gyp/images.gyp
index eb9db0a7e8..5dfb0140da 100644
--- a/gyp/images.gyp
+++ b/gyp/images.gyp
@@ -34,8 +34,6 @@
'sources': [
'../include/images/SkDecodingImageGenerator.h',
'../include/images/SkForceLinking.h',
- '../include/images/SkImageRef.h',
- '../include/images/SkImageRef_GlobalPool.h',
'../src/images/SkJpegUtility.h',
'../include/images/SkMovie.h',
'../include/images/SkPageFlipper.h',
@@ -73,13 +71,6 @@
'../src/images/SkImageEncoder.cpp',
'../src/images/SkImageEncoder_Factory.cpp',
'../src/images/SkImageEncoder_argb.cpp',
- '../src/images/SkImageRef.cpp',
- '../src/images/SkImageRefPool.cpp',
- '../src/images/SkImageRefPool.h',
- '../src/images/SkImageRef_ashmem.h',
- '../src/images/SkImageRef_ashmem.cpp',
- '../src/images/SkImageRef_GlobalPool.cpp',
- '../src/images/SkImages.cpp',
'../src/images/SkJpegUtility.cpp',
'../src/images/SkMovie.cpp',
'../src/images/SkMovie_gif.cpp',
diff --git a/gyp/public_headers.gypi b/gyp/public_headers.gypi
index ac3f714ed0..f110c8c6e3 100644
--- a/gyp/public_headers.gypi
+++ b/gyp/public_headers.gypi
@@ -62,12 +62,9 @@
'config/sk_stdint.h',
'config/SkUserConfig.h',
'pipe/SkGPipe.h',
- 'images/SkImageRef.h',
'images/SkMovie.h',
'images/SkPageFlipper.h',
'images/SkForceLinking.h',
- 'images/SkImageRef_GlobalPool.h',
- 'images/SkImages.h',
'effects/SkMorphologyImageFilter.h',
'effects/Sk2DPathEffect.h',
'effects/SkXfermodeImageFilter.h',
diff --git a/include/images/SkImageRef.h b/include/images/SkImageRef.h
deleted file mode 100644
index ec14456fac..0000000000
--- a/include/images/SkImageRef.h
+++ /dev/null
@@ -1,104 +0,0 @@
-
-/*
- * Copyright 2008 The Android Open Source Project
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-
-#ifndef SkImageRef_DEFINED
-#define SkImageRef_DEFINED
-
-#include "SkPixelRef.h"
-#include "SkBitmap.h"
-#include "SkImageDecoder.h"
-#include "SkString.h"
-
-class SkImageRefPool;
-class SkStreamRewindable;
-
-// define this to enable dumping whenever we add/remove/purge an imageref
-//#define DUMP_IMAGEREF_LIFECYCLE
-
-class SkImageRef : public SkPixelRef {
-public:
- /** Create a new imageref from a stream. NOTE: the stream is not copied, but
- since it may be accessed from another thread, the caller must ensure
- that this imageref is the only owner of the stream. i.e. - sole
- ownership of the stream object is transferred to this imageref object.
-
- @param stream The stream containing the encoded image data. This may be
- retained (by calling ref()), so the caller should not
- explicitly delete it.
- @param config The preferred config of the decoded bitmap.
- @param sampleSize Requested sampleSize for decoding. Defaults to 1.
- */
- SkImageRef(const SkImageInfo&, SkStreamRewindable*, int sampleSize = 1,
- SkBaseMutex* mutex = NULL);
- virtual ~SkImageRef();
-
- /** this value is passed onto the decoder. Default is true
- */
- void setDitherImage(bool dither) { fDoDither = dither; }
-
- /** Return true if the image can be decoded. If so, and bitmap is non-null,
- call its setConfig() with the corresponding values, but explicitly will
- not set its pixels or colortable. Use SkPixelRef::lockPixels() for that.
-
- If there has been an error decoding the bitmap, this will return false
- and ignore the bitmap parameter.
- */
- bool getInfo(SkBitmap* bm);
-
- /** Return true if the image can be decoded and is opaque. Calling this
- method will decode and set the pixels in the specified bitmap and
- sets the isOpaque flag.
- */
- bool isOpaque(SkBitmap* bm);
-
- SkImageDecoderFactory* getDecoderFactory() const { return fFactory; }
- // returns the factory parameter
- SkImageDecoderFactory* setDecoderFactory(SkImageDecoderFactory*);
-
-protected:
- /** Override if you want to install a custom allocator.
- When this is called we will have already acquired the mutex!
- */
- virtual bool onDecode(SkImageDecoder* codec, SkStreamRewindable*, SkBitmap*,
- SkBitmap::Config, SkImageDecoder::Mode);
-
- /* Overrides from SkPixelRef
- When these are called, we will have already acquired the mutex!
- */
-
- virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE;
- // override this in your subclass to clean up when we're unlocking pixels
- virtual void onUnlockPixels() SK_OVERRIDE {}
-
- SkImageRef(SkReadBuffer&, SkBaseMutex* mutex = NULL);
- virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
-
- SkBitmap fBitmap;
-
-private:
- SkStreamRewindable* setStream(SkStreamRewindable*);
- // called with mutex already held. returns true if the bitmap is in the
- // requested state (or further, i.e. has pixels)
- bool prepareBitmap(SkImageDecoder::Mode);
-
- SkImageDecoderFactory* fFactory; // may be null
- SkStreamRewindable* fStream;
- int fSampleSize;
- bool fDoDither;
- bool fErrorInDecoding;
-
- friend class SkImageRefPool;
-
- SkImageRef* fPrev, *fNext;
- size_t ramUsed() const;
-
- typedef SkPixelRef INHERITED;
-};
-
-#endif
diff --git a/include/images/SkImageRef_GlobalPool.h b/include/images/SkImageRef_GlobalPool.h
deleted file mode 100644
index 7b99a6e53d..0000000000
--- a/include/images/SkImageRef_GlobalPool.h
+++ /dev/null
@@ -1,62 +0,0 @@
-
-/*
- * Copyright 2008 The Android Open Source Project
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-
-#ifndef SkImageRef_GlobalPool_DEFINED
-#define SkImageRef_GlobalPool_DEFINED
-
-#include "SkImageRef.h"
-
-class SkImageRef_GlobalPool : public SkImageRef {
-public:
- // if pool is null, use the global pool
- SkImageRef_GlobalPool(const SkImageInfo&, SkStreamRewindable*,
- int sampleSize = 1);
- virtual ~SkImageRef_GlobalPool();
-
- SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkImageRef_GlobalPool)
-
- // API to control the global pool
-
- /** Return the amount specified as the budget for the cache (in bytes).
- */
- static size_t GetRAMBudget();
-
- /** Set a new budget value for the cache.
- */
- static void SetRAMBudget(size_t);
-
- /** Return how much ram is currently in use by the global cache.
- */
- static size_t GetRAMUsed();
-
- /** Free up (approximately) enough such that the amount used by the cache
- is <= the specified amount. Since some images may be "in use", the
- amount actually freed may not always result in a ram usage value <=
- to the requested amount. In addition, because of the
- chunky nature of the cache, the resulting usage may be < the requested
- amount.
- */
- static void SetRAMUsed(size_t usageInBytes);
-
- static void DumpPool();
-
-protected:
- virtual bool onDecode(SkImageDecoder* codec, SkStreamRewindable* stream,
- SkBitmap* bitmap, SkBitmap::Config config,
- SkImageDecoder::Mode mode);
-
- virtual void onUnlockPixels();
-
- SkImageRef_GlobalPool(SkReadBuffer&);
-
-private:
- typedef SkImageRef INHERITED;
-};
-
-#endif
diff --git a/include/images/SkImages.h b/include/images/SkImages.h
deleted file mode 100644
index abe10da664..0000000000
--- a/include/images/SkImages.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-class SkImages {
-public:
- /**
- * Initializes flattenables in the images project.
- */
- static void InitializeFlattenables();
-};
diff --git a/src/images/SkImageRef.cpp b/src/images/SkImageRef.cpp
deleted file mode 100644
index 2cb8ec82ba..0000000000
--- a/src/images/SkImageRef.cpp
+++ /dev/null
@@ -1,212 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "SkImageRef.h"
-#include "SkBitmap.h"
-#include "SkReadBuffer.h"
-#include "SkWriteBuffer.h"
-#include "SkImageDecoder.h"
-#include "SkStream.h"
-#include "SkTemplates.h"
-#include "SkThread.h"
-
-//#define DUMP_IMAGEREF_LIFECYCLE
-
-///////////////////////////////////////////////////////////////////////////////
-
-SkImageRef::SkImageRef(const SkImageInfo& info, SkStreamRewindable* stream,
- int sampleSize, SkBaseMutex* mutex)
- : INHERITED(info, mutex), fErrorInDecoding(false)
-{
- SkASSERT(stream);
- stream->ref();
- fStream = stream;
- fSampleSize = sampleSize;
- fDoDither = true;
- fPrev = fNext = NULL;
- fFactory = NULL;
-
- // This sets the colortype/alphatype to exactly match our info, so that this
- // can get communicated down to the codec.
- fBitmap.setInfo(info);
-
-#ifdef DUMP_IMAGEREF_LIFECYCLE
- SkDebugf("add ImageRef %p [%d] data=%d\n",
- this, this->info().fColorType, (int)stream->getLength());
-#endif
-}
-
-SkImageRef::~SkImageRef() {
-
-#ifdef DUMP_IMAGEREF_LIFECYCLE
- SkDebugf("delete ImageRef %p [%d] data=%d\n",
- this, this->info().fColorType, (int)fStream->getLength());
-#endif
-
- fStream->unref();
- SkSafeUnref(fFactory);
-}
-
-bool SkImageRef::getInfo(SkBitmap* bitmap) {
- SkAutoMutexAcquire ac(this->mutex());
-
- if (!this->prepareBitmap(SkImageDecoder::kDecodeBounds_Mode)) {
- return false;
- }
-
- SkASSERT(SkBitmap::kNo_Config != fBitmap.config());
- if (bitmap) {
- bitmap->setConfig(fBitmap.config(), fBitmap.width(), fBitmap.height());
- }
- return true;
-}
-
-bool SkImageRef::isOpaque(SkBitmap* bitmap) {
- if (bitmap && bitmap->pixelRef() == this) {
- bitmap->lockPixels();
- // what about colortables??????
- bitmap->setAlphaType(fBitmap.alphaType());
- bitmap->unlockPixels();
- return true;
- }
- return false;
-}
-
-SkImageDecoderFactory* SkImageRef::setDecoderFactory(
- SkImageDecoderFactory* fact) {
- SkRefCnt_SafeAssign(fFactory, fact);
- return fact;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-bool SkImageRef::onDecode(SkImageDecoder* codec, SkStreamRewindable* stream,
- SkBitmap* bitmap, SkBitmap::Config config,
- SkImageDecoder::Mode mode) {
- return codec->decode(stream, bitmap, config, mode);
-}
-
-bool SkImageRef::prepareBitmap(SkImageDecoder::Mode mode) {
-
- if (fErrorInDecoding) {
- return false;
- }
-
- if (NULL != fBitmap.getPixels() ||
- (SkBitmap::kNo_Config != fBitmap.config() &&
- SkImageDecoder::kDecodeBounds_Mode == mode)) {
- return true;
- }
-
- SkASSERT(fBitmap.getPixels() == NULL);
-
- if (!fStream->rewind()) {
- SkDEBUGF(("Failed to rewind SkImageRef stream!"));
- return false;
- }
-
- SkImageDecoder* codec;
- if (fFactory) {
- codec = fFactory->newDecoder(fStream);
- } else {
- codec = SkImageDecoder::Factory(fStream);
- }
-
- if (codec) {
- SkAutoTDelete<SkImageDecoder> ad(codec);
-
- codec->setSampleSize(fSampleSize);
- codec->setDitherImage(fDoDither);
- codec->setRequireUnpremultipliedColors(this->info().fAlphaType == kUnpremul_SkAlphaType);
- if (this->onDecode(codec, fStream, &fBitmap, fBitmap.config(), mode)) {
- if (kOpaque_SkAlphaType == fBitmap.alphaType()) {
- this->changeAlphaType(kOpaque_SkAlphaType);
- }
- SkASSERT(this->info() == fBitmap.info());
- return true;
- }
- }
-
-#ifdef DUMP_IMAGEREF_LIFECYCLE
- if (NULL == codec) {
- SkDebugf("--- ImageRef: <%s> failed to find codec\n", this->getURI());
- } else {
- SkDebugf("--- ImageRef: <%s> failed in codec for %d mode\n",
- this->getURI(), mode);
- }
-#endif
- fErrorInDecoding = true;
- fBitmap.reset();
- return false;
-}
-
-bool SkImageRef::onNewLockPixels(LockRec* rec) {
- if (NULL == fBitmap.getPixels()) {
- (void)this->prepareBitmap(SkImageDecoder::kDecodePixels_Mode);
- }
-
- if (NULL == fBitmap.getPixels()) {
- return false;
- }
- rec->fPixels = fBitmap.getPixels();
- rec->fColorTable = NULL;
- rec->fRowBytes = fBitmap.rowBytes();
- return true;
-}
-
-size_t SkImageRef::ramUsed() const {
- size_t size = 0;
-
- if (fBitmap.getPixels()) {
- size = fBitmap.getSize();
- if (fBitmap.getColorTable()) {
- size += fBitmap.getColorTable()->count() * sizeof(SkPMColor);
- }
- }
- return size;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-SkImageRef::SkImageRef(SkReadBuffer& buffer, SkBaseMutex* mutex)
- : INHERITED(buffer, mutex), fErrorInDecoding(false) {
- fSampleSize = buffer.readInt();
- fDoDither = buffer.readBool();
-
- size_t length = buffer.getArrayCount();
- if (buffer.validateAvailable(length)) {
- fStream = SkNEW_ARGS(SkMemoryStream, (length));
- buffer.readByteArray((void*)fStream->getMemoryBase(), length);
- } else {
- fStream = NULL;
- }
-
- fPrev = fNext = NULL;
- fFactory = NULL;
-
- // This sets the colortype/alphatype to exactly match our info, so that this
- // can get communicated down to the codec.
- fBitmap.setInfo(this->info());
-}
-
-void SkImageRef::flatten(SkWriteBuffer& buffer) const {
- this->INHERITED::flatten(buffer);
-
- buffer.writeInt(fSampleSize);
- buffer.writeBool(fDoDither);
- // FIXME: Consider moving this logic should go into writeStream itself.
- // writeStream currently has no other callers, so this may be fine for
- // now.
- if (!fStream->rewind()) {
- SkDEBUGF(("Failed to rewind SkImageRef stream!"));
- buffer.write32(0);
- } else {
- // FIXME: Handle getLength properly here. Perhaps this class should
- // take an SkStreamAsset.
- buffer.writeStream(fStream, fStream->getLength());
- }
-}
diff --git a/src/images/SkImageRefPool.cpp b/src/images/SkImageRefPool.cpp
deleted file mode 100644
index 0a3d7bf8cc..0000000000
--- a/src/images/SkImageRefPool.cpp
+++ /dev/null
@@ -1,192 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "SkImageRefPool.h"
-#include "SkImageRef.h"
-#include "SkThread.h"
-
-SkImageRefPool::SkImageRefPool() {
- fRAMBudget = 0; // means no explicit limit
- fRAMUsed = 0;
- fCount = 0;
- fHead = fTail = NULL;
-}
-
-SkImageRefPool::~SkImageRefPool() {
- // SkASSERT(NULL == fHead);
-}
-
-void SkImageRefPool::setRAMBudget(size_t size) {
- if (fRAMBudget != size) {
- fRAMBudget = size;
- this->purgeIfNeeded();
- }
-}
-
-void SkImageRefPool::justAddedPixels(SkImageRef* ref) {
-#ifdef DUMP_IMAGEREF_LIFECYCLE
- SkDebugf("=== ImagePool: add pixels %s [%d %d %d] bytes=%d heap=%d\n",
- ref->getURI(),
- ref->fBitmap.width(), ref->fBitmap.height(),
- ref->fBitmap.bytesPerPixel(),
- ref->fBitmap.getSize(), (int)fRAMUsed);
-#endif
- fRAMUsed += ref->ramUsed();
- this->purgeIfNeeded();
-}
-
-void SkImageRefPool::canLosePixels(SkImageRef* ref) {
- // the refs near fHead have recently been released (used)
- // if we purge, we purge from the tail
- this->detach(ref);
- this->addToHead(ref);
- this->purgeIfNeeded();
-}
-
-void SkImageRefPool::purgeIfNeeded() {
- // do nothing if we have a zero-budget (i.e. unlimited)
- if (fRAMBudget != 0) {
- this->setRAMUsed(fRAMBudget);
- }
-}
-
-void SkImageRefPool::setRAMUsed(size_t limit) {
- SkImageRef* ref = fTail;
-
- while (NULL != ref && fRAMUsed > limit) {
- // only purge it if its pixels are unlocked
- if (!ref->isLocked() && ref->fBitmap.getPixels()) {
- size_t size = ref->ramUsed();
- SkASSERT(size <= fRAMUsed);
- fRAMUsed -= size;
-
-#ifdef DUMP_IMAGEREF_LIFECYCLE
- SkDebugf("=== ImagePool: purge %s [%d %d %d] bytes=%d heap=%d\n",
- ref->getURI(),
- ref->fBitmap.width(), ref->fBitmap.height(),
- ref->fBitmap.bytesPerPixel(),
- (int)size, (int)fRAMUsed);
-#endif
-
- // remember the bitmap config (don't call reset),
- // just clear the pixel memory
- ref->fBitmap.setPixels(NULL);
- SkASSERT(NULL == ref->fBitmap.getPixels());
- }
- ref = ref->fPrev;
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-void SkImageRefPool::addToHead(SkImageRef* ref) {
- ref->fNext = fHead;
- ref->fPrev = NULL;
-
- if (fHead) {
- SkASSERT(NULL == fHead->fPrev);
- fHead->fPrev = ref;
- }
- fHead = ref;
-
- if (NULL == fTail) {
- fTail = ref;
- }
- fCount += 1;
- SkASSERT(computeCount() == fCount);
-
- fRAMUsed += ref->ramUsed();
-}
-
-void SkImageRefPool::addToTail(SkImageRef* ref) {
- ref->fNext = NULL;
- ref->fPrev = fTail;
-
- if (fTail) {
- SkASSERT(NULL == fTail->fNext);
- fTail->fNext = ref;
- }
- fTail = ref;
-
- if (NULL == fHead) {
- fHead = ref;
- }
- fCount += 1;
- SkASSERT(computeCount() == fCount);
-
- fRAMUsed += ref->ramUsed();
-}
-
-void SkImageRefPool::detach(SkImageRef* ref) {
- SkASSERT(fCount > 0);
-
- if (fHead == ref) {
- fHead = ref->fNext;
- }
- if (fTail == ref) {
- fTail = ref->fPrev;
- }
- if (ref->fPrev) {
- ref->fPrev->fNext = ref->fNext;
- }
- if (ref->fNext) {
- ref->fNext->fPrev = ref->fPrev;
- }
-
- ref->fNext = ref->fPrev = NULL;
-
- fCount -= 1;
- SkASSERT(computeCount() == fCount);
-
- SkASSERT(fRAMUsed >= ref->ramUsed());
- fRAMUsed -= ref->ramUsed();
-}
-
-int SkImageRefPool::computeCount() const {
- SkImageRef* ref = fHead;
- int count = 0;
-
- while (ref != NULL) {
- count += 1;
- ref = ref->fNext;
- }
-
-#ifdef SK_DEBUG
- ref = fTail;
- int count2 = 0;
-
- while (ref != NULL) {
- count2 += 1;
- ref = ref->fPrev;
- }
- SkASSERT(count2 == count);
-#endif
-
- return count;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-#include "SkStream.h"
-
-void SkImageRefPool::dump() const {
-#if defined(SK_DEBUG) || defined(DUMP_IMAGEREF_LIFECYCLE)
- SkDebugf("ImagePool dump: bugdet: %d used: %d count: %d\n",
- (int)fRAMBudget, (int)fRAMUsed, fCount);
-
- SkImageRef* ref = fHead;
-
- while (ref != NULL) {
- SkDebugf(" [%3d %3d %d] ram=%d data=%d locked=%d %s\n", ref->fBitmap.width(),
- ref->fBitmap.height(), ref->fBitmap.config(),
- ref->ramUsed(), (int)ref->fStream->getLength(),
- ref->isLocked(), ref->getURI());
-
- ref = ref->fNext;
- }
-#endif
-}
diff --git a/src/images/SkImageRefPool.h b/src/images/SkImageRefPool.h
deleted file mode 100644
index 1e74a6d077..0000000000
--- a/src/images/SkImageRefPool.h
+++ /dev/null
@@ -1,49 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#ifndef SkImageRefPool_DEFINED
-#define SkImageRefPool_DEFINED
-
-#include "SkTypes.h"
-
-class SkImageRef;
-class SkImageRef_GlobalPool;
-
-class SkImageRefPool {
-public:
- SkImageRefPool();
- ~SkImageRefPool();
-
- size_t getRAMBudget() const { return fRAMBudget; }
- void setRAMBudget(size_t);
-
- size_t getRAMUsed() const { return fRAMUsed; }
- void setRAMUsed(size_t limit);
-
- void addToHead(SkImageRef*);
- void addToTail(SkImageRef*);
- void detach(SkImageRef*);
-
- void dump() const;
-
-private:
- size_t fRAMBudget;
- size_t fRAMUsed;
-
- int fCount;
- SkImageRef* fHead, *fTail;
-
- int computeCount() const;
-
- friend class SkImageRef_GlobalPool;
-
- void justAddedPixels(SkImageRef*);
- void canLosePixels(SkImageRef*);
- void purgeIfNeeded();
-};
-
-#endif
diff --git a/src/images/SkImageRef_GlobalPool.cpp b/src/images/SkImageRef_GlobalPool.cpp
deleted file mode 100644
index 2659e8b471..0000000000
--- a/src/images/SkImageRef_GlobalPool.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "SkImageRef_GlobalPool.h"
-#include "SkImageRefPool.h"
-#include "SkThread.h"
-
-SK_DECLARE_STATIC_MUTEX(gGlobalPoolMutex);
-
-/*
- * This returns the lazily-allocated global pool. It must be called
- * from inside the guard mutex, so we safely only ever allocate 1.
- */
-static SkImageRefPool* GetGlobalPool() {
- static SkImageRefPool* gPool;
- if (NULL == gPool) {
- gPool = SkNEW(SkImageRefPool);
- // call sk_atexit(...) when we have that, to free the global pool
- }
- return gPool;
-}
-
-SkImageRef_GlobalPool::SkImageRef_GlobalPool(const SkImageInfo& info,
- SkStreamRewindable* stream,
- int sampleSize)
- : SkImageRef(info, stream, sampleSize, &gGlobalPoolMutex) {
- SkASSERT(&gGlobalPoolMutex == this->mutex());
- SkAutoMutexAcquire ac(gGlobalPoolMutex);
- GetGlobalPool()->addToHead(this);
-}
-
-SkImageRef_GlobalPool::~SkImageRef_GlobalPool() {
- SkASSERT(&gGlobalPoolMutex == this->mutex());
- SkAutoMutexAcquire ac(gGlobalPoolMutex);
- GetGlobalPool()->detach(this);
-}
-
-/* By design, onUnlockPixels() already is inside the mutex-lock,
- * and it is the (indirect) caller of onDecode(), therefore we can assume
- * that we also are already inside the mutex. Hence, we can reference
- * the global-pool directly.
- */
-bool SkImageRef_GlobalPool::onDecode(SkImageDecoder* codec, SkStreamRewindable* stream,
- SkBitmap* bitmap, SkBitmap::Config config,
- SkImageDecoder::Mode mode) {
- if (!this->INHERITED::onDecode(codec, stream, bitmap, config, mode)) {
- return false;
- }
- if (mode == SkImageDecoder::kDecodePixels_Mode) {
- // no need to grab the mutex here, it has already been acquired.
- GetGlobalPool()->justAddedPixels(this);
- }
- return true;
-}
-
-void SkImageRef_GlobalPool::onUnlockPixels() {
- this->INHERITED::onUnlockPixels();
-
- // by design, onUnlockPixels() already is inside the mutex-lock
- GetGlobalPool()->canLosePixels(this);
-}
-
-SkImageRef_GlobalPool::SkImageRef_GlobalPool(SkReadBuffer& buffer)
- : INHERITED(buffer, &gGlobalPoolMutex) {
- SkASSERT(&gGlobalPoolMutex == this->mutex());
- SkAutoMutexAcquire ac(gGlobalPoolMutex);
- GetGlobalPool()->addToHead(this);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// global imagerefpool wrappers
-
-size_t SkImageRef_GlobalPool::GetRAMBudget() {
- SkAutoMutexAcquire ac(gGlobalPoolMutex);
- return GetGlobalPool()->getRAMBudget();
-}
-
-void SkImageRef_GlobalPool::SetRAMBudget(size_t size) {
- SkAutoMutexAcquire ac(gGlobalPoolMutex);
- GetGlobalPool()->setRAMBudget(size);
-}
-
-size_t SkImageRef_GlobalPool::GetRAMUsed() {
- SkAutoMutexAcquire ac(gGlobalPoolMutex);
- return GetGlobalPool()->getRAMUsed();
-}
-
-void SkImageRef_GlobalPool::SetRAMUsed(size_t usage) {
- SkAutoMutexAcquire ac(gGlobalPoolMutex);
- GetGlobalPool()->setRAMUsed(usage);
-}
-
-void SkImageRef_GlobalPool::DumpPool() {
- SkAutoMutexAcquire ac(gGlobalPoolMutex);
- GetGlobalPool()->dump();
-}
diff --git a/src/images/SkImageRef_ashmem.cpp b/src/images/SkImageRef_ashmem.cpp
deleted file mode 100644
index 3c7d5c1bbf..0000000000
--- a/src/images/SkImageRef_ashmem.cpp
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "SkImageRef_ashmem.h"
-#include "SkImageDecoder.h"
-#include "SkReadBuffer.h"
-#include "SkWriteBuffer.h"
-#include "SkThread.h"
-
-#include "android/ashmem.h"
-
-#include <sys/mman.h>
-#include <unistd.h>
-
-//#define TRACE_ASH_PURGE // just trace purges
-
-#ifdef DUMP_IMAGEREF_LIFECYCLE
- #define DUMP_ASHMEM_LIFECYCLE
-#else
-// #define DUMP_ASHMEM_LIFECYCLE
-#endif
-
-// ashmem likes lengths on page boundaries
-static size_t roundToPageSize(size_t size) {
- const size_t mask = getpagesize() - 1;
- size_t newsize = (size + mask) & ~mask;
-// SkDebugf("---- oldsize %d newsize %d\n", size, newsize);
- return newsize;
-}
-
-SkImageRef_ashmem::SkImageRef_ashmem(const SkImageInfo& info,
- SkStreamRewindable* stream,
- int sampleSize)
- : SkImageRef(info, stream, sampleSize)
-{
- fRec.fFD = -1;
- fRec.fAddr = NULL;
- fRec.fSize = 0;
- fRec.fPinned = false;
-
- fCT = NULL;
-}
-
-SkImageRef_ashmem::~SkImageRef_ashmem() {
- SkSafeUnref(fCT);
- this->closeFD();
-}
-
-void SkImageRef_ashmem::closeFD() {
- if (-1 != fRec.fFD) {
-#ifdef DUMP_ASHMEM_LIFECYCLE
- SkDebugf("=== ashmem close %d\n", fRec.fFD);
-#endif
- SkASSERT(fRec.fAddr);
- SkASSERT(fRec.fSize);
- munmap(fRec.fAddr, fRec.fSize);
- close(fRec.fFD);
- fRec.fFD = -1;
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-class AshmemAllocator : public SkBitmap::Allocator {
-public:
- AshmemAllocator(SkAshmemRec* rec, const char name[])
- : fRec(rec), fName(name) {}
-
- virtual bool allocPixelRef(SkBitmap* bm, SkColorTable* ct) {
- const size_t size = roundToPageSize(bm->getSize());
- int fd = fRec->fFD;
- void* addr = fRec->fAddr;
-
- SkASSERT(!fRec->fPinned);
-
- if (-1 == fd) {
- SkASSERT(NULL == addr);
- SkASSERT(0 == fRec->fSize);
-
- fd = ashmem_create_region(fName, size);
-#ifdef DUMP_ASHMEM_LIFECYCLE
- SkDebugf("=== ashmem_create_region %s size=%d fd=%d\n", fName, size, fd);
-#endif
- if (-1 == fd) {
- SkDebugf("------- imageref_ashmem create failed <%s> %d\n",
- fName, size);
- return false;
- }
-
- int err = ashmem_set_prot_region(fd, PROT_READ | PROT_WRITE);
- if (err) {
- SkDebugf("------ ashmem_set_prot_region(%d) failed %d\n",
- fd, err);
- close(fd);
- return false;
- }
-
- addr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
- if (-1 == (long)addr) {
- SkDebugf("---------- mmap failed for imageref_ashmem size=%d\n",
- size);
- close(fd);
- return false;
- }
-
- fRec->fFD = fd;
- fRec->fAddr = addr;
- fRec->fSize = size;
- } else {
- SkASSERT(addr);
- SkASSERT(size == fRec->fSize);
- (void)ashmem_pin_region(fd, 0, 0);
- }
-
- bm->setPixels(addr, ct);
- fRec->fPinned = true;
- return true;
- }
-
-private:
- // we just point to our caller's memory, these are not copies
- SkAshmemRec* fRec;
- const char* fName;
-};
-
-bool SkImageRef_ashmem::onDecode(SkImageDecoder* codec, SkStreamRewindable* stream,
- SkBitmap* bitmap, SkBitmap::Config config,
- SkImageDecoder::Mode mode) {
-
- if (SkImageDecoder::kDecodeBounds_Mode == mode) {
- return this->INHERITED::onDecode(codec, stream, bitmap, config, mode);
- }
-
- // Ashmem memory is guaranteed to be initialized to 0.
- codec->setSkipWritingZeroes(true);
-
- AshmemAllocator alloc(&fRec, this->getURI());
-
- codec->setAllocator(&alloc);
- bool success = this->INHERITED::onDecode(codec, stream, bitmap, config,
- mode);
- // remove the allocator, since its on the stack
- codec->setAllocator(NULL);
-
- if (success) {
- // remember the colortable (if any)
- SkRefCnt_SafeAssign(fCT, bitmap->getColorTable());
- return true;
- } else {
- if (fRec.fPinned) {
- ashmem_unpin_region(fRec.fFD, 0, 0);
- fRec.fPinned = false;
- }
- this->closeFD();
- return false;
- }
-}
-
-bool SkImageRef_ashmem::onNewLockPixels(LockRec* rec) {
- SkASSERT(fBitmap.getPixels() == NULL);
- SkASSERT(fBitmap.getColorTable() == NULL);
-
- // fast case: check if we can just pin and get the cached data
- if (-1 != fRec.fFD) {
- SkASSERT(fRec.fAddr);
- SkASSERT(!fRec.fPinned);
- int pin = ashmem_pin_region(fRec.fFD, 0, 0);
-
- if (ASHMEM_NOT_PURGED == pin) { // yea, fast case!
- fBitmap.setPixels(fRec.fAddr, fCT);
- fRec.fPinned = true;
- } else if (ASHMEM_WAS_PURGED == pin) {
- ashmem_unpin_region(fRec.fFD, 0, 0);
- // let go of our colortable if we lost the pixels. Well get it back
- // again when we re-decode
- if (fCT) {
- fCT->unref();
- fCT = NULL;
- }
-#if defined(DUMP_ASHMEM_LIFECYCLE) || defined(TRACE_ASH_PURGE)
- SkDebugf("===== ashmem purged %d\n", fBitmap.getSize());
-#endif
- } else {
- SkDebugf("===== ashmem pin_region(%d) returned %d\n", fRec.fFD, pin);
- return false;
- }
- } else {
- // no FD, will create an ashmem region in allocator
- }
-
- return this->INHERITED::onNewLockPixels(rec);
-}
-
-void SkImageRef_ashmem::onUnlockPixels() {
- this->INHERITED::onUnlockPixels();
-
- if (-1 != fRec.fFD) {
- SkASSERT(fRec.fAddr);
- SkASSERT(fRec.fPinned);
-
- ashmem_unpin_region(fRec.fFD, 0, 0);
- fRec.fPinned = false;
- }
-
- // we clear this with or without an error, since we've either closed or
- // unpinned the region
- fBitmap.setPixels(NULL, NULL);
-}
-
-void SkImageRef_ashmem::flatten(SkWriteBuffer& buffer) const {
- this->INHERITED::flatten(buffer);
- buffer.writeString(getURI());
-}
-
-SkImageRef_ashmem::SkImageRef_ashmem(SkReadBuffer& buffer)
- : INHERITED(buffer) {
- fRec.fFD = -1;
- fRec.fAddr = NULL;
- fRec.fSize = 0;
- fRec.fPinned = false;
- fCT = NULL;
-
- SkString uri;
- buffer.readString(&uri);
- this->setURI(uri);
-}
diff --git a/src/images/SkImageRef_ashmem.h b/src/images/SkImageRef_ashmem.h
deleted file mode 100644
index cf6e903837..0000000000
--- a/src/images/SkImageRef_ashmem.h
+++ /dev/null
@@ -1,47 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#ifndef SkImageRef_ashmem_DEFINED
-#define SkImageRef_ashmem_DEFINED
-
-#include "SkImageRef.h"
-
-struct SkAshmemRec {
- int fFD;
- void* fAddr;
- size_t fSize;
- bool fPinned;
-};
-
-class SkImageRef_ashmem : public SkImageRef {
-public:
- SkImageRef_ashmem(const SkImageInfo&, SkStreamRewindable*, int sampleSize = 1);
- virtual ~SkImageRef_ashmem();
-
- SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkImageRef_ashmem)
-
-protected:
- SkImageRef_ashmem(SkReadBuffer&);
- virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
-
- virtual bool onDecode(SkImageDecoder* codec, SkStreamRewindable* stream,
- SkBitmap* bitmap, SkBitmap::Config config,
- SkImageDecoder::Mode mode);
-
- virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE;
- virtual void onUnlockPixels() SK_OVERRIDE;
-
-private:
- void closeFD();
-
- SkColorTable* fCT;
- SkAshmemRec fRec;
-
- typedef SkImageRef INHERITED;
-};
-
-#endif
diff --git a/src/images/SkImages.cpp b/src/images/SkImages.cpp
deleted file mode 100644
index 5b6bf6b7ce..0000000000
--- a/src/images/SkImages.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "SkFlattenable.h"
-#include "SkImageRef_GlobalPool.h"
-#include "SkImages.h"
-
-#ifdef SK_BUILD_FOR_ANDROID
-#include "SkImageRef_ashmem.h"
-#endif
-
-void SkImages::InitializeFlattenables() {
- SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkImageRef_GlobalPool)
-#ifdef SK_BUILD_FOR_ANDROID
- SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkImageRef_ashmem)
-#endif
-}
diff --git a/src/ports/SkGlobalInitialization_chromium.cpp b/src/ports/SkGlobalInitialization_chromium.cpp
index f42b272f18..9721636bba 100644
--- a/src/ports/SkGlobalInitialization_chromium.cpp
+++ b/src/ports/SkGlobalInitialization_chromium.cpp
@@ -37,7 +37,6 @@
#include "SkEmbossMaskFilter.h"
#include "SkFlattenable.h"
#include "SkGradientShader.h"
-#include "SkImages.h"
#include "SkLayerDrawLooper.h"
#include "SkLayerRasterizer.h"
#include "SkLerpXfermode.h"
@@ -115,7 +114,6 @@ static void InitializeFlattenables() {
SkBlurMaskFilter::InitializeFlattenables();
SkColorFilter::InitializeFlattenables();
SkGradientShader::InitializeFlattenables();
- SkImages::InitializeFlattenables();
SkLightingImageFilter::InitializeFlattenables();
SkTableColorFilter::InitializeFlattenables();
SkXfermode::InitializeFlattenables();
diff --git a/src/ports/SkGlobalInitialization_default.cpp b/src/ports/SkGlobalInitialization_default.cpp
index ce42ca5aad..60c34f26f0 100644
--- a/src/ports/SkGlobalInitialization_default.cpp
+++ b/src/ports/SkGlobalInitialization_default.cpp
@@ -37,7 +37,6 @@
#include "SkEmbossMaskFilter.h"
#include "SkFlattenable.h"
#include "SkGradientShader.h"
-#include "SkImages.h"
#include "SkLayerDrawLooper.h"
#include "SkLayerRasterizer.h"
#include "SkLerpXfermode.h"
@@ -115,7 +114,6 @@ static void InitializeFlattenables() {
SkBlurMaskFilter::InitializeFlattenables();
SkColorFilter::InitializeFlattenables();
SkGradientShader::InitializeFlattenables();
- SkImages::InitializeFlattenables();
SkLightingImageFilter::InitializeFlattenables();
SkTableColorFilter::InitializeFlattenables();
SkXfermode::InitializeFlattenables();
diff --git a/src/ports/SkImageDecoder_empty.cpp b/src/ports/SkImageDecoder_empty.cpp
index ae0fc36325..a3503e42bd 100644
--- a/src/ports/SkImageDecoder_empty.cpp
+++ b/src/ports/SkImageDecoder_empty.cpp
@@ -147,9 +147,3 @@ bool SkImageEncoder::encodeFile(const char file[], const SkBitmap& bm, int quali
return false;
}
/////////////////////////////////////////////////////////////////////////
-
-// Empty implementation for SkImages.
-
-#include "SkImages.h"
-
-void SkImages::InitializeFlattenables() {}