diff options
author | 2014-10-03 13:23:30 -0700 | |
---|---|---|
committer | 2014-10-03 13:23:31 -0700 | |
commit | 37c5a815d8ea33247968212ef4cc83394ceee1bc (patch) | |
tree | 549847a55767b6deea8428b66068e82b43af13c0 /src/core/SkCachedData.h | |
parent | 9e96aa07dbf1210fd35ae8e0c54d4d9822544e89 (diff) |
Speculative revert to diagnose crash in chrome. Revert "Add SkCachedData and use it for SkMipMap"
This reverts commit 92561a0b99ad6c08ab7a11dd1872f028199392e9.
crasher in question:
https://code.google.com/p/chromium/issues/detail?id=420178
Review URL: https://codereview.chromium.org/617613003
Diffstat (limited to 'src/core/SkCachedData.h')
-rw-r--r-- | src/core/SkCachedData.h | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/src/core/SkCachedData.h b/src/core/SkCachedData.h deleted file mode 100644 index 886ca3e7e4..0000000000 --- a/src/core/SkCachedData.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2014 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef SkCachedData_DEFINED -#define SkCachedData_DEFINED - -#include "SkThread.h" - -class SkDiscardableMemory; - -class SkCachedData : ::SkNoncopyable { -public: - SkCachedData(void* mallocData, size_t size); - SkCachedData(size_t size, SkDiscardableMemory*); - virtual ~SkCachedData(); - - size_t size() const { return fSize; } - const void* data() const { return fData; } - - void* writable_data() { return fData; } - - void ref() const { this->internalRef(false); } - void unref() const { this->internalUnref(false); } - - int testing_only_getRefCnt() const { return fRefCnt; } - bool testing_only_isLocked() const { return fIsLocked; } - bool testing_only_isInCache() const { return fInCache; } - -protected: - // called when fData changes. could be NULL. - virtual void onDataChange(void* oldData, void* newData) {} - -private: - SkMutex fMutex; // could use a pool of these... - - enum StorageType { - kDiscardableMemory_StorageType, - kMalloc_StorageType - }; - - union { - SkDiscardableMemory* fDM; - void* fMalloc; - } fStorage; - void* fData; - size_t fSize; - int fRefCnt; // low-bit means we're owned by the cache - StorageType fStorageType; - bool fInCache; - bool fIsLocked; - - void internalRef(bool fromCache) const; - void internalUnref(bool fromCache) const; - - void inMutexRef(bool fromCache); - bool inMutexUnref(bool fromCache); // returns true if we should delete "this" - void inMutexLock(); - void inMutexUnlock(); - - // called whenever our fData might change (lock or unlock) - void setData(void* newData) { - if (newData != fData) { - // notify our subclasses of the change - this->onDataChange(fData, newData); - fData = newData; - } - } - - class AutoMutexWritable; - -public: -#ifdef SK_DEBUG - void validate() const; -#else - void validate() const {} -#endif - - /* - * Attaching a data to to a SkResourceCache (only one at a time) enables the data to be - * unlocked when the cache is the only owner, thus freeing it to be purged (assuming the - * data is backed by a SkDiscardableMemory). - * - * When attached, it also automatically attempts to "lock" the data when the first client - * ref's the data (typically from a find(key, visitor) call). - * - * Thus the data will always be "locked" when a non-cache has a ref on it (whether or not - * the lock succeeded to recover the memory -- check data() to see if it is NULL). - */ - - /* - * Call when adding this instance to a SkResourceCache::Rec subclass - * (typically in the Rec's constructor). - */ - void attachToCacheAndRef() const { this->internalRef(true); } - - /* - * Call when removing this instance from a SkResourceCache::Rec subclass - * (typically in the Rec's destructor). - */ - void detachFromCacheAndUnref() const { this->internalUnref(true); } -}; - -#endif |