Skip to content

Commit

Permalink
Unite create 2D buffer functions in HTMLCanvasElement
Browse files Browse the repository at this point in the history
Change-Id: I344505d0dee7370ebef2d4de885c53befe9540b8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2216273
Reviewed-by: Fernando Serboncini <fserb@chromium.org>
Reviewed-by: Juanmi Huertas <juanmihd@chromium.org>
Commit-Queue: Aaron Krajeski <aaronhk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#773217}
  • Loading branch information
mysteryDate authored and Commit Bot committed May 29, 2020
1 parent 111bb19 commit 55fdafd
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 22 deletions.
34 changes: 14 additions & 20 deletions third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@
#include "third_party/blink/renderer/core/paint/paint_timing.h"
#include "third_party/blink/renderer/core/probe/core_probes.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.h"
#include "third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h"
#include "third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context.h"
#include "third_party/blink/renderer/platform/graphics/graphics_layer.h"
Expand Down Expand Up @@ -501,7 +500,7 @@ void HTMLCanvasElement::DisableAcceleration(
if (unaccelerated_bridge_used_for_testing)
bridge = std::move(unaccelerated_bridge_used_for_testing);
else
bridge = CreateUnaccelerated2dBuffer();
bridge = Create2DLayerBridge(Canvas2DLayerBridge::kDisableAcceleration);

if (bridge && canvas2d_bridge_)
ReplaceExisting2dLayerBridge(std::move(bridge));
Expand Down Expand Up @@ -1136,26 +1135,16 @@ unsigned HTMLCanvasElement::GetMSAASampleCountFor2dContext() const {
return GetDocument().GetSettings()->GetAccelerated2dCanvasMSAASampleCount();
}

std::unique_ptr<Canvas2DLayerBridge>
HTMLCanvasElement::CreateAccelerated2dBuffer() {
std::unique_ptr<Canvas2DLayerBridge> HTMLCanvasElement::Create2DLayerBridge(
Canvas2DLayerBridge::AccelerationMode acceleration_mode) {
auto surface = std::make_unique<Canvas2DLayerBridge>(
Size(), Canvas2DLayerBridge::kEnableAcceleration, ColorParams());
Size(), acceleration_mode, ColorParams());
if (!surface->IsValid())
return nullptr;

return surface;
}

std::unique_ptr<Canvas2DLayerBridge>
HTMLCanvasElement::CreateUnaccelerated2dBuffer() {
auto surface = std::make_unique<Canvas2DLayerBridge>(
Size(), Canvas2DLayerBridge::kDisableAcceleration, ColorParams());
if (surface->IsValid())
return surface;

return nullptr;
}

void HTMLCanvasElement::SetCanvas2DLayerBridgeInternal(
std::unique_ptr<Canvas2DLayerBridge> external_canvas2d_bridge) {
DCHECK(Is2d() && !canvas2d_bridge_);
Expand All @@ -1168,10 +1157,14 @@ void HTMLCanvasElement::SetCanvas2DLayerBridgeInternal(
if (external_canvas2d_bridge->IsValid())
canvas2d_bridge_ = std::move(external_canvas2d_bridge);
} else {
if (ShouldAccelerate(kNormalAccelerationCriteria))
canvas2d_bridge_ = CreateAccelerated2dBuffer();
if (!canvas2d_bridge_)
canvas2d_bridge_ = CreateUnaccelerated2dBuffer();
if (ShouldAccelerate(kNormalAccelerationCriteria)) {
canvas2d_bridge_ =
Create2DLayerBridge(Canvas2DLayerBridge::kEnableAcceleration);
}
if (!canvas2d_bridge_) {
canvas2d_bridge_ =
Create2DLayerBridge(Canvas2DLayerBridge::kDisableAcceleration);
}
}

if (!canvas2d_bridge_)
Expand Down Expand Up @@ -1280,7 +1273,8 @@ void HTMLCanvasElement::WillDrawImageTo2DContext(CanvasImageSource* source) {
source->IsAccelerated() && GetOrCreateCanvas2DLayerBridge() &&
!canvas2d_bridge_->IsAccelerated() &&
ShouldAccelerate(kIgnoreResourceLimitCriteria)) {
std::unique_ptr<Canvas2DLayerBridge> surface = CreateAccelerated2dBuffer();
std::unique_ptr<Canvas2DLayerBridge> surface =
Create2DLayerBridge(Canvas2DLayerBridge::kEnableAcceleration);
if (surface) {
ReplaceExisting2dLayerBridge(std::move(surface));
SetNeedsCompositingUpdate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
#include "third_party/blink/renderer/core/typed_arrays/dom_typed_array.h"
#include "third_party/blink/renderer/platform/geometry/float_rect.h"
#include "third_party/blink/renderer/platform/geometry/int_size.h"
#include "third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.h"
#include "third_party/blink/renderer/platform/graphics/canvas_resource_host.h"
#include "third_party/blink/renderer/platform/graphics/canvas_resource_provider.h"
#include "third_party/blink/renderer/platform/graphics/graphics_types.h"
Expand Down Expand Up @@ -341,8 +342,8 @@ class CORE_EXPORT HTMLCanvasElement final

void Reset();

std::unique_ptr<Canvas2DLayerBridge> CreateAccelerated2dBuffer();
std::unique_ptr<Canvas2DLayerBridge> CreateUnaccelerated2dBuffer();
std::unique_ptr<Canvas2DLayerBridge> Create2DLayerBridge(
Canvas2DLayerBridge::AccelerationMode acceleration_mode);
void SetCanvas2DLayerBridgeInternal(std::unique_ptr<Canvas2DLayerBridge>);

void SetSurfaceSize(const IntSize&);
Expand Down

0 comments on commit 55fdafd

Please sign in to comment.