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

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: 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 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<PaintRecord> RecordingImageBufferSurface::getRecord() { 226 sk_sp<PaintRecord> RecordingImageBufferSurface::getRecord() {
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 canUseRecord = finalizeFrameInternal(&fallbackReason); 231 bool canUseRecord = finalizeFrameInternal(&fallbackReason);
232 m_imageBuffer->didFinalizeFrame();
233 232
234 DCHECK(canUseRecord || m_fallbackFactory); 233 DCHECK(canUseRecord || m_fallbackFactory);
235 234
236 if (canUseRecord) { 235 if (canUseRecord) {
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 }
260 }
261
256 static RecordingImageBufferSurface::FallbackReason flushReasonToFallbackReason( 262 static RecordingImageBufferSurface::FallbackReason flushReasonToFallbackReason(
257 FlushReason reason) { 263 FlushReason reason) {
258 switch (reason) { 264 switch (reason) {
259 case FlushReasonUnknown: 265 case FlushReasonUnknown:
260 return RecordingImageBufferSurface::FallbackReasonUnknown; 266 return RecordingImageBufferSurface::FallbackReasonUnknown;
261 case FlushReasonInitialClear: 267 case FlushReasonInitialClear:
262 return RecordingImageBufferSurface::FallbackReasonFlushInitialClear; 268 return RecordingImageBufferSurface::FallbackReasonFlushInitialClear;
263 case FlushReasonDrawImageOfWebGL: 269 case FlushReasonDrawImageOfWebGL:
264 return RecordingImageBufferSurface:: 270 return RecordingImageBufferSurface::
265 FallbackReasonFlushForDrawImageOfWebGL; 271 FallbackReasonFlushForDrawImageOfWebGL;
(...skipping 25 matching lines...) Expand all
291 IntRect pixelBounds = enclosingIntRect(rect); 297 IntRect pixelBounds = enclosingIntRect(rect);
292 m_currentFramePixelCount += pixelBounds.width() * pixelBounds.height(); 298 m_currentFramePixelCount += pixelBounds.width() * pixelBounds.height();
293 } 299 }
294 300
295 bool RecordingImageBufferSurface::finalizeFrameInternal( 301 bool RecordingImageBufferSurface::finalizeFrameInternal(
296 FallbackReason* fallbackReason) { 302 FallbackReason* fallbackReason) {
297 CHECK(!m_fallbackSurface); 303 CHECK(!m_fallbackSurface);
298 CHECK(m_currentFrame); 304 CHECK(m_currentFrame);
299 DCHECK(m_currentFrame->getRecordingCanvas()); 305 DCHECK(m_currentFrame->getRecordingCanvas());
300 DCHECK(fallbackReason); 306 DCHECK(fallbackReason);
301 DCHECK_EQ(*fallbackReason, FallbackReasonUnknown); 307 DCHECK(*fallbackReason == FallbackReasonUnknown);
302 308 if (!m_didRecordDrawCommandsInCurrentFrame) {
303 if (!m_imageBuffer->isDirty()) {
304 if (!m_previousFrame) { 309 if (!m_previousFrame) {
305 // Create an initial blank frame 310 // Create an initial blank frame
306 m_previousFrame = m_currentFrame->finishRecordingAsPicture(); 311 m_previousFrame = m_currentFrame->finishRecordingAsPicture();
307 initializeCurrentFrame(); 312 initializeCurrentFrame();
308 } 313 }
309 CHECK(m_currentFrame); 314 CHECK(m_currentFrame);
310 return true; 315 return true;
311 } 316 }
312 317
313 if (!m_frameWasCleared) { 318 if (!m_frameWasCleared) {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 } 406 }
402 407
403 void RecordingImageBufferSurface::setIsHidden(bool hidden) { 408 void RecordingImageBufferSurface::setIsHidden(bool hidden) {
404 if (m_fallbackSurface) 409 if (m_fallbackSurface)
405 m_fallbackSurface->setIsHidden(hidden); 410 m_fallbackSurface->setIsHidden(hidden);
406 else 411 else
407 ImageBufferSurface::setIsHidden(hidden); 412 ImageBufferSurface::setIsHidden(hidden);
408 } 413 }
409 414
410 } // namespace blink 415 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698