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

Unified Diff: third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp

Issue 2849463005: Refactor ImageBuffer to make OffscreenCanvas match HTMLCanvasElement (Closed)
Patch Set: x Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
diff --git a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
index 686f2ada187a97216ac8c8b2d231486b72b5a9d9..9ffa5ffdcf4af39327929ad294d5a5e9326a4f53 100644
--- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
@@ -295,7 +295,7 @@ CanvasRenderingContext* HTMLCanvasElement::GetCanvasRenderingContext(
bool HTMLCanvasElement::ShouldBeDirectComposited() const {
return (context_ && context_->IsComposited()) ||
- (HasImageBuffer() && Buffer()->IsExpensiveToPaint()) ||
+ (HasImageBuffer() && GetImageBuffer()->IsExpensiveToPaint()) ||
(!!surface_layer_bridge_);
}
@@ -324,7 +324,7 @@ void HTMLCanvasElement::DidDraw(const FloatRect& rect) {
dirty_rect_.Unite(rect);
}
if (Is2d() && HasImageBuffer())
- Buffer()->DidDraw(rect);
+ GetImageBuffer()->DidDraw(rect);
}
void HTMLCanvasElement::DidDraw() {
@@ -432,7 +432,7 @@ void HTMLCanvasElement::DoDeferredPaintInvalidation() {
if (RuntimeEnabledFeatures::
enableCanvas2dDynamicRenderingModeSwitchingEnabled() &&
!RuntimeEnabledFeatures::canvas2dFixedRenderingModeEnabled()) {
- if (Is2d() && HasImageBuffer() && Buffer()->IsAccelerated() &&
+ if (Is2d() && HasImageBuffer() && GetImageBuffer()->IsAccelerated() &&
num_frames_since_last_rendering_mode_switch_ >=
ExpensiveCanvasHeuristicParameters::kMinFramesBeforeSwitch &&
!pending_rendering_mode_switch_) {
@@ -454,8 +454,8 @@ void HTMLCanvasElement::DoDeferredPaintInvalidation() {
}
}
- if (pending_rendering_mode_switch_ && Buffer() &&
- !Buffer()->IsAccelerated()) {
+ if (pending_rendering_mode_switch_ && GetImageBuffer() &&
+ !GetImageBuffer()->IsAccelerated()) {
pending_rendering_mode_switch_ = false;
}
@@ -488,7 +488,7 @@ void HTMLCanvasElement::Reset() {
// If the size of an existing buffer matches, we can just clear it instead of
// reallocating. This optimization is only done for 2D canvases for now.
if (had_image_buffer && old_size == new_size && Is2d() &&
- !Buffer()->IsRecording()) {
+ !GetImageBuffer()->IsRecording()) {
if (!image_buffer_is_clear_) {
image_buffer_is_clear_ = true;
context_->clearRect(0, 0, width(), height());
@@ -601,7 +601,8 @@ void HTMLCanvasElement::Paint(GraphicsContext& context, const LayoutRect& r) {
!context_ || context_->CreationAttributes().alpha()
? SkBlendMode::kSrcOver
: SkBlendMode::kSrc;
- Buffer()->Draw(context, PixelSnappedIntRect(r), 0, composite_operator);
+ GetImageBuffer()->Draw(context, PixelSnappedIntRect(r), 0,
+ composite_operator);
}
} else {
// When alpha is false, we should draw to opaque black.
@@ -642,7 +643,7 @@ const AtomicString HTMLCanvasElement::ImageSourceURL() const {
void HTMLCanvasElement::PrepareSurfaceForPaintingIfNeeded() const {
DCHECK(Is2d()); // This function is called by the 2d context
- if (Buffer())
+ if (GetImageBuffer())
image_buffer_->PrepareSurfaceForPaintingIfNeeded();
}
@@ -660,7 +661,7 @@ ImageData* HTMLCanvasElement::ToImageData(SourceDrawingBuffer source_buffer,
image_data = ImageData::Create(size_);
if (image_data && HasImageBuffer()) {
sk_sp<SkImage> snapshot =
- Buffer()->NewSkImageSnapshot(kPreferNoAcceleration, reason);
+ GetImageBuffer()->NewSkImageSnapshot(kPreferNoAcceleration, reason);
if (snapshot) {
SkImageInfo image_info = SkImageInfo::Make(
width(), height(), kRGBA_8888_SkColorType, kUnpremul_SkAlphaType);
@@ -679,7 +680,8 @@ ImageData* HTMLCanvasElement::ToImageData(SourceDrawingBuffer source_buffer,
DCHECK(Is2d() || PlaceholderFrame());
sk_sp<SkImage> snapshot;
if (HasImageBuffer()) {
- snapshot = Buffer()->NewSkImageSnapshot(kPreferNoAcceleration, reason);
+ snapshot =
+ GetImageBuffer()->NewSkImageSnapshot(kPreferNoAcceleration, reason);
} else if (PlaceholderFrame()) {
DCHECK(PlaceholderFrame()->OriginClean());
snapshot = PlaceholderFrame()->ImageForCurrentFrame();
@@ -1095,11 +1097,11 @@ void HTMLCanvasElement::UpdateExternallyAllocatedMemory() const {
}
PaintCanvas* HTMLCanvasElement::DrawingCanvas() const {
- return Buffer() ? image_buffer_->Canvas() : nullptr;
+ return GetImageBuffer() ? image_buffer_->Canvas() : nullptr;
}
void HTMLCanvasElement::DisableDeferral(DisableDeferralReason reason) const {
- if (Buffer())
+ if (GetImageBuffer())
image_buffer_->DisableDeferral(reason);
}
@@ -1110,7 +1112,7 @@ PaintCanvas* HTMLCanvasElement::ExistingDrawingCanvas() const {
return image_buffer_->Canvas();
}
-ImageBuffer* HTMLCanvasElement::Buffer() const {
+ImageBuffer* HTMLCanvasElement::GetImageBuffer() const {
Justin Novosad 2017/05/01 15:18:57 Nit (existed before this CL): This function does n
fserb 2017/05/02 18:49:30 done
DCHECK(context_);
DCHECK(context_->GetContextType() !=
CanvasRenderingContext::kContextImageBitmap);
@@ -1163,8 +1165,8 @@ PassRefPtr<Image> HTMLCanvasElement::CopiedImage(
// The concept of SourceDrawingBuffer is valid on only WebGL.
if (context_->Is3d())
need_to_update |= context_->PaintRenderingResultsToCanvas(source_buffer);
- if (need_to_update && Buffer()) {
- copied_image_ = Buffer()->NewImageSnapshot(hint, snapshot_reason);
+ if (need_to_update && GetImageBuffer()) {
+ copied_image_ = GetImageBuffer()->NewImageSnapshot(hint, snapshot_reason);
UpdateExternallyAllocatedMemory();
}
return copied_image_;
@@ -1222,7 +1224,7 @@ void HTMLCanvasElement::DidMoveToNewDocument(Document& old_document) {
void HTMLCanvasElement::WillDrawImageTo2DContext(CanvasImageSource* source) {
if (ExpensiveCanvasHeuristicParameters::kEnableAccelerationToAvoidReadbacks &&
SharedGpuContext::AllowSoftwareToAcceleratedCanvasUpgrade() &&
- source->IsAccelerated() && !Buffer()->IsAccelerated() &&
+ source->IsAccelerated() && !GetImageBuffer()->IsAccelerated() &&
ShouldAccelerate(kIgnoreResourceLimitCriteria)) {
OpacityMode opacity_mode =
context_->CreationAttributes().alpha() ? kNonOpaque : kOpaque;
@@ -1230,7 +1232,7 @@ void HTMLCanvasElement::WillDrawImageTo2DContext(CanvasImageSource* source) {
std::unique_ptr<ImageBufferSurface> surface =
CreateAcceleratedImageBufferSurface(opacity_mode, &msaa_sample_count);
if (surface) {
- Buffer()->SetSurface(std::move(surface));
+ GetImageBuffer()->SetSurface(std::move(surface));
SetNeedsCompositingUpdate();
}
}
@@ -1277,7 +1279,7 @@ PassRefPtr<Image> HTMLCanvasElement::GetSourceImageForCanvas(
// cached copy of the backing in the canvas's ImageBuffer.
RenderingContext()->PaintRenderingResultsToCanvas(kBackBuffer);
if (HasImageBuffer()) {
- sk_image = Buffer()->NewSkImageSnapshot(hint, reason);
+ sk_image = GetImageBuffer()->NewSkImageSnapshot(hint, reason);
} else {
sk_image = CreateTransparentSkImage(Size());
}
@@ -1286,8 +1288,8 @@ PassRefPtr<Image> HTMLCanvasElement::GetSourceImageForCanvas(
kDisableAccelerationToAvoidReadbacks &&
!RuntimeEnabledFeatures::canvas2dFixedRenderingModeEnabled() &&
hint == kPreferNoAcceleration && HasImageBuffer() &&
- Buffer()->IsAccelerated()) {
- Buffer()->DisableAcceleration();
+ GetImageBuffer()->IsAccelerated()) {
+ GetImageBuffer()->DisableAcceleration();
}
RefPtr<Image> image = RenderingContext()->GetImage(hint, reason);
if (image) {

Powered by Google App Engine
This is Rietveld 408576698