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

Unified Diff: third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp

Issue 2653933003: Make stream captures work on canvases that are not in the DOM. (Closed)
Patch Set: rebase Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
diff --git a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
index dab2786f1cc48807d7e8c2377c6ca59c002ca25b..cbd9476bffa47fd08693026f2fe424ea4a0b61f2 100644
--- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
+++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
@@ -853,9 +853,9 @@ bool Canvas2DLayerBridge::checkSurfaceValid() {
bool Canvas2DLayerBridge::restoreSurface() {
DCHECK(!m_destructionInProgress);
- if (m_destructionInProgress)
+ if (m_destructionInProgress || !isAccelerated())
return false;
- DCHECK(isAccelerated() && !m_surface);
+ DCHECK(!m_surface);
gpu::gles2::GLES2Interface* sharedGL = nullptr;
m_layer->clearTexture();
@@ -899,12 +899,6 @@ bool Canvas2DLayerBridge::PrepareTextureMailbox(
// 4. Here.
return false;
}
- DCHECK(isAccelerated() || isHibernating() || m_softwareRenderingWhileHidden);
-
- // if hibernating but not hidden, we want to wake up from
- // hibernation
- if ((isHibernating() || m_softwareRenderingWhileHidden) && isHidden())
- return false;
// If the context is lost, we don't know if we should be producing GPU or
// software frames, until we get a new context, since the compositor will
@@ -914,6 +908,13 @@ bool Canvas2DLayerBridge::PrepareTextureMailbox(
GL_NO_ERROR)
return false;
+ DCHECK(isAccelerated() || isHibernating() || m_softwareRenderingWhileHidden);
+
+ // if hibernating but not hidden, we want to wake up from
+ // hibernation
+ if ((isHibernating() || m_softwareRenderingWhileHidden) && isHidden())
+ return false;
+
sk_sp<SkImage> image =
newImageSnapshot(PreferAcceleration, SnapshotReasonUnknown);
if (!image || !image->getTexture())
@@ -1042,17 +1043,22 @@ void Canvas2DLayerBridge::didDraw(const FloatRect& rect) {
m_didDrawSinceLastGpuFlush = true;
}
-void Canvas2DLayerBridge::prepareSurfaceForPaintingIfNeeded() {
+void Canvas2DLayerBridge::finalizeFrame() {
+ DCHECK(!m_destructionInProgress);
+
+ // Make sure surface is ready for painting: fix the rendering mode now
+ // because it will be too late during the paint invalidation phase.
getOrCreateSurface(PreferAcceleration);
+
+ if (m_rateLimiter)
+ m_rateLimiter->reset();
+ m_renderingTaskCompletedForCurrentFrame = false;
}
-void Canvas2DLayerBridge::finalizeFrame(const FloatRect& dirtyRect) {
+void Canvas2DLayerBridge::doPaintInvalidation(const FloatRect& dirtyRect) {
DCHECK(!m_destructionInProgress);
if (m_layer && m_accelerationMode != DisableAcceleration)
m_layer->layer()->invalidateRect(enclosingIntRect(dirtyRect));
- if (m_rateLimiter)
- m_rateLimiter->reset();
- m_renderingTaskCompletedForCurrentFrame = false;
}
void Canvas2DLayerBridge::didProcessTask() {

Powered by Google App Engine
This is Rietveld 408576698