16ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com/*
26ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com * Copyright 2013 Google Inc.
36ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com *
46ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com * Use of this source code is governed by a BSD-style license that can be
56ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com * found in the LICENSE file.
66ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com */
76ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com
86ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com#ifndef SkDiscardablePixelRef_DEFINED
96ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com#define SkDiscardablePixelRef_DEFINED
106ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com
119ab9c97883d0a0b7084cbb91eaf1ba6fb4c46affhalcanary@google.com#include "SkDiscardableMemory.h"
126ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com#include "SkImageGenerator.h"
136ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com#include "SkImageInfo.h"
146168ea7d412448c88169a565f40bf86379d4bf9ahalcanary@google.com#include "SkPixelRef.h"
159ab9c97883d0a0b7084cbb91eaf1ba6fb4c46affhalcanary@google.com
166ac702e890656e801469060c1b9474912a5b704ahalcanary@google.comclass SkDiscardablePixelRef : public SkPixelRef {
176ac702e890656e801469060c1b9474912a5b704ahalcanary@google.compublic:
186ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com    SK_DECLARE_UNFLATTENABLE_OBJECT()
196ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com
206ac702e890656e801469060c1b9474912a5b704ahalcanary@google.comprotected:
216ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com    ~SkDiscardablePixelRef();
22e406b3ba8294010dfdb8d71eb773f697ffc3cc4arobertphillips@google.com    virtual void* onLockPixels(SkColorTable**) SK_OVERRIDE;
236ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com    virtual void onUnlockPixels() SK_OVERRIDE;
246ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com    virtual bool onLockPixelsAreWritable() const SK_OVERRIDE { return false; }
256ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com
266ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com    virtual SkData* onRefEncodedData() SK_OVERRIDE {
276ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com        return fGenerator->refEncodedData();
286ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com    }
296ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com
306ac702e890656e801469060c1b9474912a5b704ahalcanary@google.comprivate:
316ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com    SkImageGenerator* const fGenerator;
329ab9c97883d0a0b7084cbb91eaf1ba6fb4c46affhalcanary@google.com    SkDiscardableMemory::Factory* const fDMFactory;
336ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com    const size_t fRowBytes;
346ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com    // These const members should not change over the life of the
356ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com    // PixelRef, since the SkBitmap doesn't expect them to change.
366ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com
376ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com    SkDiscardableMemory* fDiscardableMemory;
386ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com
396ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com    /* Takes ownership of SkImageGenerator. */
40c2062d0e1bd6b258229669463ab5ce7020780c8areed@google.com    SkDiscardablePixelRef(const SkImageInfo&, SkImageGenerator*,
419ab9c97883d0a0b7084cbb91eaf1ba6fb4c46affhalcanary@google.com                          size_t rowBytes,
429ab9c97883d0a0b7084cbb91eaf1ba6fb4c46affhalcanary@google.com                          SkDiscardableMemory::Factory* factory);
436168ea7d412448c88169a565f40bf86379d4bf9ahalcanary@google.com    friend bool SkInstallDiscardablePixelRef(SkImageGenerator*,
446168ea7d412448c88169a565f40bf86379d4bf9ahalcanary@google.com                                             SkBitmap*,
456168ea7d412448c88169a565f40bf86379d4bf9ahalcanary@google.com                                             SkDiscardableMemory::Factory*);
466168ea7d412448c88169a565f40bf86379d4bf9ahalcanary@google.com    typedef SkPixelRef INHERITED;
476ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com};
486ac702e890656e801469060c1b9474912a5b704ahalcanary@google.com#endif  // SkDiscardablePixelRef_DEFINED
49