Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: Source/core/platform/graphics/chromium/Canvas2DLayerBridge.h

Issue 21858004: Refactoring Canvas2DLayerBridge to make it easier to write unit tests (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fixed similarity blunder Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 namespace WebCore { 44 namespace WebCore {
45 45
46 class Canvas2DLayerBridge : public WebKit::WebExternalTextureLayerClient, public SkDeferredCanvas::NotificationClient, public DoublyLinkedListNode<Canvas2DLayer Bridge> { 46 class Canvas2DLayerBridge : public WebKit::WebExternalTextureLayerClient, public SkDeferredCanvas::NotificationClient, public DoublyLinkedListNode<Canvas2DLayer Bridge> {
47 WTF_MAKE_NONCOPYABLE(Canvas2DLayerBridge); 47 WTF_MAKE_NONCOPYABLE(Canvas2DLayerBridge);
48 public: 48 public:
49 enum OpacityMode { 49 enum OpacityMode {
50 Opaque, 50 Opaque,
51 NonOpaque 51 NonOpaque
52 }; 52 };
53 53
54 static PassOwnPtr<Canvas2DLayerBridge> create(PassRefPtr<GraphicsContext3D>, const IntSize&, OpacityMode); 54 class Helper {
55 public:
56 virtual PassRefPtr<GraphicsContext3D> getContext() = 0;
57 virtual SkSurface* createSurface(GraphicsContext3D*, const IntSize&) = 0 ;
58 virtual ~Helper() { }
59 };
60
61 static PassOwnPtr<Canvas2DLayerBridge> create(PassOwnPtr<Helper>, const IntS ize&, OpacityMode);
55 62
56 virtual ~Canvas2DLayerBridge(); 63 virtual ~Canvas2DLayerBridge();
57 64
58 // WebKit::WebExternalTextureLayerClient implementation. 65 // WebKit::WebExternalTextureLayerClient implementation.
59 virtual WebKit::WebGraphicsContext3D* context() OVERRIDE; 66 virtual WebKit::WebGraphicsContext3D* context() OVERRIDE;
60 virtual bool prepareMailbox(WebKit::WebExternalTextureMailbox*, WebKit::WebE xternalBitmap*) OVERRIDE; 67 virtual bool prepareMailbox(WebKit::WebExternalTextureMailbox*, WebKit::WebE xternalBitmap*) OVERRIDE;
61 virtual void mailboxReleased(const WebKit::WebExternalTextureMailbox&) OVERR IDE; 68 virtual void mailboxReleased(const WebKit::WebExternalTextureMailbox&) OVERR IDE;
62 69
63 // SkDeferredCanvas::NotificationClient implementation 70 // SkDeferredCanvas::NotificationClient implementation
64 virtual void prepareForDraw() OVERRIDE; 71 virtual void prepareForDraw() OVERRIDE;
65 virtual void storageAllocatedForRecordingChanged(size_t) OVERRIDE; 72 virtual void storageAllocatedForRecordingChanged(size_t) OVERRIDE;
66 virtual void flushedDrawCommands() OVERRIDE; 73 virtual void flushedDrawCommands() OVERRIDE;
67 virtual void skippedPendingDrawCommands() OVERRIDE; 74 virtual void skippedPendingDrawCommands() OVERRIDE;
68 75
69 // Methods used by Canvas2DLayerManager 76 // Methods used by Canvas2DLayerManager
70 virtual size_t freeMemoryIfPossible(size_t); // virtual for mocking 77 virtual size_t freeMemoryIfPossible(size_t); // virtual for mocking
71 virtual void flush(); // virtual for mocking 78 virtual void flush(); // virtual for mocking
72 virtual size_t storageAllocatedForRecording(); // virtual for faking 79 virtual size_t storageAllocatedForRecording(); // virtual for faking
73 size_t bytesAllocated() const {return m_bytesAllocated;} 80 size_t bytesAllocated() const {return m_bytesAllocated;}
74 void limitPendingFrames(); 81 void limitPendingFrames();
75 82
76 WebKit::WebLayer* layer(); 83 WebKit::WebLayer* layer();
77 void contextAcquired(); 84 void contextAcquired();
78 SkCanvas* getCanvas() { return m_canvas; } 85 SkCanvas* getCanvas() { return m_canvas; }
86 Helper* helper() { return m_helper.get(); }
79 87
80 unsigned backBufferTexture(); 88 unsigned backBufferTexture();
81 89
82 bool isValid(); 90 bool isValid();
83 91
84 protected: 92 protected:
85 Canvas2DLayerBridge(PassRefPtr<GraphicsContext3D>, SkDeferredCanvas*, Opacit yMode); 93 Canvas2DLayerBridge(PassOwnPtr<Helper>, const IntSize&, OpacityMode, bool* s uccess);
94
86 void setRateLimitingEnabled(bool); 95 void setRateLimitingEnabled(bool);
87 96
88 SkDeferredCanvas* m_canvas; 97 SkDeferredCanvas* m_canvas;
89 OwnPtr<WebKit::WebExternalTextureLayer> m_layer; 98 OwnPtr<WebKit::WebExternalTextureLayer> m_layer;
90 RefPtr<GraphicsContext3D> m_context; 99 RefPtr<GraphicsContext3D> m_context;
100 OwnPtr<Helper> m_helper;
91 size_t m_bytesAllocated; 101 size_t m_bytesAllocated;
92 bool m_didRecordDrawCommand; 102 bool m_didRecordDrawCommand;
93 bool m_surfaceIsValid; 103 bool m_surfaceIsValid;
94 int m_framesPending; 104 int m_framesPending;
95 bool m_rateLimitingEnabled; 105 bool m_rateLimitingEnabled;
106 bool m_contentsDrawable;
96 107
97 friend class WTF::DoublyLinkedListNode<Canvas2DLayerBridge>; 108 friend class WTF::DoublyLinkedListNode<Canvas2DLayerBridge>;
98 Canvas2DLayerBridge* m_next; 109 Canvas2DLayerBridge* m_next;
99 Canvas2DLayerBridge* m_prev; 110 Canvas2DLayerBridge* m_prev;
100 111
101 enum MailboxStatus { 112 enum MailboxStatus {
102 MailboxInUse, 113 MailboxInUse,
103 MailboxReleased, 114 MailboxReleased,
104 MailboxAvailable, 115 MailboxAvailable,
105 }; 116 };
106 117
107 struct MailboxInfo { 118 struct MailboxInfo {
108 WebKit::WebExternalTextureMailbox m_mailbox; 119 WebKit::WebExternalTextureMailbox m_mailbox;
109 SkAutoTUnref<SkImage> m_image; 120 SkAutoTUnref<SkImage> m_image;
110 MailboxStatus m_status; 121 MailboxStatus m_status;
111 122
112 MailboxInfo(const MailboxInfo&); 123 MailboxInfo(const MailboxInfo&);
113 MailboxInfo() {} 124 MailboxInfo() {}
114 }; 125 };
115 MailboxInfo* createMailboxInfo(); 126 MailboxInfo* createMailboxInfo();
116 127
117 uint32_t m_lastImageId; 128 uint32_t m_lastImageId;
118 Vector<MailboxInfo> m_mailboxes; 129 Vector<MailboxInfo> m_mailboxes;
119 }; 130 };
120 131
121 } 132 }
122 133
123 #endif 134 #endif
OLDNEW
« no previous file with comments | « Source/core/platform/graphics/ImageBuffer.cpp ('k') | Source/core/platform/graphics/chromium/Canvas2DLayerBridge.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698