SkDiscardablePixelRef.h revision f3aead2829fa515f790631ee65784a7b9b073343
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#ifndef SkDiscardablePixelRef_DEFINED
9#define SkDiscardablePixelRef_DEFINED
10
11#include "SkDiscardableMemory.h"
12#include "SkImageGenerator.h"
13#include "SkImageInfo.h"
14#include "SkPixelRef.h"
15
16class SkDiscardablePixelRef : public SkPixelRef {
17public:
18    SK_DECLARE_UNFLATTENABLE_OBJECT()
19
20protected:
21    ~SkDiscardablePixelRef();
22
23    virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE;
24    virtual void onUnlockPixels() SK_OVERRIDE;
25    virtual bool onLockPixelsAreWritable() const SK_OVERRIDE { return false; }
26
27    virtual SkData* onRefEncodedData() SK_OVERRIDE {
28        return fGenerator->refEncodedData();
29    }
30
31private:
32    SkImageGenerator* const fGenerator;
33    SkDiscardableMemory::Factory* const fDMFactory;
34    const size_t fRowBytes;
35    // These const members should not change over the life of the
36    // PixelRef, since the SkBitmap doesn't expect them to change.
37
38    SkDiscardableMemory* fDiscardableMemory;
39
40    /* Takes ownership of SkImageGenerator. */
41    SkDiscardablePixelRef(SkImageGenerator* generator,
42                          const SkImageInfo& info,
43                          size_t rowBytes,
44                          SkDiscardableMemory::Factory* factory);
45
46    friend bool SkInstallDiscardablePixelRef(SkImageGenerator*,
47                                             SkBitmap*,
48                                             SkDiscardableMemory::Factory*);
49
50    typedef SkPixelRef INHERITED;
51};
52
53#endif  // SkDiscardablePixelRef_DEFINED
54