OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |