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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp

Issue 2840093002: Allow RecordingImageBufferSurface to prevent fallback. (Closed)
Patch Set: imagebuffer-fallback: missedone Created 3 years, 7 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 <memory> 7 #include <memory>
8 8
9 #include "platform/Histogram.h" 9 #include "platform/Histogram.h"
10 #include "platform/graphics/CanvasMetrics.h" 10 #include "platform/graphics/CanvasMetrics.h"
11 #include "platform/graphics/ExpensiveCanvasHeuristicParameters.h" 11 #include "platform/graphics/ExpensiveCanvasHeuristicParameters.h"
12 #include "platform/graphics/GraphicsContext.h" 12 #include "platform/graphics/GraphicsContext.h"
13 #include "platform/graphics/ImageBuffer.h" 13 #include "platform/graphics/ImageBuffer.h"
14 #include "platform/graphics/UnacceleratedImageBufferSurface.h" 14 #include "platform/graphics/UnacceleratedImageBufferSurface.h"
15 #include "platform/graphics/paint/PaintRecorder.h" 15 #include "platform/graphics/paint/PaintRecorder.h"
16 #include "platform/wtf/PassRefPtr.h" 16 #include "platform/wtf/PassRefPtr.h"
17 #include "platform/wtf/PtrUtil.h" 17 #include "platform/wtf/PtrUtil.h"
18 18
19 namespace blink { 19 namespace blink {
20 20
21 RecordingImageBufferSurface::RecordingImageBufferSurface( 21 RecordingImageBufferSurface::RecordingImageBufferSurface(
22 const IntSize& size, 22 const IntSize& size,
23 AllowFallback allow_fallback,
23 OpacityMode opacity_mode, 24 OpacityMode opacity_mode,
24 const CanvasColorParams& color_params) 25 const CanvasColorParams& color_params)
25 : ImageBufferSurface(size, opacity_mode, color_params), 26 : ImageBufferSurface(size, opacity_mode, color_params),
27 allow_fallback_(allow_fallback),
26 image_buffer_(0), 28 image_buffer_(0),
27 current_frame_pixel_count_(0), 29 current_frame_pixel_count_(0),
28 previous_frame_pixel_count_(0), 30 previous_frame_pixel_count_(0),
29 frame_was_cleared_(true), 31 frame_was_cleared_(true),
30 did_record_draw_commands_in_current_frame_(false), 32 did_record_draw_commands_in_current_frame_(false),
31 current_frame_has_expensive_op_(false), 33 current_frame_has_expensive_op_(false),
32 previous_frame_has_expensive_op_(false) { 34 previous_frame_has_expensive_op_(false) {
33 InitializeCurrentFrame(); 35 InitializeCurrentFrame();
34 } 36 }
35 37
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 IntRect write_rect(x, y, orig_info.width(), orig_info.height()); 72 IntRect write_rect(x, y, orig_info.width(), orig_info.height());
71 if (write_rect.Contains(IntRect(IntPoint(), size()))) 73 if (write_rect.Contains(IntRect(IntPoint(), size())))
72 WillOverwriteCanvas(); 74 WillOverwriteCanvas();
73 FallBackToRasterCanvas(kFallbackReasonWritePixels); 75 FallBackToRasterCanvas(kFallbackReasonWritePixels);
74 } 76 }
75 return fallback_surface_->WritePixels(orig_info, pixels, row_bytes, x, y); 77 return fallback_surface_->WritePixels(orig_info, pixels, row_bytes, x, y);
76 } 78 }
77 79
78 void RecordingImageBufferSurface::FallBackToRasterCanvas( 80 void RecordingImageBufferSurface::FallBackToRasterCanvas(
79 FallbackReason reason) { 81 FallbackReason reason) {
82 DCHECK(allow_fallback_ == kAllowFallback);
80 CHECK(reason != kFallbackReasonUnknown); 83 CHECK(reason != kFallbackReasonUnknown);
81 84
82 if (fallback_surface_) { 85 if (fallback_surface_) {
83 DCHECK(!current_frame_); 86 DCHECK(!current_frame_);
84 return; 87 return;
85 } 88 }
86 89
87 DEFINE_THREAD_SAFE_STATIC_LOCAL( 90 DEFINE_THREAD_SAFE_STATIC_LOCAL(
88 EnumerationHistogram, canvas_fallback_histogram, 91 EnumerationHistogram, canvas_fallback_histogram,
89 new EnumerationHistogram("Canvas.DisplayListFallbackReason", 92 new EnumerationHistogram("Canvas.DisplayListFallbackReason",
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 } 311 }
309 CHECK(current_frame_); 312 CHECK(current_frame_);
310 return true; 313 return true;
311 } 314 }
312 315
313 if (!frame_was_cleared_) { 316 if (!frame_was_cleared_) {
314 *fallback_reason = kFallbackReasonCanvasNotClearedBetweenFrames; 317 *fallback_reason = kFallbackReasonCanvasNotClearedBetweenFrames;
315 return false; 318 return false;
316 } 319 }
317 320
318 if (current_frame_->getRecordingCanvas()->getSaveCount() - 1 > 321 if (allow_fallback_ == kAllowFallback &&
319 ExpensiveCanvasHeuristicParameters::kExpensiveRecordingStackDepth) { 322 current_frame_->getRecordingCanvas()->getSaveCount() - 1 >
323 ExpensiveCanvasHeuristicParameters::kExpensiveRecordingStackDepth) {
320 // (getSaveCount() decremented to account for the intial recording canvas 324 // (getSaveCount() decremented to account for the intial recording canvas
321 // save frame.) 325 // save frame.)
322 *fallback_reason = kFallbackReasonRunawayStateStack; 326 *fallback_reason = kFallbackReasonRunawayStateStack;
323 return false; 327 return false;
324 } 328 }
325 329
326 previous_frame_ = current_frame_->finishRecordingAsPicture(); 330 previous_frame_ = current_frame_->finishRecordingAsPicture();
327 previous_frame_has_expensive_op_ = current_frame_has_expensive_op_; 331 previous_frame_has_expensive_op_ = current_frame_has_expensive_op_;
328 previous_frame_pixel_count_ = current_frame_pixel_count_; 332 previous_frame_pixel_count_ = current_frame_pixel_count_;
329 InitializeCurrentFrame(); 333 InitializeCurrentFrame();
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 } 404 }
401 405
402 void RecordingImageBufferSurface::SetIsHidden(bool hidden) { 406 void RecordingImageBufferSurface::SetIsHidden(bool hidden) {
403 if (fallback_surface_) 407 if (fallback_surface_)
404 fallback_surface_->SetIsHidden(hidden); 408 fallback_surface_->SetIsHidden(hidden);
405 else 409 else
406 ImageBufferSurface::SetIsHidden(hidden); 410 ImageBufferSurface::SetIsHidden(hidden);
407 } 411 }
408 412
409 } // namespace blink 413 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698