Added fix for mozbz#1693472 - Wayland/KDE rendering issues
This commit is contained in:
parent
92a764c2a3
commit
8f6a5e7dc4
@ -176,7 +176,7 @@ ExcludeArch: armv7hl
|
|||||||
Summary: Mozilla Firefox Web browser
|
Summary: Mozilla Firefox Web browser
|
||||||
Name: firefox
|
Name: firefox
|
||||||
Version: 87.0
|
Version: 87.0
|
||||||
Release: 5%{?pre_tag}%{?dist}
|
Release: 6%{?pre_tag}%{?dist}
|
||||||
URL: https://www.mozilla.org/firefox/
|
URL: https://www.mozilla.org/firefox/
|
||||||
License: MPLv1.1 or GPLv2+ or LGPLv2+
|
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
|
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz
|
||||||
@ -256,6 +256,7 @@ Patch402: mozilla-1196777.patch
|
|||||||
Patch407: mozilla-1667096.patch
|
Patch407: mozilla-1667096.patch
|
||||||
Patch408: mozilla-1663844.patch
|
Patch408: mozilla-1663844.patch
|
||||||
Patch415: mozilla-1670333.patch
|
Patch415: mozilla-1670333.patch
|
||||||
|
Patch416: mozilla-1693472.patch
|
||||||
|
|
||||||
# PGO/LTO patches
|
# PGO/LTO patches
|
||||||
Patch600: pgo.patch
|
Patch600: pgo.patch
|
||||||
@ -505,6 +506,7 @@ This package contains results of tests executed during build.
|
|||||||
%patch407 -p1 -b .1667096
|
%patch407 -p1 -b .1667096
|
||||||
%patch408 -p1 -b .1663844
|
%patch408 -p1 -b .1663844
|
||||||
%patch415 -p1 -b .1670333
|
%patch415 -p1 -b .1670333
|
||||||
|
%patch416 -p1 -b .1693472
|
||||||
|
|
||||||
# PGO patches
|
# PGO patches
|
||||||
%if %{build_with_pgo}
|
%if %{build_with_pgo}
|
||||||
@ -1080,6 +1082,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
|
|||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Mar 31 2021 Martin Stransky <stransky@redhat.com> - 87.0-6
|
||||||
|
- Added fix for mozbz#1693472 - Wayland/KDE rendering issues.
|
||||||
|
|
||||||
* Tue Mar 30 2021 Martin Stransky <stransky@redhat.com> - 87.0-5
|
* Tue Mar 30 2021 Martin Stransky <stransky@redhat.com> - 87.0-5
|
||||||
- Reftest fix
|
- Reftest fix
|
||||||
|
|
||||||
|
111
mozilla-1693472.patch
Normal file
111
mozilla-1693472.patch
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
changeset: 576074:12385afb25c9
|
||||||
|
tag: tip
|
||||||
|
parent: 576071:a3bc2d23debb
|
||||||
|
user: stransky <stransky@redhat.com>
|
||||||
|
date: Wed Mar 31 16:37:22 2021 +0200
|
||||||
|
files: modules/libpref/init/StaticPrefList.yaml widget/gtk/WindowSurfaceWayland.cpp widget/gtk/WindowSurfaceWayland.h
|
||||||
|
description:
|
||||||
|
Bug 1693472 [Wayland] Always use direct drawing on KWim, r?jhorak
|
||||||
|
|
||||||
|
Differential Revision: https://phabricator.services.mozilla.com/D110427
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
|
||||||
|
--- a/modules/libpref/init/StaticPrefList.yaml
|
||||||
|
+++ b/modules/libpref/init/StaticPrefList.yaml
|
||||||
|
@@ -10991,10 +10991,13 @@
|
||||||
|
mirror: always
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-# Use smooth rendering for Wayland basic compositor.
|
||||||
|
+# Smooth rendering mode for Wayland basic compositor.
|
||||||
|
+# 0 - direct draw
|
||||||
|
+# 1 - basic caching
|
||||||
|
+# 2 - all caching
|
||||||
|
- name: widget.wayland-smooth-rendering
|
||||||
|
- type: RelaxedAtomicBool
|
||||||
|
- value: false
|
||||||
|
+ type: RelaxedAtomicUint32
|
||||||
|
+ value: 1
|
||||||
|
mirror: always
|
||||||
|
|
||||||
|
# Use DMABuf backend for WebGL.
|
||||||
|
diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
|
||||||
|
--- a/widget/gtk/WindowSurfaceWayland.cpp
|
||||||
|
+++ b/widget/gtk/WindowSurfaceWayland.cpp
|
||||||
|
@@ -487,6 +487,11 @@ WindowSurfaceWayland::WindowSurfaceWayla
|
||||||
|
for (int i = 0; i < BACK_BUFFER_NUM; i++) {
|
||||||
|
mShmBackupBuffer[i] = nullptr;
|
||||||
|
}
|
||||||
|
+ // Use slow compositing on KDE only.
|
||||||
|
+ const char* currentDesktop = getenv("XDG_CURRENT_DESKTOP");
|
||||||
|
+ if (currentDesktop && strstr(currentDesktop, "KDE") != nullptr) {
|
||||||
|
+ mSmoothRendering = CACHE_NONE;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
WindowSurfaceWayland::~WindowSurfaceWayland() {
|
||||||
|
@@ -817,13 +822,12 @@ already_AddRefed<gfx::DrawTarget> Window
|
||||||
|
mMozContainerRect = mozContainerSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
- // We can draw directly only when we redraw significant part of the window
|
||||||
|
- // to avoid flickering or do only fullscreen updates in smooth mode.
|
||||||
|
- mDrawToWaylandBufferDirectly =
|
||||||
|
- mSmoothRendering
|
||||||
|
- ? windowRedraw
|
||||||
|
- : (windowRedraw || (lockSize.width * 2 > mozContainerSize.width &&
|
||||||
|
- lockSize.height * 2 > mozContainerSize.height));
|
||||||
|
+ mDrawToWaylandBufferDirectly = windowRedraw || mSmoothRendering == CACHE_NONE;
|
||||||
|
+ if (!mDrawToWaylandBufferDirectly && mSmoothRendering == CACHE_SMALL) {
|
||||||
|
+ mDrawToWaylandBufferDirectly =
|
||||||
|
+ (lockSize.width * 2 > mozContainerSize.width &&
|
||||||
|
+ lockSize.height * 2 > mozContainerSize.height);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (!mDrawToWaylandBufferDirectly) {
|
||||||
|
// Don't switch wl_buffers when we cache drawings.
|
||||||
|
diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
|
||||||
|
--- a/widget/gtk/WindowSurfaceWayland.h
|
||||||
|
+++ b/widget/gtk/WindowSurfaceWayland.h
|
||||||
|
@@ -149,19 +149,6 @@ class WindowSurfaceWayland : public Wind
|
||||||
|
|
||||||
|
RefPtr<nsWaylandDisplay> GetWaylandDisplay() { return mWaylandDisplay; };
|
||||||
|
|
||||||
|
- // Image cache mode can be set by widget.wayland_cache_mode
|
||||||
|
- typedef enum {
|
||||||
|
- // Cache and clip all drawings, default. It's slowest
|
||||||
|
- // but also without any rendered artifacts.
|
||||||
|
- CACHE_ALL = 0,
|
||||||
|
- // Cache drawing only when back buffer is missing. May produce
|
||||||
|
- // some rendering artifacts and flickering when partial screen update
|
||||||
|
- // is rendered.
|
||||||
|
- CACHE_MISSING = 1,
|
||||||
|
- // Don't cache anything, draw only when back buffer is available.
|
||||||
|
- CACHE_NONE = 2
|
||||||
|
- } RenderingCacheMode;
|
||||||
|
-
|
||||||
|
private:
|
||||||
|
WindowBackBuffer* GetWaylandBuffer();
|
||||||
|
WindowBackBuffer* SetNewWaylandBuffer();
|
||||||
|
@@ -251,9 +238,18 @@ class WindowSurfaceWayland : public Wind
|
||||||
|
// This typically apply to popup windows.
|
||||||
|
bool mBufferNeedsClear;
|
||||||
|
|
||||||
|
+ typedef enum {
|
||||||
|
+ // Don't cache anything, always draw directly to wl_buffer
|
||||||
|
+ CACHE_NONE = 0,
|
||||||
|
+ // Cache only small paints (smaller than 1/2 of screen).
|
||||||
|
+ CACHE_SMALL = 1,
|
||||||
|
+ // Cache all painting except fullscreen updates.
|
||||||
|
+ CACHE_ALL = 2,
|
||||||
|
+ } RenderingCacheMode;
|
||||||
|
+
|
||||||
|
// Cache all drawings except fullscreen updates.
|
||||||
|
// Avoid any rendering artifacts for significant performance penality.
|
||||||
|
- bool mSmoothRendering;
|
||||||
|
+ unsigned int mSmoothRendering;
|
||||||
|
|
||||||
|
gint mSurfaceReadyTimerID;
|
||||||
|
mozilla::Mutex mSurfaceLock;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user