Chromium Code Reviews| 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 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |