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    virtual void* onLockPixels(SkColorTable**) SK_OVERRIDE;
23    virtual void onUnlockPixels() SK_OVERRIDE;
24    virtual bool onLockPixelsAreWritable() const SK_OVERRIDE { return false; }
25
26    virtual SkData* onRefEncodedData() SK_OVERRIDE {
27        return fGenerator->refEncodedData();
28    }
29
30private:
31    SkImageGenerator* const fGenerator;
32    SkDiscardableMemory::Factory* const fDMFactory;
33    const size_t fRowBytes;
34    // These const members should not change over the life of the
35    // PixelRef, since the SkBitmap doesn't expect them to change.
36
37    SkDiscardableMemory* fDiscardableMemory;
38
39    /* Takes ownership of SkImageGenerator. */
40    SkDiscardablePixelRef(const SkImageInfo&, SkImageGenerator*,
41                          size_t rowBytes,
42                          SkDiscardableMemory::Factory* factory);
43    friend bool SkInstallDiscardablePixelRef(SkImageGenerator*,
44                                             SkBitmap*,
45                                             SkDiscardableMemory::Factory*);
46    typedef SkPixelRef INHERITED;
47};
48#endif  // SkDiscardablePixelRef_DEFINED
49