Added fix for mozbz#1627469
This commit is contained in:
parent
143fa360a2
commit
2f14c4ee29
@ -118,7 +118,7 @@ ExcludeArch: s390x
|
||||
Summary: Mozilla Firefox Web browser
|
||||
Name: firefox
|
||||
Version: 74.0.1
|
||||
Release: 2%{?nss_tag}%{?dist}
|
||||
Release: 3%{?nss_tag}%{?dist}
|
||||
URL: https://www.mozilla.org/firefox/
|
||||
License: MPLv1.1 or GPLv2+ or LGPLv2+
|
||||
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz
|
||||
@ -192,6 +192,7 @@ Patch574: firefox-pipewire.patch
|
||||
Patch575: mozilla-1609538.patch
|
||||
Patch576: mozilla-1623060.patch
|
||||
Patch577: mozilla-1624745.patch
|
||||
Patch578: mozilla-1627469.patch
|
||||
|
||||
# PGO/LTO patches
|
||||
Patch600: pgo.patch
|
||||
@ -403,6 +404,7 @@ This package contains results of tests executed during build.
|
||||
%patch575 -p1 -b .mozilla-1609538
|
||||
%patch576 -p1 -b .mozilla-1623060
|
||||
%patch577 -p1 -b .mozilla-1624745
|
||||
%patch578 -p1 -b .mozilla-1627469
|
||||
|
||||
# PGO patches
|
||||
%patch600 -p1 -b .pgo
|
||||
@ -969,6 +971,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
%changelog
|
||||
* Mon Apr 06 2020 Martin Stransky <stransky@redhat.com> - 74.0.1-3
|
||||
- Added fix for mozbz#1627469
|
||||
|
||||
* Mon Apr 06 2020 Jan Horak <jhorak@redhat.com> - 74.0.1-2
|
||||
- Fixing pipewire patch
|
||||
|
||||
|
113
mozilla-1627469.patch
Normal file
113
mozilla-1627469.patch
Normal file
@ -0,0 +1,113 @@
|
||||
diff -up firefox-74.0.1/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1627469 firefox-74.0.1/widget/gtk/WindowSurfaceWayland.cpp
|
||||
--- firefox-74.0.1/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1627469 2020-04-06 15:07:16.772431937 +0200
|
||||
+++ firefox-74.0.1/widget/gtk/WindowSurfaceWayland.cpp 2020-04-06 15:09:57.037320477 +0200
|
||||
@@ -647,13 +647,14 @@ WindowBackBuffer* WindowSurfaceWayland::
|
||||
LOGWAYLAND(
|
||||
("WindowSurfaceWayland::NewWaylandBuffer [%p] Requested buffer [%d "
|
||||
"x %d] DMABuf %d\n",
|
||||
- (void*)this, mWidgetRect.width, mWidgetRect.height, aUseDMABufBackend));
|
||||
+ (void*)this, mWLBufferRect.width, mWLBufferRect.height,
|
||||
+ aUseDMABufBackend));
|
||||
|
||||
mWaylandBuffer = WaylandBufferFindAvailable(
|
||||
- mWidgetRect.width, mWidgetRect.height, aUseDMABufBackend);
|
||||
+ mWLBufferRect.width, mWLBufferRect.height, aUseDMABufBackend);
|
||||
if (!mWaylandBuffer) {
|
||||
- mWaylandBuffer = CreateWaylandBuffer(mWidgetRect.width, mWidgetRect.height,
|
||||
- aUseDMABufBackend);
|
||||
+ mWaylandBuffer = CreateWaylandBuffer(
|
||||
+ mWLBufferRect.width, mWLBufferRect.height, aUseDMABufBackend);
|
||||
}
|
||||
|
||||
return mWaylandBuffer;
|
||||
@@ -663,7 +664,7 @@ WindowBackBuffer* WindowSurfaceWayland::
|
||||
LOGWAYLAND(
|
||||
("WindowSurfaceWayland::GetWaylandBufferRecent [%p] Requested buffer [%d "
|
||||
"x %d]\n",
|
||||
- (void*)this, mWidgetRect.width, mWidgetRect.height));
|
||||
+ (void*)this, mWLBufferRect.width, mWLBufferRect.height));
|
||||
|
||||
// There's no buffer created yet, create a new one for partial screen updates.
|
||||
if (!mWaylandBuffer) {
|
||||
@@ -675,9 +676,10 @@ WindowBackBuffer* WindowSurfaceWayland::
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
- if (mWaylandBuffer->IsMatchingSize(mWidgetRect.width, mWidgetRect.height)) {
|
||||
- LOGWAYLAND((" Size is ok, use the buffer [%d x %d]\n", mWidgetRect.width,
|
||||
- mWidgetRect.height));
|
||||
+ if (mWaylandBuffer->IsMatchingSize(mWLBufferRect.width,
|
||||
+ mWLBufferRect.height)) {
|
||||
+ LOGWAYLAND((" Size is ok, use the buffer [%d x %d]\n",
|
||||
+ mWLBufferRect.width, mWLBufferRect.height));
|
||||
return mWaylandBuffer;
|
||||
}
|
||||
|
||||
@@ -692,7 +694,7 @@ WindowBackBuffer* WindowSurfaceWayland::
|
||||
LOGWAYLAND(
|
||||
("WindowSurfaceWayland::GetWaylandBufferWithSwitch [%p] Requested buffer "
|
||||
"[%d x %d]\n",
|
||||
- (void*)this, mWidgetRect.width, mWidgetRect.height));
|
||||
+ (void*)this, mWLBufferRect.width, mWLBufferRect.height));
|
||||
|
||||
// There's no buffer created yet or actual buffer is attached, get a new one.
|
||||
// Use DMABuf for fullscreen updates only.
|
||||
@@ -701,20 +703,21 @@ WindowBackBuffer* WindowSurfaceWayland::
|
||||
}
|
||||
|
||||
// Reuse existing buffer
|
||||
- LOGWAYLAND((" Reuse buffer with resize [%d x %d]\n", mWidgetRect.width,
|
||||
- mWidgetRect.height));
|
||||
+ LOGWAYLAND((" Reuse buffer with resize [%d x %d]\n", mWLBufferRect.width,
|
||||
+ mWLBufferRect.height));
|
||||
|
||||
// OOM here, just return null to skip this frame.
|
||||
- if (!mWaylandBuffer->Resize(mWidgetRect.width, mWidgetRect.height)) {
|
||||
+ if (!mWaylandBuffer->Resize(mWLBufferRect.width, mWLBufferRect.height)) {
|
||||
return nullptr;
|
||||
}
|
||||
return mWaylandBuffer;
|
||||
}
|
||||
|
||||
already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::LockWaylandBuffer() {
|
||||
- // Allocated wayland buffer must match widget size, otherwise wayland
|
||||
- // compositor is confused and may produce various rendering artifacts.
|
||||
- mWidgetRect = mWindow->GetMozContainerSize();
|
||||
+ // Allocated wayland buffer can't be bigger than mozilla widget size.
|
||||
+ LayoutDeviceIntRegion region;
|
||||
+ region.And(mLockedScreenRect, mWindow->GetMozContainerSize());
|
||||
+ mWLBufferRect = LayoutDeviceIntRect(region.GetBounds());
|
||||
|
||||
// mCanSwitchWaylandBuffer set means we're getting buffer for fullscreen
|
||||
// update. We can use DMABuf and we can get a new buffer for drawing.
|
||||
@@ -882,8 +885,8 @@ already_AddRefed<gfx::DrawTarget> Window
|
||||
LayoutDeviceIntRect size = mWindow->GetMozContainerSize();
|
||||
|
||||
// We can draw directly only when widget has the same size as wl_buffer
|
||||
- mDrawToWaylandBufferDirectly = (size.width == mLockedScreenRect.width &&
|
||||
- size.height == mLockedScreenRect.height);
|
||||
+ mDrawToWaylandBufferDirectly = (size.width >= mLockedScreenRect.width &&
|
||||
+ size.height >= mLockedScreenRect.height);
|
||||
|
||||
// We can draw directly only when we redraw significant part of the window
|
||||
// to avoid flickering.
|
||||
diff -up firefox-74.0.1/widget/gtk/WindowSurfaceWayland.h.mozilla-1627469 firefox-74.0.1/widget/gtk/WindowSurfaceWayland.h
|
||||
--- firefox-74.0.1/widget/gtk/WindowSurfaceWayland.h.mozilla-1627469 2020-04-06 15:07:16.773431931 +0200
|
||||
+++ firefox-74.0.1/widget/gtk/WindowSurfaceWayland.h 2020-04-06 15:07:16.775431919 +0200
|
||||
@@ -264,11 +264,11 @@ class WindowSurfaceWayland : public Wind
|
||||
// mLockedScreenRect is window size when our wayland buffer was allocated.
|
||||
LayoutDeviceIntRect mLockedScreenRect;
|
||||
|
||||
- // WidgetRect is an actual size of mozcontainer widget. It can be
|
||||
- // different than mLockedScreenRect during resize when mBounds are updated
|
||||
- // immediately but actual GtkWidget size is updated asynchronously
|
||||
- // (see Bug 1489463).
|
||||
- LayoutDeviceIntRect mWidgetRect;
|
||||
+ // mWLBufferRect is an intersection of mozcontainer widgetsize and
|
||||
+ // mLockedScreenRect size. It can be different than mLockedScreenRect
|
||||
+ // during resize when mBounds are updated immediately but actual
|
||||
+ // GtkWidget size is updated asynchronously (see Bug 1489463).
|
||||
+ LayoutDeviceIntRect mWLBufferRect;
|
||||
nsWaylandDisplay* mWaylandDisplay;
|
||||
|
||||
// Actual buffer (backed by wl_buffer) where all drawings go into.
|
Loading…
Reference in New Issue
Block a user