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

Side by Side Diff: third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp

Issue 2359723003: Implement OffscreenCanvas Accelerated 2D commit() (Closed)
Patch Set: Temporary code for Unaccelerated case Created 4 years, 2 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 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.h" 5 #include "modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.h"
6 6
7 #include "bindings/modules/v8/OffscreenCanvasRenderingContext2DOrWebGLRenderingC ontextOrWebGL2RenderingContext.h" 7 #include "bindings/modules/v8/OffscreenCanvasRenderingContext2DOrWebGLRenderingC ontextOrWebGL2RenderingContext.h"
8 #include "core/frame/ImageBitmap.h" 8 #include "core/frame/ImageBitmap.h"
9 #include "core/frame/Settings.h" 9 #include "core/frame/Settings.h"
10 #include "core/workers/WorkerGlobalScope.h" 10 #include "core/workers/WorkerGlobalScope.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 46
47 void OffscreenCanvasRenderingContext2D::commit(ExceptionState& exceptionState) 47 void OffscreenCanvasRenderingContext2D::commit(ExceptionState& exceptionState)
48 { 48 {
49 if (getOffscreenCanvas()->getAssociatedCanvasId() < 0) { 49 if (getOffscreenCanvas()->getAssociatedCanvasId() < 0) {
50 // If an OffscreenCanvas has no associated canvas Id, it indicates that 50 // If an OffscreenCanvas has no associated canvas Id, it indicates that
51 // it is not an OffscreenCanvas created by transfering control from html 51 // it is not an OffscreenCanvas created by transfering control from html
52 // canvas. 52 // canvas.
53 exceptionState.throwDOMException(InvalidStateError, "Commit() was called on a context whose OffscreenCanvas is not associated with a canvas element."); 53 exceptionState.throwDOMException(InvalidStateError, "Commit() was called on a context whose OffscreenCanvas is not associated with a canvas element.");
54 return; 54 return;
55 } 55 }
56 getOffscreenCanvas()->getOrCreateFrameDispatcher()->dispatchFrame(nullptr); 56 getOffscreenCanvas()->getOrCreateFrameDispatcher()->dispatchFrame(this->tran sferToStaticImageBitmap(), this->isAccelerated());
57 } 57 }
58 58
59 // BaseRenderingContext2D implementation 59 // BaseRenderingContext2D implementation
60 bool OffscreenCanvasRenderingContext2D::originClean() const 60 bool OffscreenCanvasRenderingContext2D::originClean() const
61 { 61 {
62 return getOffscreenCanvas()->originClean(); 62 return getOffscreenCanvas()->originClean();
63 } 63 }
64 64
65 void OffscreenCanvasRenderingContext2D::setOriginTainted() 65 void OffscreenCanvasRenderingContext2D::setOriginTainted()
66 { 66 {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 117
118 if (m_needsMatrixClipRestore) { 118 if (m_needsMatrixClipRestore) {
119 restoreMatrixClipStack(m_imageBuffer->canvas()); 119 restoreMatrixClipStack(m_imageBuffer->canvas());
120 nonConstThis->m_needsMatrixClipRestore = false; 120 nonConstThis->m_needsMatrixClipRestore = false;
121 } 121 }
122 } 122 }
123 123
124 return m_imageBuffer.get(); 124 return m_imageBuffer.get();
125 } 125 }
126 126
127 ImageBitmap* OffscreenCanvasRenderingContext2D::transferToImageBitmap(ExceptionS tate& exceptionState) 127 bool OffscreenCanvasRenderingContext2D::isAccelerated() const
128 {
129 if (!hasImageBuffer())
130 return false;
131 return m_imageBuffer->isAccelerated();
132 }
133
134 PassRefPtr<StaticBitmapImage> OffscreenCanvasRenderingContext2D::transferToStati cImageBitmap()
128 { 135 {
129 if (!imageBuffer()) 136 if (!imageBuffer())
130 return nullptr; 137 return nullptr;
131 sk_sp<SkImage> skImage = m_imageBuffer->newSkImageSnapshot(PreferAcceleratio n, SnapshotReasonTransferToImageBitmap); 138 sk_sp<SkImage> skImage = m_imageBuffer->newSkImageSnapshot(PreferAcceleratio n, SnapshotReasonTransferToImageBitmap);
132 RefPtr<StaticBitmapImage> image = StaticBitmapImage::create(std::move(skImag e)); 139 RefPtr<StaticBitmapImage> image = StaticBitmapImage::create(std::move(skImag e));
133 image->setOriginClean(this->originClean()); 140 image->setOriginClean(this->originClean());
141 return image.release();
142 }
143
144 ImageBitmap* OffscreenCanvasRenderingContext2D::transferToImageBitmap(ExceptionS tate& exceptionState)
145 {
146 RefPtr<StaticBitmapImage> image = transferToStaticImageBitmap();
147 if (!image)
148 return nullptr;
134 m_imageBuffer.reset(); // "Transfer" means no retained buffer 149 m_imageBuffer.reset(); // "Transfer" means no retained buffer
135 m_needsMatrixClipRestore = true; 150 m_needsMatrixClipRestore = true;
136 return ImageBitmap::create(image.release()); 151 return ImageBitmap::create(image.release());
137 } 152 }
138 153
139 PassRefPtr<Image> OffscreenCanvasRenderingContext2D::getImage(AccelerationHint h int, SnapshotReason reason) const 154 PassRefPtr<Image> OffscreenCanvasRenderingContext2D::getImage(AccelerationHint h int, SnapshotReason reason) const
140 { 155 {
141 if (!imageBuffer()) 156 if (!imageBuffer())
142 return nullptr; 157 return nullptr;
143 sk_sp<SkImage> skImage = m_imageBuffer->newSkImageSnapshot(hint, reason); 158 sk_sp<SkImage> skImage = m_imageBuffer->newSkImageSnapshot(hint, reason);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 bool OffscreenCanvasRenderingContext2D::isContextLost() const 225 bool OffscreenCanvasRenderingContext2D::isContextLost() const
211 { 226 {
212 return false; 227 return false;
213 } 228 }
214 229
215 bool OffscreenCanvasRenderingContext2D::isPaintable() const 230 bool OffscreenCanvasRenderingContext2D::isPaintable() const
216 { 231 {
217 return this->imageBuffer(); 232 return this->imageBuffer();
218 } 233 }
219 } 234 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698