c8af6a045081ddfc38190d3bd03f27eb84842e20
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / platform / graphics / RecordingImageBufferSurface.h
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef RecordingImageBufferSurface_h
6 #define RecordingImageBufferSurface_h
7
8 #include "platform/graphics/ImageBufferSurface.h"
9 #include "public/platform/WebThread.h"
10 #include "wtf/OwnPtr.h"
11 #include "wtf/RefPtr.h"
12
13 class SkPicture;
14 class SkPictureRecorder;
15 class RecordingImageBufferSurfaceTest;
16
17 namespace blink {
18
19 class ImageBuffer;
20
21 class PLATFORM_EXPORT RecordingImageBufferSurface : public ImageBufferSurface {
22     WTF_MAKE_NONCOPYABLE(RecordingImageBufferSurface); WTF_MAKE_FAST_ALLOCATED;
23 public:
24     RecordingImageBufferSurface(const IntSize&, OpacityMode = NonOpaque);
25     virtual ~RecordingImageBufferSurface();
26
27     // Implementation of ImageBufferSurface interfaces
28     virtual SkCanvas* canvas() const OVERRIDE;
29     virtual PassRefPtr<SkPicture> getPicture() OVERRIDE;
30     virtual bool isValid() const OVERRIDE { return true; }
31     virtual void willAccessPixels() OVERRIDE;
32     virtual void finalizeFrame() OVERRIDE;
33     virtual void didClearCanvas() OVERRIDE;
34     virtual void setImageBuffer(ImageBuffer*) OVERRIDE;
35
36 private:
37     friend class ::RecordingImageBufferSurfaceTest; // for unit testing
38     void fallBackToRasterCanvas();
39     void initializeCurrentFrame();
40     bool finalizeFrameInternal();
41
42     OwnPtr<SkPictureRecorder> m_currentFrame;
43     RefPtr<SkPicture> m_previousFrame;
44     OwnPtr<SkCanvas> m_rasterCanvas;
45     ImageBuffer* m_imageBuffer;
46     int m_initialSaveCount;
47     bool m_frameWasCleared;
48 };
49
50 } // namespace blink
51
52 #endif