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

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: 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 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 if (!m_fallbackSurface) 222 if (!m_fallbackSurface)
223 fallBackToRasterCanvas(disableDeferralReasonToFallbackReason(reason)); 223 fallBackToRasterCanvas(disableDeferralReasonToFallbackReason(reason));
224 } 224 }
225 225
226 sk_sp<SkPicture> RecordingImageBufferSurface::getPicture() { 226 sk_sp<SkPicture> RecordingImageBufferSurface::getPicture() {
227 if (m_fallbackSurface) 227 if (m_fallbackSurface)
228 return nullptr; 228 return nullptr;
229 229
230 FallbackReason fallbackReason = FallbackReasonUnknown; 230 FallbackReason fallbackReason = FallbackReasonUnknown;
231 bool canUsePicture = finalizeFrameInternal(&fallbackReason); 231 bool canUsePicture = finalizeFrameInternal(&fallbackReason);
232 m_imageBuffer->didFinalizeFrame();
233 232
234 ASSERT(canUsePicture || m_fallbackFactory); 233 ASSERT(canUsePicture || m_fallbackFactory);
235 234
236 if (canUsePicture) { 235 if (canUsePicture) {
237 return m_previousFrame; 236 return m_previousFrame;
238 } 237 }
239 238
240 if (!m_fallbackSurface) 239 if (!m_fallbackSurface)
241 fallBackToRasterCanvas(fallbackReason); 240 fallBackToRasterCanvas(fallbackReason);
242 return nullptr; 241 return nullptr;
243 } 242 }
244 243
245 void RecordingImageBufferSurface::finalizeFrame(const FloatRect& dirtyRect) { 244 void RecordingImageBufferSurface::finalizeFrame() {
246 if (m_fallbackSurface) { 245 if (m_fallbackSurface) {
247 m_fallbackSurface->finalizeFrame(dirtyRect); 246 m_fallbackSurface->finalizeFrame();
248 return; 247 return;
249 } 248 }
250 249
251 FallbackReason fallbackReason = FallbackReasonUnknown; 250 FallbackReason fallbackReason = FallbackReasonUnknown;
252 if (!finalizeFrameInternal(&fallbackReason)) 251 if (!finalizeFrameInternal(&fallbackReason))
253 fallBackToRasterCanvas(fallbackReason); 252 fallBackToRasterCanvas(fallbackReason);
254 } 253 }
255 254
255 void RecordingImageBufferSurface::doPaintInvalidation(
256 const FloatRect& dirtyRect) {
257 if (m_fallbackSurface) {
258 m_fallbackSurface->doPaintInvalidation(dirtyRect);
259 return;
260 }
261 }
262
256 static RecordingImageBufferSurface::FallbackReason flushReasonToFallbackReason( 263 static RecordingImageBufferSurface::FallbackReason flushReasonToFallbackReason(
257 FlushReason reason) { 264 FlushReason reason) {
258 switch (reason) { 265 switch (reason) {
259 case FlushReasonUnknown: 266 case FlushReasonUnknown:
260 return RecordingImageBufferSurface::FallbackReasonUnknown; 267 return RecordingImageBufferSurface::FallbackReasonUnknown;
261 case FlushReasonInitialClear: 268 case FlushReasonInitialClear:
262 return RecordingImageBufferSurface::FallbackReasonFlushInitialClear; 269 return RecordingImageBufferSurface::FallbackReasonFlushInitialClear;
263 case FlushReasonDrawImageOfWebGL: 270 case FlushReasonDrawImageOfWebGL:
264 return RecordingImageBufferSurface:: 271 return RecordingImageBufferSurface::
265 FallbackReasonFlushForDrawImageOfWebGL; 272 FallbackReasonFlushForDrawImageOfWebGL;
(...skipping 26 matching lines...) Expand all
292 m_currentFramePixelCount += pixelBounds.width() * pixelBounds.height(); 299 m_currentFramePixelCount += pixelBounds.width() * pixelBounds.height();
293 } 300 }
294 301
295 bool RecordingImageBufferSurface::finalizeFrameInternal( 302 bool RecordingImageBufferSurface::finalizeFrameInternal(
296 FallbackReason* fallbackReason) { 303 FallbackReason* fallbackReason) {
297 CHECK(!m_fallbackSurface); 304 CHECK(!m_fallbackSurface);
298 CHECK(m_currentFrame); 305 CHECK(m_currentFrame);
299 ASSERT(m_currentFrame->getRecordingCanvas()); 306 ASSERT(m_currentFrame->getRecordingCanvas());
300 ASSERT(fallbackReason); 307 ASSERT(fallbackReason);
301 ASSERT(*fallbackReason == FallbackReasonUnknown); 308 ASSERT(*fallbackReason == FallbackReasonUnknown);
302 309 if (!m_didRecordDrawCommandsInCurrentFrame) {
303 if (!m_imageBuffer->isDirty()) {
304 if (!m_previousFrame) { 310 if (!m_previousFrame) {
305 // Create an initial blank frame 311 // Create an initial blank frame
306 m_previousFrame = m_currentFrame->finishRecordingAsPicture(); 312 m_previousFrame = m_currentFrame->finishRecordingAsPicture();
307 initializeCurrentFrame(); 313 initializeCurrentFrame();
308 } 314 }
309 CHECK(m_currentFrame); 315 CHECK(m_currentFrame);
310 return true; 316 return true;
311 } 317 }
312 318
313 if (!m_frameWasCleared) { 319 if (!m_frameWasCleared) {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 } 407 }
402 408
403 void RecordingImageBufferSurface::setIsHidden(bool hidden) { 409 void RecordingImageBufferSurface::setIsHidden(bool hidden) {
404 if (m_fallbackSurface) 410 if (m_fallbackSurface)
405 m_fallbackSurface->setIsHidden(hidden); 411 m_fallbackSurface->setIsHidden(hidden);
406 else 412 else
407 ImageBufferSurface::setIsHidden(hidden); 413 ImageBufferSurface::setIsHidden(hidden);
408 } 414 }
409 415
410 } // namespace blink 416 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698