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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp

Issue 2653933003: Make stream captures work on canvases that are not in the DOM. (Closed)
Patch Set: fix test + review comments 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 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 "platform/graphics/RecordingImageBufferSurface.h" 5 #include "platform/graphics/RecordingImageBufferSurface.h"
6 6
7 #include "platform/Histogram.h" 7 #include "platform/Histogram.h"
8 #include "platform/graphics/CanvasMetrics.h" 8 #include "platform/graphics/CanvasMetrics.h"
9 #include "platform/graphics/ExpensiveCanvasHeuristicParameters.h" 9 #include "platform/graphics/ExpensiveCanvasHeuristicParameters.h"
10 #include "platform/graphics/GraphicsContext.h" 10 #include "platform/graphics/GraphicsContext.h"
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 if (!m_fallbackSurface) 221 if (!m_fallbackSurface)
222 fallBackToRasterCanvas(disableDeferralReasonToFallbackReason(reason)); 222 fallBackToRasterCanvas(disableDeferralReasonToFallbackReason(reason));
223 } 223 }
224 224
225 sk_sp<PaintRecord> RecordingImageBufferSurface::getPicture() { 225 sk_sp<PaintRecord> RecordingImageBufferSurface::getPicture() {
226 if (m_fallbackSurface) 226 if (m_fallbackSurface)
227 return nullptr; 227 return nullptr;
228 228
229 FallbackReason fallbackReason = FallbackReasonUnknown; 229 FallbackReason fallbackReason = FallbackReasonUnknown;
230 bool canUsePicture = finalizeFrameInternal(&fallbackReason); 230 bool canUsePicture = finalizeFrameInternal(&fallbackReason);
231 m_imageBuffer->didFinalizeFrame();
232 231
233 ASSERT(canUsePicture || m_fallbackFactory); 232 ASSERT(canUsePicture || m_fallbackFactory);
234 233
235 if (canUsePicture) { 234 if (canUsePicture) {
236 return m_previousFrame; 235 return m_previousFrame;
237 } 236 }
238 237
239 if (!m_fallbackSurface) 238 if (!m_fallbackSurface)
240 fallBackToRasterCanvas(fallbackReason); 239 fallBackToRasterCanvas(fallbackReason);
241 return nullptr; 240 return nullptr;
242 } 241 }
243 242
244 void RecordingImageBufferSurface::finalizeFrame(const FloatRect& dirtyRect) { 243 void RecordingImageBufferSurface::finalizeFrame() {
245 if (m_fallbackSurface) { 244 if (m_fallbackSurface) {
246 m_fallbackSurface->finalizeFrame(dirtyRect); 245 m_fallbackSurface->finalizeFrame();
247 return; 246 return;
248 } 247 }
249 248
250 FallbackReason fallbackReason = FallbackReasonUnknown; 249 FallbackReason fallbackReason = FallbackReasonUnknown;
251 if (!finalizeFrameInternal(&fallbackReason)) 250 if (!finalizeFrameInternal(&fallbackReason))
252 fallBackToRasterCanvas(fallbackReason); 251 fallBackToRasterCanvas(fallbackReason);
253 } 252 }
254 253
254 void RecordingImageBufferSurface::doPaintInvalidation(
255 const FloatRect& dirtyRect) {
256 if (m_fallbackSurface) {
257 m_fallbackSurface->doPaintInvalidation(dirtyRect);
258 return;
xlai (Olivia) 2017/02/08 17:58:40 no need "return".
Justin Novosad 2017/02/08 18:43:12 Done.
259 }
260 }
261
255 static RecordingImageBufferSurface::FallbackReason flushReasonToFallbackReason( 262 static RecordingImageBufferSurface::FallbackReason flushReasonToFallbackReason(
256 FlushReason reason) { 263 FlushReason reason) {
257 switch (reason) { 264 switch (reason) {
258 case FlushReasonUnknown: 265 case FlushReasonUnknown:
259 return RecordingImageBufferSurface::FallbackReasonUnknown; 266 return RecordingImageBufferSurface::FallbackReasonUnknown;
260 case FlushReasonInitialClear: 267 case FlushReasonInitialClear:
261 return RecordingImageBufferSurface::FallbackReasonFlushInitialClear; 268 return RecordingImageBufferSurface::FallbackReasonFlushInitialClear;
262 case FlushReasonDrawImageOfWebGL: 269 case FlushReasonDrawImageOfWebGL:
263 return RecordingImageBufferSurface:: 270 return RecordingImageBufferSurface::
264 FallbackReasonFlushForDrawImageOfWebGL; 271 FallbackReasonFlushForDrawImageOfWebGL;
(...skipping 26 matching lines...) Expand all
291 m_currentFramePixelCount += pixelBounds.width() * pixelBounds.height(); 298 m_currentFramePixelCount += pixelBounds.width() * pixelBounds.height();
292 } 299 }
293 300
294 bool RecordingImageBufferSurface::finalizeFrameInternal( 301 bool RecordingImageBufferSurface::finalizeFrameInternal(
295 FallbackReason* fallbackReason) { 302 FallbackReason* fallbackReason) {
296 CHECK(!m_fallbackSurface); 303 CHECK(!m_fallbackSurface);
297 CHECK(m_currentFrame); 304 CHECK(m_currentFrame);
298 ASSERT(m_currentFrame->getRecordingCanvas()); 305 ASSERT(m_currentFrame->getRecordingCanvas());
299 ASSERT(fallbackReason); 306 ASSERT(fallbackReason);
300 ASSERT(*fallbackReason == FallbackReasonUnknown); 307 ASSERT(*fallbackReason == FallbackReasonUnknown);
301 308 if (!m_didRecordDrawCommandsInCurrentFrame) {
302 if (!m_imageBuffer->isDirty()) {
303 if (!m_previousFrame) { 309 if (!m_previousFrame) {
304 // Create an initial blank frame 310 // Create an initial blank frame
305 m_previousFrame = m_currentFrame->finishRecordingAsPicture(); 311 m_previousFrame = m_currentFrame->finishRecordingAsPicture();
306 initializeCurrentFrame(); 312 initializeCurrentFrame();
307 } 313 }
308 CHECK(m_currentFrame); 314 CHECK(m_currentFrame);
309 return true; 315 return true;
310 } 316 }
311 317
312 if (!m_frameWasCleared) { 318 if (!m_frameWasCleared) {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 } 406 }
401 407
402 void RecordingImageBufferSurface::setIsHidden(bool hidden) { 408 void RecordingImageBufferSurface::setIsHidden(bool hidden) {
403 if (m_fallbackSurface) 409 if (m_fallbackSurface)
404 m_fallbackSurface->setIsHidden(hidden); 410 m_fallbackSurface->setIsHidden(hidden);
405 else 411 else
406 ImageBufferSurface::setIsHidden(hidden); 412 ImageBufferSurface::setIsHidden(hidden);
407 } 413 }
408 414
409 } // namespace blink 415 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698