From 7614794c9ad14d76abed6cf00890ad1a09c2cb8b Mon Sep 17 00:00:00 2001 From: Mike Reed Date: Tue, 25 Oct 2016 09:57:13 -0400 Subject: remove discardablepixelref BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3883 Change-Id: Ica284be78563a4ccd6e0cb07404064fb5511ba57 Reviewed-on: https://skia-review.googlesource.com/3883 Commit-Queue: Mike Reed Reviewed-by: Florin Malita --- src/lazy/SkDiscardablePixelRef.cpp | 155 ------------------------------------- src/lazy/SkDiscardablePixelRef.h | 81 ------------------- 2 files changed, 236 deletions(-) delete mode 100644 src/lazy/SkDiscardablePixelRef.cpp delete mode 100644 src/lazy/SkDiscardablePixelRef.h (limited to 'src/lazy') diff --git a/src/lazy/SkDiscardablePixelRef.cpp b/src/lazy/SkDiscardablePixelRef.cpp deleted file mode 100644 index ba4a50ff82..0000000000 --- a/src/lazy/SkDiscardablePixelRef.cpp +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright 2013 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "SkDiscardablePixelRef.h" -#include "SkDiscardableMemory.h" -#include "SkImageGenerator.h" - -SkDiscardablePixelRef::SkDiscardablePixelRef(const SkImageInfo& info, - SkImageGenerator* generator, - size_t rowBytes, - SkDiscardableMemory::Factory* fact) - : INHERITED(info) - , fGenerator(generator) - , fDMFactory(fact) - , fRowBytes(rowBytes) - , fDiscardableMemory(nullptr) - , fDiscardableMemoryIsLocked(false) -{ - SkASSERT(fGenerator != nullptr); - SkASSERT(fRowBytes > 0); - // The SkImageGenerator contract requires fGenerator to always - // decode the same image on each call to getPixels(). - this->setImmutable(); - SkSafeRef(fDMFactory); -} - -SkDiscardablePixelRef::~SkDiscardablePixelRef() { - if (fDiscardableMemoryIsLocked) { - fDiscardableMemory->unlock(); - fDiscardableMemoryIsLocked = false; - } - delete fDiscardableMemory; - SkSafeUnref(fDMFactory); - delete fGenerator; -} - -bool SkDiscardablePixelRef::onNewLockPixels(LockRec* rec) { - if (fDiscardableMemory != nullptr) { - if (fDiscardableMemory->lock()) { - fDiscardableMemoryIsLocked = true; - rec->fPixels = fDiscardableMemory->data(); - rec->fColorTable = fCTable.get(); - rec->fRowBytes = fRowBytes; - return true; - } - delete fDiscardableMemory; - fDiscardableMemory = nullptr; - fDiscardableMemoryIsLocked = false; - } - - const size_t size = this->info().getSafeSize(fRowBytes); - - if (fDMFactory != nullptr) { - fDiscardableMemory = fDMFactory->create(size); - fDiscardableMemoryIsLocked = true; - } else { - fDiscardableMemory = SkDiscardableMemory::Create(size); - fDiscardableMemoryIsLocked = true; - } - if (nullptr == fDiscardableMemory) { - fDiscardableMemoryIsLocked = false; - return false; // Memory allocation failed. - } - - void* pixels = fDiscardableMemory->data(); - const SkImageInfo& info = this->info(); - SkPMColor colors[256]; - int colorCount = 0; - - if (!fGenerator->getPixels(info, pixels, fRowBytes, colors, &colorCount)) { - fDiscardableMemory->unlock(); - fDiscardableMemoryIsLocked = false; - delete fDiscardableMemory; - fDiscardableMemory = nullptr; - return false; - } - - // Note: our ctable is not purgeable, as it is not stored in the discardablememory block. - // This is because SkColorTable is refcntable, and therefore our caller could hold onto it - // beyond the scope of a lock/unlock. If we change the API/lifecycle for SkColorTable, we - // could move it into the block, but then again perhaps it is small enough that this doesn't - // really matter. - if (colorCount > 0) { - fCTable.reset(new SkColorTable(colors, colorCount)); - } else { - fCTable.reset(nullptr); - } - - rec->fPixels = pixels; - rec->fColorTable = fCTable.get(); - rec->fRowBytes = fRowBytes; - return true; -} - -void SkDiscardablePixelRef::onUnlockPixels() { - fDiscardableMemory->unlock(); - fDiscardableMemoryIsLocked = false; -} - -bool SkDEPRECATED_InstallDiscardablePixelRef(SkImageGenerator* generator, const SkIRect* subset, - SkBitmap* dst, SkDiscardableMemory::Factory* factory) { - SkAutoTDelete autoGenerator(generator); - if (nullptr == autoGenerator.get()) { - return false; - } - - SkImageInfo prInfo = autoGenerator->getInfo(); - if (prInfo.isEmpty()) { - return false; - } - - SkIPoint origin = SkIPoint::Make(0, 0); - SkImageInfo bmInfo = prInfo; - if (subset) { - const SkIRect prBounds = SkIRect::MakeWH(prInfo.width(), prInfo.height()); - if (subset->isEmpty() || !prBounds.contains(*subset)) { - return false; - } - bmInfo = prInfo.makeWH(subset->width(), subset->height()); - origin.set(subset->x(), subset->y()); - } - - // must compute our desired rowBytes w.r.t. the pixelRef's dimensions, not ours, which may be - // smaller. - if (!dst->setInfo(bmInfo, prInfo.minRowBytes())) { - return false; - } - - // Since dst->setInfo() may have changed/fixed-up info, we check from the bitmap - SkASSERT(dst->info().colorType() != kUnknown_SkColorType); - - if (dst->empty()) { // Use a normal pixelref. - return dst->tryAllocPixels(); - } - SkAutoTUnref ref( - new SkDiscardablePixelRef(prInfo, autoGenerator.release(), dst->rowBytes(), factory)); - dst->setPixelRef(ref, origin.x(), origin.y()); - return true; -} - -// These are the public API - -bool SkDEPRECATED_InstallDiscardablePixelRef(SkImageGenerator* generator, SkBitmap* dst) { - return SkDEPRECATED_InstallDiscardablePixelRef(generator, nullptr, dst, nullptr); -} - -bool SkDEPRECATED_InstallDiscardablePixelRef(SkData* encoded, SkBitmap* dst) { - SkImageGenerator* generator = SkImageGenerator::NewFromEncoded(encoded); - return generator ? - SkDEPRECATED_InstallDiscardablePixelRef(generator, nullptr, dst, nullptr) : false; -} diff --git a/src/lazy/SkDiscardablePixelRef.h b/src/lazy/SkDiscardablePixelRef.h deleted file mode 100644 index 73a2b08250..0000000000 --- a/src/lazy/SkDiscardablePixelRef.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2013 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef SkDiscardablePixelRef_DEFINED -#define SkDiscardablePixelRef_DEFINED - -#include "SkDiscardableMemory.h" -#include "SkImageGeneratorPriv.h" -#include "SkImageInfo.h" -#include "SkPixelRef.h" - -/** - * A PixelRef backed by SkDiscardableMemory, with the ability to - * re-generate the pixels (via a SkImageGenerator) if the DM is - * purged. - */ -class SkDiscardablePixelRef : public SkPixelRef { -public: - - SkDiscardableMemory* diagnostic_only_getDiscardable() const override { - return fDiscardableMemory; - } - -protected: - ~SkDiscardablePixelRef(); - - bool onNewLockPixels(LockRec*) override; - void onUnlockPixels() override; - bool onLockPixelsAreWritable() const override { return false; } - - SkData* onRefEncodedData() override { - return fGenerator->refEncodedData(); - } - - bool onIsLazyGenerated() const override { return true; } - -private: - SkImageGenerator* const fGenerator; - SkDiscardableMemory::Factory* const fDMFactory; - const size_t fRowBytes; - // These const members should not change over the life of the - // PixelRef, since the SkBitmap doesn't expect them to change. - - SkDiscardableMemory* fDiscardableMemory; - bool fDiscardableMemoryIsLocked; - SkAutoTUnref fCTable; - - /* Takes ownership of SkImageGenerator. */ - SkDiscardablePixelRef(const SkImageInfo&, SkImageGenerator*, - size_t rowBytes, - SkDiscardableMemory::Factory* factory); - - bool onQueryYUV8(SkYUVSizeInfo* sizeInfo, SkYUVColorSpace* colorSpace) const override { - // If the image was already decoded with lockPixels(), favor not - // re-decoding to YUV8 planes. - if (fDiscardableMemory) { - return false; - } - return fGenerator->queryYUV8(sizeInfo, colorSpace); - } - - bool onGetYUV8Planes(const SkYUVSizeInfo& sizeInfo, void* planes[3]) override { - // If the image was already decoded with lockPixels(), favor not - // re-decoding to YUV8 planes. - if (fDiscardableMemory) { - return false; - } - return fGenerator->getYUV8Planes(sizeInfo, planes); - } - - friend bool SkDEPRECATED_InstallDiscardablePixelRef(SkImageGenerator*, const SkIRect*, SkBitmap*, - SkDiscardableMemory::Factory*); - - typedef SkPixelRef INHERITED; -}; - -#endif // SkDiscardablePixelRef_DEFINED -- cgit v1.2.3