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