Skip to content

Commit 8e8f978

Browse files
authored
browser(webkit): scale screencast frames on resize (#2441)
1 parent c02a862 commit 8e8f978

File tree

2 files changed

+67
-85
lines changed

2 files changed

+67
-85
lines changed

browser_patches/webkit/BUILD_NUMBER

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1252
1+
1253

browser_patches/webkit/patches/bootstrap.diff

Lines changed: 66 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -5334,32 +5334,6 @@ index 892d8de6d345d91fda80cfa5334c4aa68b757da3..a22497d801a349487be10b15139e9c76
53345334
#endif
53355335

53365336
#if PLATFORM(IOS_FAMILY)
5337-
diff --git a/Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp b/Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp
5338-
index 34d935b359e2e74278928f7b5358ad3ea7a70ae2..ad6dbb9c9196baa9c1d280a8fe107a77f5457c2a 100644
5339-
--- a/Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp
5340-
+++ b/Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp
5341-
@@ -50,6 +50,10 @@
5342-
#include <cairo-gl.h>
5343-
#endif
5344-
5345-
+#if PLATFORM(GTK)
5346-
+#include <cairo-xlib.h>
5347-
+#endif
5348-
+
5349-
#if OS(WINDOWS)
5350-
#include <cairo-win32.h>
5351-
#endif
5352-
@@ -331,6 +335,10 @@ IntSize cairoSurfaceSize(cairo_surface_t* surface)
5353-
ASSERT(surface);
5354-
ASSERT(cairo_surface_get_type(surface) == CAIRO_SURFACE_TYPE_IMAGE);
5355-
return IntSize(cairo_image_surface_get_width(surface), cairo_image_surface_get_height(surface));
5356-
+#endif
5357-
+#if PLATFORM(GTK)
5358-
+ case CAIRO_SURFACE_TYPE_XLIB:
5359-
+ return IntSize(cairo_xlib_surface_get_width(surface), cairo_xlib_surface_get_height(surface));
5360-
#endif
5361-
default:
5362-
ASSERT_NOT_REACHED();
53635337
diff --git a/Source/WebCore/platform/graphics/cairo/ImageBufferUtilitiesCairo.cpp b/Source/WebCore/platform/graphics/cairo/ImageBufferUtilitiesCairo.cpp
53645338
index d79728555b7db9b59cb615c55a7a7a6851cb57c8..61d3cc4b488e35ef9e1afa1ce3ac5f5d60ebe9a7 100644
53655339
--- a/Source/WebCore/platform/graphics/cairo/ImageBufferUtilitiesCairo.cpp
@@ -8508,7 +8482,7 @@ index 6bbd1cabd27ae2847648a8c2edcf9acfcd556ff5..38d101b9a96986e40f6e9f0261fa429a
85088482
{
85098483
m_hasReceivedFirstUpdate = true;
85108484
diff --git a/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h b/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h
8511-
index d7695088e7cfc4f638f157338754f9f157489749..2a5ebd52478027c65d66551b77becbfb006a95c4 100644
8485+
index d7695088e7cfc4f638f157338754f9f157489749..74a3654235d5e24a39d3714ec4d2f45a8803c816 100644
85128486
--- a/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h
85138487
+++ b/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h
85148488
@@ -30,6 +30,8 @@
@@ -8526,12 +8500,12 @@ index d7695088e7cfc4f638f157338754f9f157489749..2a5ebd52478027c65d66551b77becbfb
85268500
const LayerTreeContext& layerTreeContext() const { return m_layerTreeContext; }
85278501
+ void waitForSizeUpdate(Function<void ()>&&);
85288502
+
8529-
+ using PaintCallback = Function<void(cairo_surface_t*)>;
8503+
+ using PaintCallback = Function<void(cairo_surface_t*, WebCore::IntSize)>;
85308504
+ void setPaintCallback(PaintCallback&& callback) { m_paintCallback = WTFMove(callback); }
8531-
+ void didPaint(cairo_surface_t* surface)
8505+
+ void didPaint(cairo_surface_t* surface, WebCore::IntSize size)
85328506
+ {
85338507
+ if (m_paintCallback)
8534-
+ m_paintCallback(surface);
8508+
+ m_paintCallback(surface, size);
85358509
+ }
85368510

85378511
private:
@@ -8654,7 +8628,7 @@ index 59cdfdafab1d85ea3a5aecb3cd2293e6dfb1eb8d..52fe7990b1c18b964ee3cfa9f324e3c2
86548628
// The timeout we use when waiting for a DidUpdateGeometry message.
86558629
diff --git a/Source/WebKit/UIProcess/Inspector/Agents/InspectorScreencastAgent.cpp b/Source/WebKit/UIProcess/Inspector/Agents/InspectorScreencastAgent.cpp
86568630
new file mode 100644
8657-
index 0000000000000000000000000000000000000000..b58cea323c822ca6352e1cf907ab214e25345592
8631+
index 0000000000000000000000000000000000000000..c7257e534657af462bd095e6f5150b7a316c906d
86588632
--- /dev/null
86598633
+++ b/Source/WebKit/UIProcess/Inspector/Agents/InspectorScreencastAgent.cpp
86608634
@@ -0,0 +1,253 @@
@@ -8793,12 +8767,12 @@ index 0000000000000000000000000000000000000000..b58cea323c822ca6352e1cf907ab214e
87938767
+ }
87948768
+
87958769
+ if (auto* drawingArea = static_cast<DrawingAreaProxyCoordinatedGraphics*>(m_page.drawingArea())) {
8796-
+ m_encoder = ScreencastEncoder::create(errorString, file, drawingArea->size().width(), drawingArea->size().height());
8770+
+ m_encoder = ScreencastEncoder::create(errorString, file, drawingArea->size());
87978771
+ if (!m_encoder)
87988772
+ return;
87998773
+
8800-
+ drawingArea->setPaintCallback([encoder = m_encoder.get()] (cairo_surface_t* surface) {
8801-
+ encoder->encodeFrame(surface);
8774+
+ drawingArea->setPaintCallback([encoder = m_encoder.get()] (cairo_surface_t* surface, WebCore::IntSize size) {
8775+
+ encoder->encodeFrame(surface, size);
88028776
+ });
88038777
+ } else {
88048778
+ errorString = "Cannot get drawing area."_s;
@@ -9004,10 +8978,10 @@ index 0000000000000000000000000000000000000000..77d4a06e4717629916241dc47cb057f4
90048978
+} // namespace WebKit
90058979
diff --git a/Source/WebKit/UIProcess/Inspector/Agents/ScreencastEncoder.cpp b/Source/WebKit/UIProcess/Inspector/Agents/ScreencastEncoder.cpp
90068980
new file mode 100644
9007-
index 0000000000000000000000000000000000000000..46b324bf95e2d61fd4b9e67b7d646105fab943b1
8981+
index 0000000000000000000000000000000000000000..33ba73912ecfc92622d829ddde6fcea933728d4b
90088982
--- /dev/null
90098983
+++ b/Source/WebKit/UIProcess/Inspector/Agents/ScreencastEncoder.cpp
9010-
@@ -0,0 +1,400 @@
8984+
@@ -0,0 +1,406 @@
90118985
+/*
90128986
+ * Copyright (c) 2010, The WebM Project authors. All rights reserved.
90138987
+ * Copyright (c) 2013 The Chromium Authors. All rights reserved.
@@ -9038,7 +9012,6 @@ index 0000000000000000000000000000000000000000..46b324bf95e2d61fd4b9e67b7d646105
90389012
+#include "config.h"
90399013
+#include "ScreencastEncoder.h"
90409014
+
9041-
+#include <WebCore/CairoUtilities.h>
90429015
+#include <cairo.h>
90439016
+#include <libyuv.h>
90449017
+#include <vpx/vp8.h>
@@ -9057,17 +9030,17 @@ index 0000000000000000000000000000000000000000..46b324bf95e2d61fd4b9e67b7d646105
90579030
+// map for the encoder.
90589031
+const int kMacroBlockSize = 16;
90599032
+
9060-
+void createImage(IntSize size,
9033+
+void createImage(unsigned int width, unsigned int height,
90619034
+ std::unique_ptr<vpx_image_t>& out_image,
90629035
+ std::unique_ptr<uint8_t[]>& out_image_buffer) {
90639036
+ std::unique_ptr<vpx_image_t> image(new vpx_image_t());
90649037
+ memset(image.get(), 0, sizeof(vpx_image_t));
90659038
+
90669039
+ // libvpx seems to require both to be assigned.
9067-
+ image->d_w = size.width();
9068-
+ image->w = size.width();
9069-
+ image->d_h = size.height();
9070-
+ image->h = size.height();
9040+
+ image->d_w = width;
9041+
+ image->w = width;
9042+
+ image->d_h = height;
9043+
+ image->h = height;
90719044
+
90729045
+ // I420
90739046
+ image->fmt = VPX_IMG_FMT_YV12;
@@ -9170,48 +9143,37 @@ index 0000000000000000000000000000000000000000..46b324bf95e2d61fd4b9e67b7d646105
91709143
+ WTF_MAKE_NONCOPYABLE(VPXFrame);
91719144
+ WTF_MAKE_FAST_ALLOCATED;
91729145
+public:
9173-
+ VPXFrame(RefPtr<cairo_surface_t>&& surface, IntSize size)
9146+
+ explicit VPXFrame(RefPtr<cairo_surface_t>&& surface)
91749147
+ : m_surface(WTFMove(surface))
9175-
+ , m_size(size)
91769148
+ { }
91779149
+
91789150
+ void setDuration(int duration) { m_duration = duration; }
91799151
+ int duration() const { return m_duration; }
91809152
+
9181-
+ vpx_image_t* convertToVpxImage()
9153+
+ void convertToVpxImage(vpx_image_t* image)
91829154
+ {
9183-
+ if (m_image)
9184-
+ return m_image.get();
9185-
+
9186-
+ createImage(m_size, m_image, m_imageBuffer);
9187-
+
91889155
+ // Convert the updated region to YUV ready for encoding.
91899156
+ const uint8_t* rgba_data = cairo_image_surface_get_data(m_surface.get());
91909157
+ int rgba_stride = cairo_image_surface_get_stride(m_surface.get());
91919158
+
9192-
+ const int y_stride = m_image->stride[0];
9193-
+ ASSERT(m_image->stride[1] == m_image->stride[2]);
9194-
+ const int uv_stride = m_image->stride[1];
9195-
+ uint8_t* y_data = m_image->planes[0];
9196-
+ uint8_t* u_data = m_image->planes[1];
9197-
+ uint8_t* v_data = m_image->planes[2];
9159+
+ const int y_stride = image->stride[0];
9160+
+ ASSERT(image->stride[1] == image->stride[2]);
9161+
+ const int uv_stride = image->stride[1];
9162+
+ uint8_t* y_data = image->planes[0];
9163+
+ uint8_t* u_data = image->planes[1];
9164+
+ uint8_t* v_data = image->planes[2];
91989165
+
91999166
+ // TODO: redraw only damaged regions?
92009167
+ libyuv::ARGBToI420(rgba_data, rgba_stride,
92019168
+ y_data, y_stride,
92029169
+ u_data, uv_stride,
92039170
+ v_data, uv_stride,
9204-
+ m_size.width(), m_size.height());
9205-
+
9206-
+ return m_image.get();
9171+
+ image->w, image->h);
92079172
+ }
92089173
+
92099174
+private:
92109175
+ RefPtr<cairo_surface_t> m_surface;
9211-
+ IntSize m_size;
92129176
+ int m_duration = 0;
9213-
+ std::unique_ptr<uint8_t[]> m_imageBuffer;
9214-
+ std::unique_ptr<vpx_image_t> m_image;
92159177
+};
92169178
+
92179179
+
@@ -9225,12 +9187,15 @@ index 0000000000000000000000000000000000000000..46b324bf95e2d61fd4b9e67b7d646105
92259187
+ , m_file(file)
92269188
+ {
92279189
+ ivf_write_file_header(m_file, &m_cfg, m_fourcc, 0);
9190+
+
9191+
+ createImage(cfg.g_w, cfg.g_h, m_image, m_imageBuffer);
92289192
+ }
92299193
+
92309194
+ void encodeFrameAsync(std::unique_ptr<VPXFrame>&& frame)
92319195
+ {
92329196
+ m_encoderQueue->dispatch([this, frame = WTFMove(frame)] {
9233-
+ encodeFrame(frame->convertToVpxImage(), frame->duration());
9197+
+ frame->convertToVpxImage(m_image.get());
9198+
+ encodeFrame(m_image.get(), frame->duration());
92349199
+ });
92359200
+ }
92369201
+
@@ -9294,11 +9259,15 @@ index 0000000000000000000000000000000000000000..46b324bf95e2d61fd4b9e67b7d646105
92949259
+ FILE* m_file { nullptr };
92959260
+ int m_frameCount { 0 };
92969261
+ int64_t m_pts { 0 };
9262+
+ std::unique_ptr<uint8_t[]> m_imageBuffer;
9263+
+ std::unique_ptr<vpx_image_t> m_image;
92979264
+};
92989265
+
9299-
+ScreencastEncoder::ScreencastEncoder(std::unique_ptr<VPXCodec>&& vpxCodec)
9266+
+ScreencastEncoder::ScreencastEncoder(std::unique_ptr<VPXCodec>&& vpxCodec, IntSize size)
93009267
+ : m_vpxCodec(WTFMove(vpxCodec))
9268+
+ , m_size(size)
93019269
+{
9270+
+ ASSERT(!size.isZero());
93029271
+}
93039272
+
93049273
+ScreencastEncoder::~ScreencastEncoder()
@@ -9311,7 +9280,7 @@ index 0000000000000000000000000000000000000000..46b324bf95e2d61fd4b9e67b7d646105
93119280
+static const int fps = 30;
93129281
+
93139282
+
9314-
+RefPtr<ScreencastEncoder> ScreencastEncoder::create(String& errorString, const String& filePath, int w, int h)
9283+
+RefPtr<ScreencastEncoder> ScreencastEncoder::create(String& errorString, const String& filePath, IntSize size)
93159284
+{
93169285
+ const uint32_t fourcc = VP8_FOURCC;
93179286
+ vpx_codec_iface_t* codec_interface = vpx_codec_vp8_cx();
@@ -9320,8 +9289,8 @@ index 0000000000000000000000000000000000000000..46b324bf95e2d61fd4b9e67b7d646105
93209289
+ return nullptr;
93219290
+ }
93229291
+
9323-
+ if (w <= 0 || h <= 0 || (w % 2) != 0 || (h % 2) != 0) {
9324-
+ errorString = makeString("Invalid frame size: "_s, w, "x"_s, h);
9292+
+ if (size.width() <= 0 || size.height() <= 0 || (size.width() % 2) != 0 || (size.height() % 2) != 0) {
9293+
+ errorString = makeString("Invalid frame size: "_s, size.width(), "x"_s, size.height());
93259294
+ return nullptr;
93269295
+ }
93279296
+
@@ -9333,8 +9302,8 @@ index 0000000000000000000000000000000000000000..46b324bf95e2d61fd4b9e67b7d646105
93339302
+ return nullptr;
93349303
+ }
93359304
+
9336-
+ cfg.g_w = w;
9337-
+ cfg.g_h = h;
9305+
+ cfg.g_w = size.width();
9306+
+ cfg.g_h = size.height();
93389307
+ cfg.g_timebase.num = 1;
93399308
+ cfg.g_timebase.den = fps;
93409309
+ cfg.g_error_resilient = VPX_ERROR_RESILIENT_DEFAULT;
@@ -9353,7 +9322,7 @@ index 0000000000000000000000000000000000000000..46b324bf95e2d61fd4b9e67b7d646105
93539322
+
93549323
+ std::unique_ptr<VPXCodec> vpxCodec(new VPXCodec(fourcc, codec, cfg, file));
93559324
+ fprintf(stderr, "ScreencastEncoder initialized with: %s\n", vpx_codec_iface_name(codec_interface));
9356-
+ return adoptRef(new ScreencastEncoder(WTFMove(vpxCodec)));
9325+
+ return adoptRef(new ScreencastEncoder(WTFMove(vpxCodec), size));
93579326
+}
93589327
+
93599328
+void ScreencastEncoder::flushLastFrame()
@@ -9368,27 +9337,38 @@ index 0000000000000000000000000000000000000000..46b324bf95e2d61fd4b9e67b7d646105
93689337
+ m_lastFrameTimestamp = now;
93699338
+}
93709339
+
9371-
+void ScreencastEncoder::encodeFrame(cairo_surface_t* drawingAreaSurface)
9340+
+void ScreencastEncoder::encodeFrame(cairo_surface_t* drawingAreaSurface, IntSize size)
93729341
+{
93739342
+ fprintf(stderr, "ScreencastEncoder::encodeFrame\n");
93749343
+ flushLastFrame();
9375-
+ IntSize size = cairoSurfaceSize(drawingAreaSurface);
93769344
+ if (size.isZero()) {
93779345
+ fprintf(stderr, "Cairo surface size is 0\n");
93789346
+ return;
93799347
+ }
93809348
+
9381-
+ // TODO: scale image if the size has changed.
93829349
+ // TODO: adjust device scale factor?
9383-
+ RefPtr<cairo_surface_t> surface = adoptRef(cairo_image_surface_create(CAIRO_FORMAT_ARGB32, size.width(), size.height()));
9350+
+ RefPtr<cairo_surface_t> surface = adoptRef(cairo_image_surface_create(CAIRO_FORMAT_ARGB32, m_size.width(), m_size.height()));
93849351
+ {
93859352
+ RefPtr<cairo_t> cr = adoptRef(cairo_create(surface.get()));
9353+
+
9354+
+ cairo_matrix_t transform;
9355+
+ if (size.width() > m_size.width() || size.height() > m_size.height()) {
9356+
+ double sx = static_cast<double>(m_size.width()) / size.width();
9357+
+ double sy = static_cast<double>(m_size.height()) / size.height();
9358+
+ if (sx < sy)
9359+
+ sy = sx;
9360+
+ else
9361+
+ sx = sy;
9362+
+ cairo_matrix_init_scale(&transform, sx, sy);
9363+
+ cairo_transform(cr.get(), &transform);
9364+
+ }
9365+
+
93869366
+ cairo_set_source_surface(cr.get(), drawingAreaSurface, 0, 0);
93879367
+ cairo_paint(cr.get());
93889368
+ }
93899369
+ cairo_surface_flush(surface.get());
93909370
+
9391-
+ m_lastFrame = makeUnique<VPXFrame>(WTFMove(surface), size);
9371+
+ m_lastFrame = makeUnique<VPXFrame>(WTFMove(surface));
93929372
+}
93939373
+
93949374
+void ScreencastEncoder::finish(Function<void()>&& callback)
@@ -9410,10 +9390,10 @@ index 0000000000000000000000000000000000000000..46b324bf95e2d61fd4b9e67b7d646105
94109390
+} // namespace WebKit
94119391
diff --git a/Source/WebKit/UIProcess/Inspector/Agents/ScreencastEncoder.h b/Source/WebKit/UIProcess/Inspector/Agents/ScreencastEncoder.h
94129392
new file mode 100644
9413-
index 0000000000000000000000000000000000000000..b0c8e5aadcdc44e741fe1b2df5f28eee20f7be3f
9393+
index 0000000000000000000000000000000000000000..01993e4925b6bea6741873e503f1fc3b401facee
94149394
--- /dev/null
94159395
+++ b/Source/WebKit/UIProcess/Inspector/Agents/ScreencastEncoder.h
9416-
@@ -0,0 +1,59 @@
9396+
@@ -0,0 +1,61 @@
94179397
+/*
94189398
+ * Copyright (C) 2020 Microsoft Corporation.
94199399
+ *
@@ -9441,6 +9421,7 @@ index 0000000000000000000000000000000000000000..b0c8e5aadcdc44e741fe1b2df5f28eee
94419421
+
94429422
+#pragma once
94439423
+
9424+
+#include <WebCore/IntSize.h>
94449425
+#include <wtf/Forward.h>
94459426
+#include <wtf/Noncopyable.h>
94469427
+#include <wtf/ThreadSafeRefCounted.h>
@@ -9454,19 +9435,20 @@ index 0000000000000000000000000000000000000000..b0c8e5aadcdc44e741fe1b2df5f28eee
94549435
+ WTF_MAKE_NONCOPYABLE(ScreencastEncoder);
94559436
+ WTF_MAKE_FAST_ALLOCATED;
94569437
+public:
9457-
+ static RefPtr<ScreencastEncoder> create(String& errorString, const String& filePath, int width, int height);
9438+
+ static RefPtr<ScreencastEncoder> create(String& errorString, const String& filePath, WebCore::IntSize);
94589439
+
94599440
+ class VPXCodec;
9460-
+ explicit ScreencastEncoder(std::unique_ptr<VPXCodec>&&);
9441+
+ ScreencastEncoder(std::unique_ptr<VPXCodec>&&, WebCore::IntSize);
94619442
+ ~ScreencastEncoder();
94629443
+
9463-
+ void encodeFrame(cairo_surface_t*);
9444+
+ void encodeFrame(cairo_surface_t*, WebCore::IntSize);
94649445
+ void finish(Function<void()>&& callback);
94659446
+
94669447
+private:
94679448
+ void flushLastFrame();
94689449
+
94699450
+ std::unique_ptr<VPXCodec> m_vpxCodec;
9451+
+ const WebCore::IntSize m_size;
94709452
+ MonotonicTime m_lastFrameTimestamp;
94719453
+ class VPXFrame;
94729454
+ std::unique_ptr<VPXFrame> m_lastFrame;
@@ -12745,7 +12727,7 @@ index 964c6315e38f5e0a0303febce45b1e975054f0b4..117d8c7c74bc81b34cfc0fe2b11a5429
1274512727
UniqueRef<SOAuthorizationCoordinator> m_soAuthorizationCoordinator;
1274612728
#endif
1274712729
diff --git a/Source/WebKit/UIProcess/cairo/BackingStoreCairo.cpp b/Source/WebKit/UIProcess/cairo/BackingStoreCairo.cpp
12748-
index dc0a70b8824afdc7ec3dd1f69f4d9b51942924f6..012bf01a2307986292589ab1808f1df05dc060f7 100644
12730+
index dc0a70b8824afdc7ec3dd1f69f4d9b51942924f6..f31988b5b9b896f17994bcf15c72b5f384d65afb 100644
1274912731
--- a/Source/WebKit/UIProcess/cairo/BackingStoreCairo.cpp
1275012732
+++ b/Source/WebKit/UIProcess/cairo/BackingStoreCairo.cpp
1275112733
@@ -27,6 +27,7 @@
@@ -12762,7 +12744,7 @@ index dc0a70b8824afdc7ec3dd1f69f4d9b51942924f6..012bf01a2307986292589ab1808f1df0
1276212744
cairo_restore(context);
1276312745
+#if PLATFORM(GTK)
1276412746
+ if (auto* drawingArea = static_cast<DrawingAreaProxyCoordinatedGraphics*>(m_webPageProxy.drawingArea()))
12765-
+ drawingArea->didPaint(m_backend->surface());
12747+
+ drawingArea->didPaint(m_backend->surface(), drawingArea->size());
1276612748
+#endif
1276712749
}
1276812750

@@ -13017,15 +12999,15 @@ index 0000000000000000000000000000000000000000..df62288c96e8ffda5b318b2c28beb2d7
1301712999
+
1301813000
+#endif // ENABLE(REMOTE_INSPECTOR)
1301913001
diff --git a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreX11.cpp b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreX11.cpp
13020-
index be19b6007c9c0fbfffb859e40fd34751493fe7d1..bedd37fb70f878b9bf87beef0f9968c1ec24457e 100644
13002+
index be19b6007c9c0fbfffb859e40fd34751493fe7d1..dd51b743f0bb5ba5a537edd1caf0005054c89839 100644
1302113003
--- a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreX11.cpp
1302213004
+++ b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreX11.cpp
1302313005
@@ -256,6 +256,9 @@ bool AcceleratedBackingStoreX11::paint(cairo_t* cr, const IntRect& clipRect)
1302413006

1302513007
cairo_restore(cr);
1302613008

1302713009
+ if (auto* drawingArea = static_cast<DrawingAreaProxyCoordinatedGraphics*>(m_webPage.drawingArea()))
13028-
+ drawingArea->didPaint(m_surface.get());
13010+
+ drawingArea->didPaint(m_surface.get(), drawingArea->size());
1302913011
+
1303013012
cairo_surface_flush(m_surface.get());
1303113013

0 commit comments

Comments
 (0)