| Index: third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp
|
| diff --git a/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp b/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp
|
| index 4b0bb496dfb5b3bac165e2584fca293908c1dbad..11f0991e71ffd104181d55b2a950126cf1596c52 100644
|
| --- a/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp
|
| +++ b/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp
|
| @@ -5,11 +5,13 @@
|
| #include "platform/graphics/RecordingImageBufferSurface.h"
|
|
|
| #include <memory>
|
| +
|
| #include "platform/Histogram.h"
|
| #include "platform/graphics/CanvasMetrics.h"
|
| #include "platform/graphics/ExpensiveCanvasHeuristicParameters.h"
|
| #include "platform/graphics/GraphicsContext.h"
|
| #include "platform/graphics/ImageBuffer.h"
|
| +#include "platform/graphics/UnacceleratedImageBufferSurface.h"
|
| #include "platform/graphics/paint/PaintRecorder.h"
|
| #include "platform/wtf/PassRefPtr.h"
|
| #include "platform/wtf/PtrUtil.h"
|
| @@ -18,8 +20,6 @@ namespace blink {
|
|
|
| RecordingImageBufferSurface::RecordingImageBufferSurface(
|
| const IntSize& size,
|
| - std::unique_ptr<RecordingImageBufferFallbackSurfaceFactory>
|
| - fallback_factory,
|
| OpacityMode opacity_mode,
|
| const CanvasColorParams& color_params)
|
| : ImageBufferSurface(size, opacity_mode, color_params),
|
| @@ -29,8 +29,7 @@ RecordingImageBufferSurface::RecordingImageBufferSurface(
|
| frame_was_cleared_(true),
|
| did_record_draw_commands_in_current_frame_(false),
|
| current_frame_has_expensive_op_(false),
|
| - previous_frame_has_expensive_op_(false),
|
| - fallback_factory_(std::move(fallback_factory)) {
|
| + previous_frame_has_expensive_op_(false) {
|
| InitializeCurrentFrame();
|
| }
|
|
|
| @@ -68,10 +67,9 @@ bool RecordingImageBufferSurface::WritePixels(const SkImageInfo& orig_info,
|
| int x,
|
| int y) {
|
| if (!fallback_surface_) {
|
| - if (x <= 0 && y <= 0 && x + orig_info.width() >= size().Width() &&
|
| - y + orig_info.height() >= size().Height()) {
|
| + IntRect write_rect(x, y, orig_info.width(), orig_info.height());
|
| + if (write_rect.Contains(IntRect(IntPoint(), size())))
|
| WillOverwriteCanvas();
|
| - }
|
| FallBackToRasterCanvas(kFallbackReasonWritePixels);
|
| }
|
| return fallback_surface_->WritePixels(orig_info, pixels, row_bytes, x, y);
|
| @@ -79,7 +77,6 @@ bool RecordingImageBufferSurface::WritePixels(const SkImageInfo& orig_info,
|
|
|
| void RecordingImageBufferSurface::FallBackToRasterCanvas(
|
| FallbackReason reason) {
|
| - DCHECK(fallback_factory_);
|
| CHECK(reason != kFallbackReasonUnknown);
|
|
|
| if (fallback_surface_) {
|
| @@ -93,8 +90,8 @@ void RecordingImageBufferSurface::FallBackToRasterCanvas(
|
| kFallbackReasonCount));
|
| canvas_fallback_histogram.Count(reason);
|
|
|
| - fallback_surface_ = fallback_factory_->CreateSurface(size(), GetOpacityMode(),
|
| - color_params());
|
| + fallback_surface_ = WTF::WrapUnique(new UnacceleratedImageBufferSurface(
|
| + size(), GetOpacityMode(), kInitializeImagePixels, color_params()));
|
| fallback_surface_->SetImageBuffer(image_buffer_);
|
|
|
| if (previous_frame_) {
|
| @@ -230,8 +227,6 @@ sk_sp<PaintRecord> RecordingImageBufferSurface::GetRecord() {
|
| FallbackReason fallback_reason = kFallbackReasonUnknown;
|
| bool can_use_record = FinalizeFrameInternal(&fallback_reason);
|
|
|
| - DCHECK(can_use_record || fallback_factory_);
|
| -
|
| if (can_use_record) {
|
| return previous_frame_;
|
| }
|
| @@ -320,9 +315,8 @@ bool RecordingImageBufferSurface::FinalizeFrameInternal(
|
| return false;
|
| }
|
|
|
| - if (fallback_factory_ &&
|
| - current_frame_->getRecordingCanvas()->getSaveCount() - 1 >
|
| - ExpensiveCanvasHeuristicParameters::kExpensiveRecordingStackDepth) {
|
| + if (current_frame_->getRecordingCanvas()->getSaveCount() - 1 >
|
| + ExpensiveCanvasHeuristicParameters::kExpensiveRecordingStackDepth) {
|
| // (getSaveCount() decremented to account for the intial recording canvas
|
| // save frame.)
|
| *fallback_reason = kFallbackReasonRunawayStateStack;
|
|
|