Architecture specific change in rpms/pcp.git
by githook-noreply@fedoraproject.org
The package rpms/pcp.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/pcp.git/commit/?id=0b77ce60b4bdad....
Change:
+%ifarch s390 s390x armv7hl aarch64 i686
Thanks.
Full change:
============
commit 0b77ce60b4bdad3e462afcbb1f1d5985609a977a
Author: Mark Goodwin <mgoodwin(a)redhat.com>
Date: Sun Oct 20 00:09:24 2019 +1100
update to pcp v5.0.0
diff --git a/pcp.spec b/pcp.spec
index ff436bc..17453aa 100644
--- a/pcp.spec
+++ b/pcp.spec
@@ -1,18 +1,13 @@
Name: pcp
-Version: 4.3.4
-Release: 3%{?dist}
+Version: 5.0.0
+Release: 1%{?dist}
Summary: System-level performance monitoring and performance management
License: GPLv2+ and LGPLv2+ and CC-BY
URL: https://pcp.io
%global bintray https://bintray.com/artifact/download
-%global github https://github.com/performancecopilot
+Source0: %{bintray}/pcp/source/pcp-%{version}.src.tar.gz
-Source0: %{bintray}/download/pcp/source/pcp-%{version}.src.tar.gz
-Source1: %{github}/pcp-webapp-vector/archive/1.3.1-1/pcp-webapp-vector-1.3.1-1.tar.gz
-Source2: %{github}/pcp-webapp-grafana/archive/1.9.1-2/pcp-webapp-grafana-1.9.1-2.tar.gz
-Source3: %{github}/pcp-webapp-graphite/archive/0.9.10/pcp-webapp-graphite-0.9.10.tar.gz
-Source4: %{github}/pcp-webapp-blinkenlights/archive/1.0.1/pcp-webapp-blinkenlights-1.0.1.tar.gz
Patch0: pmcd-pmlogger-local-context.patch
%if 0%{?fedora} >= 26 || 0%{?rhel} > 7
@@ -47,9 +42,12 @@ Patch0: pmcd-pmlogger-local-context.patch
%global disable_podman 1
%endif
-%global disable_microhttpd 0
-%global disable_webapps 0
-%global disable_cairo 0
+# libchan, libhdr_histogram and pmdastatsd
+%if 0%{?fedora} > 31 || 0%{?rhel} > 8
+%global disable_statsd 0
+%else
+%global disable_statsd 1
+%endif
%if 0%{?rhel} > 7 || 0%{?fedora} >= 30
%global _with_python2 --with-python=no
@@ -90,6 +88,17 @@ Patch0: pmcd-pmlogger-local-context.patch
%global disable_bcc 1
%endif
+# support for pmdabpftrace
+%if 0%{?fedora} >= 30 || 0%{?rhel} > 8
+%ifarch s390 s390x armv7hl aarch64 i686
+%global disable_bpftrace 1
+%else
+%global disable_bpftrace 0
+%endif
+%else
+%global disable_bpftrace 1
+%endif
+
# support for pmdajson
%if 0%{?rhel} == 0 || 0%{?rhel} > 6
%if !%{disable_python2} || !%{disable_python3}
@@ -132,7 +141,7 @@ Patch0: pmcd-pmlogger-local-context.patch
%global disable_systemd 1
%endif
-# systemtap static probing, missing before el6 and on some architectures
+# static probes, missing before el6 and on some architectures
%if 0%{?rhel} == 0 || 0%{?rhel} > 5
%global disable_sdt 0
%else
@@ -143,14 +152,7 @@ Patch0: pmcd-pmlogger-local-context.patch
%endif
%endif
-# boost c++ library, widely available
-%if 0%{?rhel} == 0 || 0%{?rhel} > 5
-%global disable_boost 0
-%else
-%global disable_boost 1
-%endif
-
-# libuv
+# libuv async event library
%if 0%{?fedora} >= 28 || 0%{?rhel} > 7
%global disable_libuv 0
%else
@@ -179,6 +181,10 @@ Conflicts: librapi
Obsoletes: pcp-pmda-kvm
Provides: pcp-pmda-kvm
+# PCP REST APIs are now provided by pmproxy
+Obsoletes: pcp-webapi pcp-webapi-debuginfo
+Provides: pcp-webapi
+
# https://fedoraproject.org/wiki/Packaging "C and C++"
BuildRequires: gcc gcc-c++
BuildRequires: procps autoconf bison flex
@@ -186,7 +192,6 @@ BuildRequires: nss-devel
BuildRequires: rpm-devel
BuildRequires: avahi-devel
BuildRequires: xz-devel
-BuildRequires: zlib-devel
%if !%{disable_python2}
%if 0%{?default_python} != 3
BuildRequires: python%{?default_python}-devel
@@ -203,23 +208,17 @@ BuildRequires: cyrus-sasl-devel
%if !%{disable_podman}
BuildRequires: libvarlink-devel
%endif
+%if !%{disable_statsd}
+BuildRequires: ragel chan-devel HdrHistogram_c-devel
+%endif
%if !%{disable_perfevent}
BuildRequires: libpfm-devel >= 4
%endif
-%if !%{disable_microhttpd}
-BuildRequires: libmicrohttpd-devel
-%endif
-%if !%{disable_cairo}
-BuildRequires: cairo-devel
-%endif
%if !%{disable_sdt}
BuildRequires: systemtap-sdt-devel
%endif
-%if !%{disable_boost}
-BuildRequires: boost-devel
-%endif
%if !%{disable_libuv}
-BuildRequires: libuv-devel >= 1.16
+BuildRequires: libuv-devel >= 1.0
%endif
%if !%{disable_openssl}
BuildRequires: openssl-devel >= 1.1.1
@@ -255,10 +254,8 @@ Requires: pcp-selinux = %{version}-%{release}
Obsoletes: pcp-gui-debuginfo
%endif
-Obsoletes: pcp-pmda-nvidia
-
-# Obsoletes for distros that already have single install pmda's with compat package
Obsoletes: pcp-compat pcp-collector pcp-monitor
+Obsoletes: pcp-pmda-nvidia
Requires: pcp-libs = %{version}-%{release}
@@ -323,12 +320,24 @@ Requires: pcp-libs = %{version}-%{release}
%global _with_podman --with-podman=yes
%endif
+%if %{disable_statsd}
+%global _with_statsd --with-statsd=no
+%else
+%global _with_statsd --with-statsd=yes
+%endif
+
%if %{disable_bcc}
%global _with_bcc --with-pmdabcc=no
%else
%global _with_bcc --with-pmdabcc=yes
%endif
+%if %{disable_bpftrace}
+%global _with_bpftrace --with-pmdabpftrace=no
+%else
+%global _with_bpftrace --with-pmdabpftrace=yes
+%endif
+
%if %{disable_json}
%global _with_json --with-pmdajson=no
%else
@@ -347,12 +356,6 @@ Requires: pcp-libs = %{version}-%{release}
%global _with_snmp --with-pmdasnmp=yes
%endif
-%if %{disable_webapps}
-%global _with_webapps --with-webapps=no
-%else
-%global _with_webapps --with-webapps=yes
-%endif
-
%global pmda_remove() %{expand:
if [ %1 -eq 0 ]
then
@@ -445,7 +448,7 @@ Requires: pcp-libs = %{version}-%{release}
Requires: pcp-libs-devel = %{version}-%{release}
Requires: pcp-devel = %{version}-%{release}
%if !%{disable_libuv}
-Requires: libuv-devel >= 1.16
+Requires: libuv-devel >= 1.0
%endif
Obsoletes: pcp-gui-testsuite
# The following are inherited from pcp-collector and pcp-monitor,
@@ -462,16 +465,22 @@ Requires: pcp-pmda-lustrecomm pcp-pmda-logger pcp-pmda-docker pcp-pmda-bind2
%if !%{disable_podman}
Requires: pcp-pmda-podman
%endif
+%if !%{disable_statsd}
+Requires: pcp-pmda-statsd
+%endif
%if !%{disable_nutcracker}
Requires: pcp-pmda-nutcracker
%endif
%if !%{disable_bcc}
Requires: pcp-pmda-bcc
%endif
+%if !%{disable_bpftrace}
+Requires: pcp-pmda-bpftrace
+%endif
%if !%{disable_python2} || !%{disable_python3}
Requires: pcp-pmda-gluster pcp-pmda-zswap pcp-pmda-unbound pcp-pmda-mic
-Requires: pcp-pmda-libvirt pcp-pmda-lio pcp-pmda-prometheus pcp-pmda-haproxy
-Requires: pcp-pmda-lmsensors
+Requires: pcp-pmda-libvirt pcp-pmda-lio pcp-pmda-openmetrics pcp-pmda-haproxy
+Requires: pcp-pmda-lmsensors pcp-pmda-mssql pcp-pmda-netcheck
%endif
%if !%{disable_snmp}
Requires: pcp-pmda-snmp
@@ -483,9 +492,6 @@ Requires: pcp-pmda-json
Requires: pcp-pmda-rpm
%endif
Requires: pcp-pmda-summary pcp-pmda-trace pcp-pmda-weblog
-%if !%{disable_microhttpd}
-Requires: pcp-webapi
-%endif
%if !%{disable_python2} || !%{disable_python3}
Requires: pcp-system-tools
%endif
@@ -516,100 +522,6 @@ daemons are running when appropriate, and manages their log rotation
needs. It is an alternative to the cron-based pmlogger/pmie service
scripts.
-%if !%{disable_microhttpd}
-#
-# pcp-webapi
-#
-%package webapi
-License: GPLv2+
-Summary: Performance Co-Pilot (PCP) web API service
-URL: https://pcp.io
-Requires: pcp = %{version}-%{release} pcp-libs = %{version}-%{release}
-Requires: liberation-sans-fonts
-
-%description webapi
-Provides a daemon (pmwebd) that binds a large subset of the Performance
-Co-Pilot (PCP) client API (PMAPI) to RESTful web applications using the
-HTTP (PMWEBAPI) protocol.
-%endif
-
-%if !%{disable_webapps}
-#
-# pcp-webjs and pcp-webapp packages
-#
-%package webjs
-License: ASL 2.0 and MIT and CC-BY and GPLv3
-Conflicts: pcp-webjs < 3.11.9
-%if !%{disable_noarch}
-BuildArch: noarch
-%endif
-Requires: pcp-webapp-vector pcp-webapp-blinkenlights
-Requires: pcp-webapp-graphite pcp-webapp-grafana
-Summary: Performance Co-Pilot (PCP) web applications
-URL: https://pcp.io
-
-%description webjs
-Javascript web application content for the Performance Co-Pilot (PCP)
-web service.
-
-%package webapp-vector
-License: ASL 2.0
-%if !%{disable_noarch}
-BuildArch: noarch
-%endif
-Summary: Vector web application for Performance Co-Pilot (PCP)
-URL: https://github.com/Netflix/vector
-
-%description webapp-vector
-Vector web application for the Performance Co-Pilot (PCP).
-
-%package webapp-grafana
-License: ASL 2.0
-Conflicts: pcp-webjs < 3.10.4
-%if !%{disable_noarch}
-BuildArch: noarch
-%endif
-Summary: Grafana web application for Performance Co-Pilot (PCP)
-URL: https://grafana.org
-
-%description webapp-grafana
-Grafana is an open source, feature rich metrics dashboard and graph
-editor. This package provides a Grafana that uses the Performance
-Co-Pilot (PCP) as the data repository. Other Grafana backends are
-not used.
-
-Grafana can render time series dashboards at the browser via flot.js
-(more interactive, slower, for beefy browsers) or alternately at the
-server via png (less interactive, faster).
-
-%package webapp-graphite
-License: ASL 2.0 and GPLv3
-Conflicts: pcp-webjs < 3.10.4
-%if !%{disable_noarch}
-BuildArch: noarch
-%endif
-Summary: Graphite web application for Performance Co-Pilot (PCP)
-URL: http://graphite.readthedocs.org
-
-%description webapp-graphite
-Graphite is a highly scalable real-time graphing system. This package
-provides a graphite version that uses the Performance Co-Pilot (PCP)
-as the data repository, and Graphites web interface renders it. The
-Carbon and Whisper subsystems of Graphite are not included nor used.
-
-%package webapp-blinkenlights
-License: ASL 2.0
-%if !%{disable_noarch}
-BuildArch: noarch
-%endif
-Summary: Blinking lights web application for Performance Co-Pilot (PCP)
-URL: https://pcp.io
-
-%description webapp-blinkenlights
-Demo web application showing traffic lights that change colour based
-on the periodic evaluation of performance metric expressions.
-%endif
-
#
# perl-PCP-PMDA. This is the PCP agent perl binding.
#
@@ -936,6 +848,22 @@ This package contains the PCP Performance Metrics Domain Agent (PMDA) for
collecting podman container and pod statistics through libvarlink.
%endif
+%if !%{disable_statsd}
+#
+# pcp-pmda-statsd
+#
+%package pmda-statsd
+License: GPLv2+
+Summary: Performance Co-Pilot (PCP) metrics from statsd
+URL: https://pcp.io
+Requires: pcp = %{version}-%{release} pcp-libs = %{version}-%{release}
+Requires: libchan.so.0() HdrHistogram_c
+
+%description pmda-statsd
+This package contains the PCP Performance Metrics Domain Agent (PMDA) for
+collecting statistics from the statsd daemon.
+%endif
+
%if !%{disable_perfevent}
#
# pcp-pmda-perfevent
@@ -1432,6 +1360,23 @@ extracting performance metrics from eBPF/BCC Python modules.
# end pcp-pmda-bcc
%endif
+%if !%{disable_bpftrace}
+#
+# pcp-pmda-bpftrace
+#
+%package pmda-bpftrace
+License: ASL 2.0 and GPLv2+
+Summary: Performance Co-Pilot (PCP) metrics from bpftrace scripts
+URL: https://pcp.io
+Requires: bpftrace >= 0.9.2
+Requires: python3-pcp
+Requires: python3 >= 3.6
+%description pmda-bpftrace
+This package contains the PCP Performance Metrics Domain Agent (PMDA) for
+extracting performance metrics from bpftrace scripts.
+# end pcp-pmda-bpftrace
+%endif
+
%if !%{disable_python2} || !%{disable_python3}
#
# pcp-pmda-gluster
@@ -1627,11 +1572,11 @@ target.
#end pcp-pmda-lio
#
-# pcp-pmda-prometheus
+# pcp-pmda-openmetrics
#
-%package pmda-prometheus
+%package pmda-openmetrics
License: GPLv2+
-Summary: Performance Co-Pilot (PCP) metrics from Prometheus endpoints
+Summary: Performance Co-Pilot (PCP) metrics from OpenMetrics endpoints
URL: https://pcp.io
Requires: pcp-libs = %{version}-%{release}
%if !%{disable_python3}
@@ -1643,11 +1588,13 @@ Requires: %{__python2}-pcp
Requires: %{__python2}-requests
BuildRequires: %{__python2}-requests
%endif
+Obsoletes: pcp-pmda-prometheus
+Provides: pcp-pmda-prometheus
-%description pmda-prometheus
+%description pmda-openmetrics
This package contains the PCP Performance Metrics Domain Agent (PMDA) for
-extracting statistics from programs instrumented as Prometheus endpoints.
-#end pcp-pmda-prometheus
+extracting metrics from OpenMetrics (https://openmetrics.io/) endpoints.
+#end pcp-pmda-openmetrics
#
# pcp-pmda-lmsensors
@@ -1669,6 +1616,42 @@ This package contains the PCP Performance Metrics Domain Agent (PMDA) for
collecting metrics about the Linux hardware monitoring sensors.
# end pcp-pmda-lmsensors
+#
+# pcp-pmda-mssql
+#
+%package pmda-mssql
+License: GPLv2+
+Summary: Performance Co-Pilot (PCP) metrics for Microsoft SQL Server
+URL: https://pcp.io
+Requires: pcp-libs = %{version}-%{release}
+%if !%{disable_python3}
+Requires: python3-pcp
+%else
+Requires: %{__python2}-pcp
+%endif
+%description pmda-mssql
+This package contains the PCP Performance Metrics Domain Agent (PMDA) for
+collecting metrics from Microsoft SQL Server.
+# end pcp-pmda-mssql
+
+#
+# pcp-pmda-netcheck
+#
+%package pmda-netcheck
+License: GPLv2+
+Summary: Performance Co-Pilot (PCP) metrics for simple network checks
+URL: https://pcp.io
+Requires: pcp-libs = %{version}-%{release}
+%if !%{disable_python3}
+Requires: python3-pcp
+%else
+Requires: %{__python2}-pcp
+%endif
+%description pmda-netcheck
+This package contains the PCP Performance Metrics Domain Agent (PMDA) for
+collecting metrics from simple network checks.
+# end pcp-pmda-netcheck
+
%endif # !%{disable_python2} || !%{disable_python3}
%if !%{disable_json}
@@ -2086,7 +2069,7 @@ BuildRequires: setools
%else
BuildRequires: setools-console
%endif
-Requires: policycoreutils
+Requires: policycoreutils selinux-policy-targeted
%description selinux
This package contains SELinux support for PCP. The package contains
@@ -2095,10 +2078,6 @@ updated policy package.
%endif
%prep
-%setup -q -T -D -a 1 -c -n vector
-%setup -q -T -D -a 2 -c -n grafana
-%setup -q -T -D -a 3 -c -n graphite
-%setup -q -T -D -a 4 -c -n blinkenlights
%setup -q
%patch0 -p1
@@ -2106,7 +2085,7 @@ updated policy package.
%if !%{disable_python2} && 0%{?default_python} != 3
export PYTHON=python%{?default_python}
%endif
-%configure %{?_with_initd} %{?_with_doc} %{?_with_dstat} %{?_with_ib} %{?_with_podman} %{?_with_perfevent} %{?_with_bcc} %{?_with_json} %{?_with_snmp} %{?_with_nutcracker} %{?_with_webapps} %{?_with_python2}
+%configure %{?_with_initd} %{?_with_doc} %{?_with_dstat} %{?_with_ib} %{?_with_podman} %{?_with_statsd} %{?_with_perfevent} %{?_with_bcc} %{?_with_bpftrace} %{?_with_json} %{?_with_snmp} %{?_with_nutcracker} %{?_with_python2}
make %{?_smp_mflags} default_pcp
%install
@@ -2126,20 +2105,6 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/sheet2pcp $RPM_BUILD_ROOT/%{_mandir}/man1/sheet
rm -f $RPM_BUILD_ROOT/%{_includedir}/pcp/configsz.h
rm -f $RPM_BUILD_ROOT/%{_includedir}/pcp/platformsz.h
-%if %{disable_microhttpd}
-rm -fr $RPM_BUILD_ROOT/%{_confdir}/pmwebd
-rm -fr $RPM_BUILD_ROOT/%{_initddir}/pmwebd
-rm -fr $RPM_BUILD_ROOT/%{_unitdir}/pmwebd.service
-rm -f $RPM_BUILD_ROOT/%{_libexecdir}/pcp/bin/pmwebd
-%endif
-%if !%{disable_webapps}
-for app in vector grafana graphite blinkenlights; do
- pwd
- webapp=`find ../$app -mindepth 1 -maxdepth 1`
- mv $webapp $RPM_BUILD_ROOT/%{_datadir}/pcp/webapps/$app
-done
-%endif
-
%if %{disable_infiniband}
# remove pmdainfiniband on platforms lacking IB devel packages.
rm -f $RPM_BUILD_ROOT/%{_pmdasdir}/ib
@@ -2165,7 +2130,7 @@ desktop-file-validate $RPM_BUILD_ROOT/%{_datadir}/applications/pmchart.desktop
%endif
# default chkconfig off for Fedora and RHEL
-for f in $RPM_BUILD_ROOT/%{_initddir}/{pcp,pmcd,pmlogger,pmie,pmwebd,pmmgr,pmproxy}; do
+for f in $RPM_BUILD_ROOT/%{_initddir}/{pcp,pmcd,pmlogger,pmie,pmmgr,pmproxy}; do
test -f "$f" || continue
sed -i -e '/^# chkconfig/s/:.*$/: - 95 05/' -e '/^# Default-Start:/s/:.*$/:/' $f
done
@@ -2206,6 +2171,7 @@ ls -1 $RPM_BUILD_ROOT/%{_pmdasdir} |\
grep -E -v '^samba' |\
grep -E -v '^slurm' |\
grep -E -v '^snmp' |\
+ grep -E -v '^statsd' |\
grep -E -v '^vmware' |\
grep -E -v '^zimbra' |\
grep -E -v '^dm' |\
@@ -2219,6 +2185,8 @@ ls -1 $RPM_BUILD_ROOT/%{_pmdasdir} |\
grep -E -v '^logger' |\
grep -E -v '^mailq' |\
grep -E -v '^mounts' |\
+ grep -E -v '^mssql' |\
+ grep -E -v '^netcheck' |\
grep -E -v '^nvidia' |\
grep -E -v '^roomtemp' |\
grep -E -v '^sendmail' |\
@@ -2231,6 +2199,7 @@ ls -1 $RPM_BUILD_ROOT/%{_pmdasdir} |\
grep -E -v '^json' |\
grep -E -v '^mic' |\
grep -E -v '^bcc' |\
+ grep -E -v '^bpftrace' |\
grep -E -v '^gluster' |\
grep -E -v '^zswap' |\
grep -E -v '^unbound' |\
@@ -2239,7 +2208,7 @@ ls -1 $RPM_BUILD_ROOT/%{_pmdasdir} |\
# all base pcp package files except those split out into sub-packages
ls -1 $RPM_BUILD_ROOT/%{_bindir} |\
- grep -E -v 'pmiostat|pmcollectl|zabbix|zbxpcp|dstat' |\
+ grep -E -v 'pmiostat|zabbix|zbxpcp|dstat' |\
grep -E -v 'pmrep|pcp2graphite|pcp2influxdb|pcp2zabbix' |\
grep -E -v 'pcp2elasticsearch|pcp2json|pcp2xlsx|pcp2xml' |\
grep -E -v 'pcp2spark' |\
@@ -2247,11 +2216,11 @@ ls -1 $RPM_BUILD_ROOT/%{_bindir} |\
sed -e 's#^#'%{_bindir}'\/#' >base_bin.list
# Separate the pcp-system-tools package files.
-# pmcollectl and pmiostat are back-compat symlinks to their
-# pcp(1) sub-command variants so are also in pcp-system-tools.
+# pmiostat is a back-compat symlink to its pcp(1) sub-command variant
+# so its also in pcp-system-tools.
%if !%{disable_python2} || !%{disable_python3}
ls -1 $RPM_BUILD_ROOT/%{_bindir} |\
- egrep -e 'pmiostat|pmcollectl|pmrep|dstat' |\
+ egrep -e 'pmiostat|pmrep|dstat' |\
sed -e 's#^#'%{_bindir}'\/#' >pcp-system-tools.list
ls -1 $RPM_BUILD_ROOT/%{_libexecdir}/pcp/bin |\
egrep -e 'atop|collectl|dmcache|dstat|free|iostat|ipcs|lvmcache|mpstat' \
@@ -2293,7 +2262,7 @@ ls -1 $RPM_BUILD_ROOT/%{_logconfdir}/ |\
sed -e 's#^#'%{_logconfdir}'\/#' |\
grep -E -v 'zeroconf' >pcp-logconf.list
cat base_pmdas.list base_bin.list base_exec.list pcp-logconf.list |\
- grep -E -v 'pmdaib|pmmgr|pmweb|pmsnap|2pcp|pmdas/systemd' |\
+ grep -E -v 'pmdaib|pmmgr|pmsnap|2pcp|pmdas/systemd' |\
grep -E -v "$PCP_GUI|pixmaps|hicolor|pcp-doc|tutorials|selinux" |\
grep -E -v %{_confdir} | grep -E -v %{_logsdir} > base.list
@@ -2335,72 +2304,8 @@ exit 0
getent group pcp >/dev/null || groupadd -r pcp
getent passwd pcp >/dev/null || \
useradd -c "Performance Co-Pilot" -g pcp -d %{_localstatedir}/lib/pcp -M -r -s /sbin/nologin pcp
-PCP_CONFIG_DIR=%{_localstatedir}/lib/pcp/config
-PCP_SYSCONF_DIR=%{_confdir}
-PCP_LOG_DIR=%{_logsdir}
-PCP_ETC_DIR=%{_sysconfdir}
-# rename crontab files to align with current Fedora packaging guidelines
-for crontab in pmlogger pmie
-do
- test -f "$PCP_ETC_DIR/cron.d/$crontab" || continue
- mv -f "$PCP_ETC_DIR/cron.d/$crontab" "$PCP_ETC_DIR/cron.d/pcp-$crontab"
-done
-# produce a script to run post-install to move configs to their new homes
-save_configs_script()
-{
- _new="$1"
- shift
- for _dir
- do
- [ "$_dir" = "$_new" ] && continue
- if [ -d "$_dir" ]
- then
- ( cd "$_dir" ; find . -maxdepth 1 -type f ) | sed -e 's/^\.\///' \
- | while read _file
- do
- [ "$_file" = "control" ] && continue
- _want=true
- if [ -f "$_new/$_file" ]
- then
- # file exists in both directories, pick the more
- # recently modified one
- _try=`find "$_dir/$_file" -newer "$_new/$_file" -print`
- [ -n "$_try" ] || _want=false
- fi
- $_want && echo cp -p "$_dir/$_file" "$_new/$_file"
- done
- fi
- done
-}
-# migrate and clean configs if we have had a previous in-use installation
-[ -d "$PCP_LOG_DIR" ] || exit 0 # no configuration file upgrades required
-rm -f "$PCP_LOG_DIR/configs.sh"
-for daemon in pmie pmlogger
-do
- save_configs_script >> "$PCP_LOG_DIR/configs.sh" "$PCP_CONFIG_DIR/$daemon" \
- "$PCP_SYSCONF_DIR/$daemon"
-done
-for daemon in pmcd pmproxy
-do
- save_configs_script >> "$PCP_LOG_DIR/configs.sh" "$PCP_SYSCONF_DIR/$daemon"\
- "$PCP_CONFIG_DIR/$daemon" /etc/$daemon
-done
exit 0
-%if !%{disable_microhttpd}
-%preun webapi
-if [ "$1" -eq 0 ]
-then
-%if !%{disable_systemd}
- systemctl --no-reload disable pmwebd.service >/dev/null 2>&1
- systemctl stop pmwebd.service >/dev/null 2>&1
-%else
- /sbin/service pmwebd stop >/dev/null 2>&1
- /sbin/chkconfig --del pmwebd >/dev/null 2>&1
-%endif
-fi
-%endif
-
%preun manager
if [ "$1" -eq 0 ]
then
@@ -2438,6 +2343,11 @@ fi
%{pmda_remove "$1" "podman"}
%endif #preun pmda-podman
+%if !%{disable_statsd}
+%preun pmda-statsd
+%{pmda_remove "$1" "statsd"}
+%endif #preun pmda-statsd
+
%if !%{disable_json}
%preun pmda-json
%{pmda_remove "$1" "json"}
@@ -2496,8 +2406,8 @@ fi
%preun pmda-lio
%{pmda_remove "$1" "lio"}
-%preun pmda-prometheus
-%{pmda_remove "$1" "prometheus"}
+%preun pmda-openmetrics
+%{pmda_remove "$1" "openmetrics"}
%preun pmda-lustre
%{pmda_remove "$1" "lustre"}
@@ -2551,6 +2461,11 @@ fi
%{pmda_remove "$1" "bcc"}
%endif
+%if !%{disable_bpftrace}
+%preun pmda-bpftrace
+%{pmda_remove "$1" "bpftrace"}
+%endif
+
%if !%{disable_python2} || !%{disable_python3}
%preun pmda-gluster
%{pmda_remove "$1" "gluster"}
@@ -2573,6 +2488,12 @@ fi
%preun pmda-lmsensors
%{pmda_remove "$1" "lmsensors"}
+%preun pmda-mssql
+%{pmda_remove "$1" "mssql"}
+
+%preun pmda-netcheck
+%{pmda_remove "$1" "netcheck"}
+
%endif # !%{disable_python[2,3]}
%preun pmda-apache
@@ -2664,17 +2585,6 @@ then
rm -f "$PCP_PMNS_DIR/.NeedRebuild" >/dev/null 2>&1
fi
-%if !%{disable_microhttpd}
-%post webapi
-chown -R pcp:pcp %{_logsdir}/pmwebd 2>/dev/null
-%if !%{disable_systemd}
- systemctl condrestart pmwebd.service >/dev/null 2>&1
-%else
- /sbin/chkconfig --add pmwebd >/dev/null 2>&1
- /sbin/service pmwebd condrestart
-%endif
-%endif
-
%post manager
chown -R pcp:pcp %{_logsdir}/pmmgr 2>/dev/null
%if !%{disable_systemd}
@@ -2729,12 +2639,7 @@ pmieconf -c enable dmthin
%endif
%post
-PCP_LOG_DIR=%{_logsdir}
PCP_PMNS_DIR=%{_pmnsdir}
-# restore saved configs, if any
-test -s "$PCP_LOG_DIR/configs.sh" && source "$PCP_LOG_DIR/configs.sh"
-rm -f $PCP_LOG_DIR/configs.sh
-
chown -R pcp:pcp %{_logsdir}/pmcd 2>/dev/null
chown -R pcp:pcp %{_logsdir}/pmlogger 2>/dev/null
chown -R pcp:pcp %{_logsdir}/sa 2>/dev/null
@@ -2761,7 +2666,7 @@ chmod 644 "$PCP_PMNS_DIR/.NeedRebuild"
/sbin/service pmproxy condrestart
%endif
-cd $PCP_PMNS_DIR && ./Rebuild -s && rm -f .NeedRebuild
+cd "$PCP_PMNS_DIR" && ./Rebuild -s && rm -f .NeedRebuild
cd
%if 0%{?fedora} >= 26 || 0%{?rhel} > 7
@@ -2949,51 +2854,6 @@ cd
%defattr(-,pcpqa,pcpqa)
%{_testsdir}
-%if !%{disable_microhttpd}
-%files webapi
-%{_initddir}/pmwebd
-%if !%{disable_systemd}
-%{_unitdir}/pmwebd.service
-%endif
-%{_libexecdir}/pcp/bin/pmwebd
-%attr(0775,pcp,pcp) %{_logsdir}/pmwebd
-%{_confdir}/pmwebd
-%config(noreplace) %{_confdir}/pmwebd/pmwebd.options
-# duplicate pcp, pcp-webapi and pcp-webjs directories, but rpm copes with that.
-%dir %{_datadir}/pcp
-%dir %{_datadir}/pcp/webapps
-%endif
-
-%if !%{disable_webapps}
-%files webjs
-# duplicate pcp, pcp-webapi and pcp-webjs directories, but rpm copes with that.
-%dir %{_datadir}/pcp
-%dir %{_datadir}/pcp/webapps
-%{_datadir}/pcp/webapps/*.png
-%{_datadir}/pcp/webapps/*.ico
-%{_datadir}/pcp/webapps/*.html
-
-%files webapp-blinkenlights
-%dir %{_datadir}/pcp
-%dir %{_datadir}/pcp/webapps
-%{_datadir}/pcp/webapps/blinkenlights
-
-%files webapp-grafana
-%dir %{_datadir}/pcp
-%dir %{_datadir}/pcp/webapps
-%{_datadir}/pcp/webapps/grafana
-
-%files webapp-graphite
-%dir %{_datadir}/pcp
-%dir %{_datadir}/pcp/webapps
-%{_datadir}/pcp/webapps/graphite
-
-%files webapp-vector
-%dir %{_datadir}/pcp
-%dir %{_datadir}/pcp/webapps
-%{_datadir}/pcp/webapps/vector
-%endif
-
%files manager
%{_initddir}/pmmgr
%if !%{disable_systemd}
@@ -3024,6 +2884,12 @@ cd
%{_pmdasdir}/podman
%endif
+%if !%{disable_statsd}
+%files pmda-statsd
+%{_pmdasdir}/statsd
+%config(noreplace) %{_pmdasdir}/statsd/statsd.ini
+%endif
+
%if !%{disable_perfevent}
%files pmda-perfevent
%{_pmdasdir}/perfevent
@@ -3069,8 +2935,8 @@ cd
%files pmda-lio
%{_pmdasdir}/lio
-%files pmda-prometheus
-%{_pmdasdir}/prometheus
+%files pmda-openmetrics
+%{_pmdasdir}/openmetrics
%files pmda-lustre
%{_pmdasdir}/lustre
@@ -3148,6 +3014,11 @@ cd
%{_pmdasdir}/bcc
%endif
+%if !%{disable_bpftrace}
+%files pmda-bpftrace
+%{_pmdasdir}/bpftrace
+%endif
+
%if !%{disable_python2} || !%{disable_python3}
%files pmda-gluster
%{_pmdasdir}/gluster
@@ -3196,6 +3067,12 @@ cd
%files pmda-lmsensors
%{_pmdasdir}/lmsensors
+%files pmda-mssql
+%{_pmdasdir}/mssql
+
+%files pmda-netcheck
+%{_pmdasdir}/netcheck
+
%endif # !%{disable_python2} || !%{disable_python3}
%files export-zabbix-agent
@@ -3307,11 +3184,8 @@ cd
%endif
%changelog
-* Thu Oct 03 2019 Miro Hronok <mhroncok(a)redhat.com> - 4.3.4-3
-- Rebuilt for Python 3.8.0rc1 (#1748018)
-
-* Mon Aug 19 2019 Miro Hronok <mhroncok(a)redhat.com> - 4.3.4-2
-- Rebuilt for Python 3.8
+* Fri Oct 11 2019 Mark Goodwin <mgoodwin(a)redhat.com> - 5.0.0-1
+- Update to latest PCP sources.
* Fri Aug 16 2019 Nathan Scott <nathans(a)redhat.com> - 4.3.4-1
- Resolve bootup issues with pmlogger service (BZ 1737091, BZ 1721223)
diff --git a/pmcd-pmlogger-local-context.patch b/pmcd-pmlogger-local-context.patch
new file mode 100644
index 0000000..1c1e90d
--- /dev/null
+++ b/pmcd-pmlogger-local-context.patch
@@ -0,0 +1,26 @@
+diff --git a/src/pmcd/pmcd.defaults b/src/pmcd/pmcd.defaults
+index 83ee4d9a9..56e125553 100644
+--- a/src/pmcd/pmcd.defaults
++++ b/src/pmcd/pmcd.defaults
+@@ -4,7 +4,7 @@
+ # Behaviour regarding listening on external-facing interfaces;
+ # unset PMCD_LOCAL to allow connections from remote hosts.
+ # A value of 0 permits remote connections, 1 permits local only.
+-# PMCD_LOCAL=1
++PMCD_LOCAL=1
+
+ # Max length to which the queue of pending connections may grow
+ # A value of 5 is the default.
+diff --git a/src/pmlogger/pmlogger.defaults b/src/pmlogger/pmlogger.defaults
+index 5462403ec..261a79039 100644
+--- a/src/pmlogger/pmlogger.defaults
++++ b/src/pmlogger/pmlogger.defaults
+@@ -4,7 +4,7 @@
+ # Behaviour regarding listening on external-facing interfaces;
+ # unset PMLOGGER_LOCAL to allow connections from remote hosts.
+ # A value of 0 permits remote connections, 1 permits local only.
+-# PMLOGGER_LOCAL=1
++PMLOGGER_LOCAL=1
+
+ # Max length to which the queue of pending connections may grow
+ # A value of 5 is the default.
diff --git a/sources b/sources
index 0c38edf..63d048e 100644
--- a/sources
+++ b/sources
@@ -1,6 +1 @@
-SHA512 (pcp-4.3.4.src.tar.gz) = 27e7d3558253edde342256b4f750160c216bb8323c47dd01ef8d67d49e702d1d70ba406cafdcbf6867ad63e460279e8214c39a1fd20b6b8c781dc33920587569
-SHA512 (pcp-webapp-blinkenlights-1.0.1.tar.gz) = dadf0bc0742a3344a75f8f304851762572ddc9a5c7c66fd085adcabb70f9e7a9b2c9b6095a8fb358f6a6c64dbf41cf245e2da74a60b8120880f314b6ed3d271c
-SHA512 (pcp-webapp-grafana-1.9.1-2.tar.gz) = abd0f360b057853d343e506e352a37d16f78bbae6760124ecdfab0e43ffcf3b31404311f1fe5c962e8abdbf2ad8699df3f27e2920f03f1a10bca3c0e01179e21
-SHA512 (pcp-webapp-graphite-0.9.10.tar.gz) = f716e5145e5d39b54be02e39202c51bdd1158d56fa16185a591c0f54fb376a637653f0c13aa9c5ad5700fc62d0c71163e94b9fa689fabe3e6de4ddf19fa827fa
-SHA512 (pcp-webapp-vector-1.3.1-1.tar.gz) = b1463d4da3727f130752699dd433e997212c19241ac440df389c1153e468ace840b7d5f43a37b2173e4eee4f4a807338a3c40cc9635801e626c1530baf46e289
-SHA512 (pmcd-pmlogger-local-context.patch) = 8f4b6b49494781d0a711ac27738a75b1adead72cb1baef9a78754686c48ae2d278d691108233e9cf9ad33fede5ba7b7a43f4674205b9bf448f267c844ddc1a01
+SHA512 (pcp-5.0.0.src.tar.gz) = 4a00b199343fcc33b9e4f262974e9d075892a76af92811428221ea9fbacf479a4852e2734caaff56fa6b492b0440e34db55256c91e4b89a9fe52a775645adf89
commit 5f1d7403cba66375bf722f37ba1d0883cd5b3eab
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Oct 3 13:58:17 2019 +0200
Rebuilt for Python 3.8.0rc1 (#1748018)
diff --git a/pcp.spec b/pcp.spec
index 265fe73..ff436bc 100644
--- a/pcp.spec
+++ b/pcp.spec
@@ -1,6 +1,6 @@
Name: pcp
Version: 4.3.4
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: System-level performance monitoring and performance management
License: GPLv2+ and LGPLv2+ and CC-BY
URL: https://pcp.io
@@ -3307,6 +3307,9 @@ cd
%endif
%changelog
+* Thu Oct 03 2019 Miro Hronok <mhroncok(a)redhat.com> - 4.3.4-3
+- Rebuilt for Python 3.8.0rc1 (#1748018)
+
* Mon Aug 19 2019 Miro Hronok <mhroncok(a)redhat.com> - 4.3.4-2
- Rebuilt for Python 3.8
commit 2041f4eccac70c7121cad947fb6289a1b69ac726
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Mon Aug 19 10:21:59 2019 +0200
Rebuilt for Python 3.8
diff --git a/pcp.spec b/pcp.spec
index 215aa3b..265fe73 100644
--- a/pcp.spec
+++ b/pcp.spec
@@ -1,6 +1,6 @@
Name: pcp
Version: 4.3.4
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: System-level performance monitoring and performance management
License: GPLv2+ and LGPLv2+ and CC-BY
URL: https://pcp.io
@@ -3307,6 +3307,9 @@ cd
%endif
%changelog
+* Mon Aug 19 2019 Miro Hronok <mhroncok(a)redhat.com> - 4.3.4-2
+- Rebuilt for Python 3.8
+
* Fri Aug 16 2019 Nathan Scott <nathans(a)redhat.com> - 4.3.4-1
- Resolve bootup issues with pmlogger service (BZ 1737091, BZ 1721223)
- Resolve selinux policy issues in PCP tools (BZ 1721644, BZ 1711547)
4 years, 6 months
Architecture specific change in rpms/pcp.git
by githook-noreply@fedoraproject.org
The package rpms/pcp.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/pcp.git/commit/?id=0b77ce60b4bdad....
Change:
+%ifarch s390 s390x armv7hl aarch64 i686
Thanks.
Full change:
============
commit 245739278a0a8e7493064e27b48f88fc19c4e454
Merge: 65b9c74 0b77ce6
Author: Mark Goodwin <mgoodwin(a)redhat.com>
Date: Sun Oct 20 00:09:57 2019 +1100
Merge branch 'master' into f29
commit 0b77ce60b4bdad3e462afcbb1f1d5985609a977a
Author: Mark Goodwin <mgoodwin(a)redhat.com>
Date: Sun Oct 20 00:09:24 2019 +1100
update to pcp v5.0.0
diff --git a/pcp.spec b/pcp.spec
index ff436bc..17453aa 100644
--- a/pcp.spec
+++ b/pcp.spec
@@ -1,18 +1,13 @@
Name: pcp
-Version: 4.3.4
-Release: 3%{?dist}
+Version: 5.0.0
+Release: 1%{?dist}
Summary: System-level performance monitoring and performance management
License: GPLv2+ and LGPLv2+ and CC-BY
URL: https://pcp.io
%global bintray https://bintray.com/artifact/download
-%global github https://github.com/performancecopilot
+Source0: %{bintray}/pcp/source/pcp-%{version}.src.tar.gz
-Source0: %{bintray}/download/pcp/source/pcp-%{version}.src.tar.gz
-Source1: %{github}/pcp-webapp-vector/archive/1.3.1-1/pcp-webapp-vector-1.3.1-1.tar.gz
-Source2: %{github}/pcp-webapp-grafana/archive/1.9.1-2/pcp-webapp-grafana-1.9.1-2.tar.gz
-Source3: %{github}/pcp-webapp-graphite/archive/0.9.10/pcp-webapp-graphite-0.9.10.tar.gz
-Source4: %{github}/pcp-webapp-blinkenlights/archive/1.0.1/pcp-webapp-blinkenlights-1.0.1.tar.gz
Patch0: pmcd-pmlogger-local-context.patch
%if 0%{?fedora} >= 26 || 0%{?rhel} > 7
@@ -47,9 +42,12 @@ Patch0: pmcd-pmlogger-local-context.patch
%global disable_podman 1
%endif
-%global disable_microhttpd 0
-%global disable_webapps 0
-%global disable_cairo 0
+# libchan, libhdr_histogram and pmdastatsd
+%if 0%{?fedora} > 31 || 0%{?rhel} > 8
+%global disable_statsd 0
+%else
+%global disable_statsd 1
+%endif
%if 0%{?rhel} > 7 || 0%{?fedora} >= 30
%global _with_python2 --with-python=no
@@ -90,6 +88,17 @@ Patch0: pmcd-pmlogger-local-context.patch
%global disable_bcc 1
%endif
+# support for pmdabpftrace
+%if 0%{?fedora} >= 30 || 0%{?rhel} > 8
+%ifarch s390 s390x armv7hl aarch64 i686
+%global disable_bpftrace 1
+%else
+%global disable_bpftrace 0
+%endif
+%else
+%global disable_bpftrace 1
+%endif
+
# support for pmdajson
%if 0%{?rhel} == 0 || 0%{?rhel} > 6
%if !%{disable_python2} || !%{disable_python3}
@@ -132,7 +141,7 @@ Patch0: pmcd-pmlogger-local-context.patch
%global disable_systemd 1
%endif
-# systemtap static probing, missing before el6 and on some architectures
+# static probes, missing before el6 and on some architectures
%if 0%{?rhel} == 0 || 0%{?rhel} > 5
%global disable_sdt 0
%else
@@ -143,14 +152,7 @@ Patch0: pmcd-pmlogger-local-context.patch
%endif
%endif
-# boost c++ library, widely available
-%if 0%{?rhel} == 0 || 0%{?rhel} > 5
-%global disable_boost 0
-%else
-%global disable_boost 1
-%endif
-
-# libuv
+# libuv async event library
%if 0%{?fedora} >= 28 || 0%{?rhel} > 7
%global disable_libuv 0
%else
@@ -179,6 +181,10 @@ Conflicts: librapi
Obsoletes: pcp-pmda-kvm
Provides: pcp-pmda-kvm
+# PCP REST APIs are now provided by pmproxy
+Obsoletes: pcp-webapi pcp-webapi-debuginfo
+Provides: pcp-webapi
+
# https://fedoraproject.org/wiki/Packaging "C and C++"
BuildRequires: gcc gcc-c++
BuildRequires: procps autoconf bison flex
@@ -186,7 +192,6 @@ BuildRequires: nss-devel
BuildRequires: rpm-devel
BuildRequires: avahi-devel
BuildRequires: xz-devel
-BuildRequires: zlib-devel
%if !%{disable_python2}
%if 0%{?default_python} != 3
BuildRequires: python%{?default_python}-devel
@@ -203,23 +208,17 @@ BuildRequires: cyrus-sasl-devel
%if !%{disable_podman}
BuildRequires: libvarlink-devel
%endif
+%if !%{disable_statsd}
+BuildRequires: ragel chan-devel HdrHistogram_c-devel
+%endif
%if !%{disable_perfevent}
BuildRequires: libpfm-devel >= 4
%endif
-%if !%{disable_microhttpd}
-BuildRequires: libmicrohttpd-devel
-%endif
-%if !%{disable_cairo}
-BuildRequires: cairo-devel
-%endif
%if !%{disable_sdt}
BuildRequires: systemtap-sdt-devel
%endif
-%if !%{disable_boost}
-BuildRequires: boost-devel
-%endif
%if !%{disable_libuv}
-BuildRequires: libuv-devel >= 1.16
+BuildRequires: libuv-devel >= 1.0
%endif
%if !%{disable_openssl}
BuildRequires: openssl-devel >= 1.1.1
@@ -255,10 +254,8 @@ Requires: pcp-selinux = %{version}-%{release}
Obsoletes: pcp-gui-debuginfo
%endif
-Obsoletes: pcp-pmda-nvidia
-
-# Obsoletes for distros that already have single install pmda's with compat package
Obsoletes: pcp-compat pcp-collector pcp-monitor
+Obsoletes: pcp-pmda-nvidia
Requires: pcp-libs = %{version}-%{release}
@@ -323,12 +320,24 @@ Requires: pcp-libs = %{version}-%{release}
%global _with_podman --with-podman=yes
%endif
+%if %{disable_statsd}
+%global _with_statsd --with-statsd=no
+%else
+%global _with_statsd --with-statsd=yes
+%endif
+
%if %{disable_bcc}
%global _with_bcc --with-pmdabcc=no
%else
%global _with_bcc --with-pmdabcc=yes
%endif
+%if %{disable_bpftrace}
+%global _with_bpftrace --with-pmdabpftrace=no
+%else
+%global _with_bpftrace --with-pmdabpftrace=yes
+%endif
+
%if %{disable_json}
%global _with_json --with-pmdajson=no
%else
@@ -347,12 +356,6 @@ Requires: pcp-libs = %{version}-%{release}
%global _with_snmp --with-pmdasnmp=yes
%endif
-%if %{disable_webapps}
-%global _with_webapps --with-webapps=no
-%else
-%global _with_webapps --with-webapps=yes
-%endif
-
%global pmda_remove() %{expand:
if [ %1 -eq 0 ]
then
@@ -445,7 +448,7 @@ Requires: pcp-libs = %{version}-%{release}
Requires: pcp-libs-devel = %{version}-%{release}
Requires: pcp-devel = %{version}-%{release}
%if !%{disable_libuv}
-Requires: libuv-devel >= 1.16
+Requires: libuv-devel >= 1.0
%endif
Obsoletes: pcp-gui-testsuite
# The following are inherited from pcp-collector and pcp-monitor,
@@ -462,16 +465,22 @@ Requires: pcp-pmda-lustrecomm pcp-pmda-logger pcp-pmda-docker pcp-pmda-bind2
%if !%{disable_podman}
Requires: pcp-pmda-podman
%endif
+%if !%{disable_statsd}
+Requires: pcp-pmda-statsd
+%endif
%if !%{disable_nutcracker}
Requires: pcp-pmda-nutcracker
%endif
%if !%{disable_bcc}
Requires: pcp-pmda-bcc
%endif
+%if !%{disable_bpftrace}
+Requires: pcp-pmda-bpftrace
+%endif
%if !%{disable_python2} || !%{disable_python3}
Requires: pcp-pmda-gluster pcp-pmda-zswap pcp-pmda-unbound pcp-pmda-mic
-Requires: pcp-pmda-libvirt pcp-pmda-lio pcp-pmda-prometheus pcp-pmda-haproxy
-Requires: pcp-pmda-lmsensors
+Requires: pcp-pmda-libvirt pcp-pmda-lio pcp-pmda-openmetrics pcp-pmda-haproxy
+Requires: pcp-pmda-lmsensors pcp-pmda-mssql pcp-pmda-netcheck
%endif
%if !%{disable_snmp}
Requires: pcp-pmda-snmp
@@ -483,9 +492,6 @@ Requires: pcp-pmda-json
Requires: pcp-pmda-rpm
%endif
Requires: pcp-pmda-summary pcp-pmda-trace pcp-pmda-weblog
-%if !%{disable_microhttpd}
-Requires: pcp-webapi
-%endif
%if !%{disable_python2} || !%{disable_python3}
Requires: pcp-system-tools
%endif
@@ -516,100 +522,6 @@ daemons are running when appropriate, and manages their log rotation
needs. It is an alternative to the cron-based pmlogger/pmie service
scripts.
-%if !%{disable_microhttpd}
-#
-# pcp-webapi
-#
-%package webapi
-License: GPLv2+
-Summary: Performance Co-Pilot (PCP) web API service
-URL: https://pcp.io
-Requires: pcp = %{version}-%{release} pcp-libs = %{version}-%{release}
-Requires: liberation-sans-fonts
-
-%description webapi
-Provides a daemon (pmwebd) that binds a large subset of the Performance
-Co-Pilot (PCP) client API (PMAPI) to RESTful web applications using the
-HTTP (PMWEBAPI) protocol.
-%endif
-
-%if !%{disable_webapps}
-#
-# pcp-webjs and pcp-webapp packages
-#
-%package webjs
-License: ASL 2.0 and MIT and CC-BY and GPLv3
-Conflicts: pcp-webjs < 3.11.9
-%if !%{disable_noarch}
-BuildArch: noarch
-%endif
-Requires: pcp-webapp-vector pcp-webapp-blinkenlights
-Requires: pcp-webapp-graphite pcp-webapp-grafana
-Summary: Performance Co-Pilot (PCP) web applications
-URL: https://pcp.io
-
-%description webjs
-Javascript web application content for the Performance Co-Pilot (PCP)
-web service.
-
-%package webapp-vector
-License: ASL 2.0
-%if !%{disable_noarch}
-BuildArch: noarch
-%endif
-Summary: Vector web application for Performance Co-Pilot (PCP)
-URL: https://github.com/Netflix/vector
-
-%description webapp-vector
-Vector web application for the Performance Co-Pilot (PCP).
-
-%package webapp-grafana
-License: ASL 2.0
-Conflicts: pcp-webjs < 3.10.4
-%if !%{disable_noarch}
-BuildArch: noarch
-%endif
-Summary: Grafana web application for Performance Co-Pilot (PCP)
-URL: https://grafana.org
-
-%description webapp-grafana
-Grafana is an open source, feature rich metrics dashboard and graph
-editor. This package provides a Grafana that uses the Performance
-Co-Pilot (PCP) as the data repository. Other Grafana backends are
-not used.
-
-Grafana can render time series dashboards at the browser via flot.js
-(more interactive, slower, for beefy browsers) or alternately at the
-server via png (less interactive, faster).
-
-%package webapp-graphite
-License: ASL 2.0 and GPLv3
-Conflicts: pcp-webjs < 3.10.4
-%if !%{disable_noarch}
-BuildArch: noarch
-%endif
-Summary: Graphite web application for Performance Co-Pilot (PCP)
-URL: http://graphite.readthedocs.org
-
-%description webapp-graphite
-Graphite is a highly scalable real-time graphing system. This package
-provides a graphite version that uses the Performance Co-Pilot (PCP)
-as the data repository, and Graphites web interface renders it. The
-Carbon and Whisper subsystems of Graphite are not included nor used.
-
-%package webapp-blinkenlights
-License: ASL 2.0
-%if !%{disable_noarch}
-BuildArch: noarch
-%endif
-Summary: Blinking lights web application for Performance Co-Pilot (PCP)
-URL: https://pcp.io
-
-%description webapp-blinkenlights
-Demo web application showing traffic lights that change colour based
-on the periodic evaluation of performance metric expressions.
-%endif
-
#
# perl-PCP-PMDA. This is the PCP agent perl binding.
#
@@ -936,6 +848,22 @@ This package contains the PCP Performance Metrics Domain Agent (PMDA) for
collecting podman container and pod statistics through libvarlink.
%endif
+%if !%{disable_statsd}
+#
+# pcp-pmda-statsd
+#
+%package pmda-statsd
+License: GPLv2+
+Summary: Performance Co-Pilot (PCP) metrics from statsd
+URL: https://pcp.io
+Requires: pcp = %{version}-%{release} pcp-libs = %{version}-%{release}
+Requires: libchan.so.0() HdrHistogram_c
+
+%description pmda-statsd
+This package contains the PCP Performance Metrics Domain Agent (PMDA) for
+collecting statistics from the statsd daemon.
+%endif
+
%if !%{disable_perfevent}
#
# pcp-pmda-perfevent
@@ -1432,6 +1360,23 @@ extracting performance metrics from eBPF/BCC Python modules.
# end pcp-pmda-bcc
%endif
+%if !%{disable_bpftrace}
+#
+# pcp-pmda-bpftrace
+#
+%package pmda-bpftrace
+License: ASL 2.0 and GPLv2+
+Summary: Performance Co-Pilot (PCP) metrics from bpftrace scripts
+URL: https://pcp.io
+Requires: bpftrace >= 0.9.2
+Requires: python3-pcp
+Requires: python3 >= 3.6
+%description pmda-bpftrace
+This package contains the PCP Performance Metrics Domain Agent (PMDA) for
+extracting performance metrics from bpftrace scripts.
+# end pcp-pmda-bpftrace
+%endif
+
%if !%{disable_python2} || !%{disable_python3}
#
# pcp-pmda-gluster
@@ -1627,11 +1572,11 @@ target.
#end pcp-pmda-lio
#
-# pcp-pmda-prometheus
+# pcp-pmda-openmetrics
#
-%package pmda-prometheus
+%package pmda-openmetrics
License: GPLv2+
-Summary: Performance Co-Pilot (PCP) metrics from Prometheus endpoints
+Summary: Performance Co-Pilot (PCP) metrics from OpenMetrics endpoints
URL: https://pcp.io
Requires: pcp-libs = %{version}-%{release}
%if !%{disable_python3}
@@ -1643,11 +1588,13 @@ Requires: %{__python2}-pcp
Requires: %{__python2}-requests
BuildRequires: %{__python2}-requests
%endif
+Obsoletes: pcp-pmda-prometheus
+Provides: pcp-pmda-prometheus
-%description pmda-prometheus
+%description pmda-openmetrics
This package contains the PCP Performance Metrics Domain Agent (PMDA) for
-extracting statistics from programs instrumented as Prometheus endpoints.
-#end pcp-pmda-prometheus
+extracting metrics from OpenMetrics (https://openmetrics.io/) endpoints.
+#end pcp-pmda-openmetrics
#
# pcp-pmda-lmsensors
@@ -1669,6 +1616,42 @@ This package contains the PCP Performance Metrics Domain Agent (PMDA) for
collecting metrics about the Linux hardware monitoring sensors.
# end pcp-pmda-lmsensors
+#
+# pcp-pmda-mssql
+#
+%package pmda-mssql
+License: GPLv2+
+Summary: Performance Co-Pilot (PCP) metrics for Microsoft SQL Server
+URL: https://pcp.io
+Requires: pcp-libs = %{version}-%{release}
+%if !%{disable_python3}
+Requires: python3-pcp
+%else
+Requires: %{__python2}-pcp
+%endif
+%description pmda-mssql
+This package contains the PCP Performance Metrics Domain Agent (PMDA) for
+collecting metrics from Microsoft SQL Server.
+# end pcp-pmda-mssql
+
+#
+# pcp-pmda-netcheck
+#
+%package pmda-netcheck
+License: GPLv2+
+Summary: Performance Co-Pilot (PCP) metrics for simple network checks
+URL: https://pcp.io
+Requires: pcp-libs = %{version}-%{release}
+%if !%{disable_python3}
+Requires: python3-pcp
+%else
+Requires: %{__python2}-pcp
+%endif
+%description pmda-netcheck
+This package contains the PCP Performance Metrics Domain Agent (PMDA) for
+collecting metrics from simple network checks.
+# end pcp-pmda-netcheck
+
%endif # !%{disable_python2} || !%{disable_python3}
%if !%{disable_json}
@@ -2086,7 +2069,7 @@ BuildRequires: setools
%else
BuildRequires: setools-console
%endif
-Requires: policycoreutils
+Requires: policycoreutils selinux-policy-targeted
%description selinux
This package contains SELinux support for PCP. The package contains
@@ -2095,10 +2078,6 @@ updated policy package.
%endif
%prep
-%setup -q -T -D -a 1 -c -n vector
-%setup -q -T -D -a 2 -c -n grafana
-%setup -q -T -D -a 3 -c -n graphite
-%setup -q -T -D -a 4 -c -n blinkenlights
%setup -q
%patch0 -p1
@@ -2106,7 +2085,7 @@ updated policy package.
%if !%{disable_python2} && 0%{?default_python} != 3
export PYTHON=python%{?default_python}
%endif
-%configure %{?_with_initd} %{?_with_doc} %{?_with_dstat} %{?_with_ib} %{?_with_podman} %{?_with_perfevent} %{?_with_bcc} %{?_with_json} %{?_with_snmp} %{?_with_nutcracker} %{?_with_webapps} %{?_with_python2}
+%configure %{?_with_initd} %{?_with_doc} %{?_with_dstat} %{?_with_ib} %{?_with_podman} %{?_with_statsd} %{?_with_perfevent} %{?_with_bcc} %{?_with_bpftrace} %{?_with_json} %{?_with_snmp} %{?_with_nutcracker} %{?_with_python2}
make %{?_smp_mflags} default_pcp
%install
@@ -2126,20 +2105,6 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/sheet2pcp $RPM_BUILD_ROOT/%{_mandir}/man1/sheet
rm -f $RPM_BUILD_ROOT/%{_includedir}/pcp/configsz.h
rm -f $RPM_BUILD_ROOT/%{_includedir}/pcp/platformsz.h
-%if %{disable_microhttpd}
-rm -fr $RPM_BUILD_ROOT/%{_confdir}/pmwebd
-rm -fr $RPM_BUILD_ROOT/%{_initddir}/pmwebd
-rm -fr $RPM_BUILD_ROOT/%{_unitdir}/pmwebd.service
-rm -f $RPM_BUILD_ROOT/%{_libexecdir}/pcp/bin/pmwebd
-%endif
-%if !%{disable_webapps}
-for app in vector grafana graphite blinkenlights; do
- pwd
- webapp=`find ../$app -mindepth 1 -maxdepth 1`
- mv $webapp $RPM_BUILD_ROOT/%{_datadir}/pcp/webapps/$app
-done
-%endif
-
%if %{disable_infiniband}
# remove pmdainfiniband on platforms lacking IB devel packages.
rm -f $RPM_BUILD_ROOT/%{_pmdasdir}/ib
@@ -2165,7 +2130,7 @@ desktop-file-validate $RPM_BUILD_ROOT/%{_datadir}/applications/pmchart.desktop
%endif
# default chkconfig off for Fedora and RHEL
-for f in $RPM_BUILD_ROOT/%{_initddir}/{pcp,pmcd,pmlogger,pmie,pmwebd,pmmgr,pmproxy}; do
+for f in $RPM_BUILD_ROOT/%{_initddir}/{pcp,pmcd,pmlogger,pmie,pmmgr,pmproxy}; do
test -f "$f" || continue
sed -i -e '/^# chkconfig/s/:.*$/: - 95 05/' -e '/^# Default-Start:/s/:.*$/:/' $f
done
@@ -2206,6 +2171,7 @@ ls -1 $RPM_BUILD_ROOT/%{_pmdasdir} |\
grep -E -v '^samba' |\
grep -E -v '^slurm' |\
grep -E -v '^snmp' |\
+ grep -E -v '^statsd' |\
grep -E -v '^vmware' |\
grep -E -v '^zimbra' |\
grep -E -v '^dm' |\
@@ -2219,6 +2185,8 @@ ls -1 $RPM_BUILD_ROOT/%{_pmdasdir} |\
grep -E -v '^logger' |\
grep -E -v '^mailq' |\
grep -E -v '^mounts' |\
+ grep -E -v '^mssql' |\
+ grep -E -v '^netcheck' |\
grep -E -v '^nvidia' |\
grep -E -v '^roomtemp' |\
grep -E -v '^sendmail' |\
@@ -2231,6 +2199,7 @@ ls -1 $RPM_BUILD_ROOT/%{_pmdasdir} |\
grep -E -v '^json' |\
grep -E -v '^mic' |\
grep -E -v '^bcc' |\
+ grep -E -v '^bpftrace' |\
grep -E -v '^gluster' |\
grep -E -v '^zswap' |\
grep -E -v '^unbound' |\
@@ -2239,7 +2208,7 @@ ls -1 $RPM_BUILD_ROOT/%{_pmdasdir} |\
# all base pcp package files except those split out into sub-packages
ls -1 $RPM_BUILD_ROOT/%{_bindir} |\
- grep -E -v 'pmiostat|pmcollectl|zabbix|zbxpcp|dstat' |\
+ grep -E -v 'pmiostat|zabbix|zbxpcp|dstat' |\
grep -E -v 'pmrep|pcp2graphite|pcp2influxdb|pcp2zabbix' |\
grep -E -v 'pcp2elasticsearch|pcp2json|pcp2xlsx|pcp2xml' |\
grep -E -v 'pcp2spark' |\
@@ -2247,11 +2216,11 @@ ls -1 $RPM_BUILD_ROOT/%{_bindir} |\
sed -e 's#^#'%{_bindir}'\/#' >base_bin.list
# Separate the pcp-system-tools package files.
-# pmcollectl and pmiostat are back-compat symlinks to their
-# pcp(1) sub-command variants so are also in pcp-system-tools.
+# pmiostat is a back-compat symlink to its pcp(1) sub-command variant
+# so its also in pcp-system-tools.
%if !%{disable_python2} || !%{disable_python3}
ls -1 $RPM_BUILD_ROOT/%{_bindir} |\
- egrep -e 'pmiostat|pmcollectl|pmrep|dstat' |\
+ egrep -e 'pmiostat|pmrep|dstat' |\
sed -e 's#^#'%{_bindir}'\/#' >pcp-system-tools.list
ls -1 $RPM_BUILD_ROOT/%{_libexecdir}/pcp/bin |\
egrep -e 'atop|collectl|dmcache|dstat|free|iostat|ipcs|lvmcache|mpstat' \
@@ -2293,7 +2262,7 @@ ls -1 $RPM_BUILD_ROOT/%{_logconfdir}/ |\
sed -e 's#^#'%{_logconfdir}'\/#' |\
grep -E -v 'zeroconf' >pcp-logconf.list
cat base_pmdas.list base_bin.list base_exec.list pcp-logconf.list |\
- grep -E -v 'pmdaib|pmmgr|pmweb|pmsnap|2pcp|pmdas/systemd' |\
+ grep -E -v 'pmdaib|pmmgr|pmsnap|2pcp|pmdas/systemd' |\
grep -E -v "$PCP_GUI|pixmaps|hicolor|pcp-doc|tutorials|selinux" |\
grep -E -v %{_confdir} | grep -E -v %{_logsdir} > base.list
@@ -2335,72 +2304,8 @@ exit 0
getent group pcp >/dev/null || groupadd -r pcp
getent passwd pcp >/dev/null || \
useradd -c "Performance Co-Pilot" -g pcp -d %{_localstatedir}/lib/pcp -M -r -s /sbin/nologin pcp
-PCP_CONFIG_DIR=%{_localstatedir}/lib/pcp/config
-PCP_SYSCONF_DIR=%{_confdir}
-PCP_LOG_DIR=%{_logsdir}
-PCP_ETC_DIR=%{_sysconfdir}
-# rename crontab files to align with current Fedora packaging guidelines
-for crontab in pmlogger pmie
-do
- test -f "$PCP_ETC_DIR/cron.d/$crontab" || continue
- mv -f "$PCP_ETC_DIR/cron.d/$crontab" "$PCP_ETC_DIR/cron.d/pcp-$crontab"
-done
-# produce a script to run post-install to move configs to their new homes
-save_configs_script()
-{
- _new="$1"
- shift
- for _dir
- do
- [ "$_dir" = "$_new" ] && continue
- if [ -d "$_dir" ]
- then
- ( cd "$_dir" ; find . -maxdepth 1 -type f ) | sed -e 's/^\.\///' \
- | while read _file
- do
- [ "$_file" = "control" ] && continue
- _want=true
- if [ -f "$_new/$_file" ]
- then
- # file exists in both directories, pick the more
- # recently modified one
- _try=`find "$_dir/$_file" -newer "$_new/$_file" -print`
- [ -n "$_try" ] || _want=false
- fi
- $_want && echo cp -p "$_dir/$_file" "$_new/$_file"
- done
- fi
- done
-}
-# migrate and clean configs if we have had a previous in-use installation
-[ -d "$PCP_LOG_DIR" ] || exit 0 # no configuration file upgrades required
-rm -f "$PCP_LOG_DIR/configs.sh"
-for daemon in pmie pmlogger
-do
- save_configs_script >> "$PCP_LOG_DIR/configs.sh" "$PCP_CONFIG_DIR/$daemon" \
- "$PCP_SYSCONF_DIR/$daemon"
-done
-for daemon in pmcd pmproxy
-do
- save_configs_script >> "$PCP_LOG_DIR/configs.sh" "$PCP_SYSCONF_DIR/$daemon"\
- "$PCP_CONFIG_DIR/$daemon" /etc/$daemon
-done
exit 0
-%if !%{disable_microhttpd}
-%preun webapi
-if [ "$1" -eq 0 ]
-then
-%if !%{disable_systemd}
- systemctl --no-reload disable pmwebd.service >/dev/null 2>&1
- systemctl stop pmwebd.service >/dev/null 2>&1
-%else
- /sbin/service pmwebd stop >/dev/null 2>&1
- /sbin/chkconfig --del pmwebd >/dev/null 2>&1
-%endif
-fi
-%endif
-
%preun manager
if [ "$1" -eq 0 ]
then
@@ -2438,6 +2343,11 @@ fi
%{pmda_remove "$1" "podman"}
%endif #preun pmda-podman
+%if !%{disable_statsd}
+%preun pmda-statsd
+%{pmda_remove "$1" "statsd"}
+%endif #preun pmda-statsd
+
%if !%{disable_json}
%preun pmda-json
%{pmda_remove "$1" "json"}
@@ -2496,8 +2406,8 @@ fi
%preun pmda-lio
%{pmda_remove "$1" "lio"}
-%preun pmda-prometheus
-%{pmda_remove "$1" "prometheus"}
+%preun pmda-openmetrics
+%{pmda_remove "$1" "openmetrics"}
%preun pmda-lustre
%{pmda_remove "$1" "lustre"}
@@ -2551,6 +2461,11 @@ fi
%{pmda_remove "$1" "bcc"}
%endif
+%if !%{disable_bpftrace}
+%preun pmda-bpftrace
+%{pmda_remove "$1" "bpftrace"}
+%endif
+
%if !%{disable_python2} || !%{disable_python3}
%preun pmda-gluster
%{pmda_remove "$1" "gluster"}
@@ -2573,6 +2488,12 @@ fi
%preun pmda-lmsensors
%{pmda_remove "$1" "lmsensors"}
+%preun pmda-mssql
+%{pmda_remove "$1" "mssql"}
+
+%preun pmda-netcheck
+%{pmda_remove "$1" "netcheck"}
+
%endif # !%{disable_python[2,3]}
%preun pmda-apache
@@ -2664,17 +2585,6 @@ then
rm -f "$PCP_PMNS_DIR/.NeedRebuild" >/dev/null 2>&1
fi
-%if !%{disable_microhttpd}
-%post webapi
-chown -R pcp:pcp %{_logsdir}/pmwebd 2>/dev/null
-%if !%{disable_systemd}
- systemctl condrestart pmwebd.service >/dev/null 2>&1
-%else
- /sbin/chkconfig --add pmwebd >/dev/null 2>&1
- /sbin/service pmwebd condrestart
-%endif
-%endif
-
%post manager
chown -R pcp:pcp %{_logsdir}/pmmgr 2>/dev/null
%if !%{disable_systemd}
@@ -2729,12 +2639,7 @@ pmieconf -c enable dmthin
%endif
%post
-PCP_LOG_DIR=%{_logsdir}
PCP_PMNS_DIR=%{_pmnsdir}
-# restore saved configs, if any
-test -s "$PCP_LOG_DIR/configs.sh" && source "$PCP_LOG_DIR/configs.sh"
-rm -f $PCP_LOG_DIR/configs.sh
-
chown -R pcp:pcp %{_logsdir}/pmcd 2>/dev/null
chown -R pcp:pcp %{_logsdir}/pmlogger 2>/dev/null
chown -R pcp:pcp %{_logsdir}/sa 2>/dev/null
@@ -2761,7 +2666,7 @@ chmod 644 "$PCP_PMNS_DIR/.NeedRebuild"
/sbin/service pmproxy condrestart
%endif
-cd $PCP_PMNS_DIR && ./Rebuild -s && rm -f .NeedRebuild
+cd "$PCP_PMNS_DIR" && ./Rebuild -s && rm -f .NeedRebuild
cd
%if 0%{?fedora} >= 26 || 0%{?rhel} > 7
@@ -2949,51 +2854,6 @@ cd
%defattr(-,pcpqa,pcpqa)
%{_testsdir}
-%if !%{disable_microhttpd}
-%files webapi
-%{_initddir}/pmwebd
-%if !%{disable_systemd}
-%{_unitdir}/pmwebd.service
-%endif
-%{_libexecdir}/pcp/bin/pmwebd
-%attr(0775,pcp,pcp) %{_logsdir}/pmwebd
-%{_confdir}/pmwebd
-%config(noreplace) %{_confdir}/pmwebd/pmwebd.options
-# duplicate pcp, pcp-webapi and pcp-webjs directories, but rpm copes with that.
-%dir %{_datadir}/pcp
-%dir %{_datadir}/pcp/webapps
-%endif
-
-%if !%{disable_webapps}
-%files webjs
-# duplicate pcp, pcp-webapi and pcp-webjs directories, but rpm copes with that.
-%dir %{_datadir}/pcp
-%dir %{_datadir}/pcp/webapps
-%{_datadir}/pcp/webapps/*.png
-%{_datadir}/pcp/webapps/*.ico
-%{_datadir}/pcp/webapps/*.html
-
-%files webapp-blinkenlights
-%dir %{_datadir}/pcp
-%dir %{_datadir}/pcp/webapps
-%{_datadir}/pcp/webapps/blinkenlights
-
-%files webapp-grafana
-%dir %{_datadir}/pcp
-%dir %{_datadir}/pcp/webapps
-%{_datadir}/pcp/webapps/grafana
-
-%files webapp-graphite
-%dir %{_datadir}/pcp
-%dir %{_datadir}/pcp/webapps
-%{_datadir}/pcp/webapps/graphite
-
-%files webapp-vector
-%dir %{_datadir}/pcp
-%dir %{_datadir}/pcp/webapps
-%{_datadir}/pcp/webapps/vector
-%endif
-
%files manager
%{_initddir}/pmmgr
%if !%{disable_systemd}
@@ -3024,6 +2884,12 @@ cd
%{_pmdasdir}/podman
%endif
+%if !%{disable_statsd}
+%files pmda-statsd
+%{_pmdasdir}/statsd
+%config(noreplace) %{_pmdasdir}/statsd/statsd.ini
+%endif
+
%if !%{disable_perfevent}
%files pmda-perfevent
%{_pmdasdir}/perfevent
@@ -3069,8 +2935,8 @@ cd
%files pmda-lio
%{_pmdasdir}/lio
-%files pmda-prometheus
-%{_pmdasdir}/prometheus
+%files pmda-openmetrics
+%{_pmdasdir}/openmetrics
%files pmda-lustre
%{_pmdasdir}/lustre
@@ -3148,6 +3014,11 @@ cd
%{_pmdasdir}/bcc
%endif
+%if !%{disable_bpftrace}
+%files pmda-bpftrace
+%{_pmdasdir}/bpftrace
+%endif
+
%if !%{disable_python2} || !%{disable_python3}
%files pmda-gluster
%{_pmdasdir}/gluster
@@ -3196,6 +3067,12 @@ cd
%files pmda-lmsensors
%{_pmdasdir}/lmsensors
+%files pmda-mssql
+%{_pmdasdir}/mssql
+
+%files pmda-netcheck
+%{_pmdasdir}/netcheck
+
%endif # !%{disable_python2} || !%{disable_python3}
%files export-zabbix-agent
@@ -3307,11 +3184,8 @@ cd
%endif
%changelog
-* Thu Oct 03 2019 Miro Hronok <mhroncok(a)redhat.com> - 4.3.4-3
-- Rebuilt for Python 3.8.0rc1 (#1748018)
-
-* Mon Aug 19 2019 Miro Hronok <mhroncok(a)redhat.com> - 4.3.4-2
-- Rebuilt for Python 3.8
+* Fri Oct 11 2019 Mark Goodwin <mgoodwin(a)redhat.com> - 5.0.0-1
+- Update to latest PCP sources.
* Fri Aug 16 2019 Nathan Scott <nathans(a)redhat.com> - 4.3.4-1
- Resolve bootup issues with pmlogger service (BZ 1737091, BZ 1721223)
diff --git a/pmcd-pmlogger-local-context.patch b/pmcd-pmlogger-local-context.patch
new file mode 100644
index 0000000..1c1e90d
--- /dev/null
+++ b/pmcd-pmlogger-local-context.patch
@@ -0,0 +1,26 @@
+diff --git a/src/pmcd/pmcd.defaults b/src/pmcd/pmcd.defaults
+index 83ee4d9a9..56e125553 100644
+--- a/src/pmcd/pmcd.defaults
++++ b/src/pmcd/pmcd.defaults
+@@ -4,7 +4,7 @@
+ # Behaviour regarding listening on external-facing interfaces;
+ # unset PMCD_LOCAL to allow connections from remote hosts.
+ # A value of 0 permits remote connections, 1 permits local only.
+-# PMCD_LOCAL=1
++PMCD_LOCAL=1
+
+ # Max length to which the queue of pending connections may grow
+ # A value of 5 is the default.
+diff --git a/src/pmlogger/pmlogger.defaults b/src/pmlogger/pmlogger.defaults
+index 5462403ec..261a79039 100644
+--- a/src/pmlogger/pmlogger.defaults
++++ b/src/pmlogger/pmlogger.defaults
+@@ -4,7 +4,7 @@
+ # Behaviour regarding listening on external-facing interfaces;
+ # unset PMLOGGER_LOCAL to allow connections from remote hosts.
+ # A value of 0 permits remote connections, 1 permits local only.
+-# PMLOGGER_LOCAL=1
++PMLOGGER_LOCAL=1
+
+ # Max length to which the queue of pending connections may grow
+ # A value of 5 is the default.
diff --git a/sources b/sources
index 0c38edf..63d048e 100644
--- a/sources
+++ b/sources
@@ -1,6 +1 @@
-SHA512 (pcp-4.3.4.src.tar.gz) = 27e7d3558253edde342256b4f750160c216bb8323c47dd01ef8d67d49e702d1d70ba406cafdcbf6867ad63e460279e8214c39a1fd20b6b8c781dc33920587569
-SHA512 (pcp-webapp-blinkenlights-1.0.1.tar.gz) = dadf0bc0742a3344a75f8f304851762572ddc9a5c7c66fd085adcabb70f9e7a9b2c9b6095a8fb358f6a6c64dbf41cf245e2da74a60b8120880f314b6ed3d271c
-SHA512 (pcp-webapp-grafana-1.9.1-2.tar.gz) = abd0f360b057853d343e506e352a37d16f78bbae6760124ecdfab0e43ffcf3b31404311f1fe5c962e8abdbf2ad8699df3f27e2920f03f1a10bca3c0e01179e21
-SHA512 (pcp-webapp-graphite-0.9.10.tar.gz) = f716e5145e5d39b54be02e39202c51bdd1158d56fa16185a591c0f54fb376a637653f0c13aa9c5ad5700fc62d0c71163e94b9fa689fabe3e6de4ddf19fa827fa
-SHA512 (pcp-webapp-vector-1.3.1-1.tar.gz) = b1463d4da3727f130752699dd433e997212c19241ac440df389c1153e468ace840b7d5f43a37b2173e4eee4f4a807338a3c40cc9635801e626c1530baf46e289
-SHA512 (pmcd-pmlogger-local-context.patch) = 8f4b6b49494781d0a711ac27738a75b1adead72cb1baef9a78754686c48ae2d278d691108233e9cf9ad33fede5ba7b7a43f4674205b9bf448f267c844ddc1a01
+SHA512 (pcp-5.0.0.src.tar.gz) = 4a00b199343fcc33b9e4f262974e9d075892a76af92811428221ea9fbacf479a4852e2734caaff56fa6b492b0440e34db55256c91e4b89a9fe52a775645adf89
commit 5f1d7403cba66375bf722f37ba1d0883cd5b3eab
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Oct 3 13:58:17 2019 +0200
Rebuilt for Python 3.8.0rc1 (#1748018)
diff --git a/pcp.spec b/pcp.spec
index 265fe73..ff436bc 100644
--- a/pcp.spec
+++ b/pcp.spec
@@ -1,6 +1,6 @@
Name: pcp
Version: 4.3.4
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: System-level performance monitoring and performance management
License: GPLv2+ and LGPLv2+ and CC-BY
URL: https://pcp.io
@@ -3307,6 +3307,9 @@ cd
%endif
%changelog
+* Thu Oct 03 2019 Miro Hronok <mhroncok(a)redhat.com> - 4.3.4-3
+- Rebuilt for Python 3.8.0rc1 (#1748018)
+
* Mon Aug 19 2019 Miro Hronok <mhroncok(a)redhat.com> - 4.3.4-2
- Rebuilt for Python 3.8
commit 2041f4eccac70c7121cad947fb6289a1b69ac726
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Mon Aug 19 10:21:59 2019 +0200
Rebuilt for Python 3.8
diff --git a/pcp.spec b/pcp.spec
index 215aa3b..265fe73 100644
--- a/pcp.spec
+++ b/pcp.spec
@@ -1,6 +1,6 @@
Name: pcp
Version: 4.3.4
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: System-level performance monitoring and performance management
License: GPLv2+ and LGPLv2+ and CC-BY
URL: https://pcp.io
@@ -3307,6 +3307,9 @@ cd
%endif
%changelog
+* Mon Aug 19 2019 Miro Hronok <mhroncok(a)redhat.com> - 4.3.4-2
+- Rebuilt for Python 3.8
+
* Fri Aug 16 2019 Nathan Scott <nathans(a)redhat.com> - 4.3.4-1
- Resolve bootup issues with pmlogger service (BZ 1737091, BZ 1721223)
- Resolve selinux policy issues in PCP tools (BZ 1721644, BZ 1711547)
4 years, 6 months
Architecture specific change in rpms/pypy3.git
by githook-noreply@fedoraproject.org
The package rpms/pypy3.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/pypy3.git/commit/?id=faa7ffb04460....
Change:
-%ifarch %{power64}
Thanks.
Full change:
============
commit faa7ffb044605fcf1d807ada72eeb88ccf4181a1
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Sat Oct 19 00:41:56 2019 +0200
Build everything with pypy, but fix the cpython build w/out pycparser
diff --git a/pypy3.spec b/pypy3.spec
index 0ab7125..70caacc 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -179,25 +179,15 @@ Source189: 189-use-rpm-wheels.patch
# and avoid a cycle in the build-time dependency graph:
# Note, pypy3 is built with pypy2, so no dependency cycle
-%ifarch %{power64}
-# the build is unreliable with pypy+power, getting random failures
-# so better have a bit slower build than having to build until it pass
-%global use_self_when_building 0
-%else
%global use_self_when_building 1
-%endif
-
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy2
-# no pypy-pycparser available ATM
%global bootstrap_python_interp pypy2
%else
-
-
# pypy3 can only be build with python2
-BuildRequires: python2-devel
-BuildRequires: python2-pycparser
+# exception to use Python 2: https://pagure.io/fesco/issue/2130
+BuildRequires: python27
%global bootstrap_python_interp python2
%endif
@@ -356,6 +346,11 @@ rm lib-python/3/idlelib/idle.bat
sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
%endif
+%if ! 0%{use_self_when_building}
+ # use the pycparser from PyPy even on CPython
+ ln -s lib_pypy/cffi/_pycparser pycparser
+%endif
+
%build
%ifarch s390 s390x
# pypy3 requires z10 at least
4 years, 6 months
Architecture specific change in rpms/pypy.git
by githook-noreply@fedoraproject.org
The package rpms/pypy.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/pypy.git/commit/?id=5b269245997cd....
Change:
-%ifarch %{power64}
Thanks.
Full change:
============
commit 5b269245997cdd724db7dd500328a881a6473225
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Sat Oct 19 00:41:07 2019 +0200
Build everything with pypy, but fix the cpython build w/out pycparser
diff --git a/pypy.spec b/pypy.spec
index 203fb9a..091d2b4 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -178,20 +178,12 @@ Source189: 189-use-rpm-wheels.patch
# and avoid a cycle in the build-time dependency graph:
%global use_self_when_building 1
-# Getting strange error on ppc64 arch when building with PyPy,
-# use CPython for ppc64 temporarily
-# https://koji.fedoraproject.org/koji/taskinfo?taskID=23000326
-# TODO: resolve this and remove power64 part of condition
-%ifarch %{power64}
-%global use_self_when_building 0
-%endif
-
%if 0%{use_self_when_building}
-BuildRequires: pypy
+BuildRequires: pypy2
%global bootstrap_python_interp pypy2
%else
-BuildRequires: python2-devel
-BuildRequires: python2-pycparser
+# exception to use Python 2: https://pagure.io/fesco/issue/2130
+BuildRequires: python27
%global bootstrap_python_interp python2
%endif
@@ -344,6 +336,11 @@ find lib-python/%{pylibver} -name "*.py" -exec \
"{}" \
\;
+%if ! 0%{use_self_when_building}
+ # use the pycparser from PyPy even on CPython
+ ln -s lib_pypy/cffi/_pycparser pycparser
+%endif
+
%build
%ifarch s390x
# pypy3 requires z10 at least
4 years, 6 months
[Report] Packages Restricting Arches
by root
List of packages currently excluding arches (2569)
===========================================
- 0ad
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- 90-Second-Portraits
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64
- GoldenCheetah
ExclusiveArch: %{qt5_qtwebengine_arches}
- GtkAda
ExclusiveArch: %{GPRbuild_arches}
- GtkAda3
ExclusiveArch: %{GPRbuild_arches}
- PragmARC
ExclusiveArch: %{GPRbuild_arches}
- R-V8
ExclusiveArch: %{nodejs_arches}
- RdRand
ExclusiveArch: %{ix86} x86_64
- SLOF
ExclusiveArch: ppc64le
- YafaRay
ExclusiveArch: %{ix86} x86_64
- aboot
ExclusiveArch: alpha
- acpid
ExclusiveArch: ia64 x86_64 %{ix86} %{arm} aarch64
- ahven
ExclusiveArch: %{GPRbuild_arches}
- alleyoop
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x %{arm} aarch64
- american-fuzzy-lop
ExclusiveArch: %{ix86} x86_64
- anet
ExclusiveArch: %{GPRbuild_arches}
- apmd
ExclusiveArch: %{ix86}
- appstream-generator
ExclusiveArch: x86_64 %{ix86} %{arm}
- arduino
ExclusiveArch: %{go_arches}
- arduino-builder
ExclusiveArch: %{go_arches}
- arm-trusted-firmware
ExclusiveArch: aarch64
- aunit
ExclusiveArch: %GPRbuild_arches
- avgtime
ExclusiveArch: %{ldc_arches}
- aws
ExclusiveArch: %GPRbuild_arches
- banshee
ExclusiveArch: %{mono_arches}
- banshee-community-extensions
ExclusiveArch: %ix86 x86_64 ppc ppc64 ia64 %{arm} sparcv9 alpha s390x
- bareftp
ExclusiveArch: %{mono_arches}
- bcal
ExclusiveArch: x86_64 aarch64 ia64 ppc64 ppc64le s390x
- bcc
ExclusiveArch: x86_64 %{power64} aarch64 s390x
- bcm283x-firmware
ExclusiveArch: %{arm} aarch64
- berusky2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{mips}
- biosdevname
ExclusiveArch: %{ix86} x86_64
- bless
ExclusiveArch: %mono_arches
- boo
ExclusiveArch: %{mono_arches}
- bpftrace
ExclusiveArch: x86_64 %{power64} aarch64 s390x
- bwa
ExclusiveArch: x86_64
- calamares
ExclusiveArch: %{ix86} x86_64
- calibre
ExclusiveArch: %{qt5_qtwebengine_arches}
- carto
ExclusiveArch: %{nodejs_arches} noarch
- ccdciel
ExclusiveArch: %{fpc_arches}
- cdcollect
ExclusiveArch: %{mono_arches}
- chromium
ExclusiveArch: x86_64 i686
ExclusiveArch: x86_64 i686 aarch64
- cjdns
ExclusiveArch: %{nodejs_arches}
- cmospwd
ExclusiveArch: %{ix86} x86_64
- cmrt
ExclusiveArch: %{ix86} x86_64 ia64
- coffee-script
ExclusiveArch: %{nodejs_arches} noarch
- colorful
ExclusiveArch: %{fpc_arches}
- containers
ExclusiveArch: %{ldc_arches}
- cpuid
ExclusiveArch: %{ix86} x86_64
- cqrlog
ExclusiveArch: %{fpc_arches}
- crash
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- cri-tools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- criu
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
- cryptlib
ExclusiveArch: x86_64 %{ix86} aarch64 ppc64 ppc64le
- cryptobone
ExclusiveArch: x86_64 %{ix86} ppc64 ppc64le aarch64
- daq
ExclusiveArch: x86_64 aarch64
- darktable
ExclusiveArch: x86_64 aarch64 ppc64le
- dbus-sharp
ExclusiveArch: %mono_arches
- dbus-sharp-glib
ExclusiveArch: %mono_arches
- dbxtool
ExclusiveArch: i386 x86_64 aarch64
- deepin-daemon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- discord-irc
ExclusiveArch: %{nodejs_arches} noarch
- dlm
ExclusiveArch: i686 x86_64
- dmidecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- docco
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- docker-distribution
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- dolphin-emu
ExclusiveArch: x86_64 armv7l aarch64
- doublecmd
ExclusiveArch: %{ix86} x86_64
- dpdk
ExclusiveArch: x86_64 i686 aarch64 ppc64le
- dssi-vst
ExclusiveArch: %{ix86} x86_64
- dyninst
ExclusiveArch: %{ix86} x86_64 ppc64le aarch64
- e3
ExclusiveArch: %{ix86} x86_64
- edac-utils
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64}
- edb
ExclusiveArch: %{ix86} x86_64
- edk2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
ExclusiveArch: x86_64 aarch64
- efibootmgr
ExclusiveArch: %{efi}
- efivar
ExclusiveArch: %{efi}
- elasticdump
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- elk
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86} aarch64 %{arm} %{power64}
- embree
ExclusiveArch: x86_64
- embree2
ExclusiveArch: x86_64
- enki
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- envytools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- exciting
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86} aarch64 %{power64}
ExclusiveArch: x86_64 %{ix86} aarch64 %{arm} %{power64}
- expresso
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- extlinux-bootloader
ExclusiveArch: %{arm} aarch64
- fcitx-libpinyin
ExclusiveArch: %{qt5_qtwebengine_arches}
- fedora-dockerfiles
ExclusiveArch: %{go_arches}
- fence-virt
ExclusiveArch: i686 x86_64
- fes
ExclusiveArch: %{ix86} x86_64
- flannel
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- florist
ExclusiveArch: %{GPRbuild_arches}
- fluxcapacitor
ExclusiveArch: %{ix86} x86_64 %{arm}
- fpc
ExclusiveArch: %{arm} %{ix86} x86_64 ppc ppc64
- frysk
ExclusiveArch: %{ix86} x86_64 ppc64
- fst
ExclusiveArch: i686
- fwts
ExclusiveArch: x86_64 %{arm} aarch64 s390x %{power64}
- ga
ExclusiveArch: %{ix86} x86_64
- gbrainy
ExclusiveArch: %mono_arches
- gdata-sharp
ExclusiveArch: %mono_arches
- gdb-exploitable
ExclusiveArch: x86_64 i386
ExclusiveArch: x86_64 noarch
- gela-asis
ExclusiveArch: %GPRbuild_arches
- ghdl
ExclusiveArch: %{GNAT_arches}
- ghostwriter
ExclusiveArch: %{qt5_qtwebengine_arches}
- gio-sharp
ExclusiveArch: %mono_arches
- gir-to-d
ExclusiveArch: %{ldc_arches}
- git-octopus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- giver
ExclusiveArch: %{mono_arches}
- gkeyfile-sharp
ExclusiveArch: %mono_arches
- glibc32
ExclusiveArch: x86_64
- glibd
ExclusiveArch: %{ldc_arches}
- glusterd2
ExclusiveArch: %{go_arches}
- gmqcc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- gnatcoll
ExclusiveArch: %{GPRbuild_arches}
- gnatcoll-bindings
ExclusiveArch: %{GPRbuild_arches}
- gnatcoll-db
ExclusiveArch: %{GPRbuild_arches}
- gnome-boxes
ExclusiveArch: x86_64
- gnome-desktop-sharp
ExclusiveArch: %mono_arches
- gnome-do
ExclusiveArch: %mono_arches
- gnome-guitar
ExclusiveArch: %{mono_arches}
- gnome-keyring-sharp
ExclusiveArch: %mono_arches
- gnome-rdp
ExclusiveArch: %{mono_arches}
- gnome-sharp
ExclusiveArch: %mono_arches
- gnome-subtitles
ExclusiveArch: %mono_arches
- gnu-efi
ExclusiveArch: %{efi}
- go-bindata
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- go-compilers
ExclusiveArch: %{go_arches}
- go-rpm-macros
ExclusiveArch: %{golang_arches} %{gccgo_arches}
- godep
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang
ExclusiveArch: %{golang_arches}
- gomtree
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gotun
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: x86_64
- gprbuild
ExclusiveArch: %{GPRbuild_arches} %{bootstrap_arch}
- gprolog
ExclusiveArch: x86_64 %{ix86} ppc alpha
- grafana
ExclusiveArch: %{grafana_arches}
- grafana-pcp
ExclusiveArch: %{nodejs_arches}
- gtk-sharp-beans
ExclusiveArch: %mono_arches
- gtk-sharp2
ExclusiveArch: %mono_arches
- gtk-sharp3
ExclusiveArch: %{mono_arches}
- gtkd
ExclusiveArch: %{ldc_arches}
- gudev-sharp
ExclusiveArch: %mono_arches
- hcc
ExclusiveArch: x86_64 aarch64
- hedgewars
ExclusiveArch: %{fpc_arches}
- heketi
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- hip
ExclusiveArch: x86_64
- hsakmt
ExclusiveArch: x86_64 aarch64
- hyena
ExclusiveArch: %{mono_arches}
- hyperscan
ExclusiveArch: x86_64
- hyperv-daemons
ExclusiveArch: i686 x86_64
- icaro
ExclusiveArch: %{ix86} x86_64 noarch
- imvirt
ExclusiveArch: %{ix86} x86_64 ia64
- indistarter
ExclusiveArch: %{fpc_arches}
- infinipath-psm
ExclusiveArch: x86_64
- insect
ExclusiveArch: %{nodejs_arches} noarch
- intel-cmt-cat
ExclusiveArch: x86_64 i686 i586
ExclusiveArch: x86_64 i686 i586
- intel-gmmlib
ExclusiveArch: x86_64 i686
- ioport
ExclusiveArch: %{ix86} x86_64
- ipmctl
ExclusiveArch: x86_64
- ipw2100-firmware
ExclusiveArch: noarch i386 x86_64
- ipw2200-firmware
ExclusiveArch: noarch i386 x86_64
- ispc
ExclusiveArch: %{arm} %{ix86} x86_64
- iucode-tool
ExclusiveArch: %{ix86} x86_64
- jake
ExclusiveArch: %{nodejs_arches} noarch
- jasmine-node
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- java-1.8.0-openjdk-aarch32
ExclusiveArch: %{arm}
- josm
ExclusiveArch: %{ix86} x86_64
- keepass
ExclusiveArch: %{mono_arches}
- kernel
ExclusiveArch: x86_64 s390x %{arm} aarch64 ppc64le
- kicad
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- kiwix-desktop
ExclusiveArch: %{qt5_qtwebengine_arches}
- knot-resolver
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- kompose
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 s390x
- kosmtik
ExclusiveArch: %{nodejs_arches} noarch
- kubernetes
ExclusiveArch: x86_64 aarch64 ppc64le s390x %{arm}
- lazarus
ExclusiveArch: %{fpc_arches}
- ldc
ExclusiveArch: %{ldc_arches}
- libbsr
ExclusiveArch: %{power64}
- libclc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64} s390x
- libcxl
ExclusiveArch: %{power64}
- libica
ExclusiveArch: s390 s390x
- libipt
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- libmfx
ExclusiveArch: %{ix86} x86_64
- libocxl
ExclusiveArch: ppc64le
- libpmemobj-cpp
ExclusiveArch: x86_64
- libpsm2
ExclusiveArch: x86_64
- libquentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- libretro-desmume2015
ExclusiveArch: i686 x86_64
- librtas
ExclusiveArch: %{power64}
- libseccomp
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 mipsel mips64el ppc64 ppc64le s390 s390x
- libservicelog
ExclusiveArch: ppc %{power64}
- libsmbios
ExclusiveArch: x86_64 %{ix86}
- libunwind
ExclusiveArch: %{arm} aarch64 hppa ia64 mips ppc %{power64} %{ix86} x86_64
- libva-intel-hybrid-driver
ExclusiveArch: %{ix86} x86_64 ia64
- libvmi
ExclusiveArch: x86_64
- libvpd
ExclusiveArch: %{power64}
- libxsmm
ExclusiveArch: x86_64
- libzfcphbaapi
ExclusiveArch: s390 s390x
- lodash
ExclusiveArch: %{nodejs_arches} noarch
- log4net
ExclusiveArch: %mono_arches
- lrmi
ExclusiveArch: %{ix86}
- lsvpd
ExclusiveArch: %{power64}
- luajit
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 s390x ppc64le
- luxcorerender
ExclusiveArch: x86_64
- mactel-boot
ExclusiveArch: x86_64
- manifest-tool
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- mantle
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- marked
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- matreshka
ExclusiveArch: %GPRbuild_arches
- maven-eclipse-plugin
ExclusiveArch: %{ix86} x86_64
- maxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- mcelog
ExclusiveArch: i686 x86_64
- mediaconch
ExclusiveArch: %{qt5_qtwebengine_arches}
- mellowplayer
ExclusiveArch: %{qt5_qtwebengine_arches}
- memkind
ExclusiveArch: x86_64
- memtest86+
ExclusiveArch: %{ix86} x86_64
- mesos
ExclusiveArch: x86_64
- microcode_ctl
ExclusiveArch: %{ix86} x86_64
- micropython
ExclusiveArch: %{arm} %{ix86} x86_64
- mine_detector
ExclusiveArch: %{GPRbuild_arches}
- minetest
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- mingw-wine-gecko
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- mkbootdisk
ExclusiveArch: %{ix86} sparc sparc64 x86_64
- mnemosyne
ExclusiveArch: noarch %{qt5_qtwebengine_arches}
- mocha
ExclusiveArch: %{nodejs_arches} noarch
- mod_mono
ExclusiveArch: %mono_arches
- module-build-service
ExclusiveArch: %{ix86} x86_64 noarch
- mokutil
ExclusiveArch: %{ix86} x86_64 aarch64
- mono
ExclusiveArch: %mono_arches
- mono-addins
ExclusiveArch: %mono_arches
- mono-basic
ExclusiveArch: %{mono_arches}
- mono-bouncycastle
ExclusiveArch: %mono_arches
- mono-cecil
ExclusiveArch: %mono_arches
- mono-cecil-flowanalysis
ExclusiveArch: %mono_arches
- mono-reflection
ExclusiveArch: %mono_arches
- mono-tools
ExclusiveArch: %mono_arches
- mono-zeroconf
ExclusiveArch: %mono_arches
- monobristol
ExclusiveArch: %{mono_arches}
- monodevelop
ExclusiveArch: %mono_arches
- monodevelop-debugger-gdb
ExclusiveArch: %{mono_arches}
- monosim
ExclusiveArch: %mono_arches
- mozilla-iot-gateway
ExclusiveArch: %{nodejs_arches} noarch
- mozilla-iot-gateway-addon-node
ExclusiveArch: %{nodejs_arches} noarch
- mrrescue
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64
- msr-tools
ExclusiveArch: %{ix86} x86_64
- mustache-d
ExclusiveArch: %{ldc_arches}
- mysql-connector-net
ExclusiveArch: %{mono_arches}
- nacl-arm-binutils
ExclusiveArch: x86_64
- nacl-binutils
ExclusiveArch: x86_64
- nant
ExclusiveArch: %mono_arches
- nbc
ExclusiveArch: %{fpc_arches}
- nbdkit
ExclusiveArch: x86_64
- ndesk-dbus
ExclusiveArch: %{mono_arches}
- ndesk-dbus-glib
ExclusiveArch: %{mono_arches}
- newtonsoft-json
ExclusiveArch: %{mono_arches}
- nim
ExclusiveArch: %{nim_arches}
- node-gyp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs
ExclusiveArch: %{nodejs_arches}
- nodejs-Base64
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-abbrev
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-acorn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-acorn-dynamic-import
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-acorn-jsx
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-acorn-object-spread
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-agentkeepalive
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ain2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-align-text
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgblack
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgblue
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgcyan
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bggreen
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgmagenta
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgred
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgwhite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgyellow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-black
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-blue
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bold
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-colors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-cyan
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-dim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-escapes
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-gray
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-green
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-grey
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-hidden
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-inverse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-italic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-magenta
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-red
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-reset
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-strikethrough
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-styles
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-underline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-white
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-wrap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-yellow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansicolors
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansistyles
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-any-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-any-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-append-field
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-append-transform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-archy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-are-we-there-yet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-argparse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-argsparser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arr-diff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-arr-exclude
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arr-flatten
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-arr-union
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-buffer-from-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-differ
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-events
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-filter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-find
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-find-index
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-flatten
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-foreach
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-ify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-index
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-reduce
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-union
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-unique
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-arraybuffer-dot-slice
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arraybuffer-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arrify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-asap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ascii-tree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ascli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-asn1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-assert-plus
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-assertion-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-assume
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-array-reduce
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-async-arrays
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-limiter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-queue
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-some
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-asynckit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-atob
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-auto-bind
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-autoresolve
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-aws-sign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-aws-sign2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-aws4
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-babel-code-frame
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-babel-plugin-syntax-async-functions
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-babel-plugin-syntax-async-generators
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-babel-runtime
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-babylon
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-backbone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-backoff
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-balanced-match
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base-plugins
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base32-encode
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base64-arraybuffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base64-url
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-base64id
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bash-match
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-basic-auth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-basic-auth-connect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-batch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bcrypt
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-bcryptjs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-beeper
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-benchmark
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-better-assert
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-better-than-before
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bignumber-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bind-obj-methods
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bindings
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bit-mask
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-blob
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-block-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bluebird
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-body-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-boolbase
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-boom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-brace-expansion
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-braces
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-browser-stdout
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bson
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buble
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buf-compare
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buffer-crc32
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buffer-equal
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buffer-writer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buffertools
ExclusiveArch: %{nodejs_arches}
- nodejs-bufferutil
ExclusiveArch: %{nodejs_arches}
- nodejs-builtin-modules
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-builtins
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bundle-dependencies
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bunker
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bunyan
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-burrito
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-busboy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-byline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bytes
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cache-base
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caching-transform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-call-delayed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-call-matcher
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-call-me-maybe
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-call-signature
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-callback-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caller-callsite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caller-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-callsite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-callsites
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-camelcase
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-camelcase-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-carrier
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caseless
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-center-align
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-as-promised
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-cheerio
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-connect-middleware
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-json-schema
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-oauth2orize-grant
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-passport-strategy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-spies-next
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chainer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chalk
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-char-spinner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-character-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-chardet
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-charenc
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-charm
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-check-env
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-check-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cheerio
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-child-process-close
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chmodr
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chownr
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chroma-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chrono
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ci-info
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-circular-json
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cjson
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-clap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-class-utils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clean-css
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-clean-yaml-object
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-clear-require
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli-color
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli-spinner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli-table
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cliui
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clone-deep
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clone-stats
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-closure-compiler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cmd-shim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-co
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-co-mocha
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-co-with-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-coa
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-code-point-at
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-codemirror
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-coffee-coverage
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-collection-visit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-collections
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-color-support
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-colors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-colour
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-columnify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-combined-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-commander
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-common-path-prefix
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-commondir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-commonmark
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-compare-func
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-compare-versions
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-component-emitter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-component-indexof
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-component-inherit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-compressible
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-concat-map
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-concat-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-config-chain
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-connect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-connect-livereload
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-connect-timeout
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-console-dot-log
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-console-group
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-consolemd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-constantinople
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-content-disposition
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-content-type
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-angular
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-atom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-codemirror
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-ember
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-eslint
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-express
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-jquery
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-jscs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-jshint
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-preset-loader
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-writer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-commits-filter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-commits-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-convert-hex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-convert-source-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookie
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookie-jar
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cookie-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cookie-session
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookie-signature
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookiejar
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cookies
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-copy-descriptor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-core-assert
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-core-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-core-util-is
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-couch-login
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-coveralls
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-crc
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cross-spawn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cross-spawn-async
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-crypt
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cryptiles
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-csrf
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css-parse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css-select
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-css-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css-tree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-css-what
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-csscomb-core
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csslint
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csso
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cssom
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csurf
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-generate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-parse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-spectrum
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ctype
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-currently-unhandled
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cycle
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cyclist
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-d
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dargs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-data-uri-to-buffer
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dateformat
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-death
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-debug
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-debug-fabulous
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-debug-log
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-debuglog
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-decamelize
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-decamelize-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-decimal-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dedent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deep-eql
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deep-equal
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-deep-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deep-is
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-deeper
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-default-require-extensions
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-default-resolution
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-defaults
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-defence
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-defence-cli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-define-properties
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-define-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-defined
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-del
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-delayed-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-delegates
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-delete
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dep-graph
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-depd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deprecated
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-destroy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-detect-file
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-detect-indent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-detect-newline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-detect-node
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-detective
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dezalgo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dicer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-diff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-difflet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-difflib
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dirty-chai
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-discord-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-docopt
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-doctrine
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dot-prop
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dotfile-regex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dryice
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-duplexer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplexer2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-duplexify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duration
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-each
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ebnf-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-echomd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-editor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ee-first
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ejs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-emojione
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-empty-dir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-encodeurl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-end-of-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-engine-dot-io-client
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-engine-dot-io-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-error-ex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-error-symbol
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es-abstract
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es-to-primitive
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es5-ext
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es5-shim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-iterator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es6-promisify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es6-shim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-symbol
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-weak-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-escallmatch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escape-html
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escape-regexp-component
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-escape-string-regexp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escodegen
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escope
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-espower
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-espower-location-detector
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-esprima
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-esprima-fb
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-esprima-harmony-jscs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-espurify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-esrecurse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-estraverse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-estraverse-fb
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-estree-walker
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-esutils
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-event-emitter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-eventemitter2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-events
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-events-to-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-everything-dot-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-exit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expand-brackets
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expand-range
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expand-tilde
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expect-dot-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-express
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-express-session
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-extend-shallow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extended-emitter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-extglob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-eyes
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fake
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fancy-log
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fast-levenshtein
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fastfall
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-faucet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-faye-websocket
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-figures
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-file-entry-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-file-sync-cmp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-filelist
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-filename-regex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fileset
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fill-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fill-range
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-finalhandler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-find-cache-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-find-up
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-findup-sync
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-first-chunk-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-flagged-respawn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-flat-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-flot
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-flush-write-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fmix
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fn-dot-name
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-for-each
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-for-in
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-for-own
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-foreach
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-foreground-child
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-forever-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-form-data
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-formatio
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-formidable
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-forwarded
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fragment-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-freetree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fresh
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-from
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-dot-notify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-exists-cached
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-exists-sync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fs-ext
ExclusiveArch: %{nodejs_arches}
- nodejs-fs-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-temp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-vacuum
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-write-stream-atomic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fstream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fstream-ignore
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fstream-npm
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-function-bind
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-function-loop
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-gauge
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gaze
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gdal
ExclusiveArch: %{nodejs_arches}
- nodejs-generate-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-generate-object-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-generic-pool
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-get-port
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-value
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-getobject
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-git-remote-origin-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-git-tails
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gitconfiglocal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-github-url-from-git
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-github-url-from-username-repo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-glob
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-glob-base
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-glob-expand
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-glob-parent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-glob-to-regexp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-global-modules
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-global-prefix
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-globals
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-globby
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-globule
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-glogg
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gnode
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-gonzales-pe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-graceful-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-graceful-readlink
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grip
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-growl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-banner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-cli
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-compare-size
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-clean
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-concat
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-csslint
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-internal
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-nodeunit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-contrib-uglify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-watch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-git-authors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-init
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-known-options
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-legacy-log
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-legacy-log-utils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-legacy-util
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-lib-contrib
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-sed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-simple-mocha
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-wrap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-gulplog
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gzip-size
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-handlebars
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-har-validator
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-ansi
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-binary
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-binary2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-color
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-has-cors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-flag
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-has-gulplog
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-has-symbols
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-unicode
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-value
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-values
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-yarn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hash_file
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hawk
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-heap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-hex-to-array-buffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-highlight-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-historic-readline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hoek
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-homedir-polyfill
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hook-std
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hooker
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-hosted-git-info
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hsluv
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-htmlparser2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-deceiver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-errors
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-http-signature
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-humanize-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-i
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-i18n-transform
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-i2c
ExclusiveArch: %{nodejs_arches}
- nodejs-iconv
ExclusiveArch: %{nodejs_arches}
- nodejs-iconv-lite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-iferr
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ignore
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-image-size
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-immutable
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-import-local
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-imul
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-imurmurhash
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-indent-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-indexof
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inflight
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-info-symbol
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inherit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-inherits
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inherits1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ini
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-int64-buffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-intercept-require
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-interpret
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-invert-kv
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ip
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ipaddr-dot-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-irc-colors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-irc-formatting
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-irc-upd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-irregular-plurals
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-accessor-descriptor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-arrayish
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-arrow-function
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-boolean-object
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-buffer
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-builtin-module
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-callable
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-data-descriptor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-date-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-descriptor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-dotfile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-equal-shallow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-extendable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-extglob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-finite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-fullwidth-code-point
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-generator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-generator-fn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-generator-function
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-module
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-my-json-valid
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-negated-glob
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-node
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-number
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-number-object
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-obj
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-observable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-odd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-path-cwd
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-path-in-cwd
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-path-inside
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-plain-obj
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-plain-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-primitive
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-regexp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-registered
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-relative
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-subset
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-symbol
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-text-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-typedarray
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-unc-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-url
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-utf8
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-valid-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-valid-instance
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-windows
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isarray
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-isexe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-iso8601
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isobject
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isodate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isstream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-istanbul-lib-coverage
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-istanbul-lib-hook
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-istanbul-lib-report
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-istanbul-lib-source-maps
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-istanbul-reports
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jade
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jasmine-growl-reporter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jasmine-reporters
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jest-mock
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jison-lex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-joose
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-joosex-namespace-depended
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-joosex-simplerequest
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-js-base64
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-js-string-escape
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-js-tokens
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-js-yaml
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jschardet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jscoverage
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-diff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-localizer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-json-parse-helpfulerror
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-stable-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-stringify-safe
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-json3
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonfile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jsonify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jsonm
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonparse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonpointer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonpointer-dot-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonselect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jwt-simple
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-keep-alive-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-keygrip
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-keypress
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-kind-of
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-klaw
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-kuler2gpl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lazy-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lazystream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lcid
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lcov-parse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-leaflet
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-leaflet-formbuilder
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-leaflet-hash
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-leche
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-left-pad
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-less
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-less-plugin-clean-css
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-levn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-libpq
ExclusiveArch: %{nodejs_arches}
- nodejs-libxmljs
ExclusiveArch: %{nodejs_arches}
- nodejs-line-numbers
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-line-reader
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-linefix
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-linkify-it
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-load-grunt-tasks
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-locate-character
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-locate-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lockfile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-log-driver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-log-ok
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-log-utils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lolex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-long
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-longest
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-loophole
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-loud-rejection
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lru-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lru-queue
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ltx
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-magic-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-make-arrow-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-make-dir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-make-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-make-generator-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-make-node
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-makedir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-makeerror
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-map-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-map-obj
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-map-visit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mapnik
ExclusiveArch: %{nodejs_arches}
- nodejs-mapnik-pool
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mapnik-vector-tile
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-markdown
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-markdown-it-testgen
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-marked
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-matched
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-max-timeout
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-maxmin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mbtiles
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-md5
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-md5-hex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-md5-o-matic
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mdn-data
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mdurl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-media-typer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-memoize-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-memoizee
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-merge-descriptors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-metascript
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-method-override
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-methods
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-micromatch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-millstone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mime
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mime-db
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mime-types
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mimeparse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-minimalistic-assert
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-minimatch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-minimist
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-minipass
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mixin-deep
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mixin-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mkdirp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mock-bin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mock-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mock-git
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-modify-values
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-module-not-found-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-moment
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mongodb
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mongodb-core
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-monocle
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-morgan
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-muffin
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-multimatch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-multiparty
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-multipipe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-murmur-32
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mustache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mutate-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mute-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mv
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mysql
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mz
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nan
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nan0
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nan1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nanomatch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nanomsg
ExclusiveArch: %{nodejs_arches}
- nodejs-nanoseconds
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ncp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-needle
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-negative-zero
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-negotiator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-net-browserify-alt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-netmask
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-next-tick
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ng-classify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-dot-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-expat
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-node-int64
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-markdown
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-static
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-stringprep
ExclusiveArch: %{nodejs_arches}
- nodejs-node-uuid
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nomnom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-noncharacters
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nopt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nopt-usage
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-noptify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-normalize-git-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-normalize-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-cache-filename
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-install-checks
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-license
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-npm-package-arg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-run-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-user-validate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npmlog
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nth-check
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-number-is-nan
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-numeral
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oauth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oauth-sign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oauth2orize
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-assign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-copy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-dot-assign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-dot-entries
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-object-dot-omit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-object-dot-pick
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-object-inspect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-is
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-visit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-observable-to-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-obuf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-okay
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-on-finished
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-on-headers
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-once
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-only-shallow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-opal-runtime
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-open
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-opener
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-option-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-option-chain
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-optionator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-options
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-optjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-opts
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-orchestrator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ordered-read-streams
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-os-homedir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-os-locale
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-os-shim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-os-tmpdir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-osenv
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-output-file-sync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-own-or
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-own-or-env
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-finally
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-limit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-locate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-package
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-package-license
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-packaging
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-packet-reader
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pad
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pad-left
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-paperboy
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-parallel-transform
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-github-repo-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-parse-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-passwd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parsejson
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parseqs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parseuri
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parseurl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pascalcase
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-http-bearer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth2-client-password
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-strategy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-array
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-path-dirname
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-exists
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-extra
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-is-absolute
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-is-inside
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-key
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-parse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-to-regexp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-path-type
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pathval
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pause
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pbkdf2-password
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pedding
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pff
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-connection-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-cursor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-escape
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-int8
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-native
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-pool
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-types
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pgpass
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pinkie
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pinkie-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pkg-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pkg-up
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pkginfo
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-platform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-plur
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-posix-character-classes
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-bytea
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-date
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-interval
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-precond
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-prelude-ls
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-preserve
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pretty-bytes
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pretty-hrtime
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pretty-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pretty-time
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-prism-media
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-process-nextick-args
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-proclaim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-progress
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-progress-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-promises-aplus-tests
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-prompt
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-promzard
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-propagate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-propget
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-proto-list
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-proxy-addr
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-proxyquire
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pruddy-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pseudomap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pubcontrol
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pump
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pumpify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-q
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-q-io
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-qs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-qtdatastream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-queue-async
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-quick-lru
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-qunit-extras
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rainbowsocks
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-random-bytes
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-random-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-randomatic
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-range-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-raw-body
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-re-emitter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-read-all-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-read-cmd-shim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-file
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-json-sync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-package-json
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-pkg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-readable-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-readdir-enhanced
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-readdir-scoped-modules
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-readdirp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-realize-package-specifier
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rechoir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-redent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-reduce-component
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-regex-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-regex-not
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-remove-trailing-separator
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-repeat-element
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-repeat-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-repeating
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-repl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-replace
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-replace-ext
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-replace-require-self
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-request
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-cs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-require-directory
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-inject
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-main-filename
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-relative
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-uncached
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-yaml
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-requirejs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-resolve
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve-cwd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-resolve-from
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve-pkg
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-resolve-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-response-time
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-resumer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ret
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-retry
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-reusify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-revalidator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rewire
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rfile
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rhea
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-right-align
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rimraf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rndm
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rollup
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rollup-plugin-buble
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rollup-plugin-commonjs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rollup-plugin-json
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rollup-plugin-node-resolve
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rollup-plugin-typescript
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rollup-pluginutils
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ronn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-runforcover
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-safe-buffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-safe-json-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-safe-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-safecb
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-samsam
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sax
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-secure-random
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-seedrandom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-select-hose
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-semver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-send
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sentiment
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sequencify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-serialize-error
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-serve-index
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-server-destroy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-set-blocking
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-set-getter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-set-immediate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-set-immediate-shim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-set-value
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-setimmediate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-setprototypeof
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sha
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-shallow-clone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-shebang-command
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-shebang-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-shelljs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-shelljs-nodecli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-should
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-should-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-should-format
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-should-http
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-should-type
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-showdown
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sift
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sigmund
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-signal-exit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-simple-assert
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-simple-asyncify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-simple-fmt
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-simple-is
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-simple-markdown
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-single-line-log
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sinon
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sinon-chai
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sinon-restore
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-slash
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sliced
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-slide
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-snapdragon
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snapdragon-capture
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snapdragon-capture-set
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snapdragon-node
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snapdragon-util
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snekfetch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snockets
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sntp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-socket-dot-io-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sorted-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-source-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-source-map-fixtures
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-source-map-resolve
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-source-map-support
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-source-map-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sparkles
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-spawn-sync
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spawn-wrap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-exceptions
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-license-ids
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spec
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spec-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-speedometer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-split
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-split-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-split2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sprintf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sprintf-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sqlite3
ExclusiveArch: %{nodejs_arches}
- nodejs-srs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ssri
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stack-trace
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stack-utils
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-static-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-static-favicon
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-statuses
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-combiner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-consume
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stream-counter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stream-each
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-pair
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-replace
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stream-shift
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-spigot
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-transform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-streamsearch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-streamtest
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-string-dot-prototype-dot-repeat
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-string-dot-prototype-dot-trim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-string-width
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-string_decoder
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringmap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringscanner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringset
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringstream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-ansi
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strip-bom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-bom-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strip-bom-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-color
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-eof
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-json-comments
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strong-log-transformer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stylus
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-success-symbol
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-superagent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-supertest
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-supervisor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-supports-color
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-suspend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-svgo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-symbol-observable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tap-mocha-reporter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tap-out
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tap-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tap-spec
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tape
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tapes
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tar
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tar-pack
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-temp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-temp-dir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-temp-write
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tempfile
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-temporary
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tern-cordovajs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tern-liferay
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-terst
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-testdata-w3c-json-form
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-testswarm
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-testutil
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-text-extensions
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-text-table
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-thenify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-thenify-all
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-thread-sleep
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-through
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-through2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-through2-filter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-thunkify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tildify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tilejson
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tilelive
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tilelive-mapnik
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tiletype
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-time-diff
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-time-stamp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-timekeeper
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-timers-ext
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tiny-lr-fork
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tippex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tlds
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tmatch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tmp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tmpl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-to-absolute-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-to-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-to-object-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-to-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-to-regex-range
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-touch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tough-cookie
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tracejs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-transformers
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-traverse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-treeify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tressa
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-trim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-trim-newlines
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-trim-off-newlines
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-trivial-deferred
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-try-open
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-try-thread-sleep
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tryor
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tsame
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tslib
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tsscmp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tunnel-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tv4
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tweetnacl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tweetnacl-util
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-type-check
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-type-detect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-type-is
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-type-name
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-typeahead.js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-typescript
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uc-dot-micro
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-uglify-to-browserify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-uid-number
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uid-safe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-uid2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ultron
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-umask
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unc-path-regex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-underscore
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-underscore-dot-logger
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unicode-length
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-union-value
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unique-filename
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unique-slug
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unique-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unique-temp-dir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unpipe
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unset-value
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uri-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-urix
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-url2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-use
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-user-home
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-utf8
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-util
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-util-deprecate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-util-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-util-inspect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-utilities
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-utils-merge
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uuid
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vali-date
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-validate-npm-package-name
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vasync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vhost
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vlq
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vow-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vow-queue
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vows
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-walkdir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-walker
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ware
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-warning-symbol
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-watchit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-watershed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-wbuf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-wcwidth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-weak-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-websocket-driver
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-when
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-whet-dot-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-which
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-win-spawn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-window-size
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-winston
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-with
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wolfy87-eventemitter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-woothee
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wordwrap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wrap-ansi
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-wrap-fn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wrappy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-write
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-write-file-atomic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ws
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xdg-basedir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xml2js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xmlbuilder
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xmlhttprequest
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xmlhttprequest-ssl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xtend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-y18n
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yallist
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-yapool
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yargs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-yargs-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yarn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yeast
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zeropad
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zipfile
ExclusiveArch: %{nodejs_arches}
- nodejs-zlib-browserify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zlibjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodeunit
ExclusiveArch: %{nodejs_arches} noarch
- notify-sharp
ExclusiveArch: %{mono_arches}
- notify-sharp3
ExclusiveArch: %{mono_arches}
- nuget
ExclusiveArch: %{mono_arches}
- numatop
ExclusiveArch: x86_64 ppc64le
- nunit
ExclusiveArch: %{mono_arches}
- nunit2
ExclusiveArch: %{mono_arches}
- nvml
ExclusiveArch: x86_64
- nwchem
ExclusiveArch: x86_64 %{ix86}
- obs-service-rust2rpm
ExclusiveArch: %{rust_arches} noarch
- oci-kvm-hook
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- oci-register-machine
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- oci-umount
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- ocitools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- oidn
ExclusiveArch: x86_64
- olpc-kbdshim
ExclusiveArch: %{ix86} %{arm}
- olpc-netutils
ExclusiveArch: %{ix86} %{arm}
- olpc-utils
ExclusiveArch: %{ix86} %{arm}
- onedrive
ExclusiveArch: %{ldc_arches}
- opal-prd
ExclusiveArch: ppc64le
- open-vm-tools
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64
- openblas
ExclusiveArch: %{openblas_arches}
- openjfx
ExclusiveArch: %{ix86} x86_64
- openlibm
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 %{power64}
- openni
ExclusiveArch: %{ix86} x86_64 %{arm}
- openni-primesense
ExclusiveArch: %{ix86} x86_64 %{arm}
- openssl-ibmca
ExclusiveArch: s390 s390x
- origin
ExclusiveArch: %{go_arches}
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- orion
ExclusiveArch: %{qt5_qtwebengine_arches}
- orthorobot
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64
- oshinko-cli
ExclusiveArch: %{go_arches}
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- paflib
ExclusiveArch: ppc %{power64}
- pcc
ExclusiveArch: %{ix86} x86_64
- pcmciautils
ExclusiveArch: %{ix86} x86_64 ia64 ppc ppc64 %{arm}
- pdfmod
ExclusiveArch: %mono_arches
- peripety
ExclusiveArch: %{rust_arches}
- perl-Dumbbench
ExclusiveArch: %{ix86} x86_64 noarch
- perl-Parse-DMIDecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- pesign
ExclusiveArch: %{ix86} x86_64 ia64 aarch64 %{arm}
- pesign-test-app
ExclusiveArch: i686 x86_64 ia64 aarch64
- pinta
ExclusiveArch: %mono_arches
- pioneer
ExclusiveArch: %{ix86} x86_64
- pmdk-convert
ExclusiveArch: x86_64
- pocl
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- poppler-sharp
ExclusiveArch: %mono_arches
- popub
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- powerpc-utils
ExclusiveArch: ppc %{power64}
- ppc64-diag
ExclusiveArch: ppc %{power64}
- publican-jboss
ExclusiveArch: i686 x86_64
- pveclib
ExclusiveArch: ppc %{power64}
- pvs-sbcl
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- pyqtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- python-etcd
ExclusiveArch: noarch %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- python-healpy
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-openoffice
ExclusiveArch: noarch x86_64
- python-pymoc
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-rpi-gpio
ExclusiveArch: %{arm} aarch64
- q4wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- qcint
ExclusiveArch: x86_64
- qclib
ExclusiveArch: s390 s390x
- qevercloud
ExclusiveArch: %{qt5_qtwebengine_arches}
- qmapshack
ExclusiveArch: %{qt5_qtwebengine_arches}
- qt4pas
ExclusiveArch: %{fpc_arches}
- qt5-qtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- quantum-espresso
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86}
- quentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- reactfx
ExclusiveArch: %{ix86} x86_64 noarch
- rear
ExclusiveArch: %ix86 x86_64 ppc ppc64 ppc64le ia64
- redhat-lsb
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- reg
ExclusiveArch: x86_64
- renderdoc
ExclusiveArch: %{ix86} x86_64
- reptyr
ExclusiveArch: %{ix86} x86_64 %{arm}
- rescene
ExclusiveArch: %{mono_arches}
- restsharp
ExclusiveArch: %{mono_arches}
- rhythmbox-alternative-toolbar
ExclusiveArch: %{ix86} %{arm} x86_64 ppc64 ppc64le
- rocm-runtime
ExclusiveArch: x86_64 aarch64
- rocminfo
ExclusiveArch: x86_64 aarch64
- rpm-ostree
ExclusiveArch: %{rust_arches}
- rssguard
ExclusiveArch: %{qt5_qtwebengine_arches}
- rubygem-childprocess
ExclusiveArch: %{ix86} x86_64 noarch
- runc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le %{mips} s390x
- rust
ExclusiveArch: %{rust_arches}
- rust-abomonation
ExclusiveArch: %{rust_arches}
- rust-actix
ExclusiveArch: %{rust_arches}
- rust-actix-codec
ExclusiveArch: %{rust_arches}
- rust-actix-connect
ExclusiveArch: %{rust_arches}
- rust-actix-files
ExclusiveArch: %{rust_arches}
- rust-actix-http
ExclusiveArch: %{rust_arches}
- rust-actix-router
ExclusiveArch: %{rust_arches}
- rust-actix-rt
ExclusiveArch: %{rust_arches}
- rust-actix-server
ExclusiveArch: %{rust_arches}
- rust-actix-server-config
ExclusiveArch: %{rust_arches}
- rust-actix-service
ExclusiveArch: %{rust_arches}
- rust-actix-threadpool
ExclusiveArch: %{rust_arches}
- rust-actix-utils
ExclusiveArch: %{rust_arches}
- rust-actix-web
ExclusiveArch: %{rust_arches}
- rust-actix-web-codegen
ExclusiveArch: %{rust_arches}
- rust-actix_derive
ExclusiveArch: %{rust_arches}
- rust-addr2line
ExclusiveArch: %{rust_arches}
- rust-adler32
ExclusiveArch: %{rust_arches}
- rust-aes
ExclusiveArch: %{rust_arches}
- rust-aes-soft
ExclusiveArch: %{rust_arches}
- rust-afterburn
ExclusiveArch: %{rust_arches}
- rust-aho-corasick
ExclusiveArch: %{rust_arches}
- rust-alga
ExclusiveArch: %{rust_arches}
- rust-alga_derive
ExclusiveArch: %{rust_arches}
- rust-alphanumeric-sort
ExclusiveArch: %{rust_arches}
- rust-ammonia
ExclusiveArch: %{rust_arches}
- rust-ansi_colours
ExclusiveArch: %{rust_arches}
- rust-ansi_term
ExclusiveArch: %{rust_arches}
- rust-ansi_term0.11
ExclusiveArch: %{rust_arches}
- rust-antidote
ExclusiveArch: %{rust_arches}
- rust-aom-sys
ExclusiveArch: %{rust_arches}
- rust-approx
ExclusiveArch: %{rust_arches}
- rust-arc-swap
ExclusiveArch: %{rust_arches}
- rust-arg_enum_proc_macro
ExclusiveArch: %{rust_arches}
- rust-array-init
ExclusiveArch: %{rust_arches}
- rust-arraydeque
ExclusiveArch: %{rust_arches}
- rust-arrayref
ExclusiveArch: %{rust_arches}
- rust-arrayvec
ExclusiveArch: %{rust_arches}
- rust-ascii
ExclusiveArch: %{rust_arches}
- rust-askalono
ExclusiveArch: %{rust_arches}
- rust-askalono-cli
ExclusiveArch: %{rust_arches}
- rust-atk
ExclusiveArch: %{rust_arches}
- rust-atk-sys
ExclusiveArch: %{rust_arches}
- rust-atom
ExclusiveArch: %{rust_arches}
- rust-atomicwrites
ExclusiveArch: %{rust_arches}
- rust-atty
ExclusiveArch: %{rust_arches}
- rust-autocfg
ExclusiveArch: %{rust_arches}
- rust-awc
ExclusiveArch: %{rust_arches}
- rust-backtrace
ExclusiveArch: %{rust_arches}
- rust-backtrace-sys
ExclusiveArch: %{rust_arches}
- rust-base100
ExclusiveArch: %{rust_arches}
- rust-base64
ExclusiveArch: %{rust_arches}
- rust-bat
ExclusiveArch: %{rust_arches}
- rust-bencher
ExclusiveArch: %{rust_arches}
- rust-bincode
ExclusiveArch: %{rust_arches}
- rust-bincode0.8
ExclusiveArch: %{rust_arches}
- rust-bindgen
ExclusiveArch: %{rust_arches}
- rust-bit-set
ExclusiveArch: %{rust_arches}
- rust-bit-vec
ExclusiveArch: %{rust_arches}
- rust-bitflags
ExclusiveArch: %{rust_arches}
- rust-bitstream-io
ExclusiveArch: %{rust_arches}
- rust-blake2
ExclusiveArch: %{rust_arches}
- rust-blobby
ExclusiveArch: %{rust_arches}
- rust-block-buffer
ExclusiveArch: %{rust_arches}
- rust-block-cipher-trait
ExclusiveArch: %{rust_arches}
- rust-block-modes
ExclusiveArch: %{rust_arches}
- rust-block-padding
ExclusiveArch: %{rust_arches}
- rust-brev
ExclusiveArch: %{rust_arches}
- rust-brotli-sys
ExclusiveArch: %{rust_arches}
- rust-brotli2
ExclusiveArch: %{rust_arches}
- rust-bstr
ExclusiveArch: %{rust_arches}
- rust-bufstream
ExclusiveArch: %{rust_arches}
- rust-build_const
ExclusiveArch: %{rust_arches}
- rust-byte-tools
ExclusiveArch: %{rust_arches}
- rust-byte-unit
ExclusiveArch: %{rust_arches}
- rust-bytecount
ExclusiveArch: %{rust_arches}
- rust-byteorder
ExclusiveArch: %{rust_arches}
- rust-bytes
ExclusiveArch: %{rust_arches}
- rust-bytes0.3
ExclusiveArch: %{rust_arches}
- rust-bytesize
ExclusiveArch: %{rust_arches}
- rust-c2-chacha
ExclusiveArch: %{rust_arches}
- rust-c_vec
ExclusiveArch: %{rust_arches}
- rust-cairo-rs
ExclusiveArch: %{rust_arches}
- rust-cairo-sys-rs
ExclusiveArch: %{rust_arches}
- rust-caps
ExclusiveArch: %{rust_arches}
- rust-cargo
ExclusiveArch: %{rust_arches}
- rust-cargo-bloat
ExclusiveArch: %{rust_arches}
- rust-cargo_metadata
ExclusiveArch: %{rust_arches}
- rust-cassowary
ExclusiveArch: %{rust_arches}
- rust-cast
ExclusiveArch: %{rust_arches}
- rust-cbindgen
ExclusiveArch: %{rust_arches}
- rust-cc
ExclusiveArch: %{rust_arches}
- rust-cexpr
ExclusiveArch: %{rust_arches}
- rust-cfg-if
ExclusiveArch: %{rust_arches}
- rust-chainerror
ExclusiveArch: %{rust_arches}
- rust-chbs
ExclusiveArch: %{rust_arches}
- rust-checked_int_cast
ExclusiveArch: %{rust_arches}
- rust-chrono
ExclusiveArch: %{rust_arches}
- rust-chrono-humanize
ExclusiveArch: %{rust_arches}
- rust-clang-sys
ExclusiveArch: %{rust_arches}
- rust-clap
ExclusiveArch: %{rust_arches}
- rust-clicolors-control
ExclusiveArch: %{rust_arches}
- rust-cmake
ExclusiveArch: %{rust_arches}
- rust-color_quant
ExclusiveArch: %{rust_arches}
- rust-colored
ExclusiveArch: %{rust_arches}
- rust-colored_json
ExclusiveArch: %{rust_arches}
- rust-comrak
ExclusiveArch: %{rust_arches}
- rust-config
ExclusiveArch: %{rust_arches}
- rust-console
ExclusiveArch: %{rust_arches}
- rust-content_inspector
ExclusiveArch: %{rust_arches}
- rust-copyless
ExclusiveArch: %{rust_arches}
- rust-cpp_demangle
ExclusiveArch: %{rust_arches}
- rust-crates-io
ExclusiveArch: %{rust_arches}
- rust-crc
ExclusiveArch: %{rust_arches}
- rust-crc-core
ExclusiveArch: %{rust_arches}
- rust-crc32fast
ExclusiveArch: %{rust_arches}
- rust-criterion
ExclusiveArch: %{rust_arches}
- rust-criterion-plot
ExclusiveArch: %{rust_arches}
- rust-crossbeam
ExclusiveArch: %{rust_arches}
- rust-crossbeam-channel
ExclusiveArch: %{rust_arches}
- rust-crossbeam-deque
ExclusiveArch: %{rust_arches}
- rust-crossbeam-epoch
ExclusiveArch: %{rust_arches}
- rust-crossbeam-queue
ExclusiveArch: %{rust_arches}
- rust-crossbeam-utils
ExclusiveArch: %{rust_arches}
- rust-crossterm
ExclusiveArch: %{rust_arches}
- rust-crossterm_cursor
ExclusiveArch: %{rust_arches}
- rust-crossterm_input
ExclusiveArch: %{rust_arches}
- rust-crossterm_screen
ExclusiveArch: %{rust_arches}
- rust-crossterm_style
ExclusiveArch: %{rust_arches}
- rust-crossterm_terminal
ExclusiveArch: %{rust_arches}
- rust-crossterm_utils
ExclusiveArch: %{rust_arches}
- rust-crypto-hash
ExclusiveArch: %{rust_arches}
- rust-crypto-mac
ExclusiveArch: %{rust_arches}
- rust-cryptovec
ExclusiveArch: %{rust_arches}
- rust-cssparser
ExclusiveArch: %{rust_arches}
- rust-cssparser-macros
ExclusiveArch: %{rust_arches}
- rust-csv
ExclusiveArch: %{rust_arches}
- rust-csv-core
ExclusiveArch: %{rust_arches}
- rust-ctrlc
ExclusiveArch: %{rust_arches}
- rust-curl
ExclusiveArch: %{rust_arches}
- rust-curl-sys
ExclusiveArch: %{rust_arches}
- rust-custom_derive
ExclusiveArch: %{rust_arches}
- rust-darling
ExclusiveArch: %{rust_arches}
- rust-darling_core
ExclusiveArch: %{rust_arches}
- rust-darling_macro
ExclusiveArch: %{rust_arches}
- rust-data-encoding
ExclusiveArch: %{rust_arches}
- rust-data-url
ExclusiveArch: %{rust_arches}
- rust-datetime
ExclusiveArch: %{rust_arches}
- rust-dav1d-sys
ExclusiveArch: %{rust_arches}
- rust-dbus
ExclusiveArch: %{rust_arches}
- rust-dbus0.2
ExclusiveArch: %{rust_arches}
- rust-decimal
ExclusiveArch: %{rust_arches}
- rust-deflate
ExclusiveArch: %{rust_arches}
- rust-defmac
ExclusiveArch: %{rust_arches}
- rust-delta_e
ExclusiveArch: %{rust_arches}
- rust-derive_builder
ExclusiveArch: %{rust_arches}
- rust-derive_builder_core
ExclusiveArch: %{rust_arches}
- rust-derive_more
ExclusiveArch: %{rust_arches}
- rust-deunicode
ExclusiveArch: %{rust_arches}
- rust-devicemapper
ExclusiveArch: %{rust_arches}
- rust-diff
ExclusiveArch: %{rust_arches}
- rust-difference
ExclusiveArch: %{rust_arches}
- rust-digest
ExclusiveArch: %{rust_arches}
- rust-directories
ExclusiveArch: %{rust_arches}
- rust-dirs
ExclusiveArch: %{rust_arches}
- rust-dirs-sys
ExclusiveArch: %{rust_arches}
- rust-dns-parser
ExclusiveArch: %{rust_arches}
- rust-doc-comment
ExclusiveArch: %{rust_arches}
- rust-docmatic
ExclusiveArch: %{rust_arches}
- rust-docopt
ExclusiveArch: %{rust_arches}
- rust-downcast-rs
ExclusiveArch: %{rust_arches}
- rust-dtoa
ExclusiveArch: %{rust_arches}
- rust-dtoa-short
ExclusiveArch: %{rust_arches}
- rust-duct
ExclusiveArch: %{rust_arches}
- rust-dutree
ExclusiveArch: %{rust_arches}
- rust-edit-distance
ExclusiveArch: %{rust_arches}
- rust-either
ExclusiveArch: %{rust_arches}
- rust-elasticlunr-rs
ExclusiveArch: %{rust_arches}
- rust-encode_unicode
ExclusiveArch: %{rust_arches}
- rust-encoding
ExclusiveArch: %{rust_arches}
- rust-encoding-index-japanese
ExclusiveArch: %{rust_arches}
- rust-encoding-index-korean
ExclusiveArch: %{rust_arches}
- rust-encoding-index-simpchinese
ExclusiveArch: %{rust_arches}
- rust-encoding-index-singlebyte
ExclusiveArch: %{rust_arches}
- rust-encoding-index-tradchinese
ExclusiveArch: %{rust_arches}
- rust-encoding_index_tests
ExclusiveArch: %{rust_arches}
- rust-encoding_rs
ExclusiveArch: %{rust_arches}
- rust-encoding_rs_io
ExclusiveArch: %{rust_arches}
- rust-entities
ExclusiveArch: %{rust_arches}
- rust-enum-as-inner
ExclusiveArch: %{rust_arches}
- rust-enum_primitive
ExclusiveArch: %{rust_arches}
- rust-env_logger
ExclusiveArch: %{rust_arches}
- rust-env_logger0.4
ExclusiveArch: %{rust_arches}
- rust-env_logger0.5
ExclusiveArch: %{rust_arches}
- rust-envsubst
ExclusiveArch: %{rust_arches}
- rust-erased-serde
ExclusiveArch: %{rust_arches}
- rust-errln
ExclusiveArch: %{rust_arches}
- rust-errno
ExclusiveArch: %{rust_arches}
- rust-error-chain
ExclusiveArch: %{rust_arches}
- rust-exa
ExclusiveArch: %{rust_arches}
- rust-extprim
ExclusiveArch: %{rust_arches}
- rust-extprim_literals_macros
ExclusiveArch: %{rust_arches}
- rust-fail
ExclusiveArch: %{rust_arches}
- rust-failure
ExclusiveArch: %{rust_arches}
- rust-failure-tools
ExclusiveArch: %{rust_arches}
- rust-failure_derive
ExclusiveArch: %{rust_arches}
- rust-fake-simd
ExclusiveArch: %{rust_arches}
- rust-fake_clock
ExclusiveArch: %{rust_arches}
- rust-fallible-iterator
ExclusiveArch: %{rust_arches}
- rust-fd-find
ExclusiveArch: %{rust_arches}
- rust-fedora-coreos-pinger
ExclusiveArch: %{rust_arches}
- rust-ffsend
ExclusiveArch: %{rust_arches}
- rust-ffsend-api
ExclusiveArch: %{rust_arches}
- rust-filetime
ExclusiveArch: %{rust_arches}
- rust-fixedbitset
ExclusiveArch: %{rust_arches}
- rust-flame
ExclusiveArch: %{rust_arches}
- rust-flate2
ExclusiveArch: %{rust_arches}
- rust-float-cmp
ExclusiveArch: %{rust_arches}
- rust-fnv
ExclusiveArch: %{rust_arches}
- rust-foreign-types
ExclusiveArch: %{rust_arches}
- rust-foreign-types-shared
ExclusiveArch: %{rust_arches}
- rust-fragile
ExclusiveArch: %{rust_arches}
- rust-fs2
ExclusiveArch: %{rust_arches}
- rust-fs_extra
ExclusiveArch: %{rust_arches}
- rust-fuse
ExclusiveArch: %{rust_arches}
- rust-futf
ExclusiveArch: %{rust_arches}
- rust-futures-async-runtime-preview
ExclusiveArch: %{rust_arches}
- rust-futures-channel-preview
ExclusiveArch: %{rust_arches}
- rust-futures-core
ExclusiveArch: %{rust_arches}
- rust-futures-core-preview
ExclusiveArch: %{rust_arches}
- rust-futures-cpupool
ExclusiveArch: %{rust_arches}
- rust-futures-executor-preview
ExclusiveArch: %{rust_arches}
- rust-futures-io-preview
ExclusiveArch: %{rust_arches}
- rust-futures-preview
ExclusiveArch: %{rust_arches}
- rust-futures-sink-preview
ExclusiveArch: %{rust_arches}
- rust-futures-stable-preview
ExclusiveArch: %{rust_arches}
- rust-futures-util-preview
ExclusiveArch: %{rust_arches}
- rust-futures0.1
ExclusiveArch: %{rust_arches}
- rust-fuzzy-matcher
ExclusiveArch: %{rust_arches}
- rust-fxhash
ExclusiveArch: %{rust_arches}
- rust-gcsf
ExclusiveArch: %{rust_arches}
- rust-gdk
ExclusiveArch: %{rust_arches}
- rust-gdk-pixbuf
ExclusiveArch: %{rust_arches}
- rust-gdk-pixbuf-sys
ExclusiveArch: %{rust_arches}
- rust-gdk-sys
ExclusiveArch: %{rust_arches}
- rust-generic-array
ExclusiveArch: %{rust_arches}
- rust-getopts
ExclusiveArch: %{rust_arches}
- rust-getrandom
ExclusiveArch: %{rust_arches}
- rust-gettext-rs
ExclusiveArch: %{rust_arches}
- rust-gettext-sys
ExclusiveArch: %{rust_arches}
- rust-gif
ExclusiveArch: %{rust_arches}
- rust-gimli
ExclusiveArch: %{rust_arches}
- rust-gio
ExclusiveArch: %{rust_arches}
- rust-gio-sys
ExclusiveArch: %{rust_arches}
- rust-gir-format-check
ExclusiveArch: %{rust_arches}
- rust-git2
ExclusiveArch: %{rust_arches}
- rust-git2-curl
ExclusiveArch: %{rust_arches}
- rust-glib
ExclusiveArch: %{rust_arches}
- rust-glib-sys
ExclusiveArch: %{rust_arches}
- rust-glob
ExclusiveArch: %{rust_arches}
- rust-globset
ExclusiveArch: %{rust_arches}
- rust-globwalk
ExclusiveArch: %{rust_arches}
- rust-gobject-sys
ExclusiveArch: %{rust_arches}
- rust-goblin
ExclusiveArch: %{rust_arches}
- rust-google-drive3-fork
ExclusiveArch: %{rust_arches}
- rust-grep
ExclusiveArch: %{rust_arches}
- rust-grep-cli
ExclusiveArch: %{rust_arches}
- rust-grep-matcher
ExclusiveArch: %{rust_arches}
- rust-grep-pcre2
ExclusiveArch: %{rust_arches}
- rust-grep-printer
ExclusiveArch: %{rust_arches}
- rust-grep-regex
ExclusiveArch: %{rust_arches}
- rust-grep-searcher
ExclusiveArch: %{rust_arches}
- rust-gspell
ExclusiveArch: %{rust_arches}
- rust-gspell-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer
ExclusiveArch: %{rust_arches}
- rust-gstreamer-audio
ExclusiveArch: %{rust_arches}
- rust-gstreamer-audio-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-base
ExclusiveArch: %{rust_arches}
- rust-gstreamer-base-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-editing-services
ExclusiveArch: %{rust_arches}
- rust-gstreamer-editing-services-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-pbutils
ExclusiveArch: %{rust_arches}
- rust-gstreamer-pbutils-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-player
ExclusiveArch: %{rust_arches}
- rust-gstreamer-player-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-video
ExclusiveArch: %{rust_arches}
- rust-gstreamer-video-sys
ExclusiveArch: %{rust_arches}
- rust-gtk
ExclusiveArch: %{rust_arches}
- rust-gtk-rs-lgpl-docs
ExclusiveArch: %{rust_arches}
- rust-gtk-source-sys
ExclusiveArch: %{rust_arches}
- rust-gtk-sys
ExclusiveArch: %{rust_arches}
- rust-gzip-header
ExclusiveArch: %{rust_arches}
- rust-h2
ExclusiveArch: %{rust_arches}
- rust-half
ExclusiveArch: %{rust_arches}
- rust-hamcrest
ExclusiveArch: %{rust_arches}
- rust-handlebars
ExclusiveArch: %{rust_arches}
- rust-hashbrown
ExclusiveArch: %{rust_arches}
- rust-headers
ExclusiveArch: %{rust_arches}
- rust-headers-core
ExclusiveArch: %{rust_arches}
- rust-headers-derive
ExclusiveArch: %{rust_arches}
- rust-heapsize
ExclusiveArch: %{rust_arches}
- rust-heck
ExclusiveArch: %{rust_arches}
- rust-hex
ExclusiveArch: %{rust_arches}
- rust-hex-literal
ExclusiveArch: %{rust_arches}
- rust-hex-literal-impl
ExclusiveArch: %{rust_arches}
- rust-hexyl
ExclusiveArch: %{rust_arches}
- rust-hkdf
ExclusiveArch: %{rust_arches}
- rust-hmac
ExclusiveArch: %{rust_arches}
- rust-home
ExclusiveArch: %{rust_arches}
- rust-horrorshow
ExclusiveArch: %{rust_arches}
- rust-hostname
ExclusiveArch: %{rust_arches}
- rust-html2pango
ExclusiveArch: %{rust_arches}
- rust-html5ever
ExclusiveArch: %{rust_arches}
- rust-http
ExclusiveArch: %{rust_arches}
- rust-http-body
ExclusiveArch: %{rust_arches}
- rust-httparse
ExclusiveArch: %{rust_arches}
- rust-humansize
ExclusiveArch: %{rust_arches}
- rust-humantime
ExclusiveArch: %{rust_arches}
- rust-hyper
ExclusiveArch: %{rust_arches}
- rust-hyper-native-tls
ExclusiveArch: %{rust_arches}
- rust-hyper-tls
ExclusiveArch: %{rust_arches}
- rust-hyper0.10
ExclusiveArch: %{rust_arches}
- rust-hyperfine
ExclusiveArch: %{rust_arches}
- rust-id_tree
ExclusiveArch: %{rust_arches}
- rust-ident_case
ExclusiveArch: %{rust_arches}
- rust-idna
ExclusiveArch: %{rust_arches}
- rust-idna0.1
ExclusiveArch: %{rust_arches}
- rust-ignore
ExclusiveArch: %{rust_arches}
- rust-im-rc
ExclusiveArch: %{rust_arches}
- rust-image
ExclusiveArch: %{rust_arches}
- rust-imgref
ExclusiveArch: %{rust_arches}
- rust-indexmap
ExclusiveArch: %{rust_arches}
- rust-indicatif
ExclusiveArch: %{rust_arches}
- rust-inflate
ExclusiveArch: %{rust_arches}
- rust-inotify
ExclusiveArch: %{rust_arches}
- rust-inotify-sys
ExclusiveArch: %{rust_arches}
- rust-input_buffer
ExclusiveArch: %{rust_arches}
- rust-interpolate_name
ExclusiveArch: %{rust_arches}
- rust-intervaltree
ExclusiveArch: %{rust_arches}
- rust-iovec
ExclusiveArch: %{rust_arches}
- rust-ipnetwork
ExclusiveArch: %{rust_arches}
- rust-iso8601
ExclusiveArch: %{rust_arches}
- rust-iter-read
ExclusiveArch: %{rust_arches}
- rust-itertools
ExclusiveArch: %{rust_arches}
- rust-itertools-num
ExclusiveArch: %{rust_arches}
- rust-itoa
ExclusiveArch: %{rust_arches}
- rust-jetscii
ExclusiveArch: %{rust_arches}
- rust-jobserver
ExclusiveArch: %{rust_arches}
- rust-jpeg-decoder
ExclusiveArch: %{rust_arches}
- rust-jwalk
ExclusiveArch: %{rust_arches}
- rust-lab
ExclusiveArch: %{rust_arches}
- rust-language-tags
ExclusiveArch: %{rust_arches}
- rust-lazy-init
ExclusiveArch: %{rust_arches}
- rust-lazy_static
ExclusiveArch: %{rust_arches}
- rust-lazycell
ExclusiveArch: %{rust_arches}
- rust-letter-avatar
ExclusiveArch: %{rust_arches}
- rust-libc
ExclusiveArch: %{rust_arches}
- rust-libdbus-sys
ExclusiveArch: %{rust_arches}
- rust-libflate
ExclusiveArch: %{rust_arches}
- rust-libgit2-sys
ExclusiveArch: %{rust_arches}
- rust-libhandy
ExclusiveArch: %{rust_arches}
- rust-libhandy-sys
ExclusiveArch: %{rust_arches}
- rust-libloading
ExclusiveArch: %{rust_arches}
- rust-libm
ExclusiveArch: %{rust_arches}
- rust-libmount
ExclusiveArch: %{rust_arches}
- rust-liboverdrop
ExclusiveArch: %{rust_arches}
- rust-libssh2-sys
ExclusiveArch: %{rust_arches}
- rust-libsystemd
ExclusiveArch: %{rust_arches}
- rust-libudev
ExclusiveArch: %{rust_arches}
- rust-libudev-sys
ExclusiveArch: %{rust_arches}
- rust-libz-sys
ExclusiveArch: %{rust_arches}
- rust-line-wrap
ExclusiveArch: %{rust_arches}
- rust-linked-hash-map
ExclusiveArch: %{rust_arches}
- rust-linkify
ExclusiveArch: %{rust_arches}
- rust-lipsum
ExclusiveArch: %{rust_arches}
- rust-lmdb
ExclusiveArch: %{rust_arches}
- rust-lmdb-sys
ExclusiveArch: %{rust_arches}
- rust-locale
ExclusiveArch: %{rust_arches}
- rust-locale_config
ExclusiveArch: %{rust_arches}
- rust-lock_api
ExclusiveArch: %{rust_arches}
- rust-log
ExclusiveArch: %{rust_arches}
- rust-log0.3
ExclusiveArch: %{rust_arches}
- rust-loggerv
ExclusiveArch: %{rust_arches}
- rust-loopdev
ExclusiveArch: %{rust_arches}
- rust-lru-cache
ExclusiveArch: %{rust_arches}
- rust-lru_time_cache
ExclusiveArch: %{rust_arches}
- rust-lscolors
ExclusiveArch: %{rust_arches}
- rust-lsd
ExclusiveArch: %{rust_arches}
- rust-lzma-sys
ExclusiveArch: %{rust_arches}
- rust-lzw
ExclusiveArch: %{rust_arches}
- rust-mac
ExclusiveArch: %{rust_arches}
- rust-macro-attr
ExclusiveArch: %{rust_arches}
- rust-man
ExclusiveArch: %{rust_arches}
- rust-maplit
ExclusiveArch: %{rust_arches}
- rust-markup5ever
ExclusiveArch: %{rust_arches}
- rust-matches
ExclusiveArch: %{rust_arches}
- rust-matrixmultiply
ExclusiveArch: %{rust_arches}
- rust-md-5
ExclusiveArch: %{rust_arches}
- rust-md5
ExclusiveArch: %{rust_arches}
- rust-mdl
ExclusiveArch: %{rust_arches}
- rust-memchr
ExclusiveArch: %{rust_arches}
- rust-memmap
ExclusiveArch: %{rust_arches}
- rust-memoffset
ExclusiveArch: %{rust_arches}
- rust-metadeps
ExclusiveArch: %{rust_arches}
- rust-mime
ExclusiveArch: %{rust_arches}
- rust-mime-sniffer
ExclusiveArch: %{rust_arches}
- rust-mime0.2
ExclusiveArch: %{rust_arches}
- rust-mime_guess
ExclusiveArch: %{rust_arches}
- rust-mime_guess1
ExclusiveArch: %{rust_arches}
- rust-miniz-sys
ExclusiveArch: %{rust_arches}
- rust-miniz_oxide
ExclusiveArch: %{rust_arches}
- rust-miniz_oxide_c_api
ExclusiveArch: %{rust_arches}
- rust-mint
ExclusiveArch: %{rust_arches}
- rust-mio
ExclusiveArch: %{rust_arches}
- rust-mio-extras
ExclusiveArch: %{rust_arches}
- rust-mio-uds
ExclusiveArch: %{rust_arches}
- rust-mktemp
ExclusiveArch: %{rust_arches}
- rust-mnt
ExclusiveArch: %{rust_arches}
- rust-mockito
ExclusiveArch: %{rust_arches}
- rust-modifier
ExclusiveArch: %{rust_arches}
- rust-muldiv
ExclusiveArch: %{rust_arches}
- rust-multimap
ExclusiveArch: %{rust_arches}
- rust-nalgebra
ExclusiveArch: %{rust_arches}
- rust-nasm-rs
ExclusiveArch: %{rust_arches}
- rust-native-tls
ExclusiveArch: %{rust_arches}
- rust-natord
ExclusiveArch: %{rust_arches}
- rust-net2
ExclusiveArch: %{rust_arches}
- rust-netmap_sys
ExclusiveArch: %{rust_arches}
- rust-new_debug_unreachable
ExclusiveArch: %{rust_arches}
- rust-newtype_derive
ExclusiveArch: %{rust_arches}
- rust-nix
ExclusiveArch: %{rust_arches}
- rust-nix0.14
ExclusiveArch: %{rust_arches}
- rust-no-panic
ExclusiveArch: %{rust_arches}
- rust-nodrop
ExclusiveArch: %{rust_arches}
- rust-nom
ExclusiveArch: %{rust_arches}
- rust-notify
ExclusiveArch: %{rust_arches}
- rust-num
ExclusiveArch: %{rust_arches}
- rust-num-bigint
ExclusiveArch: %{rust_arches}
- rust-num-complex
ExclusiveArch: %{rust_arches}
- rust-num-derive
ExclusiveArch: %{rust_arches}
- rust-num-integer
ExclusiveArch: %{rust_arches}
- rust-num-iter
ExclusiveArch: %{rust_arches}
- rust-num-rational
ExclusiveArch: %{rust_arches}
- rust-num-traits
ExclusiveArch: %{rust_arches}
- rust-num-traits0.1
ExclusiveArch: %{rust_arches}
- rust-num_cpus
ExclusiveArch: %{rust_arches}
- rust-number_prefix
ExclusiveArch: %{rust_arches}
- rust-numtoa
ExclusiveArch: %{rust_arches}
- rust-object
ExclusiveArch: %{rust_arches}
- rust-objekt
ExclusiveArch: %{rust_arches}
- rust-odds
ExclusiveArch: %{rust_arches}
- rust-once_cell
ExclusiveArch: %{rust_arches}
- rust-onig
ExclusiveArch: %{rust_arches}
- rust-onig_sys
ExclusiveArch: %{rust_arches}
- rust-opaque-debug
ExclusiveArch: %{rust_arches}
- rust-open
ExclusiveArch: %{rust_arches}
- rust-opener
ExclusiveArch: %{rust_arches}
- rust-openssh-keys
ExclusiveArch: %{rust_arches}
- rust-openssl
ExclusiveArch: %{rust_arches}
- rust-openssl-probe
ExclusiveArch: %{rust_arches}
- rust-openssl-sys
ExclusiveArch: %{rust_arches}
- rust-ord_subset
ExclusiveArch: %{rust_arches}
- rust-ordered-float
ExclusiveArch: %{rust_arches}
- rust-os_pipe
ExclusiveArch: %{rust_arches}
- rust-osstrtools
ExclusiveArch: %{rust_arches}
- rust-owning_ref
ExclusiveArch: %{rust_arches}
- rust-packaging
ExclusiveArch: %{rust_arches}
- rust-pad
ExclusiveArch: %{rust_arches}
- rust-pager
ExclusiveArch: %{rust_arches}
- rust-pango
ExclusiveArch: %{rust_arches}
- rust-pango-sys
ExclusiveArch: %{rust_arches}
- rust-pangocairo
ExclusiveArch: %{rust_arches}
- rust-pangocairo-sys
ExclusiveArch: %{rust_arches}
- rust-parity-wasm
ExclusiveArch: %{rust_arches}
- rust-parking_lot
ExclusiveArch: %{rust_arches}
- rust-parking_lot_core
ExclusiveArch: %{rust_arches}
- rust-paste
ExclusiveArch: %{rust_arches}
- rust-paste-impl
ExclusiveArch: %{rust_arches}
- rust-pathdiff
ExclusiveArch: %{rust_arches}
- rust-pbr
ExclusiveArch: %{rust_arches}
- rust-pcap
ExclusiveArch: %{rust_arches}
- rust-pcre2
ExclusiveArch: %{rust_arches}
- rust-pcre2-sys
ExclusiveArch: %{rust_arches}
- rust-peeking_take_while
ExclusiveArch: %{rust_arches}
- rust-peg
ExclusiveArch: %{rust_arches}
- rust-percent-encoding
ExclusiveArch: %{rust_arches}
- rust-percent-encoding1
ExclusiveArch: %{rust_arches}
- rust-permutate
ExclusiveArch: %{rust_arches}
- rust-permutohedron
ExclusiveArch: %{rust_arches}
- rust-pest
ExclusiveArch: %{rust_arches}
- rust-pest_derive
ExclusiveArch: %{rust_arches}
- rust-pest_generator
ExclusiveArch: %{rust_arches}
- rust-pest_meta
ExclusiveArch: %{rust_arches}
- rust-petgraph
ExclusiveArch: %{rust_arches}
- rust-phf
ExclusiveArch: %{rust_arches}
- rust-phf_codegen
ExclusiveArch: %{rust_arches}
- rust-phf_generator
ExclusiveArch: %{rust_arches}
- rust-phf_shared
ExclusiveArch: %{rust_arches}
- rust-pkg-config
ExclusiveArch: %{rust_arches}
- rust-plain
ExclusiveArch: %{rust_arches}
- rust-plist
ExclusiveArch: %{rust_arches}
- rust-plugin
ExclusiveArch: %{rust_arches}
- rust-pnet_base
ExclusiveArch: %{rust_arches}
- rust-pnet_datalink
ExclusiveArch: %{rust_arches}
- rust-pnet_sys
ExclusiveArch: %{rust_arches}
- rust-png
ExclusiveArch: %{rust_arches}
- rust-ppv-lite86
ExclusiveArch: %{rust_arches}
- rust-precomputed-hash
ExclusiveArch: %{rust_arches}
- rust-pretty-git-prompt
ExclusiveArch: %{rust_arches}
- rust-pretty_assertions
ExclusiveArch: %{rust_arches}
- rust-pretty_env_logger
ExclusiveArch: %{rust_arches}
- rust-prettytable-rs
ExclusiveArch: %{rust_arches}
- rust-proc-macro-hack
ExclusiveArch: %{rust_arches}
- rust-proc-macro2
ExclusiveArch: %{rust_arches}
- rust-proc-macro2-0.4
ExclusiveArch: %{rust_arches}
- rust-procedural-masquerade
ExclusiveArch: %{rust_arches}
- rust-prometheus
ExclusiveArch: %{rust_arches}
- rust-proptest
ExclusiveArch: %{rust_arches}
- rust-proptest-derive
ExclusiveArch: %{rust_arches}
- rust-protobuf
ExclusiveArch: %{rust_arches}
- rust-pulldown-cmark
ExclusiveArch: %{rust_arches}
- rust-pulse
ExclusiveArch: %{rust_arches}
- rust-qr2term
ExclusiveArch: %{rust_arches}
- rust-qrcode
ExclusiveArch: %{rust_arches}
- rust-quick-error
ExclusiveArch: %{rust_arches}
- rust-quickcheck
ExclusiveArch: %{rust_arches}
- rust-quickcheck0.6
ExclusiveArch: %{rust_arches}
- rust-quickersort
ExclusiveArch: %{rust_arches}
- rust-quote
ExclusiveArch: %{rust_arches}
- rust-quote0.3
ExclusiveArch: %{rust_arches}
- rust-quote0.6
ExclusiveArch: %{rust_arches}
- rust-rand
ExclusiveArch: %{rust_arches}
- rust-rand0.4
ExclusiveArch: %{rust_arches}
- rust-rand0.5
ExclusiveArch: %{rust_arches}
- rust-rand0.6
ExclusiveArch: %{rust_arches}
- rust-rand_chacha
ExclusiveArch: %{rust_arches}
- rust-rand_chacha0.1
ExclusiveArch: %{rust_arches}
- rust-rand_core
ExclusiveArch: %{rust_arches}
- rust-rand_core0.3
ExclusiveArch: %{rust_arches}
- rust-rand_core0.4
ExclusiveArch: %{rust_arches}
- rust-rand_hc
ExclusiveArch: %{rust_arches}
- rust-rand_hc0.1
ExclusiveArch: %{rust_arches}
- rust-rand_isaac
ExclusiveArch: %{rust_arches}
- rust-rand_isaac0.1
ExclusiveArch: %{rust_arches}
- rust-rand_jitter
ExclusiveArch: %{rust_arches}
- rust-rand_jitter0.1
ExclusiveArch: %{rust_arches}
- rust-rand_os
ExclusiveArch: %{rust_arches}
- rust-rand_os0.1
ExclusiveArch: %{rust_arches}
- rust-rand_pcg
ExclusiveArch: %{rust_arches}
- rust-rand_pcg0.1
ExclusiveArch: %{rust_arches}
- rust-rand_xorshift
ExclusiveArch: %{rust_arches}
- rust-rand_xorshift0.1
ExclusiveArch: %{rust_arches}
- rust-rand_xoshiro
ExclusiveArch: %{rust_arches}
- rust-rawpointer
ExclusiveArch: %{rust_arches}
- rust-rawslice
ExclusiveArch: %{rust_arches}
- rust-rayon
ExclusiveArch: %{rust_arches}
- rust-rayon-core
ExclusiveArch: %{rust_arches}
- rust-recycler
ExclusiveArch: %{rust_arches}
- rust-regex
ExclusiveArch: %{rust_arches}
- rust-regex-automata
ExclusiveArch: %{rust_arches}
- rust-regex-syntax
ExclusiveArch: %{rust_arches}
- rust-region
ExclusiveArch: %{rust_arches}
- rust-relay
ExclusiveArch: %{rust_arches}
- rust-remove_dir_all
ExclusiveArch: %{rust_arches}
- rust-reqwest
ExclusiveArch: %{rust_arches}
- rust-resize
ExclusiveArch: %{rust_arches}
- rust-resolv-conf
ExclusiveArch: %{rust_arches}
- rust-restson
ExclusiveArch: %{rust_arches}
- rust-rgb
ExclusiveArch: %{rust_arches}
- rust-ripgrep
ExclusiveArch: %{rust_arches}
- rust-rmp
ExclusiveArch: %{rust_arches}
- rust-rmp-serde
ExclusiveArch: %{rust_arches}
- rust-roff
ExclusiveArch: %{rust_arches}
- rust-ron
ExclusiveArch: %{rust_arches}
- rust-rpassword
ExclusiveArch: %{rust_arches}
- rust-rpick
ExclusiveArch: %{rust_arches}
- rust-rust-ini
ExclusiveArch: %{rust_arches}
- rust-rust-stemmers
ExclusiveArch: %{rust_arches}
- rust-rustc-demangle
ExclusiveArch: %{rust_arches}
- rust-rustc-serialize
ExclusiveArch: %{rust_arches}
- rust-rustc-test
ExclusiveArch: %{rust_arches}
- rust-rustc_version
ExclusiveArch: %{rust_arches}
- rust-rustdoc-stripper
ExclusiveArch: %{rust_arches}
- rust-rustfilt
ExclusiveArch: %{rust_arches}
- rust-rustfix
ExclusiveArch: %{rust_arches}
- rust-rustio
ExclusiveArch: %{rust_arches}
- rust-rusty-fork
ExclusiveArch: %{rust_arches}
- rust-ryu
ExclusiveArch: %{rust_arches}
- rust-safe-transmute
ExclusiveArch: %{rust_arches}
- rust-safemem
ExclusiveArch: %{rust_arches}
- rust-same-file
ExclusiveArch: %{rust_arches}
- rust-sass-rs
ExclusiveArch: %{rust_arches}
- rust-sass-sys
ExclusiveArch: %{rust_arches}
- rust-scan_fmt
ExclusiveArch: %{rust_arches}
- rust-scoped-tls
ExclusiveArch: %{rust_arches}
- rust-scoped_threadpool
ExclusiveArch: %{rust_arches}
- rust-scopeguard
ExclusiveArch: %{rust_arches}
- rust-scroll
ExclusiveArch: %{rust_arches}
- rust-scroll_derive
ExclusiveArch: %{rust_arches}
- rust-sd
ExclusiveArch: %{rust_arches}
- rust-seahash
ExclusiveArch: %{rust_arches}
- rust-secret-service
ExclusiveArch: %{rust_arches}
- rust-semver
ExclusiveArch: %{rust_arches}
- rust-semver-parser
ExclusiveArch: %{rust_arches}
- rust-semver-parser0.7
ExclusiveArch: %{rust_arches}
- rust-serde
ExclusiveArch: %{rust_arches}
- rust-serde-pickle
ExclusiveArch: %{rust_arches}
- rust-serde-xml-rs
ExclusiveArch: %{rust_arches}
- rust-serde0.8
ExclusiveArch: %{rust_arches}
- rust-serde_bytes
ExclusiveArch: %{rust_arches}
- rust-serde_cbor
ExclusiveArch: %{rust_arches}
- rust-serde_derive
ExclusiveArch: %{rust_arches}
- rust-serde_ignored
ExclusiveArch: %{rust_arches}
- rust-serde_json
ExclusiveArch: %{rust_arches}
- rust-serde_json0.8
ExclusiveArch: %{rust_arches}
- rust-serde_stacker
ExclusiveArch: %{rust_arches}
- rust-serde_test
ExclusiveArch: %{rust_arches}
- rust-serde_urlencoded
ExclusiveArch: %{rust_arches}
- rust-serde_urlencoded0.5
ExclusiveArch: %{rust_arches}
- rust-serde_yaml
ExclusiveArch: %{rust_arches}
- rust-sha-1
ExclusiveArch: %{rust_arches}
- rust-sha1
ExclusiveArch: %{rust_arches}
- rust-sha2
ExclusiveArch: %{rust_arches}
- rust-shared_child
ExclusiveArch: %{rust_arches}
- rust-shell-escape
ExclusiveArch: %{rust_arches}
- rust-shell-words
ExclusiveArch: %{rust_arches}
- rust-shlex
ExclusiveArch: %{rust_arches}
- rust-signal-hook
ExclusiveArch: %{rust_arches}
- rust-signal-hook-registry
ExclusiveArch: %{rust_arches}
- rust-silver
ExclusiveArch: %{rust_arches}
- rust-simple_logger
ExclusiveArch: %{rust_arches}
- rust-simplelog
ExclusiveArch: %{rust_arches}
- rust-siphasher
ExclusiveArch: %{rust_arches}
- rust-sized-chunks
ExclusiveArch: %{rust_arches}
- rust-skeptic
ExclusiveArch: %{rust_arches}
- rust-skim
ExclusiveArch: %{rust_arches}
- rust-slab
ExclusiveArch: %{rust_arches}
- rust-slog
ExclusiveArch: %{rust_arches}
- rust-slog-async
ExclusiveArch: %{rust_arches}
- rust-slog-scope
ExclusiveArch: %{rust_arches}
- rust-slog-term
ExclusiveArch: %{rust_arches}
- rust-slotmap
ExclusiveArch: %{rust_arches}
- rust-slotmap0.2
ExclusiveArch: %{rust_arches}
- rust-slug
ExclusiveArch: %{rust_arches}
- rust-smallvec
ExclusiveArch: %{rust_arches}
- rust-snowflake
ExclusiveArch: %{rust_arches}
- rust-socket2
ExclusiveArch: %{rust_arches}
- rust-sourceview
ExclusiveArch: %{rust_arches}
- rust-spin
ExclusiveArch: %{rust_arches}
- rust-spmc
ExclusiveArch: %{rust_arches}
- rust-stable_deref_trait
ExclusiveArch: %{rust_arches}
- rust-stacker
ExclusiveArch: %{rust_arches}
- rust-static_assertions
ExclusiveArch: %{rust_arches}
- rust-statistical
ExclusiveArch: %{rust_arches}
- rust-stb_truetype
ExclusiveArch: %{rust_arches}
- rust-stream-cipher
ExclusiveArch: %{rust_arches}
- rust-streaming-stats
ExclusiveArch: %{rust_arches}
- rust-string
ExclusiveArch: %{rust_arches}
- rust-string_cache
ExclusiveArch: %{rust_arches}
- rust-string_cache_codegen
ExclusiveArch: %{rust_arches}
- rust-string_cache_shared
ExclusiveArch: %{rust_arches}
- rust-strings
ExclusiveArch: %{rust_arches}
- rust-strsim
ExclusiveArch: %{rust_arches}
- rust-structopt
ExclusiveArch: %{rust_arches}
- rust-structopt-derive
ExclusiveArch: %{rust_arches}
- rust-strum
ExclusiveArch: %{rust_arches}
- rust-strum_macros
ExclusiveArch: %{rust_arches}
- rust-subtle
ExclusiveArch: %{rust_arches}
- rust-sudo_plugin
ExclusiveArch: %{rust_arches}
- rust-sudo_plugin-sys
ExclusiveArch: %{rust_arches}
- rust-sval
ExclusiveArch: %{rust_arches}
- rust-sval_derive
ExclusiveArch: %{rust_arches}
- rust-syn
ExclusiveArch: %{rust_arches}
- rust-syn0.15
ExclusiveArch: %{rust_arches}
- rust-synom
ExclusiveArch: %{rust_arches}
- rust-synstructure
ExclusiveArch: %{rust_arches}
- rust-syntect
ExclusiveArch: %{rust_arches}
- rust-sys-info
ExclusiveArch: %{rust_arches}
- rust-tabwriter
ExclusiveArch: %{rust_arches}
- rust-take
ExclusiveArch: %{rust_arches}
- rust-take_mut
ExclusiveArch: %{rust_arches}
- rust-tar
ExclusiveArch: %{rust_arches}
- rust-tempdir
ExclusiveArch: %{rust_arches}
- rust-tempfile
ExclusiveArch: %{rust_arches}
- rust-tendril
ExclusiveArch: %{rust_arches}
- rust-tera
ExclusiveArch: %{rust_arches}
- rust-term
ExclusiveArch: %{rust_arches}
- rust-term_grid
ExclusiveArch: %{rust_arches}
- rust-term_size
ExclusiveArch: %{rust_arches}
- rust-termcolor
ExclusiveArch: %{rust_arches}
- rust-terminal_size
ExclusiveArch: %{rust_arches}
- rust-terminfo
ExclusiveArch: %{rust_arches}
- rust-termion
ExclusiveArch: %{rust_arches}
- rust-termios
ExclusiveArch: %{rust_arches}
- rust-test-assembler
ExclusiveArch: %{rust_arches}
- rust-textwrap
ExclusiveArch: %{rust_arches}
- rust-thread-id
ExclusiveArch: %{rust_arches}
- rust-thread-scoped
ExclusiveArch: %{rust_arches}
- rust-thread_local
ExclusiveArch: %{rust_arches}
- rust-threadpool
ExclusiveArch: %{rust_arches}
- rust-tiff
ExclusiveArch: %{rust_arches}
- rust-time
ExclusiveArch: %{rust_arches}
- rust-timebomb
ExclusiveArch: %{rust_arches}
- rust-timer
ExclusiveArch: %{rust_arches}
- rust-timerfd
ExclusiveArch: %{rust_arches}
- rust-tinytemplate
ExclusiveArch: %{rust_arches}
- rust-tokei
ExclusiveArch: %{rust_arches}
- rust-tokio
ExclusiveArch: %{rust_arches}
- rust-tokio-async-await
ExclusiveArch: %{rust_arches}
- rust-tokio-buf
ExclusiveArch: %{rust_arches}
- rust-tokio-codec
ExclusiveArch: %{rust_arches}
- rust-tokio-core
ExclusiveArch: %{rust_arches}
- rust-tokio-current-thread
ExclusiveArch: %{rust_arches}
- rust-tokio-executor
ExclusiveArch: %{rust_arches}
- rust-tokio-fs
ExclusiveArch: %{rust_arches}
- rust-tokio-io
ExclusiveArch: %{rust_arches}
- rust-tokio-io-pool
ExclusiveArch: %{rust_arches}
- rust-tokio-mock-task
ExclusiveArch: %{rust_arches}
- rust-tokio-mockstream
ExclusiveArch: %{rust_arches}
- rust-tokio-openssl
ExclusiveArch: %{rust_arches}
- rust-tokio-process
ExclusiveArch: %{rust_arches}
- rust-tokio-reactor
ExclusiveArch: %{rust_arches}
- rust-tokio-service
ExclusiveArch: %{rust_arches}
- rust-tokio-signal
ExclusiveArch: %{rust_arches}
- rust-tokio-sync
ExclusiveArch: %{rust_arches}
- rust-tokio-tcp
ExclusiveArch: %{rust_arches}
- rust-tokio-threadpool
ExclusiveArch: %{rust_arches}
- rust-tokio-timer
ExclusiveArch: %{rust_arches}
- rust-tokio-tls
ExclusiveArch: %{rust_arches}
- rust-tokio-trace-core
ExclusiveArch: %{rust_arches}
- rust-tokio-udp
ExclusiveArch: %{rust_arches}
- rust-tokio-uds
ExclusiveArch: %{rust_arches}
- rust-toml
ExclusiveArch: %{rust_arches}
- rust-toml0.4
ExclusiveArch: %{rust_arches}
- rust-traitobject
ExclusiveArch: %{rust_arches}
- rust-trust-dns-native-tls
ExclusiveArch: %{rust_arches}
- rust-trust-dns-openssl
ExclusiveArch: %{rust_arches}
- rust-trust-dns-proto
ExclusiveArch: %{rust_arches}
- rust-trust-dns-resolver
ExclusiveArch: %{rust_arches}
- rust-try-lock
ExclusiveArch: %{rust_arches}
- rust-try_or
ExclusiveArch: %{rust_arches}
- rust-tuikit
ExclusiveArch: %{rust_arches}
- rust-tungstenite
ExclusiveArch: %{rust_arches}
- rust-twoway
ExclusiveArch: %{rust_arches}
- rust-typeable
ExclusiveArch: %{rust_arches}
- rust-typed-arena
ExclusiveArch: %{rust_arches}
- rust-typemap
ExclusiveArch: %{rust_arches}
- rust-typenum
ExclusiveArch: %{rust_arches}
- rust-ucd-parse
ExclusiveArch: %{rust_arches}
- rust-ucd-trie
ExclusiveArch: %{rust_arches}
- rust-ucd-util
ExclusiveArch: %{rust_arches}
- rust-unchecked-index
ExclusiveArch: %{rust_arches}
- rust-unescape
ExclusiveArch: %{rust_arches}
- rust-unic-char-property
ExclusiveArch: %{rust_arches}
- rust-unic-char-range
ExclusiveArch: %{rust_arches}
- rust-unic-common
ExclusiveArch: %{rust_arches}
- rust-unic-segment
ExclusiveArch: %{rust_arches}
- rust-unic-ucd-category
ExclusiveArch: %{rust_arches}
- rust-unic-ucd-common
ExclusiveArch: %{rust_arches}
- rust-unic-ucd-segment
ExclusiveArch: %{rust_arches}
- rust-unic-ucd-version
ExclusiveArch: %{rust_arches}
- rust-unicase
ExclusiveArch: %{rust_arches}
- rust-unicase1
ExclusiveArch: %{rust_arches}
- rust-unicode-bidi
ExclusiveArch: %{rust_arches}
- rust-unicode-normalization
ExclusiveArch: %{rust_arches}
- rust-unicode-segmentation
ExclusiveArch: %{rust_arches}
- rust-unicode-width
ExclusiveArch: %{rust_arches}
- rust-unicode-xid
ExclusiveArch: %{rust_arches}
- rust-unicode-xid0.1
ExclusiveArch: %{rust_arches}
- rust-unicode_categories
ExclusiveArch: %{rust_arches}
- rust-unindent
ExclusiveArch: %{rust_arches}
- rust-unix_socket
ExclusiveArch: %{rust_arches}
- rust-unreachable
ExclusiveArch: %{rust_arches}
- rust-unsafe-any
ExclusiveArch: %{rust_arches}
- rust-untrusted
ExclusiveArch: %{rust_arches}
- rust-url
ExclusiveArch: %{rust_arches}
- rust-url1
ExclusiveArch: %{rust_arches}
- rust-url_serde
ExclusiveArch: %{rust_arches}
- rust-urlencoding
ExclusiveArch: %{rust_arches}
- rust-urlshortener
ExclusiveArch: %{rust_arches}
- rust-users
ExclusiveArch: %{rust_arches}
- rust-utf-8
ExclusiveArch: %{rust_arches}
- rust-utf8-ranges
ExclusiveArch: %{rust_arches}
- rust-utf8parse
ExclusiveArch: %{rust_arches}
- rust-uuid
ExclusiveArch: %{rust_arches}
- rust-v_escape
ExclusiveArch: %{rust_arches}
- rust-v_escape_derive
ExclusiveArch: %{rust_arches}
- rust-v_htmlescape
ExclusiveArch: %{rust_arches}
- rust-varlink
ExclusiveArch: %{rust_arches}
- rust-varlink-cli
ExclusiveArch: %{rust_arches}
- rust-varlink_generator
ExclusiveArch: %{rust_arches}
- rust-varlink_parser
ExclusiveArch: %{rust_arches}
- rust-varlink_stdinterfaces
ExclusiveArch: %{rust_arches}
- rust-vec_map
ExclusiveArch: %{rust_arches}
- rust-version-compare
ExclusiveArch: %{rust_arches}
- rust-version-sync
ExclusiveArch: %{rust_arches}
- rust-version_check
ExclusiveArch: %{rust_arches}
- rust-void
ExclusiveArch: %{rust_arches}
- rust-vte
ExclusiveArch: %{rust_arches}
- rust-wait-timeout
ExclusiveArch: %{rust_arches}
- rust-walkdir
ExclusiveArch: %{rust_arches}
- rust-want
ExclusiveArch: %{rust_arches}
- rust-warp
ExclusiveArch: %{rust_arches}
- rust-websocket
ExclusiveArch: %{rust_arches}
- rust-which
ExclusiveArch: %{rust_arches}
- rust-which1
ExclusiveArch: %{rust_arches}
- rust-wild
ExclusiveArch: %{rust_arches}
- rust-ws
ExclusiveArch: %{rust_arches}
- rust-x11
ExclusiveArch: %{rust_arches}
- rust-xattr
ExclusiveArch: %{rust_arches}
- rust-xdg
ExclusiveArch: %{rust_arches}
- rust-xml-rs
ExclusiveArch: %{rust_arches}
- rust-xz2
ExclusiveArch: %{rust_arches}
- rust-y4m
ExclusiveArch: %{rust_arches}
- rust-yaml-rust
ExclusiveArch: %{rust_arches}
- rust-yaml-rust0.3
ExclusiveArch: %{rust_arches}
- rust-ybaas
ExclusiveArch: %{rust_arches}
- rust-yubibomb
ExclusiveArch: %{rust_arches}
- rust-yup-oauth2
ExclusiveArch: %{rust_arches}
- rust-zincati
ExclusiveArch: %{rust_arches}
- rust-zoneinfo_compiled
ExclusiveArch: %{rust_arches}
- rust-zram-generator
ExclusiveArch: %{rust_arches}
- s390utils
ExclusiveArch: s390 s390x
- safetyblanket
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64
- sagemath
ExclusiveArch: aarch64 %{arm} %{ix86} x86_64 ppc sparcv9
- sbcl
ExclusiveArch: %{arm} %{ix86} x86_64 ppc sparcv9 aarch64
- sbd
ExclusiveArch: i686 x86_64 s390x aarch64 ppc64le
- sbsigntools
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
- seabios
ExclusiveArch: x86_64
- seamonkey
ExclusiveArch: %{ix86} x86_64
- servicelog
ExclusiveArch: ppc %{power64}
- sgabios
ExclusiveArch: %{ix86} x86_64
- sharpfont
ExclusiveArch: %mono_arches
- sharpziplib
ExclusiveArch: %{mono_arches}
- shim
ExclusiveArch: %{efi}
- shim-unsigned-aarch64
ExclusiveArch: aarch64
- shim-unsigned-x64
ExclusiveArch: x86_64
- sigul
ExclusiveArch: x86_64
- skychart
ExclusiveArch: %{fpc_arches}
- snapd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- soup-sharp
ExclusiveArch: %{mono_arches}
- source-to-image
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- sparkleshare
ExclusiveArch: %{mono_arches}
- spicctrl
ExclusiveArch: %{ix86} x86_64
- spice
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- springlobby
ExclusiveArch: %{ix86} x86_64
- startdde
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- statsd
ExclusiveArch: %{nodejs_arches} noarch
- stratis-cli
ExclusiveArch: %{rust_arches}
- stratisd
ExclusiveArch: %{rust_arches}
- stripesnoop
ExclusiveArch: %{ix86} x86_64
- supermin
ExclusiveArch: x86_64
- svt-av1
ExclusiveArch: x86_64
- svt-vp9
ExclusiveArch: x86_64
- swift-lang
ExclusiveArch: x86_64 aarch64
- sysbench
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- syslinux
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- taglib-sharp
ExclusiveArch: %{mono_arches}
- tarantool
ExclusiveArch: %{ix86} x86_64 armv7hl armv7hnl
- tboot
ExclusiveArch: %{ix86} x86_64
- tdlib
ExclusiveArch: x86_64
- templates_parser
ExclusiveArch: %GPRbuild_arches
- termy-qt
ExclusiveArch: %{ix86} x86_64
- ternimal
ExclusiveArch: %{rust_arches}
- themonospot-base
ExclusiveArch: %mono_arches
- themonospot-console
ExclusiveArch: %mono_arches
- themonospot-gui-gtk
ExclusiveArch: %mono_arches
- themonospot-plugin-avi
ExclusiveArch: %mono_arches
- themonospot-plugin-mkv
ExclusiveArch: %mono_arches
- thermald
ExclusiveArch: %{ix86} x86_64
- tilix
ExclusiveArch: %{ldc_arches}
- tmux-top
ExclusiveArch: %{go_arches}
- tomboy
ExclusiveArch: %{mono_arches}
- toolbox
ExclusiveArch: aarch64 %{arm} ppc64le s390x x86_64
- tuned-profiles-nfv-host-bin
ExclusiveArch: %{ix86} x86_64
- uClibc
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
- ucx
ExclusiveArch: aarch64 ppc64le x86_64
- ugene
ExclusiveArch: %{ix86} x86_64
- uglify-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- uglify-js1
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- unetbootin
ExclusiveArch: %{ix86} x86_64
- ursa-major
ExclusiveArch: %{ix86} x86_64 noarch
- v8-314
ExclusiveArch: %{ix86} x86_64 %{arm} mips mipsel ppc ppc64
- valgrind
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64
- vboot-utils
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- vim-go
ExclusiveArch: %{?golang_arches}%{!?golang_arches:%{ix86} x86_64 %{arm}}
- virt-p2v
ExclusiveArch: x86_64
- virtio-forwarder
ExclusiveArch: x86_64 aarch64 ppc64le %ix86
- virtualbox-guest-additions
ExclusiveArch: i686 x86_64
- virtualplanet
ExclusiveArch: %{fpc_arches}
- vkd3d
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- vmaf
ExclusiveArch: x86_64
- vmemcache
ExclusiveArch: x86_64 ppc64 ppc64le s390x aarch64
- vrq
ExclusiveArch: %{ix86} x86_64
- warsow
ExclusiveArch: %{ix86} x86_64 %{arm}
- warsow-data
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{ix86} x86_64 %{arm}
- webkit2-sharp
ExclusiveArch: %mono_arches
- wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
ExclusiveArch: %{ix86} %{arm}
- wine-dxvk
ExclusiveArch: %{ix86} x86_64
- winetricks
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- wraplinux
ExclusiveArch: %{ix86} x86_64
- wxMaxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
- x2goclient
ExclusiveArch: x86_64
- xe-guest-utilities
ExclusiveArch: %{ix86} x86_64
- xen
ExclusiveArch: %{ix86} x86_64 armv7hl aarch64
- xmlada
ExclusiveArch: %{GPRbuild_arches}
- xorg-x11-drv-armsoc
ExclusiveArch: %{arm} aarch64
- xorg-x11-drv-geode
ExclusiveArch: %{ix86}
- xorg-x11-drv-intel
ExclusiveArch: %{ix86} x86_64 ia64
- xorg-x11-drv-openchrome
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vesa
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vmware
ExclusiveArch: %{ix86} x86_64 ia64
- xsp
ExclusiveArch: %mono_arches
- ycssmin
ExclusiveArch: %{nodejs_arches} noarch
- zeromq-ada
ExclusiveArch: %{GPRbuild_arches}
- zlib-ada
ExclusiveArch: %{GPRbuild_arches}
- zola
ExclusiveArch: %{rust_arches}
4 years, 6 months
Architecture specific change in rpms/firefox.git
by githook-noreply@fedoraproject.org
The package rpms/firefox.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/firefox.git/commit/?id=302967b0a8....
Change:
-%ifarch ppc64 ppc64le
Thanks.
Full change:
============
commit 302967b0a822136f55649d389e0345870cae57a9
Author: Martin Stransky <stransky(a)redhat.com>
Date: Fri Oct 18 20:43:19 2019 +0200
Updated to 70.0 Build 2
diff --git a/.gitignore b/.gitignore
index 379c588..7077731 100644
--- a/.gitignore
+++ b/.gitignore
@@ -366,3 +366,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-69.0.2.source.tar.xz
/firefox-69.0.3.source.tar.xz
/firefox-langpacks-69.0.3-20191010.tar.xz
+/firefox-70.0.source.tar.xz
+/firefox-langpacks-70.0-20191018.tar.xz
diff --git a/firefox.spec b/firefox.spec
index 872105b..7a3dffc 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -93,13 +93,13 @@ ExcludeArch: ppc64le
Summary: Mozilla Firefox Web browser
Name: firefox
-Version: 69.0.3
-Release: 2%{?pre_tag}%{?dist}
+Version: 70.0
+Release: 1%{?pre_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...
%if %{with langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20191010.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20191018.tar.xz
%endif
Source2: cbindgen-vendor.tar.xz
Source10: firefox-mozconfig
@@ -146,31 +146,15 @@ Patch228: mozilla-1583466.patch
# Upstream patches
Patch402: mozilla-1196777.patch
Patch412: mozilla-1337988.patch
-#Patch413: mozilla-1353817.patch
Patch415: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch
Patch417: bug1375074-save-restore-x28.patch
-Patch418: mozilla-1512162.patch
Patch419: mozilla-1568569.patch
-Patch420: mozilla-1566876-webrtc-ind.patch
Patch421: mozilla-1579023.patch
Patch422: mozilla-1580174-webrtc-popup.patch
# Wayland specific upstream patches
Patch574: firefox-pipewire.patch
Patch575: mozilla-1548475.patch
-Patch576: mozilla-1562827.patch
-Patch578: mozilla-1567434-1.patch
-Patch579: mozilla-1567434-2.patch
-Patch580: mozilla-1573813.patch
-Patch581: mozilla-1574036.patch
-Patch582: mozilla-1576268.patch
-Patch583: mozilla-1579794-1.patch
-Patch584: mozilla-1579794-2.patch
-Patch585: mozilla-1579849.patch
-Patch586: mozilla-1579823.patch
-Patch587: mozilla-1580152.patch
-Patch588: mozilla-1581748.patch
-Patch589: mozilla-1577024.patch
Patch590: firefox-wayland-cache-missing.patch
Patch591: mozilla-1587008.patch
@@ -370,34 +354,15 @@ This package contains results of tests executed during build.
%patch228 -p1 -b .mozilla-1583466
%patch402 -p1 -b .1196777
-#%patch413 -p1 -b .1353817
%ifarch %{arm}
%patch415 -p1 -b .1238661
%endif
-%ifarch ppc64 ppc64le
-#%patch418 -p1 -b .1512162 FIXME no longer needed?
-%endif
%patch419 -p1 -b .1568569
-%patch420 -p1 -b .1566876-webrtc-ind
%patch421 -p1 -b .1579023
# Wayland specific upstream patches
%patch574 -p1 -b .firefox-pipewire
%patch575 -p1 -b .mozilla-1548475
-%patch576 -p1 -b .mozilla-1562827
-%patch578 -p1 -b .mozilla-1567434-1
-%patch579 -p1 -b .mozilla-1567434-2
-%patch580 -p1 -b .mozilla-1573813
-%patch581 -p1 -b .mozilla-1574036
-%patch582 -p1 -b .mozilla-1576268
-%patch583 -p1 -b .mozilla-1579794-1
-%patch584 -p1 -b .mozilla-1579794-2
-%patch585 -p1 -b .mozilla-1579849
-%patch422 -p1 -b .1580174-webrtc-popup
-%patch586 -p1 -b .mozilla-1579823
-%patch587 -p1 -b .mozilla-1580152
-%patch588 -p1 -b .mozilla-1581748
-%patch589 -p1 -b .mozilla-1577024
%patch590 -p1 -b .cache-missing
%patch591 -p1 -b .mozilla-1587008
@@ -982,6 +947,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Tue Oct 15 2019 Martin Stransky <stransky(a)redhat.com> - 70.0-1
+- Updated to 70.0
+
* Mon Oct 14 2019 Martin Stransky <stransky(a)redhat.com> - 69.0.3-2
- Build firefox-wayland again (rhbz#1761578).
diff --git a/mozilla-1353817.patch b/mozilla-1353817.patch
deleted file mode 100644
index dc8d8f8..0000000
--- a/mozilla-1353817.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 1cc652f5525f458b0b4ceb12af24bf5a4367db32 Mon Sep 17 00:00:00 2001
-From: Nicolas Dufresne <nicolas.dufresne(a)collabora.com>
-Date: Tue, 23 May 2017 13:09:48 -0400
-Subject: [PATCH] Bug 1353817: Include SkNx_neon.h for ARM64 too
-
-This fixes build errors as arm_neon.h was missing along with some
-missing converters.
----
- gfx/skia/skia/src/core/SkNx.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gfx/skia/skia/src/core/SkNx.h b/gfx/skia/skia/src/core/SkNx.h
-index 6bca856..b0427aa 100644
---- a/gfx/skia/skia/src/core/SkNx.h
-+++ b/gfx/skia/skia/src/core/SkNx.h
-@@ -299,7 +299,7 @@ typedef SkNx<4, uint32_t> Sk4u;
- // Include platform specific specializations if available.
- #if !defined(SKNX_NO_SIMD) && SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2
- #include "../opts/SkNx_sse.h"
--#elif !defined(SKNX_NO_SIMD) && defined(SK_ARM_HAS_NEON)
-+#elif !defined(SKNX_NO_SIMD) && (defined(SK_ARM_HAS_NEON) || defined(SK_CPU_ARM64))
- #include "../opts/SkNx_neon.h"
- #else
-
---
-2.9.4
-
diff --git a/mozilla-1512162.patch b/mozilla-1512162.patch
deleted file mode 100644
index 99a0b14..0000000
--- a/mozilla-1512162.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-diff -up firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp.1512162 firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp
---- firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp.1512162 2019-07-17 22:51:30.000000000 +0200
-+++ firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp 2019-07-25 08:08:18.512528313 +0200
-@@ -1092,7 +1092,7 @@ class MOZ_STACK_CLASS CallMethodHelper f
- MOZ_ALWAYS_INLINE bool GetOutParamSource(uint8_t paramIndex,
- MutableHandleValue srcp) const;
-
-- MOZ_ALWAYS_INLINE bool GatherAndConvertResults();
-+ bool GatherAndConvertResults();
-
- MOZ_ALWAYS_INLINE bool QueryInterfaceFastPath();
-
-@@ -1139,7 +1139,7 @@ class MOZ_STACK_CLASS CallMethodHelper f
-
- ~CallMethodHelper();
-
-- MOZ_ALWAYS_INLINE bool Call();
-+ bool Call();
-
- // Trace implementation so we can put our CallMethodHelper in a Rooted<T>.
- void trace(JSTracer* aTrc);
-@@ -1157,6 +1157,10 @@ bool XPCWrappedNative::CallMethod(XPCCal
- return helper.get().Call();
- }
-
-+#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
-+// Work around a compiler bug on ppc64le (bug 1512162).
-+__attribute__ ((noinline,noclone))
-+#endif
- bool CallMethodHelper::Call() {
- mCallContext.SetRetVal(JS::UndefinedValue());
-
-@@ -1315,6 +1319,10 @@ bool CallMethodHelper::GetOutParamSource
- return true;
- }
-
-+#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
-+// Work around a compiler bug on ppc64le (bug 1512162).
-+__attribute__ ((noinline,noclone))
-+#endif
- bool CallMethodHelper::GatherAndConvertResults() {
- // now we iterate through the native params to gather and convert results
- uint8_t paramCount = mMethodInfo->GetParamCount();
diff --git a/mozilla-1516081.patch b/mozilla-1516081.patch
index 1ecff39..cc332a6 100644
--- a/mozilla-1516081.patch
+++ b/mozilla-1516081.patch
@@ -1,7 +1,7 @@
-diff -up firefox-69.0/build/moz.configure/toolchain.configure.1516081 firefox-69.0/build/moz.configure/toolchain.configure
---- firefox-69.0/build/moz.configure/toolchain.configure.1516081 2019-08-27 03:31:51.000000000 +0200
-+++ firefox-69.0/build/moz.configure/toolchain.configure 2019-08-29 10:42:45.872919255 +0200
-@@ -1411,7 +1411,7 @@ def pgo_flags(compiler, build_env, targe
+diff -up firefox-70.0/build/moz.configure/lto-pgo.configure.old firefox-70.0/build/moz.configure/lto-pgo.configure
+--- firefox-70.0/build/moz.configure/lto-pgo.configure.old 2019-10-18 20:33:54.240107068 +0200
++++ firefox-70.0/build/moz.configure/lto-pgo.configure 2019-10-18 20:34:44.202009678 +0200
+@@ -16,7 +16,7 @@ def pgo_flags(compiler, build_env, targe
if compiler.type == 'gcc':
return namespace(
@@ -10,29 +10,12 @@ diff -up firefox-69.0/build/moz.configure/toolchain.configure.1516081 firefox-69
gen_ldflags=['-fprofile-generate'],
use_cflags=['-fprofile-use', '-fprofile-correction',
'-Wcoverage-mismatch'],
-@@ -1434,7 +1434,8 @@ def pgo_flags(compiler, build_env, targe
+@@ -38,7 +38,7 @@ def pgo_flags(compiler, build_env, targe
+ gen_ldflags = ['-fprofile-generate']
- if gen_ldflags:
- return namespace(
-- gen_cflags=[prefix + '-fprofile-generate'],
-+ gen_cflags=[prefix + '-fprofile-generate',
-+ '-DMOZ_PROFILE_INSTRUMENTATION'],
- gen_ldflags=gen_ldflags,
- use_cflags=[prefix + '-fprofile-use=%s' % profdata,
- # Some error messages about mismatched profile data
-diff -up firefox-69.0/toolkit/components/terminator/nsTerminator.cpp.1516081 firefox-69.0/toolkit/components/terminator/nsTerminator.cpp
---- firefox-69.0/toolkit/components/terminator/nsTerminator.cpp.1516081 2019-08-27 03:32:05.000000000 +0200
-+++ firefox-69.0/toolkit/components/terminator/nsTerminator.cpp 2019-08-29 09:51:08.513440687 +0200
-@@ -419,6 +419,12 @@ void nsTerminator::StartWatchdog() {
- }
- }
- #endif
-+ // Disable watchdog for PGO train builds - writting profile information at
-+ // exit may take time and it is better to make build hang rather than
-+ // silently produce poorly performing binary.
-+#ifdef MOZ_PROFILE_INSTRUMENTATION
-+ crashAfterMS = INT32_MAX;
-+#endif
-
- UniquePtr<Options> options(new Options());
- const PRIntervalTime ticksDuration = PR_MillisecondsToInterval(1000);
+ return namespace(
+- gen_cflags=[prefix + '-fprofile-generate'],
++ gen_cflags=[prefix + '-fprofile-generate', '-DMOZ_PROFILE_INSTRUMENTATION'],
+ gen_ldflags=gen_ldflags,
+ use_cflags=[prefix + '-fprofile-use=%s' % profdata,
+ # Some error messages about mismatched profile data
diff --git a/mozilla-1562827.patch b/mozilla-1562827.patch
deleted file mode 100644
index 497133c..0000000
--- a/mozilla-1562827.patch
+++ /dev/null
@@ -1,141 +0,0 @@
-diff -up firefox-69.0/widget/gtk/nsWindow.cpp.mozilla-1562827 firefox-69.0/widget/gtk/nsWindow.cpp
---- firefox-69.0/widget/gtk/nsWindow.cpp.mozilla-1562827 2019-09-02 15:16:15.031528276 +0200
-+++ firefox-69.0/widget/gtk/nsWindow.cpp 2019-09-02 15:16:15.037528254 +0200
-@@ -818,7 +818,6 @@ void nsWindow::SetParent(nsIWidget* aNew
- if (mParent) {
- mParent->RemoveChild(this);
- }
--
- mParent = aNewParent;
-
- GtkWidget* oldContainer = GetMozContainerWidget();
-@@ -830,88 +829,73 @@ void nsWindow::SetParent(nsIWidget* aNew
- return;
- }
-
-+ nsWindow* newParent = static_cast<nsWindow*>(aNewParent);
-+ GdkWindow* newParentWindow = nullptr;
-+ GtkWidget* newContainer = nullptr;
- if (aNewParent) {
- aNewParent->AddChild(this);
-- ReparentNativeWidget(aNewParent);
-+ newParentWindow = newParent->mGdkWindow;
-+ newContainer = newParent->GetMozContainerWidget();
- } else {
- // aNewParent is nullptr, but reparent to a hidden window to avoid
- // destroying the GdkWindow and its descendants.
- // An invisible container widget is needed to hold descendant
- // GtkWidgets.
-- GtkWidget* newContainer = EnsureInvisibleContainer();
-- GdkWindow* newParentWindow = gtk_widget_get_window(newContainer);
-- ReparentNativeWidgetInternal(aNewParent, newContainer, newParentWindow,
-- oldContainer);
-- }
--}
--
--bool nsWindow::WidgetTypeSupportsAcceleration() { return !IsSmallPopup(); }
--
--void nsWindow::ReparentNativeWidget(nsIWidget* aNewParent) {
-- MOZ_ASSERT(aNewParent, "null widget");
-- NS_ASSERTION(!mIsDestroyed, "");
-- NS_ASSERTION(!static_cast<nsWindow*>(aNewParent)->mIsDestroyed, "");
--
-- GtkWidget* oldContainer = GetMozContainerWidget();
-- if (!oldContainer) {
-- // The GdkWindows have been destroyed so there is nothing else to
-- // reparent.
-- MOZ_ASSERT(gdk_window_is_destroyed(mGdkWindow),
-- "live GdkWindow with no widget");
-- return;
-+ newContainer = EnsureInvisibleContainer();
-+ newParentWindow = gtk_widget_get_window(newContainer);
- }
-- MOZ_ASSERT(!gdk_window_is_destroyed(mGdkWindow),
-- "destroyed GdkWindow with widget");
-
-- auto* newParent = static_cast<nsWindow*>(aNewParent);
-- GdkWindow* newParentWindow = newParent->mGdkWindow;
-- GtkWidget* newContainer = newParent->GetMozContainerWidget();
-- GtkWindow* shell = GTK_WINDOW(mShell);
--
-- if (shell && gtk_window_get_transient_for(shell)) {
-- GtkWindow* topLevelParent =
-- GTK_WINDOW(gtk_widget_get_toplevel(newContainer));
-- gtk_window_set_transient_for(shell, topLevelParent);
-- }
--
-- ReparentNativeWidgetInternal(aNewParent, newContainer, newParentWindow,
-- oldContainer);
--}
--
--void nsWindow::ReparentNativeWidgetInternal(nsIWidget* aNewParent,
-- GtkWidget* aNewContainer,
-- GdkWindow* aNewParentWindow,
-- GtkWidget* aOldContainer) {
-- if (!aNewContainer) {
-+ if (!newContainer) {
- // The new parent GdkWindow has been destroyed.
-- MOZ_ASSERT(!aNewParentWindow || gdk_window_is_destroyed(aNewParentWindow),
-+ MOZ_ASSERT(!newParentWindow || gdk_window_is_destroyed(newParentWindow),
- "live GdkWindow with no widget");
- Destroy();
- } else {
-- if (aNewContainer != aOldContainer) {
-- MOZ_ASSERT(!gdk_window_is_destroyed(aNewParentWindow),
-+ if (newContainer != oldContainer) {
-+ MOZ_ASSERT(!gdk_window_is_destroyed(newParentWindow),
- "destroyed GdkWindow with widget");
-- SetWidgetForHierarchy(mGdkWindow, aOldContainer, aNewContainer);
-+ SetWidgetForHierarchy(mGdkWindow, oldContainer, newContainer);
-
-- if (aOldContainer == gInvisibleContainer) {
-+ if (oldContainer == gInvisibleContainer) {
- CheckDestroyInvisibleContainer();
- }
- }
-
-- if (!mIsTopLevel) {
-- gdk_window_reparent(mGdkWindow, aNewParentWindow,
-- DevicePixelsToGdkCoordRoundDown(mBounds.x),
-- DevicePixelsToGdkCoordRoundDown(mBounds.y));
-- }
-+ gdk_window_reparent(mGdkWindow, newParentWindow,
-+ DevicePixelsToGdkCoordRoundDown(mBounds.x),
-+ DevicePixelsToGdkCoordRoundDown(mBounds.y));
-+ mToplevelParentWindow = GTK_WINDOW(gtk_widget_get_toplevel(newContainer));
- }
-
-- auto* newParent = static_cast<nsWindow*>(aNewParent);
- bool parentHasMappedToplevel = newParent && newParent->mHasMappedToplevel;
- if (mHasMappedToplevel != parentHasMappedToplevel) {
- SetHasMappedToplevel(parentHasMappedToplevel);
- }
- }
-
-+bool nsWindow::WidgetTypeSupportsAcceleration() { return !IsSmallPopup(); }
-+
-+void nsWindow::ReparentNativeWidget(nsIWidget* aNewParent) {
-+ MOZ_ASSERT(aNewParent, "null widget");
-+ MOZ_ASSERT(!mIsDestroyed, "");
-+ MOZ_ASSERT(!static_cast<nsWindow*>(aNewParent)->mIsDestroyed, "");
-+ MOZ_ASSERT(!gdk_window_is_destroyed(mGdkWindow),
-+ "destroyed GdkWindow with widget");
-+
-+ MOZ_ASSERT(
-+ !mParent,
-+ "nsWindow::ReparentNativeWidget() works on toplevel windows only.");
-+
-+ auto* newParent = static_cast<nsWindow*>(aNewParent);
-+ GtkWindow* newParentWidget = GTK_WINDOW(newParent->GetGtkWidget());
-+ GtkWindow* shell = GTK_WINDOW(mShell);
-+
-+ if (shell && gtk_window_get_transient_for(shell)) {
-+ gtk_window_set_transient_for(shell, newParentWidget);
-+ mToplevelParentWindow = newParentWidget;
-+ }
-+}
-+
- void nsWindow::SetModal(bool aModal) {
- LOG(("nsWindow::SetModal [%p] %d\n", (void*)this, aModal));
- if (mIsDestroyed) return;
-diff -up firefox-69.0/widget/gtk/nsWindow.h.mozilla-1562827 firefox-69.0/widget/gtk/nsWindow.h
diff --git a/mozilla-1566876-webrtc-ind.patch b/mozilla-1566876-webrtc-ind.patch
deleted file mode 100644
index 598f58f..0000000
--- a/mozilla-1566876-webrtc-ind.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -3504,12 +3504,6 @@
- mBounds = aRect;
- ConstrainSize(&mBounds.width, &mBounds.height);
-
-- // eWindowType_child is not supported on Wayland. Just switch to toplevel
-- // as a workaround.
-- if (!mIsX11Display && mWindowType == eWindowType_child) {
-- mWindowType = eWindowType_toplevel;
-- }
--
- // figure out our parent window
- GtkWidget* parentMozContainer = nullptr;
- GtkContainer* parentGtkContainer = nullptr;
-@@ -3543,6 +3537,18 @@
- topLevelParent = GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer));
- }
-
-+ if (!mIsX11Display) {
-+ if (mWindowType == eWindowType_child) {
-+ // eWindowType_child is not supported on Wayland. Just switch to toplevel
-+ // as a workaround.
-+ mWindowType = eWindowType_toplevel;
-+ } else if (mWindowType == eWindowType_popup && !topLevelParent) {
-+ // Workaround for Wayland where the popup windows always need to have
-+ // parent window. For example webrtc ui is a popup window without parent.
-+ mWindowType = eWindowType_toplevel;
-+ }
-+ }
-+
- // ok, create our windows
- switch (mWindowType) {
- case eWindowType_dialog:
-
diff --git a/mozilla-1567434-1.patch b/mozilla-1567434-1.patch
deleted file mode 100644
index 446cd6b..0000000
--- a/mozilla-1567434-1.patch
+++ /dev/null
@@ -1,226 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -616,8 +616,6 @@
- }
-
- if (!aFullScreenUpdate) {
-- NS_WARNING(
-- "We can't create a new Wayland buffer for non-fullscreen updates!");
- return nullptr;
- }
-
-@@ -674,8 +672,6 @@
- (void*)buffer));
-
- if (!buffer) {
-- NS_WARNING(
-- "WindowSurfaceWayland::LockWaylandBuffer(): No buffer available");
- return nullptr;
- }
-
-diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
---- a/widget/gtk/nsWindow.h
-+++ b/widget/gtk/nsWindow.h
-@@ -487,6 +487,7 @@
- GtkWidget* mShell;
- MozContainer* mContainer;
- GdkWindow* mGdkWindow;
-+ GtkWindow* mToplevelParentWindow;
- bool mWindowShouldStartDragging = false;
- PlatformCompositorWidgetDelegate* mCompositorWidgetDelegate;
-
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -401,6 +401,7 @@
- mContainer = nullptr;
- mGdkWindow = nullptr;
- mShell = nullptr;
-+ mToplevelParentWindow = nullptr;
- mCompositorWidgetDelegate = nullptr;
- mHasMappedToplevel = false;
- mIsFullyObscured = false;
-@@ -1144,6 +1145,8 @@
- nsWindow* window =
- static_cast<nsWindow*>(gVisibleWaylandPopupWindows->data);
- if (window->mPopupType != ePopupTypeTooltip) break;
-+ LOG(("nsWindow::HideWaylandTooltips [%p] hidding tooltip [%p].\n",
-+ (void*)this, window));
- window->HideWaylandWindow();
- gVisibleWaylandPopupWindows = g_list_delete_link(
- gVisibleWaylandPopupWindows, gVisibleWaylandPopupWindows);
-@@ -1172,9 +1175,12 @@
- // before we open another one on that level. It means that every open
- // popup needs to have an unique parent.
- GtkWidget* nsWindow::ConfigureWaylandPopupWindows() {
-+ LOG(("nsWindow::ConfigureWaylandPopupWindows [%p]\n", (void*)this));
-+
- // Check if we're already configured.
- if (gVisibleWaylandPopupWindows &&
- g_list_find(gVisibleWaylandPopupWindows, this)) {
-+ LOG(("...[%p] is already configured.\n", (void*)this));
- return GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell)));
- }
-
-@@ -1182,9 +1188,15 @@
- // as it's short lived temporary window.
- HideWaylandTooltips();
-
-- GtkWindow* parentWidget = nullptr;
-+ GtkWindow* parentWidget = mToplevelParentWindow;
- if (gVisibleWaylandPopupWindows) {
-+ LOG(("... there's visible active popup [%p]\n",
-+ gVisibleWaylandPopupWindows->data));
-+
- if (mPopupType == ePopupTypeTooltip) {
-+ LOG(("...[%p] is tooltip, parent [%p]\n", (void*)this,
-+ gVisibleWaylandPopupWindows->data));
-+
- // Attach tooltip window to the latest popup window
- // to have both visible.
- nsWindow* window =
-@@ -1200,12 +1212,19 @@
- // nsWindow::Create()) or we're toplevel popup without parent.
- // In both cases just use parent which was passed to nsWindow::Create().
- if (!menuPopupFrame) {
-- return GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell)));
-+ LOG(("...[%p] menuPopupFrame = null, using given parent widget [%p]\n",
-+ (void*)this, parentWidget));
-+ return GTK_WIDGET(parentWidget);
- }
-
- nsWindow* parentWindow =
- static_cast<nsWindow*>(menuPopupFrame->GetParentMenuWidget());
-+ LOG(("...[%p] GetParentMenuWidget() = %p\n", (void*)this, parentWindow));
-+
- if (!parentWindow) {
-+ LOG(("...[%p] using active/visible popups as a parent [%p]\n",
-+ (void*)this, gVisibleWaylandPopupWindows->data));
-+
- // We're toplevel popup menu attached to another menu. Just use our
- // latest popup as a parent.
- parentWindow =
-@@ -1234,10 +1253,10 @@
- }
- }
-
-+ MOZ_ASSERT(parentWidget, "Missing parent widget for wayland popup!");
- if (parentWidget) {
-+ LOG(("...[%p] set parent widget [%p]\n", (void*)this, parentWidget));
- gtk_window_set_transient_for(GTK_WINDOW(mShell), parentWidget);
-- } else {
-- parentWidget = gtk_window_get_transient_for(GTK_WINDOW(mShell));
- }
- gVisibleWaylandPopupWindows =
- g_list_prepend(gVisibleWaylandPopupWindows, this);
-@@ -1248,9 +1267,11 @@
- static void NativeMoveResizeWaylandPopupCallback(
- GdkWindow* window, const GdkRectangle* flipped_rect,
- const GdkRectangle* final_rect, gboolean flipped_x, gboolean flipped_y,
-- void* unused) {
-- LOG(("%s flipped %d %d\n", __FUNCTION__, flipped_rect->x, flipped_rect->y));
-- LOG(("%s final %d %d\n", __FUNCTION__, final_rect->x, final_rect->y));
-+ void* aWindow) {
-+ LOG(("%s [%p] flipped %d %d\n", __FUNCTION__, aWindow, flipped_rect->x,
-+ flipped_rect->y));
-+ LOG(("%s [%p] final %d %d\n", __FUNCTION__, aWindow, final_rect->x,
-+ final_rect->y));
- }
- #endif
-
-@@ -1264,6 +1285,8 @@
- // Compositor may be confused by windows with width/height = 0
- // and positioning such windows leads to Bug 1555866.
- if (!AreBoundsSane()) {
-+ LOG(("nsWindow::NativeMoveResizeWaylandPopup [%p] Bounds are not sane\n",
-+ (void*)this));
- return;
- }
-
-@@ -1277,6 +1300,8 @@
- // - gdk_window_move_to_rect() is not available
- // - the widget doesn't have a valid GdkWindow
- if (!sGdkWindowMoveToRect || !gdkWindow) {
-+ LOG(("nsWindow::NativeMoveResizeWaylandPopup [%p] use gtk_window_move()\n",
-+ (void*)this));
- gtk_window_move(GTK_WINDOW(mShell), aPosition->x, aPosition->y);
- return;
- }
-@@ -1302,8 +1327,12 @@
- }
- LOG((" request result %d %d\n", rect.x, rect.y));
- #ifdef DEBUG
-- g_signal_connect(gdkWindow, "moved-to-rect",
-- G_CALLBACK(NativeMoveResizeWaylandPopupCallback), this);
-+ if (!g_signal_handler_find(
-+ gdkWindow, G_SIGNAL_MATCH_FUNC, 0, 0, nullptr,
-+ FuncToGpointer(NativeMoveResizeWaylandPopupCallback), this)) {
-+ g_signal_connect(gdkWindow, "moved-to-rect",
-+ G_CALLBACK(NativeMoveResizeWaylandPopupCallback), this);
-+ }
- #endif
-
- GdkGravity rectAnchor = GDK_GRAVITY_NORTH_WEST;
-@@ -3508,7 +3537,6 @@
- GtkWidget* parentMozContainer = nullptr;
- GtkContainer* parentGtkContainer = nullptr;
- GdkWindow* parentGdkWindow = nullptr;
-- GtkWindow* topLevelParent = nullptr;
- nsWindow* parentnsWindow = nullptr;
- GtkWidget* eventWidget = nullptr;
- bool drawToContainer = false;
-@@ -3534,7 +3562,8 @@
-
- // get the toplevel window just in case someone needs to use it
- // for setting transients or whatever.
-- topLevelParent = GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer));
-+ mToplevelParentWindow =
-+ GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer));
- }
-
- if (!mIsX11Display) {
-@@ -3542,7 +3571,7 @@
- // eWindowType_child is not supported on Wayland. Just switch to toplevel
- // as a workaround.
- mWindowType = eWindowType_toplevel;
-- } else if (mWindowType == eWindowType_popup && !topLevelParent) {
-+ } else if (mWindowType == eWindowType_popup && !mToplevelParentWindow) {
- // Workaround for Wayland where the popup windows always need to have
- // parent window. For example webrtc ui is a popup window without parent.
- mWindowType = eWindowType_toplevel;
-@@ -3677,7 +3706,7 @@
- gdk_get_program_class());
- gtk_window_set_type_hint(GTK_WINDOW(mShell),
- GDK_WINDOW_TYPE_HINT_DIALOG);
-- gtk_window_set_transient_for(GTK_WINDOW(mShell), topLevelParent);
-+ gtk_window_set_transient_for(GTK_WINDOW(mShell), mToplevelParentWindow);
- } else if (mWindowType == eWindowType_popup) {
- gtk_window_set_wmclass(GTK_WINDOW(mShell), "Popup",
- gdk_get_program_class());
-@@ -3730,10 +3759,11 @@
- }
- gtk_window_set_type_hint(GTK_WINDOW(mShell), gtkTypeHint);
-
-- if (topLevelParent) {
-+ if (mToplevelParentWindow) {
- LOG(("nsWindow::Create [%p] Set popup parent %p\n", (void*)this,
-- topLevelParent));
-- gtk_window_set_transient_for(GTK_WINDOW(mShell), topLevelParent);
-+ mToplevelParentWindow));
-+ gtk_window_set_transient_for(GTK_WINDOW(mShell),
-+ mToplevelParentWindow);
- }
-
- // We need realized mShell at NativeMove().
-@@ -4011,7 +4041,8 @@
- #endif
- }
-
-- LOG(("nsWindow [%p]\n", (void*)this));
-+ LOG(("nsWindow [%p] %s\n", (void*)this,
-+ mWindowType == eWindowType_toplevel ? "Toplevel" : "Popup"));
- if (mShell) {
- LOG(("\tmShell %p mContainer %p mGdkWindow %p 0x%lx\n", mShell, mContainer,
- mGdkWindow, mIsX11Display ? gdk_x11_window_get_xid(mGdkWindow) : 0));
-
diff --git a/mozilla-1567434-2.patch b/mozilla-1567434-2.patch
deleted file mode 100644
index 966118a..0000000
--- a/mozilla-1567434-2.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -1208,6 +1208,7 @@
- if (frame) {
- menuPopupFrame = do_QueryFrame(frame);
- }
-+
- // The popup is not fully created yet (we're called from
- // nsWindow::Create()) or we're toplevel popup without parent.
- // In both cases just use parent which was passed to nsWindow::Create().
-@@ -1217,10 +1218,22 @@
- return GTK_WIDGET(parentWidget);
- }
-
-+ LOG(("...[%p] is %s\n", (void*)this,
-+ menuPopupFrame->IsContextMenu() ? "context menu" : "popup"));
-+
- nsWindow* parentWindow =
- static_cast<nsWindow*>(menuPopupFrame->GetParentMenuWidget());
- LOG(("...[%p] GetParentMenuWidget() = %p\n", (void*)this, parentWindow));
-
-+ // If the popup is a regular menu but GetParentMenuWidget() returns
-+ // nullptr which means it's connected non-menu parent
-+ // (bookmark toolbar for instance).
-+ // In this case use a parent given at nsWindow::Create().
-+ if (!parentWindow && !menuPopupFrame->IsContextMenu()) {
-+ parentWindow =
-+ get_window_for_gtk_widget(GTK_WIDGET(mToplevelParentWindow));
-+ }
-+
- if (!parentWindow) {
- LOG(("...[%p] using active/visible popups as a parent [%p]\n",
- (void*)this, gVisibleWaylandPopupWindows->data));
-
diff --git a/mozilla-1573813.patch b/mozilla-1573813.patch
deleted file mode 100644
index e9fca07..0000000
--- a/mozilla-1573813.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -6577,11 +6577,22 @@
- }
-
- gint nsWindow::GdkScaleFactor() {
-+ // For popup windows with parent window we need to get scale factor of the
-+ // parent window. Otherwise the scale factor of the popup is not updated
-+ // during it's hidden.
-+ GdkWindow* scaledGdkWindow = mGdkWindow;
-+ if (mToplevelParentWindow) {
-+ scaledGdkWindow = gtk_widget_get_window(GTK_WIDGET(mToplevelParentWindow));
-+ // Fallback for windows which parent has been unrealized.
-+ if (!scaledGdkWindow) {
-+ scaledGdkWindow = mGdkWindow;
-+ }
-+ }
- // Available as of GTK 3.10+
- static auto sGdkWindowGetScaleFactorPtr =
- (gint(*)(GdkWindow*))dlsym(RTLD_DEFAULT, "gdk_window_get_scale_factor");
-- if (sGdkWindowGetScaleFactorPtr && mGdkWindow)
-- return (*sGdkWindowGetScaleFactorPtr)(mGdkWindow);
-+ if (sGdkWindowGetScaleFactorPtr && scaledGdkWindow)
-+ return (*sGdkWindowGetScaleFactorPtr)(scaledGdkWindow);
- return ScreenHelperGTK::GetGTKMonitorScaleFactor();
- }
-
-
diff --git a/mozilla-1574036.patch b/mozilla-1574036.patch
deleted file mode 100644
index c3ecdc7..0000000
--- a/mozilla-1574036.patch
+++ /dev/null
@@ -1,425 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
---- a/widget/gtk/WindowSurfaceWayland.h
-+++ b/widget/gtk/WindowSurfaceWayland.h
-@@ -177,12 +177,9 @@
-
- private:
- WindowBackBuffer* CreateWaylandBuffer(int aWidth, int aHeight);
-- WindowBackBuffer* GetWaylandBufferToDraw(int aWidth, int aHeight,
-- bool aFullScreenUpdate);
-+ WindowBackBuffer* GetWaylandBufferToDraw(bool aCanSwitchBuffer);
-
-- already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(int aWidth, int aHeight,
-- bool aClearBuffer,
-- bool aFullScreenUpdate);
-+ already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(bool aCanSwitchBuffer);
- void UnlockWaylandBuffer();
-
- already_AddRefed<gfx::DrawTarget> LockImageSurface(
-@@ -198,7 +195,10 @@
-
- // TODO: Do we need to hold a reference to nsWindow object?
- nsWindow* mWindow;
-- LayoutDeviceIntRect mLastScreenRect;
-+ // Buffer screen rects helps us understand if we operate on
-+ // the same window size as we're called on WindowSurfaceWayland::Lock().
-+ // mBufferScreenRect is window size when our wayland buffer was allocated.
-+ LayoutDeviceIntRect mBufferScreenRect;
- nsWaylandDisplay* mWaylandDisplay;
- WindowBackBuffer* mWaylandBuffer;
- LayoutDeviceIntRegion mWaylandBufferDamage;
-@@ -211,7 +211,8 @@
- AutoTArray<WindowImageSurface, 30> mDelayedImageCommits;
- bool mDrawToWaylandBufferDirectly;
- bool mPendingCommit;
-- bool mWaylandBufferFullScreenDamage;
-+ bool mWholeWindowBufferDamage;
-+ bool mBufferNeedsClear;
- bool mIsMainThread;
- bool mNeedScaleFactorUpdate;
-
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -499,7 +499,8 @@
- mDelayedCommitHandle(nullptr),
- mDrawToWaylandBufferDirectly(true),
- mPendingCommit(false),
-- mWaylandBufferFullScreenDamage(false),
-+ mWholeWindowBufferDamage(false),
-+ mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
- mNeedScaleFactorUpdate(true) {
- for (int i = 0; i < BACK_BUFFER_NUM; i++) mBackupBuffer[i] = nullptr;
-@@ -565,18 +566,20 @@
- }
-
- WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(
-- int aWidth, int aHeight, bool aFullScreenUpdate) {
-+ bool aCanSwitchBuffer) {
- LOGWAYLAND(("%s [%p] Requested buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- // There's no buffer created yet, create a new one.
- if (!mWaylandBuffer) {
-- MOZ_ASSERT(aFullScreenUpdate, "Created new buffer for partial drawing!");
-+ MOZ_ASSERT(aCanSwitchBuffer && mWholeWindowBufferDamage,
-+ "Created new buffer for partial drawing!");
- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-+ (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-
-- mWaylandBuffer = CreateWaylandBuffer(aWidth, aHeight);
-- mWaylandBufferFullScreenDamage = true;
-+ mWaylandBuffer =
-+ CreateWaylandBuffer(mBufferScreenRect.width, mBufferScreenRect.height);
- mNeedScaleFactorUpdate = true;
- return mWaylandBuffer;
- }
-@@ -593,29 +596,31 @@
- LOGWAYLAND(
- ("%s [%p] Use recent buffer.\n", __PRETTY_FUNCTION__, (void*)this));
-
-- if (mWaylandBuffer->IsMatchingSize(aWidth, aHeight)) {
-+ if (mWaylandBuffer->IsMatchingSize(mBufferScreenRect.width,
-+ mBufferScreenRect.height)) {
- LOGWAYLAND(("%s [%p] Size is ok, use the buffer [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, aWidth, aHeight));
-+ __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
- return mWaylandBuffer;
- }
-
-- if (!aFullScreenUpdate) {
-+ if (!aCanSwitchBuffer) {
- NS_WARNING("We can't resize Wayland buffer for non-fullscreen updates!");
- return nullptr;
- }
-
- LOGWAYLAND(("%s [%p] Reuse buffer with resize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, aWidth, aHeight));
-+ __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-
-- mWaylandBuffer->Resize(aWidth, aHeight);
-+ mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- // There's a chance that scale factor has been changed
- // when buffer size changed
-- mWaylandBufferFullScreenDamage = true;
- mNeedScaleFactorUpdate = true;
- return mWaylandBuffer;
- }
-
-- if (!aFullScreenUpdate) {
-+ if (!aCanSwitchBuffer) {
- return nullptr;
- }
-
-@@ -625,8 +630,10 @@
- availableBuffer++) {
- if (!mBackupBuffer[availableBuffer]) {
- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-- mBackupBuffer[availableBuffer] = CreateWaylandBuffer(aWidth, aHeight);
-+ (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-+ mBackupBuffer[availableBuffer] = CreateWaylandBuffer(
-+ mBufferScreenRect.width, mBufferScreenRect.height);
- break;
- }
-
-@@ -650,23 +657,23 @@
- __PRETTY_FUNCTION__, (void*)this, (void*)lastWaylandBuffer,
- (void*)mWaylandBuffer));
-
-- mWaylandBufferFullScreenDamage = true;
- mNeedScaleFactorUpdate = true;
-
-- bool bufferNeedsResize = !mWaylandBuffer->IsMatchingSize(aWidth, aHeight);
-+ bool bufferNeedsResize = !mWaylandBuffer->IsMatchingSize(
-+ mBufferScreenRect.width, mBufferScreenRect.height);
- if (bufferNeedsResize) {
- LOGWAYLAND(("%s [%p] Resize buffer to [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-- mWaylandBuffer->Resize(aWidth, aHeight);
-+ (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-+ mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- }
-
- return mWaylandBuffer;
- }
-
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::LockWaylandBuffer(
-- int aWidth, int aHeight, bool aClearBuffer, bool aFullScreenUpdate) {
-- WindowBackBuffer* buffer =
-- GetWaylandBufferToDraw(aWidth, aHeight, aFullScreenUpdate);
-+ bool aCanSwitchBuffer) {
-+ WindowBackBuffer* buffer = GetWaylandBufferToDraw(aCanSwitchBuffer);
-
- LOGWAYLAND(("%s [%p] Got buffer %p\n", __PRETTY_FUNCTION__, (void*)this,
- (void*)buffer));
-@@ -675,8 +682,9 @@
- return nullptr;
- }
-
-- if (aClearBuffer) {
-+ if (mBufferNeedsClear && mWholeWindowBufferDamage) {
- buffer->Clear();
-+ mBufferNeedsClear = false;
- }
-
- return buffer->Lock();
-@@ -744,7 +752,7 @@
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
-+ LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-
-@@ -753,54 +761,77 @@
- mWindow->IsWaylandPopup() &&
- (eTransparencyTransparent == mWindow->GetTransparencyMode());
-
-- mDrawToWaylandBufferDirectly =
-- isTransparentPopup ? IsPopupFullScreenUpdate(screenRect, aRegion)
-- : IsWindowFullScreenUpdate(screenRect, aRegion);
-+ // We have request to lock whole buffer/window.
-+ mWholeWindowBufferDamage =
-+ isTransparentPopup ? IsPopupFullScreenUpdate(lockedScreenRect, aRegion)
-+ : IsWindowFullScreenUpdate(lockedScreenRect, aRegion);
-
-- bool needsClear = mWindow->WaylandSurfaceNeedsClear() ||
-- (isTransparentPopup && mDrawToWaylandBufferDirectly);
-+ // Clear buffer when we (re)draw new transparent popup window,
-+ // otherwise leave it as-is, mBufferNeedsClear can be set from previous
-+ // (already pending) commits which are cached now.
-+ if (mWholeWindowBufferDamage) {
-+ mBufferNeedsClear =
-+ mWindow->WaylandSurfaceNeedsClear() || isTransparentPopup;
-+ }
-
- LOGWAYLAND(("%s [%p] lockSize [%d x %d] windowSize [%d x %d]\n",
- __PRETTY_FUNCTION__, (void*)this, lockSize.width, lockSize.height,
-- screenRect.width, screenRect.height));
-+ lockedScreenRect.width, lockedScreenRect.height));
- LOGWAYLAND((" nsWindow = %p\n", mWindow));
- LOGWAYLAND((" isPopup = %d\n", mWindow->IsWaylandPopup()));
- LOGWAYLAND((" isTransparentPopup = %d\n", isTransparentPopup));
- LOGWAYLAND((" IsPopupFullScreenUpdate = %d\n",
-- IsPopupFullScreenUpdate(screenRect, aRegion)));
-+ IsPopupFullScreenUpdate(lockedScreenRect, aRegion)));
- LOGWAYLAND((" IsWindowFullScreenUpdate = %d\n",
-- IsWindowFullScreenUpdate(screenRect, aRegion)));
-- LOGWAYLAND((" needsClear = %d\n", needsClear));
-- LOGWAYLAND(
-- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
-+ IsWindowFullScreenUpdate(lockedScreenRect, aRegion)));
-+ LOGWAYLAND((" mBufferNeedsClear = %d\n", mBufferNeedsClear));
-+ LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-+
-+#if DEBUG
-+ if (!(mBufferScreenRect == lockedScreenRect)) {
-+ LOGWAYLAND((" screen size changed\n"));
-+ }
-+#endif
-
-- // Allow full screen allocation and clear
-- // when window size changed.
-- bool bufferRedraw = !(screenRect == mLastScreenRect);
-- if (bufferRedraw) {
-- mDrawToWaylandBufferDirectly = true;
-- needsClear = true;
-+ if (!(mBufferScreenRect == lockedScreenRect)) {
-+ // Screen (window) size changed and we still have some painting pending
-+ // for the last window size. That can happen when window is resized.
-+ // We can't commit them any more as they're for former window size, so
-+ // scratch them.
-+ mDelayedImageCommits.Clear();
-+
-+ if (!mWholeWindowBufferDamage) {
-+ NS_WARNING("Partial screen update when window is resized!");
-+ // This should not happen. Screen size changed but we got only
-+ // partal screen update instead of whole screen. Discard this painting
-+ // as it produces artifacts.
-+ return nullptr;
-+ }
-+ mBufferScreenRect = lockedScreenRect;
- }
-
-- if (mDrawToWaylandBufferDirectly) {
-+ if (mWholeWindowBufferDamage) {
-+ // We can lock/commit entire buffer direcly.
-+ mDrawToWaylandBufferDirectly = true;
-+
- // If there's any pending image commit scratch them as we're going
- // to redraw the whole sceen anyway.
- mDelayedImageCommits.Clear();
-
-- RefPtr<gfx::DrawTarget> dt =
-- LockWaylandBuffer(screenRect.width, screenRect.height, needsClear,
-- /* aFullScreenUpdate */ true);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-+ /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
- if (dt) {
-- if (bufferRedraw) {
-- mLastScreenRect = screenRect;
-- }
- return dt.forget();
- }
-+ }
-
-- // We don't have any front buffer available. Try indirect drawing
-- // to mImageSurface which is mirrored to front buffer at commit.
-- mDrawToWaylandBufferDirectly = false;
-- }
-+ // We do indirect drawing due to:
-+ //
-+ // 1) We don't have any front buffer available. Try indirect drawing
-+ // to mImageSurface which is mirrored to front buffer at commit.
-+ // 2) Only part of the screen is locked. We can't lock entire screen for
-+ // such drawing as it produces visible artifacts.
-+ mDrawToWaylandBufferDirectly = false;
-
- LOGWAYLAND((" Indirect drawing.\n"));
- return LockImageSurface(lockSize);
-@@ -851,16 +882,14 @@
- LayoutDeviceIntRegion& aWaylandBufferDamage) {
- MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
-
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
-+#ifdef DEBUG
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
--
- gfx::Rect rect(bounds);
-- if (rect.IsEmpty()) {
-- return false;
-- }
-+ MOZ_ASSERT(!rect.IsEmpty(), "Empty drawing?");
-+#endif
-
- LOGWAYLAND(("%s [%p] screenSize [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, screenRect.width, screenRect.height));
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- RefPtr<gfx::SourceSurface> surf =
- gfx::Factory::CreateSourceSurfaceForCairoSurface(
-@@ -871,13 +900,8 @@
- return false;
- }
-
-- // Allow full screen allocation and clear
-- // when window size changed.
-- bool bufferRedraw = !(screenRect == mLastScreenRect);
-- RefPtr<gfx::DrawTarget> dt =
-- LockWaylandBuffer(screenRect.width, screenRect.height,
-- /* needs clear*/ bufferRedraw,
-- /* aFullScreenUpdate */ bufferRedraw);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-+ /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
- if (dt) {
- LOGWAYLAND(
- (" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-@@ -885,14 +909,11 @@
-
- // Draw any delayed image commits first
- DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-+ // Draw image from recent WindowSurfaceWayland::Lock().
- WindowImageSurface::Draw(surf, dt, aRegion);
- // Submit all drawing to final Wayland buffer upload
- aWaylandBufferDamage.OrWith(aRegion);
- UnlockWaylandBuffer();
--
-- if (bufferRedraw) {
-- mLastScreenRect = screenRect;
-- }
- } else {
- mDelayedImageCommits.AppendElement(WindowImageSurface(surf, aRegion));
- LOGWAYLAND((" Added WindowImageSurfaces, cached surfaces %ld\n",
-@@ -930,29 +951,25 @@
- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
- LOGWAYLAND(
- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
-- LOGWAYLAND((" mWaylandBufferFullScreenDamage = %d\n",
-- mWaylandBufferFullScreenDamage));
-+ LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
- LOGWAYLAND((" mDelayedCommitHandle = %p\n", mDelayedCommitHandle));
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-
- if (!mDrawToWaylandBufferDirectly) {
-+ MOZ_ASSERT(mDelayedImageCommits.Length(),
-+ "Indirect drawing without any image?");
-+
- // There's some cached drawings - try to flush them now.
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
-- bool bufferRedraw = !(screenRect == mLastScreenRect);
-- RefPtr<gfx::DrawTarget> dt =
-- LockWaylandBuffer(screenRect.width, screenRect.height,
-- /* needsClear */ bufferRedraw,
-- /* full screen update */ bufferRedraw);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-+ /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-+
- if (dt) {
- LOGWAYLAND(("%s [%p] flushed indirect drawing\n", __PRETTY_FUNCTION__,
- (void*)this));
- DrawDelayedImageCommits(dt, mWaylandBufferDamage);
- UnlockWaylandBuffer();
- mDrawToWaylandBufferDirectly = true;
-- if (bufferRedraw) {
-- mLastScreenRect = screenRect;
-- }
- }
- }
-
-@@ -1000,10 +1017,10 @@
- mLastCommittedSurface = nullptr;
- }
-
-- if (mWaylandBufferFullScreenDamage) {
-- LayoutDeviceIntRect rect = mWindow->GetBounds();
-- wl_surface_damage(waylandSurface, 0, 0, rect.width, rect.height);
-- mWaylandBufferFullScreenDamage = false;
-+ if (mWholeWindowBufferDamage) {
-+ wl_surface_damage(waylandSurface, 0, 0, mBufferScreenRect.width,
-+ mBufferScreenRect.height);
-+ mWholeWindowBufferDamage = false;
- mNeedScaleFactorUpdate = true;
- } else {
- gint scaleFactor = mWindow->GdkScaleFactor();
-@@ -1043,24 +1060,24 @@
-
- #ifdef DEBUG
- {
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
- gfx::IntRect bounds = aInvalidRegion.GetBounds().ToUnknownRect();
- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-
- LOGWAYLAND(("%s [%p] lockSize [%d x %d] screenSize [%d x %d]\n",
- __PRETTY_FUNCTION__, (void*)this, lockSize.width,
-- lockSize.height, screenRect.width, screenRect.height));
-+ lockSize.height, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
-- LOGWAYLAND((" mWaylandBufferFullScreenDamage = %d\n",
-- mWaylandBufferFullScreenDamage));
-+ LOGWAYLAND(
-+ (" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
- }
- #endif
-
- if (mDrawToWaylandBufferDirectly) {
- MOZ_ASSERT(mWaylandBuffer->IsLocked());
- // If we're not at fullscreen damage add drawing area from aInvalidRegion
-- if (!mWaylandBufferFullScreenDamage) {
-+ if (!mWholeWindowBufferDamage) {
- mWaylandBufferDamage.OrWith(aInvalidRegion);
- }
- UnlockWaylandBuffer();
-
diff --git a/mozilla-1576268.patch b/mozilla-1576268.patch
deleted file mode 100644
index 85fd1a8..0000000
--- a/mozilla-1576268.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-diff --git a/widget/gtk/nsClipboardWayland.cpp b/widget/gtk/nsClipboardWayland.cpp
---- a/widget/gtk/nsClipboardWayland.cpp
-+++ b/widget/gtk/nsClipboardWayland.cpp
-@@ -195,6 +195,12 @@
- uint32_t all_actions = WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY |
- WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE;
-
-+ /* Default to move D&D action (Bug 1576268).
-+ */
-+ if (dnd_actions == 0) {
-+ all_actions = WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE;
-+ }
-+
- wl_data_offer_set_actions(mWaylandDataOffer, all_actions, dnd_actions);
-
- /* Workaround Wayland D&D architecture here. To get the data_device_drop()
-
diff --git a/mozilla-1577024.patch b/mozilla-1577024.patch
deleted file mode 100644
index b81f103..0000000
--- a/mozilla-1577024.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1577024 firefox-69.0/widget/gtk/nsWaylandDisplay.cpp
---- firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1577024 2019-09-17 21:09:15.817764591 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.cpp 2019-09-17 21:09:15.822764568 +0200
-@@ -13,10 +13,15 @@ namespace widget {
- #define GBMLIB_NAME "libgbm.so.1"
- #define DRMLIB_NAME "libdrm.so.2"
-
-+#define DMABUF_PREF "widget.wayland_dmabuf_backend.enabled"
-+// See WindowSurfaceWayland::RenderingCacheMode for details.
-+#define CACHE_MODE_PREF "widget.wayland_cache_mode"
-+
- bool nsWaylandDisplay::mIsDMABufEnabled = false;
- // -1 mean the pref was not loaded yet
- int nsWaylandDisplay::mIsDMABufPrefState = -1;
- bool nsWaylandDisplay::mIsDMABufConfigured = false;
-+int nsWaylandDisplay::mRenderingCacheModePref = -1;
-
- wl_display* WaylandDisplayGetWLDisplay(GdkDisplay* aGdkDisplay) {
- if (!aGdkDisplay) {
-@@ -373,14 +378,15 @@ nsWaylandDisplay::nsWaylandDisplay(wl_di
- wl_registry_add_listener(mRegistry, ®istry_listener, this);
-
- if (NS_IsMainThread()) {
-- // We can't load the preference from compositor/render thread,
-- // only from main one. So we can't call it directly from
-- // nsWaylandDisplay::IsDMABufEnabled() as it can be called from various
-- // threads.
-+ // We can't load the preference from compositor/render thread
-+ // so load all Wayland prefs here.
- if (mIsDMABufPrefState == -1) {
-- mIsDMABufPrefState =
-- Preferences::GetBool("widget.wayland_dmabuf_backend.enabled", false);
-+ mIsDMABufPrefState = Preferences::GetBool(DMABUF_PREF, false);
-+ }
-+ if (mRenderingCacheModePref == -1) {
-+ mRenderingCacheModePref = Preferences::GetInt(CACHE_MODE_PREF, 0);
- }
-+
- // Use default event queue in main thread operated by Gtk+.
- mEventQueue = nullptr;
- wl_display_roundtrip(mDisplay);
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1577024 firefox-69.0/widget/gtk/nsWaylandDisplay.h
---- firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1577024 2019-09-17 21:09:15.818764586 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.h 2019-09-17 21:09:15.822764568 +0200
-@@ -83,6 +83,9 @@ class nsWaylandDisplay {
- uint32_t mModifierLo);
- static bool IsDMABufEnabled();
-
-+ // See WindowSurfaceWayland::CacheMode for details.
-+ int GetRenderingCacheModePref() { return mRenderingCacheModePref; };
-+
- private:
- bool ConfigureGbm();
-
-@@ -108,6 +111,7 @@ class nsWaylandDisplay {
- static bool mIsDMABufEnabled;
- static int mIsDMABufPrefState;
- static bool mIsDMABufConfigured;
-+ static int mRenderingCacheModePref;
- };
-
- void WaylandDispatchDisplays();
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1577024 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1577024 2019-09-17 21:09:15.820764577 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-18 08:34:50.568111279 +0200
-@@ -192,7 +192,7 @@ It owns wl_buffer object, owns WaylandDM
- (which provides the DMA Buffer) and ties them together.
-
- WindowBackBufferDMABuf backend is used only when WaylandDMABufSurface is
--available and gfx.wayland_dmabuf_backend.enabled preference is set.
-+available and widget.wayland_dmabuf_backend.enabled preference is set.
-
- */
-
-@@ -519,9 +519,11 @@ WindowSurfaceWayland::WindowSurfaceWayla
- mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
- mNeedScaleFactorUpdate(true) {
-- for (int i = 0; i < BACK_BUFFER_NUM; i++) mBackupBuffer[i] = nullptr;
-- mRenderingCacheMode = CACHE_ALL;
--
-+ for (int i = 0; i < BACK_BUFFER_NUM; i++) {
-+ mBackupBuffer[i] = nullptr;
-+ }
-+ mRenderingCacheMode = static_cast<RenderingCacheMode>(
-+ mWaylandDisplay->GetRenderingCacheModePref());
- }
-
- WindowSurfaceWayland::~WindowSurfaceWayland() {
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1577024 firefox-69.0/widget/gtk/WindowSurfaceWayland.h
diff --git a/mozilla-1579794-1.patch b/mozilla-1579794-1.patch
deleted file mode 100644
index 60c8cab..0000000
--- a/mozilla-1579794-1.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
---- a/widget/gtk/WindowSurfaceWayland.h
-+++ b/widget/gtk/WindowSurfaceWayland.h
-@@ -154,11 +154,12 @@
- void Draw(gfx::DrawTarget* aDest,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
-
-- WindowImageSurface(gfx::SourceSurface* aSurface,
-+ WindowImageSurface(gfxImageSurface* aImageSurface,
- const LayoutDeviceIntRegion& aUpdateRegion);
-
- private:
- RefPtr<gfx::SourceSurface> mSurface;
-+ RefPtr<gfxImageSurface> mImageSurface;
- const LayoutDeviceIntRegion mUpdateRegion;
- };
-
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -890,8 +890,12 @@
- }
-
- WindowImageSurface::WindowImageSurface(
-- gfx::SourceSurface* aSurface, const LayoutDeviceIntRegion& aUpdateRegion)
-- : mSurface(aSurface), mUpdateRegion(aUpdateRegion){};
-+ gfxImageSurface* aImageSurface, const LayoutDeviceIntRegion& aUpdateRegion)
-+ : mImageSurface(aImageSurface), mUpdateRegion(aUpdateRegion) {
-+ mSurface = gfx::Factory::CreateSourceSurfaceForCairoSurface(
-+ mImageSurface->CairoSurface(), mImageSurface->GetSize(),
-+ mImageSurface->Format());
-+}
-
- void WindowSurfaceWayland::DrawDelayedImageCommits(
- gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-@@ -915,36 +919,24 @@
- LOGWAYLAND(("%s [%p] screenSize [%d x %d]\n", __PRETTY_FUNCTION__,
- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
-- RefPtr<gfx::SourceSurface> surf =
-- gfx::Factory::CreateSourceSurfaceForCairoSurface(
-- mImageSurface->CairoSurface(), mImageSurface->GetSize(),
-- mImageSurface->Format());
-- if (!surf) {
-- NS_WARNING("Failed to create source cairo surface!");
-- return false;
-- }
-+ mDelayedImageCommits.AppendElement(
-+ WindowImageSurface(mImageSurface, aRegion));
-+ // mImageSurface is owned by mDelayedImageCommits
-+ mImageSurface = nullptr;
-
- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-- if (dt) {
-- LOGWAYLAND(
-- (" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-- long(mDelayedImageCommits.Length() + 1)));
--
-- // Draw any delayed image commits first
-- DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-- // Draw image from recent WindowSurfaceWayland::Lock().
-- WindowImageSurface::Draw(surf, dt, aRegion);
-- // Submit all drawing to final Wayland buffer upload
-- aWaylandBufferDamage.OrWith(aRegion);
-- UnlockWaylandBuffer();
-- } else {
-- mDelayedImageCommits.AppendElement(WindowImageSurface(surf, aRegion));
-- LOGWAYLAND((" Added WindowImageSurfaces, cached surfaces %ld\n",
-- long(mDelayedImageCommits.Length())));
-+ if (!dt) {
- return false;
- }
-
-+ LOGWAYLAND((" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-+ long(mDelayedImageCommits.Length() + 1)));
-+
-+ // Draw any delayed image commits first
-+ DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-+ UnlockWaylandBuffer();
-+
- return true;
- }
-
-@@ -980,23 +972,6 @@
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-
-- if (!mDrawToWaylandBufferDirectly) {
-- MOZ_ASSERT(mDelayedImageCommits.Length(),
-- "Indirect drawing without any image?");
--
-- // There's some cached drawings - try to flush them now.
-- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
--
-- if (dt) {
-- LOGWAYLAND(("%s [%p] flushed indirect drawing\n", __PRETTY_FUNCTION__,
-- (void*)this));
-- DrawDelayedImageCommits(dt, mWaylandBufferDamage);
-- UnlockWaylandBuffer();
-- mDrawToWaylandBufferDirectly = true;
-- }
-- }
--
- wl_surface* waylandSurface = mWindow->GetWaylandSurface();
- if (!waylandSurface) {
- LOGWAYLAND(("%s [%p] mWindow->GetWaylandSurface() failed, delay commit.\n",
-@@ -1105,6 +1080,7 @@
- mWaylandBufferDamage.OrWith(aInvalidRegion);
- }
- UnlockWaylandBuffer();
-+ mPendingCommit = true;
- } else {
- MOZ_ASSERT(!mWaylandBuffer->IsLocked(),
- "Drawing to already locked buffer?");
-@@ -1112,12 +1088,13 @@
- mWaylandBufferDamage)) {
- // Our cached drawing is flushed, we can draw fullscreen again.
- mDrawToWaylandBufferDirectly = true;
-+ mPendingCommit = true;
- }
- }
-
-- // We're ready to commit.
-- mPendingCommit = true;
-- CommitWaylandBuffer();
-+ if (mPendingCommit) {
-+ CommitWaylandBuffer();
-+ }
- }
-
- void WindowSurfaceWayland::FrameCallbackHandler() {
-
diff --git a/mozilla-1579794-2.patch b/mozilla-1579794-2.patch
deleted file mode 100644
index a8c249b..0000000
--- a/mozilla-1579794-2.patch
+++ /dev/null
@@ -1,166 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
---- a/widget/gtk/WindowSurfaceWayland.h
-+++ b/widget/gtk/WindowSurfaceWayland.h
-@@ -204,7 +204,6 @@
- const LayoutDeviceIntRegion& aRegion,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
- void CommitWaylandBuffer();
-- void CalcRectScale(LayoutDeviceIntRect& aRect, int scale);
-
- void DrawDelayedImageCommits(gfx::DrawTarget* aDrawTarget,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -951,16 +951,6 @@
- }
- }
-
--void WindowSurfaceWayland::CalcRectScale(LayoutDeviceIntRect& aRect,
-- int aScale) {
-- aRect.x = aRect.x / aScale;
-- aRect.y = aRect.y / aScale;
--
-- // We don't need exact damage size - just safely cover the round errors.
-- aRect.width = (aRect.width / aScale) + 2;
-- aRect.height = (aRect.height / aScale) + 2;
--}
--
- void WindowSurfaceWayland::CommitWaylandBuffer() {
- MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
-
-@@ -1022,16 +1012,10 @@
- mWholeWindowBufferDamage = false;
- mNeedScaleFactorUpdate = true;
- } else {
-- gint scaleFactor = mWindow->GdkScaleFactor();
- for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
- iter.Next()) {
- mozilla::LayoutDeviceIntRect r = iter.Get();
-- // We need to remove the scale factor because the wl_surface_damage
-- // also multiplies by current scale factor.
-- if (scaleFactor > 1) {
-- CalcRectScale(r, scaleFactor);
-- }
-- wl_surface_damage(waylandSurface, r.x, r.y, r.width, r.height);
-+ wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
- }
- }
-
-diff --git a/widget/gtk/mozcontainer.cpp b/widget/gtk/mozcontainer.cpp
---- a/widget/gtk/mozcontainer.cpp
-+++ b/widget/gtk/mozcontainer.cpp
-@@ -578,16 +578,12 @@
- return nullptr;
- }
- GdkDisplay* display = gtk_widget_get_display(GTK_WIDGET(container));
-+ nsWaylandDisplay* waylandDisplay = WaylandDisplayGet(display);
-
- // Available as of GTK 3.8+
-- static auto sGdkWaylandDisplayGetWlCompositor =
-- (wl_compositor * (*)(GdkDisplay*))
-- dlsym(RTLD_DEFAULT, "gdk_wayland_display_get_wl_compositor");
-- struct wl_compositor* compositor =
-- sGdkWaylandDisplayGetWlCompositor(display);
-+ struct wl_compositor* compositor = waylandDisplay->GetCompositor();
- container->surface = wl_compositor_create_surface(compositor);
-
-- nsWaylandDisplay* waylandDisplay = WaylandDisplayGet(display);
- container->subsurface = wl_subcompositor_get_subsurface(
- waylandDisplay->GetSubcompositor(), container->surface,
- moz_container_get_gtk_container_surface(container));
-diff --git a/widget/gtk/mozwayland/mozwayland.h b/widget/gtk/mozwayland/mozwayland.h
---- a/widget/gtk/mozwayland/mozwayland.h
-+++ b/widget/gtk/mozwayland/mozwayland.h
-@@ -108,6 +108,17 @@
- }
- #endif
-
-+#ifndef WL_SURFACE_DAMAGE_BUFFER
-+# define WL_SURFACE_DAMAGE_BUFFER 9
-+
-+static inline void wl_surface_damage_buffer(struct wl_surface* wl_surface,
-+ int32_t x, int32_t y, int32_t width,
-+ int32_t height) {
-+ wl_proxy_marshal((struct wl_proxy*)wl_surface, WL_SURFACE_DAMAGE_BUFFER, x, y,
-+ width, height);
-+}
-+#endif
-+
- #ifdef __cplusplus
- }
- #endif
-diff --git a/widget/gtk/mozwayland/mozwayland.c b/widget/gtk/mozwayland/mozwayland.c
---- a/widget/gtk/mozwayland/mozwayland.c
-+++ b/widget/gtk/mozwayland/mozwayland.c
-@@ -30,6 +30,7 @@
- const struct wl_interface wl_seat_interface;
- const struct wl_interface wl_surface_interface;
- const struct wl_interface wl_subsurface_interface;
-+const struct wl_interface wl_compositor_interface;
- const struct wl_interface wl_subcompositor_interface;
- #pragma GCC visibility pop
-
-diff --git a/widget/gtk/nsWaylandDisplay.h b/widget/gtk/nsWaylandDisplay.h
---- a/widget/gtk/nsWaylandDisplay.h
-+++ b/widget/gtk/nsWaylandDisplay.h
-@@ -45,6 +45,7 @@
- MessageLoop* GetDispatcherThreadLoop() { return mDispatcherThreadLoop; }
- wl_display* GetDisplay() { return mDisplay; };
- wl_event_queue* GetEventQueue() { return mEventQueue; };
-+ wl_compositor* GetCompositor(void) { return mCompositor; };
- wl_subcompositor* GetSubcompositor(void) { return mSubcompositor; };
- wl_data_device_manager* GetDataDeviceManager(void) {
- return mDataDeviceManager;
-@@ -56,6 +57,7 @@
- };
-
- void SetShm(wl_shm* aShm);
-+ void SetCompositor(wl_compositor* aCompositor);
- void SetSubcompositor(wl_subcompositor* aSubcompositor);
- void SetDataDeviceManager(wl_data_device_manager* aDataDeviceManager);
- void SetSeat(wl_seat* aSeat);
-@@ -88,6 +90,7 @@
- wl_display* mDisplay;
- wl_event_queue* mEventQueue;
- wl_data_device_manager* mDataDeviceManager;
-+ wl_compositor* mCompositor;
- wl_subcompositor* mSubcompositor;
- wl_seat* mSeat;
- wl_shm* mShm;
-diff --git a/widget/gtk/nsWaylandDisplay.cpp b/widget/gtk/nsWaylandDisplay.cpp
---- a/widget/gtk/nsWaylandDisplay.cpp
-+++ b/widget/gtk/nsWaylandDisplay.cpp
-@@ -116,6 +116,10 @@
-
- void nsWaylandDisplay::SetShm(wl_shm* aShm) { mShm = aShm; }
-
-+void nsWaylandDisplay::SetCompositor(wl_compositor* aCompositor) {
-+ mCompositor = aCompositor;
-+}
-+
- void nsWaylandDisplay::SetSubcompositor(wl_subcompositor* aSubcompositor) {
- mSubcompositor = aSubcompositor;
- }
-@@ -223,6 +227,12 @@
- wl_proxy_set_queue((struct wl_proxy*)primary_selection_device_manager,
- display->GetEventQueue());
- display->SetPrimarySelectionDeviceManager(primary_selection_device_manager);
-+ } else if (strcmp(interface, "wl_compositor") == 0) {
-+ // Requested wl_compositor version 4 as we need wl_surface_damage_buffer().
-+ auto compositor = static_cast<wl_compositor*>(
-+ wl_registry_bind(registry, id, &wl_compositor_interface, 4));
-+ wl_proxy_set_queue((struct wl_proxy*)compositor, display->GetEventQueue());
-+ display->SetCompositor(compositor);
- } else if (strcmp(interface, "wl_subcompositor") == 0) {
- auto subcompositor = static_cast<wl_subcompositor*>(
- wl_registry_bind(registry, id, &wl_subcompositor_interface, 1));
-@@ -306,6 +316,7 @@
- mDisplay(aDisplay),
- mEventQueue(nullptr),
- mDataDeviceManager(nullptr),
-+ mCompositor(nullptr),
- mSubcompositor(nullptr),
- mSeat(nullptr),
- mShm(nullptr),
-
diff --git a/mozilla-1579823.patch b/mozilla-1579823.patch
deleted file mode 100644
index 9e00d4f..0000000
--- a/mozilla-1579823.patch
+++ /dev/null
@@ -1,306 +0,0 @@
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1579823 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1579823 2019-09-12 07:53:06.119602913 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-12 07:54:47.410105270 +0200
-@@ -326,13 +326,13 @@ void WindowBackBufferShm::Create(int aWi
- mHeight = aHeight;
-
- LOGWAYLAND((
-- "%s [%p] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__, (void*)this,
-+ "WindowBackBufferShm::Create [%p] wl_buffer %p ID %d\n", (void*)this,
- (void*)mWaylandBuffer,
- mWaylandBuffer ? wl_proxy_get_id((struct wl_proxy*)mWaylandBuffer) : -1));
- }
-
- void WindowBackBufferShm::Release() {
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(("WindowBackBufferShm::Release [%p]\n", (void*)this));
-
- wl_buffer_destroy(mWaylandBuffer);
- mWidth = mHeight = 0;
-@@ -358,8 +358,8 @@ WindowBackBufferShm::~WindowBackBufferSh
- bool WindowBackBufferShm::Resize(int aWidth, int aHeight) {
- if (aWidth == mWidth && aHeight == mHeight) return true;
-
-- LOGWAYLAND(
-- ("%s [%p] %d %d\n", __PRETTY_FUNCTION__, (void*)this, aWidth, aHeight));
-+ LOGWAYLAND(("WindowBackBufferShm::Resize [%p] %d %d\n", (void*)this, aWidth,
-+ aHeight));
-
- Release();
- Create(aWidth, aHeight);
-@@ -369,7 +369,7 @@ bool WindowBackBufferShm::Resize(int aWi
-
- void WindowBackBuffer::Attach(wl_surface* aSurface) {
- LOGWAYLAND(
-- ("%s [%p] wl_surface %p ID %d wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
-+ ("WindowBackBuffer::Attach [%p] wl_surface %p ID %d wl_buffer %p ID %d\n",
- (void*)this, (void*)aSurface,
- aSurface ? wl_proxy_get_id((struct wl_proxy*)aSurface) : -1,
- (void*)GetWlBuffer(),
-@@ -382,8 +382,8 @@ void WindowBackBuffer::Attach(wl_surface
- }
-
- void WindowBackBufferShm::Detach(wl_buffer* aBuffer) {
-- LOGWAYLAND(("%s [%p] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__, (void*)this,
-- (void*)aBuffer,
-+ LOGWAYLAND(("WindowBackBufferShm::Detach [%p] wl_buffer %p ID %d\n",
-+ (void*)this, (void*)aBuffer,
- aBuffer ? wl_proxy_get_id((struct wl_proxy*)aBuffer) : -1));
-
- mAttached = false;
-@@ -404,7 +404,7 @@ bool WindowBackBufferShm::SetImageDataFr
-
- already_AddRefed<gfx::DrawTarget> WindowBackBufferShm::Lock() {
- LOGWAYLAND((
-- "%s [%p] [%d x %d] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
-+ "WindowBackBufferShm::Lock [%p] [%d x %d] wl_buffer %p ID %d\n",
- (void*)this, mWidth, mHeight, (void*)mWaylandBuffer,
- mWaylandBuffer ? wl_proxy_get_id((struct wl_proxy*)mWaylandBuffer) : -1));
-
-@@ -419,16 +419,17 @@ WindowBackBufferDMABuf::WindowBackBuffer
- nsWaylandDisplay* aWaylandDisplay, int aWidth, int aHeight)
- : WindowBackBuffer(aWaylandDisplay) {
- mDMAbufSurface.Create(aWidth, aHeight);
--
-- LOGWAYLAND(("%s [%p] Created DMABuf buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-+ LOGWAYLAND(
-+ ("WindowBackBufferDMABuf::WindowBackBufferDMABuf [%p] Created DMABuf "
-+ "buffer [%d x %d]\n",
-+ (void*)this, aWidth, aHeight));
- }
-
- WindowBackBufferDMABuf::~WindowBackBufferDMABuf() { mDMAbufSurface.Release(); }
-
- already_AddRefed<gfx::DrawTarget> WindowBackBufferDMABuf::Lock() {
- LOGWAYLAND(
-- ("%s [%p] [%d x %d] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
-+ ("WindowBackBufferDMABuf::Lock [%p] [%d x %d] wl_buffer %p ID %d\n",
- (void*)this, GetWidth(), GetHeight(), (void*)GetWlBuffer(),
- GetWlBuffer() ? wl_proxy_get_id((struct wl_proxy*)GetWlBuffer()) : -1));
-
-@@ -534,7 +535,8 @@ WindowSurfaceWayland::~WindowSurfaceWayl
- bool WindowSurfaceWayland::UseDMABufBackend() {
- if (!mUseDMABufInitialized) {
- mUseDMABuf = nsWaylandDisplay::IsDMABufEnabled();
-- LOGWAYLAND(("%s DMABuf state %d\n", __PRETTY_FUNCTION__, mUseDMABuf));
-+ LOGWAYLAND(("WindowSurfaceWayland::UseDMABufBackend DMABuf state %d\n",
-+ mUseDMABuf));
- mUseDMABufInitialized = true;
- }
- return mUseDMABuf;
-@@ -567,15 +569,16 @@ WindowBackBuffer* WindowSurfaceWayland::
-
- WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(
- bool aCanSwitchBuffer) {
-- LOGWAYLAND(("%s [%p] Requested buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::GetWaylandBufferToDraw [%p] Requested buffer [%d "
-+ "x %d]\n",
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- // There's no buffer created yet, create a new one.
- if (!mWaylandBuffer) {
- MOZ_ASSERT(aCanSwitchBuffer && mWholeWindowBufferDamage,
- "Created new buffer for partial drawing!");
-- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width,
-+ LOGWAYLAND((" Created new buffer [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
-
- mWaylandBuffer =
-@@ -586,21 +589,19 @@ WindowBackBuffer* WindowSurfaceWayland::
-
- #ifdef DEBUG
- if (mWaylandBuffer->IsAttached()) {
-- LOGWAYLAND(("%s [%p] Buffer %p is attached, need to find a new one.\n",
-- __PRETTY_FUNCTION__, (void*)this, mWaylandBuffer));
-+ LOGWAYLAND((" Buffer %p is attached, need to find a new one.\n",
-+ mWaylandBuffer));
- }
- #endif
-
- // Reuse existing buffer
- if (!mWaylandBuffer->IsAttached()) {
-- LOGWAYLAND(
-- ("%s [%p] Use recent buffer.\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND((" Use recent buffer.\n"));
-
- if (mWaylandBuffer->IsMatchingSize(mBufferScreenRect.width,
- mBufferScreenRect.height)) {
-- LOGWAYLAND(("%s [%p] Size is ok, use the buffer [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ LOGWAYLAND((" Size is ok, use the buffer [%d x %d]\n",
-+ mBufferScreenRect.width, mBufferScreenRect.height));
- return mWaylandBuffer;
- }
-
-@@ -609,9 +610,8 @@ WindowBackBuffer* WindowSurfaceWayland::
- return nullptr;
- }
-
-- LOGWAYLAND(("%s [%p] Reuse buffer with resize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ LOGWAYLAND((" Reuse buffer with resize [%d x %d]\n",
-+ mBufferScreenRect.width, mBufferScreenRect.height));
-
- mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- // There's a chance that scale factor has been changed
-@@ -629,8 +629,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- for (availableBuffer = 0; availableBuffer < BACK_BUFFER_NUM;
- availableBuffer++) {
- if (!mBackupBuffer[availableBuffer]) {
-- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width,
-+ LOGWAYLAND((" Created new buffer [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
- mBackupBuffer[availableBuffer] = CreateWaylandBuffer(
- mBufferScreenRect.width, mBufferScreenRect.height);
-@@ -643,8 +642,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- }
-
- if (MOZ_UNLIKELY(availableBuffer == BACK_BUFFER_NUM)) {
-- LOGWAYLAND(("%s [%p] No drawing buffer available!\n", __PRETTY_FUNCTION__,
-- (void*)this));
-+ LOGWAYLAND((" No drawing buffer available!\n"));
- NS_WARNING("No drawing buffer available");
- return nullptr;
- }
-@@ -653,17 +651,15 @@ WindowBackBuffer* WindowSurfaceWayland::
- mWaylandBuffer = mBackupBuffer[availableBuffer];
- mBackupBuffer[availableBuffer] = lastWaylandBuffer;
-
-- LOGWAYLAND(("%s [%p] Buffer flip new back %p new front %p \n",
-- __PRETTY_FUNCTION__, (void*)this, (void*)lastWaylandBuffer,
-- (void*)mWaylandBuffer));
-+ LOGWAYLAND((" Buffer flip new back %p new front %p \n",
-+ (void*)lastWaylandBuffer, (void*)mWaylandBuffer));
-
- mNeedScaleFactorUpdate = true;
-
- bool bufferNeedsResize = !mWaylandBuffer->IsMatchingSize(
- mBufferScreenRect.width, mBufferScreenRect.height);
- if (bufferNeedsResize) {
-- LOGWAYLAND(("%s [%p] Resize buffer to [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width,
-+ LOGWAYLAND((" Resize buffer to [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
- mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- }
-@@ -675,8 +671,8 @@ already_AddRefed<gfx::DrawTarget> Window
- bool aCanSwitchBuffer) {
- WindowBackBuffer* buffer = GetWaylandBufferToDraw(aCanSwitchBuffer);
-
-- LOGWAYLAND(("%s [%p] Got buffer %p\n", __PRETTY_FUNCTION__, (void*)this,
-- (void*)buffer));
-+ LOGWAYLAND(("WindowSurfaceWayland::LockWaylandBuffer [%p] Got buffer %p\n",
-+ (void*)this, (void*)buffer));
-
- if (!buffer) {
- return nullptr;
-@@ -691,7 +687,7 @@ already_AddRefed<gfx::DrawTarget> Window
- }
-
- void WindowSurfaceWayland::UnlockWaylandBuffer() {
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(("WindowSurfaceWayland::UnlockWaylandBuffer [%p]\n", (void*)this));
- mWaylandBuffer->Unlock();
- }
-
-@@ -774,9 +770,11 @@ already_AddRefed<gfx::DrawTarget> Window
- mWindow->WaylandSurfaceNeedsClear() || isTransparentPopup;
- }
-
-- LOGWAYLAND(("%s [%p] lockSize [%d x %d] windowSize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, lockSize.width, lockSize.height,
-- lockedScreenRect.width, lockedScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::Lock [%p] lockSize [%d x %d] windowSize [%d x "
-+ "%d]\n",
-+ (void*)this, lockSize.width, lockSize.height, lockedScreenRect.width,
-+ lockedScreenRect.height));
- LOGWAYLAND((" nsWindow = %p\n", mWindow));
- LOGWAYLAND((" isPopup = %d\n", mWindow->IsWaylandPopup()));
- LOGWAYLAND((" isTransparentPopup = %d\n", isTransparentPopup));
-@@ -892,8 +890,10 @@ bool WindowSurfaceWayland::CommitImageSu
- MOZ_ASSERT(!rect.IsEmpty(), "Empty drawing?");
- #endif
-
-- LOGWAYLAND(("%s [%p] screenSize [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::CommitImageSurfaceToWaylandBuffer [%p] "
-+ "screenSize [%d x %d]\n",
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- mDelayedImageCommits.AppendElement(
- WindowImageSurface(mImageSurface, aRegion));
-@@ -930,7 +930,7 @@ static void WaylandBufferDelayCommitHand
- void WindowSurfaceWayland::CommitWaylandBuffer() {
- MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
-
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(("WindowSurfaceWayland::CommitWaylandBuffer [%p]\n", (void*)this));
- LOGWAYLAND(
- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-@@ -940,8 +940,8 @@ void WindowSurfaceWayland::CommitWayland
-
- wl_surface* waylandSurface = mWindow->GetWaylandSurface();
- if (!waylandSurface) {
-- LOGWAYLAND(("%s [%p] mWindow->GetWaylandSurface() failed, delay commit.\n",
-- __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND((" [%p] mWindow->GetWaylandSurface() failed, delay commit.\n",
-+ (void*)this));
-
- // Target window is not created yet - delay the commit. This can happen only
- // when the window is newly created and there's no active
-@@ -969,8 +969,7 @@ void WindowSurfaceWayland::CommitWayland
- // We have an active frame callback request so handle it.
- if (mFrameCallback) {
- if (waylandSurface == mLastCommittedSurface) {
-- LOGWAYLAND(("%s [%p] wait for frame callback.\n", __PRETTY_FUNCTION__,
-- (void*)this));
-+ LOGWAYLAND((" [%p] wait for frame callback.\n", (void*)this));
- // We have an active frame callback pending from our recent surface.
- // It means we should defer the commit to FrameCallbackHandler().
- return;
-@@ -1022,10 +1021,11 @@ void WindowSurfaceWayland::Commit(const
- gfx::IntRect bounds = aInvalidRegion.GetBounds().ToUnknownRect();
- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-
-- LOGWAYLAND(("%s [%p] lockSize [%d x %d] screenSize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, lockSize.width,
-- lockSize.height, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::Commit [%p] lockSize [%d x %d] screenSize [%d "
-+ "x %d]\n",
-+ (void*)this, lockSize.width, lockSize.height, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
- LOGWAYLAND(
-@@ -1064,7 +1064,8 @@ void WindowSurfaceWayland::FrameCallback
- MOZ_ASSERT(mLastCommittedSurface != nullptr,
- "FrameCallbackHandler() called without valid wl_surface!");
-
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::FrameCallbackHandler [%p]\n", (void*)this));
-
- wl_callback_destroy(mFrameCallback);
- mFrameCallback = nullptr;
-@@ -1077,7 +1078,8 @@ void WindowSurfaceWayland::FrameCallback
- void WindowSurfaceWayland::DelayedCommitHandler() {
- MOZ_ASSERT(mDelayedCommitHandle != nullptr, "Missing mDelayedCommitHandle!");
-
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::DelayedCommitHandler [%p]\n", (void*)this));
-
- *mDelayedCommitHandle = nullptr;
- free(mDelayedCommitHandle);
diff --git a/mozilla-1579849.patch b/mozilla-1579849.patch
deleted file mode 100644
index fb3e8c2..0000000
--- a/mozilla-1579849.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.old firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.old 2019-09-11 14:34:36.687382704 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-11 14:39:02.000391578 +0200
-@@ -751,6 +751,10 @@ static bool IsPopupFullScreenUpdate(Layo
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::Lock(
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-+
-+ // Disable all commits from frame callback handler and delayed comit handler
-+ // as we're updated by gecko compositor.
-+ mPendingCommit = false;
-
- LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
diff --git a/mozilla-1580152.patch b/mozilla-1580152.patch
deleted file mode 100644
index 6260d3c..0000000
--- a/mozilla-1580152.patch
+++ /dev/null
@@ -1,618 +0,0 @@
-diff -up firefox-69.0/widget/gtk/mozwayland/mozwayland.h.mozilla-1580152 firefox-69.0/widget/gtk/mozwayland/mozwayland.h
---- firefox-69.0/widget/gtk/mozwayland/mozwayland.h.mozilla-1580152 2019-09-16 11:11:30.081299217 +0200
-+++ firefox-69.0/widget/gtk/mozwayland/mozwayland.h 2019-09-16 11:11:30.089299191 +0200
-@@ -27,6 +27,9 @@ MOZ_EXPORT struct wl_proxy* wl_proxy_mar
- struct wl_proxy* proxy, uint32_t opcode,
- const struct wl_interface* interface, ...);
-
-+MOZ_EXPORT void* wl_proxy_create_wrapper(void* proxy);
-+MOZ_EXPORT void wl_proxy_wrapper_destroy(void* proxy_wrapper);
-+
- /* We need implement some missing functions from wayland-client-protocol.h
- */
- #ifndef WL_DATA_DEVICE_MANAGER_DND_ACTION_ENUM
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1580152 firefox-69.0/widget/gtk/nsWaylandDisplay.cpp
---- firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1580152 2019-09-16 11:11:30.081299217 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.cpp 2019-09-16 11:11:30.089299191 +0200
-@@ -243,6 +243,61 @@ bool nsWaylandDisplay::DispatchEventQueu
- return true;
- }
-
-+void nsWaylandDisplay::SyncEnd() {
-+ wl_callback_destroy(mSyncCallback);
-+ mSyncCallback = NULL;
-+}
-+
-+static void wayland_sync_callback(void* data, struct wl_callback* callback,
-+ uint32_t time) {
-+ auto display = static_cast<nsWaylandDisplay*>(data);
-+ display->SyncEnd();
-+}
-+
-+static const struct wl_callback_listener sync_callback_listener = {
-+ .done = wayland_sync_callback};
-+
-+void nsWaylandDisplay::SyncBegin() {
-+ WaitForSyncEnd();
-+
-+ // Use wl_display_sync() to synchronize wayland events.
-+ // See dri2_wl_swap_buffers_with_damage() from MESA
-+ // or wl_display_roundtrip_queue() from wayland-client.
-+ struct wl_display* displayWrapper =
-+ static_cast<wl_display*>(wl_proxy_create_wrapper((void*)mDisplay));
-+ if (!displayWrapper) {
-+ NS_WARNING("Failed to create wl_proxy wrapper!");
-+ return;
-+ }
-+
-+ wl_proxy_set_queue((struct wl_proxy*)displayWrapper, mEventQueue);
-+ mSyncCallback = wl_display_sync(displayWrapper);
-+ wl_proxy_wrapper_destroy((void*)displayWrapper);
-+
-+ if (!mSyncCallback) {
-+ NS_WARNING("Failed to create wl_display_sync callback!");
-+ return;
-+ }
-+
-+ wl_callback_add_listener(mSyncCallback, &sync_callback_listener, this);
-+ wl_display_flush(mDisplay);
-+}
-+
-+void nsWaylandDisplay::WaitForSyncEnd() {
-+ // We're done here
-+ if (!mSyncCallback) {
-+ return;
-+ }
-+
-+ while (mSyncCallback != NULL) {
-+ if (wl_display_dispatch_queue(mDisplay, mEventQueue) == -1) {
-+ NS_WARNING("wl_display_dispatch_queue failed!");
-+ SyncEnd();
-+ return;
-+ }
-+ }
-+}
-+
- bool nsWaylandDisplay::Matches(wl_display* aDisplay) {
- return mThreadId == PR_GetCurrentThread() && aDisplay == mDisplay;
- }
-@@ -305,6 +360,7 @@ nsWaylandDisplay::nsWaylandDisplay(wl_di
- mSubcompositor(nullptr),
- mSeat(nullptr),
- mShm(nullptr),
-+ mSyncCallback(nullptr),
- mPrimarySelectionDeviceManager(nullptr),
- mRegistry(nullptr),
- mGbmDevice(nullptr),
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1580152 firefox-69.0/widget/gtk/nsWaylandDisplay.h
---- firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1580152 2019-09-16 11:11:30.081299217 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.h 2019-09-16 11:11:30.089299191 +0200
-@@ -41,6 +41,11 @@ class nsWaylandDisplay {
- virtual ~nsWaylandDisplay();
-
- bool DispatchEventQueue();
-+
-+ void SyncBegin();
-+ void SyncEnd();
-+ void WaitForSyncEnd();
-+
- bool Matches(wl_display* aDisplay);
-
- MessageLoop* GetDispatcherThreadLoop() { return mDispatcherThreadLoop; }
-@@ -90,6 +95,7 @@ class nsWaylandDisplay {
- wl_subcompositor* mSubcompositor;
- wl_seat* mSeat;
- wl_shm* mShm;
-+ wl_callback* mSyncCallback;
- gtk_primary_selection_device_manager* mPrimarySelectionDeviceManager;
- wl_registry* mRegistry;
- zwp_linux_dmabuf_v1* mDmabuf;
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1580152 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1580152 2019-09-16 11:11:30.086299200 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-16 11:57:35.462193492 +0200
-@@ -32,6 +32,9 @@ extern mozilla::LazyLogModule gWidgetWay
- # define LOGWAYLAND(args)
- #endif /* MOZ_LOGGING */
-
-+// Maximal compositin timeout it miliseconds
-+#define COMPOSITING_TIMEOUT 200
-+
- namespace mozilla {
- namespace widget {
-
-@@ -198,6 +201,10 @@ available and gfx.wayland_dmabuf_backend
- #define BUFFER_BPP 4
- gfx::SurfaceFormat WindowBackBuffer::mFormat = gfx::SurfaceFormat::B8G8R8A8;
-
-+nsWaylandDisplay* WindowBackBuffer::GetWaylandDisplay() {
-+ return mWindowSurfaceWayland->GetWaylandDisplay();
-+}
-+
- int WaylandShmPool::CreateTemporaryFile(int aSize) {
- const char* tmppath = getenv("XDG_RUNTIME_DIR");
- MOZ_RELEASE_ASSERT(tmppath, "Missing XDG_RUNTIME_DIR env variable.");
-@@ -342,10 +349,11 @@ void WindowBackBufferShm::Clear() {
- memset(mShmPool.GetImageData(), 0, mHeight * mWidth * BUFFER_BPP);
- }
-
--WindowBackBufferShm::WindowBackBufferShm(nsWaylandDisplay* aWaylandDisplay,
-- int aWidth, int aHeight)
-- : WindowBackBuffer(aWaylandDisplay),
-- mShmPool(aWaylandDisplay, aWidth * aHeight * BUFFER_BPP),
-+WindowBackBufferShm::WindowBackBufferShm(
-+ WindowSurfaceWayland* aWindowSurfaceWayland, int aWidth, int aHeight)
-+ : WindowBackBuffer(aWindowSurfaceWayland),
-+ mShmPool(aWindowSurfaceWayland->GetWaylandDisplay(),
-+ aWidth * aHeight * BUFFER_BPP),
- mWaylandBuffer(nullptr),
- mWidth(aWidth),
- mHeight(aHeight),
-@@ -387,6 +395,9 @@ void WindowBackBufferShm::Detach(wl_buff
- aBuffer ? wl_proxy_get_id((struct wl_proxy*)aBuffer) : -1));
-
- mAttached = false;
-+
-+ // Commit any potential cached drawings from latest Lock()/Commit() cycle.
-+ mWindowSurfaceWayland->CommitWaylandBuffer();
- }
-
- bool WindowBackBufferShm::SetImageDataFromBuffer(
-@@ -416,8 +427,8 @@ already_AddRefed<gfx::DrawTarget> Window
- }
-
- WindowBackBufferDMABuf::WindowBackBufferDMABuf(
-- nsWaylandDisplay* aWaylandDisplay, int aWidth, int aHeight)
-- : WindowBackBuffer(aWaylandDisplay) {
-+ WindowSurfaceWayland* aWindowSurfaceWayland, int aWidth, int aHeight)
-+ : WindowBackBuffer(aWindowSurfaceWayland) {
- mDMAbufSurface.Create(aWidth, aHeight);
- LOGWAYLAND(
- ("WindowBackBufferDMABuf::WindowBackBufferDMABuf [%p] Created DMABuf "
-@@ -475,6 +486,9 @@ bool WindowBackBufferDMABuf::SetImageDat
-
- void WindowBackBufferDMABuf::Detach(wl_buffer* aBuffer) {
- mDMAbufSurface.WLBufferDetach();
-+
-+ // Commit any potential cached drawings from latest Lock()/Commit() cycle.
-+ mWindowSurfaceWayland->CommitWaylandBuffer();
- }
-
- void WindowBackBufferDMABuf::Clear() { mDMAbufSurface.Clear(); }
-@@ -496,10 +510,11 @@ WindowSurfaceWayland::WindowSurfaceWayla
- mWaylandBuffer(nullptr),
- mFrameCallback(nullptr),
- mLastCommittedSurface(nullptr),
-- mDisplayThreadMessageLoop(MessageLoop::current()),
- mDelayedCommitHandle(nullptr),
-+ mLastCommitTime(0),
- mDrawToWaylandBufferDirectly(true),
-- mPendingCommit(false),
-+ mBufferPendingCommit(false),
-+ mBufferCommitAllowed(false),
- mWholeWindowBufferDamage(false),
- mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
-@@ -508,7 +523,7 @@ WindowSurfaceWayland::WindowSurfaceWayla
- }
-
- WindowSurfaceWayland::~WindowSurfaceWayland() {
-- if (mPendingCommit) {
-+ if (mBufferPendingCommit) {
- NS_WARNING("Deleted WindowSurfaceWayland with a pending commit!");
- }
-
-@@ -547,7 +562,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- if (UseDMABufBackend()) {
- static bool sDMABufBufferCreated = false;
- WindowBackBuffer* buffer =
-- new WindowBackBufferDMABuf(mWaylandDisplay, aWidth, aHeight);
-+ new WindowBackBufferDMABuf(this, aWidth, aHeight);
- if (buffer) {
- sDMABufBufferCreated = true;
- return buffer;
-@@ -564,7 +579,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- }
- }
-
-- return new WindowBackBufferShm(mWaylandDisplay, aWidth, aHeight);
-+ return new WindowBackBufferShm(this, aWidth, aHeight);
- }
-
- WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(
-@@ -675,6 +690,11 @@ already_AddRefed<gfx::DrawTarget> Window
- (void*)this, (void*)buffer));
-
- if (!buffer) {
-+ if (mLastCommitTime && (g_get_monotonic_time() / 1000) - mLastCommitTime >
-+ COMPOSITING_TIMEOUT) {
-+ NS_WARNING(
-+ "Slow response from Wayland compositor, visual glitches ahead.");
-+ }
- return nullptr;
- }
-
-@@ -724,10 +744,9 @@ static bool IsPopupFullScreenUpdate(Layo
- // box is equal to window borders.
- if (aRegion.GetNumRects() > 2) return false;
-
-- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
--
-- return (screenRect.width == lockSize.width &&
-+ IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-+ return (lockSize.x == 0 && lockSize.y == 0 &&
-+ screenRect.width == lockSize.width &&
- screenRect.height == lockSize.height);
- }
-
-@@ -738,8 +757,7 @@ static bool IsPopupFullScreenUpdate(Layo
- to clip/buffer the drawing and we can return wl_buffer directly
- for drawing.
- - mWaylandBuffer is available - that's an ideal situation.
-- - mWaylandBuffer is locked by compositor - flip buffers and draw.
-- - if we can't flip buffers - go B)
-+ - mWaylandBuffer is locked by compositor - go B)
-
- B) Lock() is requested for part(s) of screen. We need to provide temporary
- surface to draw into and copy result (clipped) to target wl_surface.
-@@ -747,14 +765,17 @@ static bool IsPopupFullScreenUpdate(Layo
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::Lock(
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
--
-- // Disable all commits from frame callback handler and delayed comit handler
-- // as we're updated by gecko compositor.
-- mPendingCommit = false;
-+
-+ // Wait until all pending events are processed. There may be queued
-+ // wl_buffer release event which releases our wl_buffer for further rendering.
-+ mWaylandDisplay->WaitForSyncEnd();
-+
-+ // Disable all commits (from potential frame callback/delayed handlers)
-+ // until next WindowSurfaceWayland::Commit() call.
-+ mBufferCommitAllowed = false;
-
- LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
-- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-+ gfx::IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-
- // Are we asked for entire nsWindow to draw?
- bool isTransparentPopup =
-@@ -775,10 +796,10 @@ already_AddRefed<gfx::DrawTarget> Window
- }
-
- LOGWAYLAND(
-- ("WindowSurfaceWayland::Lock [%p] lockSize [%d x %d] windowSize [%d x "
-- "%d]\n",
-- (void*)this, lockSize.width, lockSize.height, lockedScreenRect.width,
-- lockedScreenRect.height));
-+ ("WindowSurfaceWayland::Lock [%p] [%d,%d] -> [%d x %d] rects %d "
-+ "windowSize [%d x %d]\n",
-+ (void*)this, lockSize.x, lockSize.y, lockSize.width, lockSize.height,
-+ aRegion.GetNumRects(), lockedScreenRect.width, lockedScreenRect.height));
- LOGWAYLAND((" nsWindow = %p\n", mWindow));
- LOGWAYLAND((" isPopup = %d\n", mWindow->IsWaylandPopup()));
- LOGWAYLAND((" isTransparentPopup = %d\n", isTransparentPopup));
-@@ -789,7 +810,7 @@ already_AddRefed<gfx::DrawTarget> Window
- LOGWAYLAND((" mBufferNeedsClear = %d\n", mBufferNeedsClear));
- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-
--#if DEBUG
-+#if MOZ_LOGGING
- if (!(mBufferScreenRect == lockedScreenRect)) {
- LOGWAYLAND((" screen size changed\n"));
- }
-@@ -836,7 +857,7 @@ already_AddRefed<gfx::DrawTarget> Window
- mDrawToWaylandBufferDirectly = false;
-
- LOGWAYLAND((" Indirect drawing.\n"));
-- return LockImageSurface(lockSize);
-+ return LockImageSurface(gfx::IntSize(lockSize.XMost(), lockSize.YMost()));
- }
-
- void WindowImageSurface::Draw(gfx::SourceSurface* aSurface,
-@@ -875,34 +896,42 @@ WindowImageSurface::WindowImageSurface(
- mImageSurface->Format());
- }
-
-+void WindowSurfaceWayland::CacheImageSurface(
-+ const LayoutDeviceIntRegion& aRegion) {
-+#ifdef MOZ_LOGGING
-+ gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-+ LOGWAYLAND(("WindowSurfaceWayland::CacheImageSurface [%p]\n", (void*)this));
-+ LOGWAYLAND((" rects num %d\n", aRegion.GetNumRects()));
-+ LOGWAYLAND((" bounds [ %d, %d] -> [%d x %d]\n", bounds.x, bounds.y,
-+ bounds.width, bounds.height));
-+#endif
-+
-+ mDelayedImageCommits.AppendElement(
-+ WindowImageSurface(mImageSurface, aRegion));
-+ // mImageSurface is owned by mDelayedImageCommits
-+ mImageSurface = nullptr;
-+
-+ LOGWAYLAND(
-+ (" There's %d cached images\n", int(mDelayedImageCommits.Length())));
-+}
-+
- void WindowSurfaceWayland::DrawDelayedImageCommits(
- gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::DrawDelayedImageCommits [%p]\n", (void*)this));
-+
- for (unsigned int i = 0; i < mDelayedImageCommits.Length(); i++) {
- mDelayedImageCommits[i].Draw(aDrawTarget, aWaylandBufferDamage);
- }
- mDelayedImageCommits.Clear();
- }
-
--bool WindowSurfaceWayland::CommitImageSurfaceToWaylandBuffer(
-- const LayoutDeviceIntRegion& aRegion,
-- LayoutDeviceIntRegion& aWaylandBufferDamage) {
-- MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
--
--#ifdef DEBUG
-- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::Rect rect(bounds);
-- MOZ_ASSERT(!rect.IsEmpty(), "Empty drawing?");
--#endif
--
-- LOGWAYLAND(
-- ("WindowSurfaceWayland::CommitImageSurfaceToWaylandBuffer [%p] "
-- "screenSize [%d x %d]\n",
-- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-+bool WindowSurfaceWayland::CommitImageCacheToWaylandBuffer() {
-+ if (!mDelayedImageCommits.Length()) {
-+ return false;
-+ }
-
-- mDelayedImageCommits.AppendElement(
-- WindowImageSurface(mImageSurface, aRegion));
-- // mImageSurface is owned by mDelayedImageCommits
-- mImageSurface = nullptr;
-+ MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
-
- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-@@ -911,10 +940,10 @@ bool WindowSurfaceWayland::CommitImageSu
- }
-
- LOGWAYLAND((" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-- long(mDelayedImageCommits.Length() + 1)));
-+ long(mDelayedImageCommits.Length())));
-
- // Draw any delayed image commits first
-- DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-+ DrawDelayedImageCommits(dt, mWaylandBufferDamage);
- UnlockWaylandBuffer();
-
- return true;
-@@ -932,7 +961,8 @@ static void WaylandBufferDelayCommitHand
- }
-
- void WindowSurfaceWayland::CommitWaylandBuffer() {
-- MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
-+ MOZ_ASSERT(!mWaylandBuffer->IsAttached(),
-+ "We can't draw to attached wayland buffer!");
-
- LOGWAYLAND(("WindowSurfaceWayland::CommitWaylandBuffer [%p]\n", (void*)this));
- LOGWAYLAND(
-@@ -941,6 +971,21 @@ void WindowSurfaceWayland::CommitWayland
- LOGWAYLAND((" mDelayedCommitHandle = %p\n", mDelayedCommitHandle));
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-+ LOGWAYLAND((" mBufferPendingCommit = %d\n", mBufferPendingCommit));
-+ LOGWAYLAND((" mBufferCommitAllowed = %d\n", mBufferCommitAllowed));
-+
-+ if (!mBufferCommitAllowed) {
-+ return;
-+ }
-+
-+ if (CommitImageCacheToWaylandBuffer()) {
-+ mBufferPendingCommit = true;
-+ }
-+
-+ // There's nothing to do here
-+ if (!mBufferPendingCommit) {
-+ return;
-+ }
-
- wl_surface* waylandSurface = mWindow->GetWaylandSurface();
- if (!waylandSurface) {
-@@ -986,6 +1031,7 @@ void WindowSurfaceWayland::CommitWayland
- }
-
- if (mWholeWindowBufferDamage) {
-+ LOGWAYLAND((" send whole screen damage\n"));
- wl_surface_damage(waylandSurface, 0, 0, mBufferScreenRect.width,
- mBufferScreenRect.height);
- mWholeWindowBufferDamage = false;
-@@ -994,6 +1040,8 @@ void WindowSurfaceWayland::CommitWayland
- for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
- iter.Next()) {
- mozilla::LayoutDeviceIntRect r = iter.Get();
-+ LOGWAYLAND((" wl_surface_damage_buffer [%d, %d] -> [%d, %d]\n", r.x,
-+ r.y, r.width, r.height));
- wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
- }
- }
-@@ -1012,24 +1060,31 @@ void WindowSurfaceWayland::CommitWayland
-
- mWaylandBuffer->Attach(waylandSurface);
- mLastCommittedSurface = waylandSurface;
-+ mLastCommitTime = g_get_monotonic_time() / 1000;
-+
-+ // Ask wl_display to start events synchronization. We're going wait
-+ // until all events are processed before next WindowSurfaceWayland::Lock()
-+ // as we need freed wl_buffer there.
-+ mWaylandDisplay->SyncBegin();
-
- // There's no pending commit, all changes are sent to compositor.
-- mPendingCommit = false;
-+ mBufferPendingCommit = false;
- }
-
- void WindowSurfaceWayland::Commit(const LayoutDeviceIntRegion& aInvalidRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-
--#ifdef DEBUG
-- {
-- gfx::IntRect bounds = aInvalidRegion.GetBounds().ToUnknownRect();
-- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-+ // Flush all waiting events explicitly as we need
-+ // mWaylandDisplay->FlushEventQueue();
-
-+#ifdef MOZ_LOGGING
-+ {
-+ gfx::IntRect lockSize = aInvalidRegion.GetBounds().ToUnknownRect();
- LOGWAYLAND(
-- ("WindowSurfaceWayland::Commit [%p] lockSize [%d x %d] screenSize [%d "
-- "x %d]\n",
-- (void*)this, lockSize.width, lockSize.height, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ ("WindowSurfaceWayland::Commit [%p] damage size [%d, %d] -> [%d x %d]"
-+ "screenSize [%d x %d]\n",
-+ (void*)this, lockSize.x, lockSize.y, lockSize.width, lockSize.height,
-+ mBufferScreenRect.width, mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
- LOGWAYLAND(
-@@ -1044,21 +1099,15 @@ void WindowSurfaceWayland::Commit(const
- mWaylandBufferDamage.OrWith(aInvalidRegion);
- }
- UnlockWaylandBuffer();
-- mPendingCommit = true;
-+ mBufferPendingCommit = true;
- } else {
- MOZ_ASSERT(!mWaylandBuffer->IsLocked(),
- "Drawing to already locked buffer?");
-- if (CommitImageSurfaceToWaylandBuffer(aInvalidRegion,
-- mWaylandBufferDamage)) {
-- // Our cached drawing is flushed, we can draw fullscreen again.
-- mDrawToWaylandBufferDirectly = true;
-- mPendingCommit = true;
-- }
-+ CacheImageSurface(aInvalidRegion);
- }
-
-- if (mPendingCommit) {
-- CommitWaylandBuffer();
-- }
-+ mBufferCommitAllowed = true;
-+ CommitWaylandBuffer();
- }
-
- void WindowSurfaceWayland::FrameCallbackHandler() {
-@@ -1074,9 +1123,7 @@ void WindowSurfaceWayland::FrameCallback
- wl_callback_destroy(mFrameCallback);
- mFrameCallback = nullptr;
-
-- if (mPendingCommit) {
-- CommitWaylandBuffer();
-- }
-+ CommitWaylandBuffer();
- }
-
- void WindowSurfaceWayland::DelayedCommitHandler() {
-@@ -1089,9 +1136,7 @@ void WindowSurfaceWayland::DelayedCommit
- free(mDelayedCommitHandle);
- mDelayedCommitHandle = nullptr;
-
-- if (mPendingCommit) {
-- CommitWaylandBuffer();
-- }
-+ CommitWaylandBuffer();
- }
-
- } // namespace widget
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1580152 firefox-69.0/widget/gtk/WindowSurfaceWayland.h
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1580152 2019-09-16 11:11:30.080299221 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.h 2019-09-16 11:11:30.090299187 +0200
-@@ -17,6 +17,8 @@
- namespace mozilla {
- namespace widget {
-
-+class WindowSurfaceWayland;
-+
- // Allocates and owns shared memory for Wayland drawing surface
- class WaylandShmPool {
- public:
-@@ -69,20 +71,22 @@ class WindowBackBuffer {
-
- static gfx::SurfaceFormat GetSurfaceFormat() { return mFormat; }
-
-- nsWaylandDisplay* GetWaylandDisplay() { return mWaylandDisplay; };
-+ nsWaylandDisplay* GetWaylandDisplay();
-
-- WindowBackBuffer(nsWaylandDisplay* aWaylandDisplay)
-- : mWaylandDisplay(aWaylandDisplay){};
-+ WindowBackBuffer(WindowSurfaceWayland* aWindowSurfaceWayland)
-+ : mWindowSurfaceWayland(aWindowSurfaceWayland){};
- virtual ~WindowBackBuffer(){};
-
-+ protected:
-+ WindowSurfaceWayland* mWindowSurfaceWayland;
-+
- private:
- static gfx::SurfaceFormat mFormat;
-- nsWaylandDisplay* mWaylandDisplay;
- };
-
- class WindowBackBufferShm : public WindowBackBuffer {
- public:
-- WindowBackBufferShm(nsWaylandDisplay* aWaylandDisplay, int aWidth,
-+ WindowBackBufferShm(WindowSurfaceWayland* aWindowSurfaceWayland, int aWidth,
- int aHeight);
- ~WindowBackBufferShm();
-
-@@ -121,8 +125,8 @@ class WindowBackBufferShm : public Windo
-
- class WindowBackBufferDMABuf : public WindowBackBuffer {
- public:
-- WindowBackBufferDMABuf(nsWaylandDisplay* aWaylandDisplay, int aWidth,
-- int aHeight);
-+ WindowBackBufferDMABuf(WindowSurfaceWayland* aWindowSurfaceWayland,
-+ int aWidth, int aHeight);
- ~WindowBackBufferDMABuf();
-
- bool IsAttached();
-@@ -175,6 +179,9 @@ class WindowSurfaceWayland : public Wind
- void Commit(const LayoutDeviceIntRegion& aInvalidRegion) final;
- void FrameCallbackHandler();
- void DelayedCommitHandler();
-+ void CommitWaylandBuffer();
-+
-+ nsWaylandDisplay* GetWaylandDisplay() { return mWaylandDisplay; };
-
- private:
- WindowBackBuffer* CreateWaylandBuffer(int aWidth, int aHeight);
-@@ -185,10 +192,9 @@ class WindowSurfaceWayland : public Wind
-
- already_AddRefed<gfx::DrawTarget> LockImageSurface(
- const gfx::IntSize& aLockSize);
-- bool CommitImageSurfaceToWaylandBuffer(
-- const LayoutDeviceIntRegion& aRegion,
-- LayoutDeviceIntRegion& aWaylandBufferDamage);
-- void CommitWaylandBuffer();
-+
-+ void CacheImageSurface(const LayoutDeviceIntRegion& aRegion);
-+ bool CommitImageCacheToWaylandBuffer();
-
- void DrawDelayedImageCommits(gfx::DrawTarget* aDrawTarget,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
-@@ -205,12 +211,13 @@ class WindowSurfaceWayland : public Wind
- WindowBackBuffer* mBackupBuffer[BACK_BUFFER_NUM];
- wl_callback* mFrameCallback;
- wl_surface* mLastCommittedSurface;
-- MessageLoop* mDisplayThreadMessageLoop;
- WindowSurfaceWayland** mDelayedCommitHandle;
- RefPtr<gfxImageSurface> mImageSurface;
- AutoTArray<WindowImageSurface, 30> mDelayedImageCommits;
-+ int64_t mLastCommitTime;
- bool mDrawToWaylandBufferDirectly;
-- bool mPendingCommit;
-+ bool mBufferPendingCommit;
-+ bool mBufferCommitAllowed;
- bool mWholeWindowBufferDamage;
- bool mBufferNeedsClear;
- bool mIsMainThread;
diff --git a/mozilla-1581748.patch b/mozilla-1581748.patch
deleted file mode 100644
index 9177f5b..0000000
--- a/mozilla-1581748.patch
+++ /dev/null
@@ -1,574 +0,0 @@
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1581748 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1581748 2019-09-17 13:19:47.190908284 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-17 13:19:47.196908262 +0200
-@@ -32,7 +32,7 @@ extern mozilla::LazyLogModule gWidgetWay
- # define LOGWAYLAND(args)
- #endif /* MOZ_LOGGING */
-
--// Maximal compositin timeout it miliseconds
-+// Maximal compositing timeout it miliseconds
- #define COMPOSITING_TIMEOUT 200
-
- namespace mozilla {
-@@ -513,13 +513,15 @@ WindowSurfaceWayland::WindowSurfaceWayla
- mDelayedCommitHandle(nullptr),
- mLastCommitTime(0),
- mDrawToWaylandBufferDirectly(true),
-+ mCanSwitchWaylandBuffer(true),
- mBufferPendingCommit(false),
- mBufferCommitAllowed(false),
-- mWholeWindowBufferDamage(false),
- mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
- mNeedScaleFactorUpdate(true) {
- for (int i = 0; i < BACK_BUFFER_NUM; i++) mBackupBuffer[i] = nullptr;
-+ mRenderingCacheMode = CACHE_ALL;
-+
- }
-
- WindowSurfaceWayland::~WindowSurfaceWayland() {
-@@ -591,8 +593,6 @@ WindowBackBuffer* WindowSurfaceWayland::
-
- // There's no buffer created yet, create a new one.
- if (!mWaylandBuffer) {
-- MOZ_ASSERT(aCanSwitchBuffer && mWholeWindowBufferDamage,
-- "Created new buffer for partial drawing!");
- LOGWAYLAND((" Created new buffer [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
-
-@@ -682,9 +682,8 @@ WindowBackBuffer* WindowSurfaceWayland::
- return mWaylandBuffer;
- }
-
--already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::LockWaylandBuffer(
-- bool aCanSwitchBuffer) {
-- WindowBackBuffer* buffer = GetWaylandBufferToDraw(aCanSwitchBuffer);
-+already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::LockWaylandBuffer() {
-+ WindowBackBuffer* buffer = GetWaylandBufferToDraw(mCanSwitchWaylandBuffer);
-
- LOGWAYLAND(("WindowSurfaceWayland::LockWaylandBuffer [%p] Got buffer %p\n",
- (void*)this, (void*)buffer));
-@@ -698,7 +697,9 @@ already_AddRefed<gfx::DrawTarget> Window
- return nullptr;
- }
-
-- if (mBufferNeedsClear && mWholeWindowBufferDamage) {
-+ mCanSwitchWaylandBuffer = false;
-+
-+ if (mBufferNeedsClear) {
- buffer->Clear();
- mBufferNeedsClear = false;
- }
-@@ -728,40 +729,30 @@ already_AddRefed<gfx::DrawTarget> Window
- WindowBackBuffer::GetSurfaceFormat());
- }
-
--static bool IsWindowFullScreenUpdate(LayoutDeviceIntRect& screenRect,
-- const LayoutDeviceIntRegion& aRegion) {
-- if (aRegion.GetNumRects() > 1) return false;
--
-- IntRect rect = aRegion.RectIter().Get().ToUnknownRect();
-- return (rect.x == 0 && rect.y == 0 && screenRect.width == rect.width &&
-- screenRect.height == rect.height);
-+static bool IsWindowFullScreenUpdate(
-+ LayoutDeviceIntRect& aScreenRect,
-+ const LayoutDeviceIntRegion& aUpdatedRegion) {
-+ if (aUpdatedRegion.GetNumRects() > 1) return false;
-+
-+ IntRect rect = aUpdatedRegion.RectIter().Get().ToUnknownRect();
-+ return (rect.x == 0 && rect.y == 0 && aScreenRect.width == rect.width &&
-+ aScreenRect.height == rect.height);
- }
-
--static bool IsPopupFullScreenUpdate(LayoutDeviceIntRect& screenRect,
-- const LayoutDeviceIntRegion& aRegion) {
-+static bool IsPopupFullScreenUpdate(
-+ LayoutDeviceIntRect& aScreenRect,
-+ const LayoutDeviceIntRegion& aUpdatedRegion) {
- // We know that popups can be drawn from two parts; a panel and an arrow.
- // Assume we redraw whole popups when we have two rects and bounding
- // box is equal to window borders.
-- if (aRegion.GetNumRects() > 2) return false;
-+ if (aUpdatedRegion.GetNumRects() > 2) return false;
-
-- IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-+ gfx::IntRect lockSize = aUpdatedRegion.GetBounds().ToUnknownRect();
- return (lockSize.x == 0 && lockSize.y == 0 &&
-- screenRect.width == lockSize.width &&
-- screenRect.height == lockSize.height);
-+ aScreenRect.width == lockSize.width &&
-+ aScreenRect.height == lockSize.height);
- }
-
--/*
-- There are some situations which can happen here:
--
-- A) Lock() is called to whole surface. In that case we don't need
-- to clip/buffer the drawing and we can return wl_buffer directly
-- for drawing.
-- - mWaylandBuffer is available - that's an ideal situation.
-- - mWaylandBuffer is locked by compositor - go B)
--
-- B) Lock() is requested for part(s) of screen. We need to provide temporary
-- surface to draw into and copy result (clipped) to target wl_surface.
-- */
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::Lock(
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-@@ -777,22 +768,31 @@ already_AddRefed<gfx::DrawTarget> Window
- LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
- gfx::IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-
-- // Are we asked for entire nsWindow to draw?
- bool isTransparentPopup =
- mWindow->IsWaylandPopup() &&
- (eTransparencyTransparent == mWindow->GetTransparencyMode());
-
-- // We have request to lock whole buffer/window.
-- mWholeWindowBufferDamage =
-- isTransparentPopup ? IsPopupFullScreenUpdate(lockedScreenRect, aRegion)
-- : IsWindowFullScreenUpdate(lockedScreenRect, aRegion);
--
-- // Clear buffer when we (re)draw new transparent popup window,
-- // otherwise leave it as-is, mBufferNeedsClear can be set from previous
-- // (already pending) commits which are cached now.
-- if (mWholeWindowBufferDamage) {
-+ bool windowRedraw = isTransparentPopup
-+ ? IsPopupFullScreenUpdate(lockedScreenRect, aRegion)
-+ : IsWindowFullScreenUpdate(lockedScreenRect, aRegion);
-+ if (windowRedraw) {
-+ // Clear buffer when we (re)draw new transparent popup window,
-+ // otherwise leave it as-is, mBufferNeedsClear can be set from previous
-+ // (already pending) commits which are cached now.
- mBufferNeedsClear =
- mWindow->WaylandSurfaceNeedsClear() || isTransparentPopup;
-+
-+ // Store info that we can switch WaylandBuffer when we flush
-+ // mImageSurface / mDelayedImageCommits. Don't clear it - it's cleared
-+ // at LockWaylandBuffer() when we actualy switch the buffer.
-+ mCanSwitchWaylandBuffer = windowRedraw;
-+
-+ // We do full buffer repaint so clear our cached drawings.
-+ mDelayedImageCommits.Clear();
-+ mWaylandBufferDamage.SetEmpty();
-+
-+ // Also do scale factor update for whole window updates just to be sure.
-+ mNeedScaleFactorUpdate = true;
- }
-
- LOGWAYLAND(
-@@ -808,7 +808,7 @@ already_AddRefed<gfx::DrawTarget> Window
- LOGWAYLAND((" IsWindowFullScreenUpdate = %d\n",
- IsWindowFullScreenUpdate(lockedScreenRect, aRegion)));
- LOGWAYLAND((" mBufferNeedsClear = %d\n", mBufferNeedsClear));
-- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-+ LOGWAYLAND((" windowRedraw = %d\n", windowRedraw));
-
- #if MOZ_LOGGING
- if (!(mBufferScreenRect == lockedScreenRect)) {
-@@ -822,8 +822,9 @@ already_AddRefed<gfx::DrawTarget> Window
- // We can't commit them any more as they're for former window size, so
- // scratch them.
- mDelayedImageCommits.Clear();
-+ mWaylandBufferDamage.SetEmpty();
-
-- if (!mWholeWindowBufferDamage) {
-+ if (!windowRedraw) {
- NS_WARNING("Partial screen update when window is resized!");
- // This should not happen. Screen size changed but we got only
- // partal screen update instead of whole screen. Discard this painting
-@@ -833,52 +834,56 @@ already_AddRefed<gfx::DrawTarget> Window
- mBufferScreenRect = lockedScreenRect;
- }
-
-- if (mWholeWindowBufferDamage) {
-- // We can lock/commit entire buffer direcly.
-- mDrawToWaylandBufferDirectly = true;
--
-- // If there's any pending image commit scratch them as we're going
-- // to redraw the whole sceen anyway.
-- mDelayedImageCommits.Clear();
-+ mDrawToWaylandBufferDirectly =
-+ (windowRedraw || mRenderingCacheMode != CACHE_ALL);
-
-- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-+ if (mDrawToWaylandBufferDirectly) {
-+ LOGWAYLAND((" Direct drawing\n"));
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer();
- if (dt) {
-+ if (!windowRedraw) {
-+ DrawDelayedImageCommits(dt, mWaylandBufferDamage);
-+ }
- return dt.forget();
- }
- }
-
-- // We do indirect drawing due to:
-- //
-- // 1) We don't have any front buffer available. Try indirect drawing
-- // to mImageSurface which is mirrored to front buffer at commit.
-- // 2) Only part of the screen is locked. We can't lock entire screen for
-- // such drawing as it produces visible artifacts.
-+ // Any caching is disabled and we don't have any back buffer available.
-+ if (mRenderingCacheMode == CACHE_NONE) {
-+ return nullptr;
-+ }
-+
-+ // We do indirect drawing because there isn't any front buffer available.
-+ // Do indirect drawing to mImageSurface which is commited to wayland
-+ // wl_buffer by DrawDelayedImageCommits() later.
- mDrawToWaylandBufferDirectly = false;
-
- LOGWAYLAND((" Indirect drawing.\n"));
- return LockImageSurface(gfx::IntSize(lockSize.XMost(), lockSize.YMost()));
- }
-
-+bool WindowImageSurface::OverlapsSurface(
-+ class WindowImageSurface& aBottomSurface) {
-+ return mUpdateRegion.Contains(aBottomSurface.mUpdateRegion);
-+}
-+
- void WindowImageSurface::Draw(gfx::SourceSurface* aSurface,
- gfx::DrawTarget* aDest,
- const LayoutDeviceIntRegion& aRegion) {
-- uint32_t numRects = aRegion.GetNumRects();
-- if (numRects != 1) {
-- AutoTArray<IntRect, 32> rects;
-- rects.SetCapacity(numRects);
-- for (auto iter = aRegion.RectIter(); !iter.Done(); iter.Next()) {
-- rects.AppendElement(iter.Get().ToUnknownRect());
-- }
-- aDest->PushDeviceSpaceClipRects(rects.Elements(), rects.Length());
-- }
--
-+#ifdef MOZ_LOGGING
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::Rect rect(bounds);
-- aDest->DrawSurface(aSurface, rect, rect);
-+ LOGWAYLAND(("WindowImageSurface::Draw\n"));
-+ LOGWAYLAND((" rects num %d\n", aRegion.GetNumRects()));
-+ LOGWAYLAND((" bounds [ %d, %d] -> [%d x %d]\n", bounds.x, bounds.y,
-+ bounds.width, bounds.height));
-+#endif
-
-- if (numRects != 1) {
-- aDest->PopClip();
-+ for (auto iter = aRegion.RectIter(); !iter.Done(); iter.Next()) {
-+ mozilla::LayoutDeviceIntRect r = iter.Get();
-+ gfx::Rect rect(r.ToUnknownRect());
-+ LOGWAYLAND((" draw rect [%f,%f] -> [%f x %f]\n", rect.x, rect.y,
-+ rect.width, rect.height));
-+ aDest->DrawSurface(aSurface, rect, rect);
- }
- }
-
-@@ -896,6 +901,18 @@ WindowImageSurface::WindowImageSurface(
- mImageSurface->Format());
- }
-
-+void WindowSurfaceWayland::DrawDelayedImageCommits(
-+ gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::DrawDelayedImageCommits [%p]\n", (void*)this));
-+ MOZ_ASSERT(mDelayedImageCommits.Length() > 0, "Nothing to draw?");
-+
-+ for (unsigned int i = 0; i < mDelayedImageCommits.Length(); i++) {
-+ mDelayedImageCommits[i].Draw(aDrawTarget, aWaylandBufferDamage);
-+ }
-+ mDelayedImageCommits.Clear();
-+}
-+
- void WindowSurfaceWayland::CacheImageSurface(
- const LayoutDeviceIntRegion& aRegion) {
- #ifdef MOZ_LOGGING
-@@ -906,8 +923,26 @@ void WindowSurfaceWayland::CacheImageSur
- bounds.width, bounds.height));
- #endif
-
-- mDelayedImageCommits.AppendElement(
-- WindowImageSurface(mImageSurface, aRegion));
-+ WindowImageSurface surf = WindowImageSurface(mImageSurface, aRegion);
-+
-+ if (mDelayedImageCommits.Length()) {
-+ int lastSurf = mDelayedImageCommits.Length() - 1;
-+ if (surf.OverlapsSurface(mDelayedImageCommits[lastSurf])) {
-+#ifdef MOZ_LOGGING
-+ {
-+ gfx::IntRect size = mDelayedImageCommits[lastSurf]
-+ .GetUpdateRegion()
-+ ->GetBounds()
-+ .ToUnknownRect();
-+ LOGWAYLAND((" removing [ %d, %d] -> [%d x %d]\n", size.x, size.y,
-+ size.width, size.height));
-+ }
-+#endif
-+ mDelayedImageCommits.RemoveElementAt(lastSurf);
-+ }
-+ }
-+
-+ mDelayedImageCommits.AppendElement(surf);
- // mImageSurface is owned by mDelayedImageCommits
- mImageSurface = nullptr;
-
-@@ -915,17 +950,6 @@ void WindowSurfaceWayland::CacheImageSur
- (" There's %d cached images\n", int(mDelayedImageCommits.Length())));
- }
-
--void WindowSurfaceWayland::DrawDelayedImageCommits(
-- gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-- LOGWAYLAND(
-- ("WindowSurfaceWayland::DrawDelayedImageCommits [%p]\n", (void*)this));
--
-- for (unsigned int i = 0; i < mDelayedImageCommits.Length(); i++) {
-- mDelayedImageCommits[i].Draw(aDrawTarget, aWaylandBufferDamage);
-- }
-- mDelayedImageCommits.Clear();
--}
--
- bool WindowSurfaceWayland::CommitImageCacheToWaylandBuffer() {
- if (!mDelayedImageCommits.Length()) {
- return false;
-@@ -933,8 +957,7 @@ bool WindowSurfaceWayland::CommitImageCa
-
- MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
-
-- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer();
- if (!dt) {
- return false;
- }
-@@ -942,7 +965,6 @@ bool WindowSurfaceWayland::CommitImageCa
- LOGWAYLAND((" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
- long(mDelayedImageCommits.Length())));
-
-- // Draw any delayed image commits first
- DrawDelayedImageCommits(dt, mWaylandBufferDamage);
- UnlockWaylandBuffer();
-
-@@ -967,7 +989,7 @@ void WindowSurfaceWayland::CommitWayland
- LOGWAYLAND(("WindowSurfaceWayland::CommitWaylandBuffer [%p]\n", (void*)this));
- LOGWAYLAND(
- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
-- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-+ LOGWAYLAND((" mCanSwitchWaylandBuffer = %d\n", mCanSwitchWaylandBuffer));
- LOGWAYLAND((" mDelayedCommitHandle = %p\n", mDelayedCommitHandle));
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-@@ -1030,20 +1052,11 @@ void WindowSurfaceWayland::CommitWayland
- mLastCommittedSurface = nullptr;
- }
-
-- if (mWholeWindowBufferDamage) {
-- LOGWAYLAND((" send whole screen damage\n"));
-- wl_surface_damage(waylandSurface, 0, 0, mBufferScreenRect.width,
-- mBufferScreenRect.height);
-- mWholeWindowBufferDamage = false;
-- mNeedScaleFactorUpdate = true;
-- } else {
-- for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
-- iter.Next()) {
-- mozilla::LayoutDeviceIntRect r = iter.Get();
-- LOGWAYLAND((" wl_surface_damage_buffer [%d, %d] -> [%d, %d]\n", r.x,
-- r.y, r.width, r.height));
-- wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
-- }
-+ for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done(); iter.Next()) {
-+ mozilla::LayoutDeviceIntRect r = iter.Get();
-+ LOGWAYLAND((" wl_surface_damage_buffer [%d, %d] -> [%d, %d]\n", r.x, r.y,
-+ r.width, r.height));
-+ wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
- }
-
- // Clear all back buffer damage as we're committing
-@@ -1062,9 +1075,9 @@ void WindowSurfaceWayland::CommitWayland
- mLastCommittedSurface = waylandSurface;
- mLastCommitTime = g_get_monotonic_time() / 1000;
-
-- // Ask wl_display to start events synchronization. We're going wait
-+ // Ask wl_display to start events synchronization. We're going to wait
- // until all events are processed before next WindowSurfaceWayland::Lock()
-- // as we need freed wl_buffer there.
-+ // as we hope for free wl_buffer there.
- mWaylandDisplay->SyncBegin();
-
- // There's no pending commit, all changes are sent to compositor.
-@@ -1074,9 +1087,6 @@ void WindowSurfaceWayland::CommitWayland
- void WindowSurfaceWayland::Commit(const LayoutDeviceIntRegion& aInvalidRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-
-- // Flush all waiting events explicitly as we need
-- // mWaylandDisplay->FlushEventQueue();
--
- #ifdef MOZ_LOGGING
- {
- gfx::IntRect lockSize = aInvalidRegion.GetBounds().ToUnknownRect();
-@@ -1087,17 +1097,12 @@ void WindowSurfaceWayland::Commit(const
- mBufferScreenRect.width, mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
-- LOGWAYLAND(
-- (" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
- }
- #endif
-
- if (mDrawToWaylandBufferDirectly) {
- MOZ_ASSERT(mWaylandBuffer->IsLocked());
-- // If we're not at fullscreen damage add drawing area from aInvalidRegion
-- if (!mWholeWindowBufferDamage) {
-- mWaylandBufferDamage.OrWith(aInvalidRegion);
-- }
-+ mWaylandBufferDamage.OrWith(aInvalidRegion);
- UnlockWaylandBuffer();
- mBufferPendingCommit = true;
- } else {
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1581748 firefox-69.0/widget/gtk/WindowSurfaceWayland.h
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1581748 2019-09-17 13:19:47.191908280 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.h 2019-09-17 13:19:47.197908258 +0200
-@@ -161,6 +161,10 @@ class WindowImageSurface {
- WindowImageSurface(gfxImageSurface* aImageSurface,
- const LayoutDeviceIntRegion& aUpdateRegion);
-
-+ bool OverlapsSurface(class WindowImageSurface& aBottomSurface);
-+
-+ const LayoutDeviceIntRegion* GetUpdateRegion() { return &mUpdateRegion; };
-+
- private:
- RefPtr<gfx::SourceSurface> mSurface;
- RefPtr<gfxImageSurface> mImageSurface;
-@@ -174,20 +178,59 @@ class WindowSurfaceWayland : public Wind
- explicit WindowSurfaceWayland(nsWindow* aWindow);
- ~WindowSurfaceWayland();
-
-+ // Lock() / Commit() are called by gecko when Firefox
-+ // wants to display something. Lock() returns a DrawTarget
-+ // where gecko paints. When gecko is done it calls Commit()
-+ // and we try to send the DrawTarget (backed by wl_buffer)
-+ // to wayland compositor.
-+ //
-+ // If we fail (wayland compositor is busy,
-+ // wl_surface is not created yet) we queue the painting
-+ // and we send it to wayland compositor in FrameCallbackHandler()/
-+ // DelayedCommitHandler/CommitWaylandBuffer().
- already_AddRefed<gfx::DrawTarget> Lock(
- const LayoutDeviceIntRegion& aRegion) override;
- void Commit(const LayoutDeviceIntRegion& aInvalidRegion) final;
-+
-+ // It's called from wayland compositor when there's the right
-+ // time to send wl_buffer to display. It's no-op if there's no
-+ // queued commits.
- void FrameCallbackHandler();
-+
-+ // When a new window is created we may not have a valid wl_surface
-+ // for drawing (Gtk haven't created it yet). All commits are queued
-+ // and DelayedCommitHandler() is called by timer when wl_surface is ready
-+ // for drawing.
- void DelayedCommitHandler();
-+
-+ // Try to commit all queued drawings to Wayland compositor. This is usually
-+ // called from other routines but can be used to explicitly flush
-+ // all drawings as we do when wl_buffer is released
-+ // (see WindowBackBufferShm::Detach() for instance).
- void CommitWaylandBuffer();
-
- 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.
-+ // Suitable for fullscreen content only like fullscreen video playback and
-+ // may work well with dmabuf backend.
-+ CACHE_NONE = 2
-+ } RenderingCacheMode;
-+
- private:
- WindowBackBuffer* CreateWaylandBuffer(int aWidth, int aHeight);
- WindowBackBuffer* GetWaylandBufferToDraw(bool aCanSwitchBuffer);
-
-- already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(bool aCanSwitchBuffer);
-+ already_AddRefed<gfx::DrawTarget> LockWaylandBuffer();
- void UnlockWaylandBuffer();
-
- already_AddRefed<gfx::DrawTarget> LockImageSurface(
-@@ -206,23 +249,71 @@ class WindowSurfaceWayland : public Wind
- // mBufferScreenRect is window size when our wayland buffer was allocated.
- LayoutDeviceIntRect mBufferScreenRect;
- nsWaylandDisplay* mWaylandDisplay;
-+
-+ // Actual buffer (backed by wl_buffer) where all drawings go into.
-+ // Drawn areas are stored at mWaylandBufferDamage and if there's
-+ // any uncommited drawings which needs to be send to wayland compositor
-+ // the mBufferPendingCommit is set.
- WindowBackBuffer* mWaylandBuffer;
-- LayoutDeviceIntRegion mWaylandBufferDamage;
- WindowBackBuffer* mBackupBuffer[BACK_BUFFER_NUM];
-+ LayoutDeviceIntRegion mWaylandBufferDamage;
-+
-+ // After every commit to wayland compositor a frame callback is requested.
-+ // Any next commit to wayland compositor will happen when frame callback
-+ // comes from wayland compositor back as it's the best time to do the commit.
- wl_callback* mFrameCallback;
- wl_surface* mLastCommittedSurface;
-+
-+ // Registered reference to pending DelayedCommitHandler() call.
- WindowSurfaceWayland** mDelayedCommitHandle;
-+
-+ // Cached drawings. If we can't get WaylandBuffer (wl_buffer) at
-+ // WindowSurfaceWayland::Lock() we direct gecko rendering to
-+ // mImageSurface.
-+ // If we can't get WaylandBuffer at WindowSurfaceWayland::Commit()
-+ // time, mImageSurface is moved to mDelayedImageCommits which
-+ // holds all cached drawings.
-+ // mDelayedImageCommits can be drawn by FrameCallbackHandler(),
-+ // DelayedCommitHandler() or when WaylandBuffer is detached.
- RefPtr<gfxImageSurface> mImageSurface;
- AutoTArray<WindowImageSurface, 30> mDelayedImageCommits;
-+
- int64_t mLastCommitTime;
-+
-+ // Indicates that we don't have any cached drawings at mDelayedImageCommits
-+ // and WindowSurfaceWayland::Lock() returned WaylandBuffer to gecko
-+ // to draw into.
- bool mDrawToWaylandBufferDirectly;
-+
-+ // Set when our cached drawings (mDelayedImageCommits) contains
-+ // full screen damage. That means we can safely switch WaylandBuffer
-+ // at LockWaylandBuffer().
-+ bool mCanSwitchWaylandBuffer;
-+
-+ // Set when actual WaylandBuffer contains drawings which are not send to
-+ // wayland compositor yet.
- bool mBufferPendingCommit;
-+
-+ // We can't send WaylandBuffer (wl_buffer) to compositor when gecko
-+ // is rendering into it (i.e. between WindowSurfaceWayland::Lock() /
-+ // WindowSurfaceWayland::Commit()).
-+ // Thus we use mBufferCommitAllowed to disable commit by callbacks
-+ // (FrameCallbackHandler(), DelayedCommitHandler())
- bool mBufferCommitAllowed;
-- bool mWholeWindowBufferDamage;
-+
-+ // We need to clear WaylandBuffer when entire transparent window is repainted.
-+ // This typically apply to popup windows.
- bool mBufferNeedsClear;
-+
- bool mIsMainThread;
-+
-+ // When new WaylandBuffer (wl_buffer) is send to wayland compositor
-+ // (buffer switch or resize) we also need to set its scale factor.
- bool mNeedScaleFactorUpdate;
-
-+ // Image caching strategy, see RenderingCacheMode for details.
-+ RenderingCacheMode mRenderingCacheMode;
-+
- static bool UseDMABufBackend();
- static bool mUseDMABufInitialized;
- static bool mUseDMABuf;
diff --git a/pgo.patch b/pgo.patch
index 20eb98d..1eef0d9 100644
--- a/pgo.patch
+++ b/pgo.patch
@@ -1,9 +1,10 @@
-diff -up firefox-64.0/build/unix/mozconfig.unix.pgo firefox-64.0/build/unix/mozconfig.unix
---- firefox-64.0/build/unix/mozconfig.unix.pgo 2019-01-03 15:23:16.792980384 +0100
-+++ firefox-64.0/build/unix/mozconfig.unix 2019-01-03 15:24:29.978693550 +0100
+diff -up firefox-70.0/build/mozconfig.pgo firefox-70.0/build/mozconfig
+diff -up firefox-70.0/build/unix/mozconfig.unix.pgo firefox-70.0/build/unix/mozconfig.unix
+--- firefox-70.0/build/unix/mozconfig.unix.pgo 2019-10-18 18:05:36.461701704 +0200
++++ firefox-70.0/build/unix/mozconfig.unix 2019-10-18 20:25:48.036037912 +0200
@@ -6,6 +6,15 @@ if [ -n "$FORCE_GCC" ]; then
- CC="$TOOLTOOL_DIR/gcc/bin/gcc"
- CXX="$TOOLTOOL_DIR/gcc/bin/g++"
+ CC="$MOZ_FETCHES_DIR/gcc/bin/gcc"
+ CXX="$MOZ_FETCHES_DIR/gcc/bin/g++"
+ if [ -n "$MOZ_PGO" ]; then
+ if [ -z "$USE_ARTIFACT" ]; then
@@ -16,11 +17,11 @@ diff -up firefox-64.0/build/unix/mozconfig.unix.pgo firefox-64.0/build/unix/mozc
+
# We want to make sure we use binutils and other binaries in the tooltool
# package.
- mk_add_options "export PATH=$TOOLTOOL_DIR/gcc/bin:$PATH"
-diff -up firefox-64.0/extensions/spellcheck/src/moz.build.pgo firefox-64.0/extensions/spellcheck/src/moz.build
---- firefox-64.0/extensions/spellcheck/src/moz.build.pgo 2018-12-07 03:56:27.000000000 +0100
-+++ firefox-64.0/extensions/spellcheck/src/moz.build 2019-01-03 15:21:32.793385074 +0100
-@@ -28,3 +28,5 @@ EXPORTS.mozilla += [
+ mk_add_options "export PATH=$MOZ_FETCHES_DIR/gcc/bin:$PATH"
+diff -up firefox-70.0/extensions/spellcheck/src/moz.build.pgo firefox-70.0/extensions/spellcheck/src/moz.build
+--- firefox-70.0/extensions/spellcheck/src/moz.build.pgo 2019-10-16 23:20:18.000000000 +0200
++++ firefox-70.0/extensions/spellcheck/src/moz.build 2019-10-18 18:05:36.461701704 +0200
+@@ -31,3 +31,5 @@ EXPORTS.mozilla += [
if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
CXXFLAGS += ['-Wno-error=shadow']
diff --git a/sources b/sources
index ec7b042..23e2fcc 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
SHA512 (cbindgen-vendor.tar.xz) = 88afa0bc6af525cbb46bc75578b90419b28b95b396d5002fbf299a78a173681b840096ff83ef6e48553d1a5e0aa04e79383ab4d09bf431f3b864fcbacc7de46d
-SHA512 (firefox-69.0.3.source.tar.xz) = bc4020c5f1a1eac82944f6402aa374c830231a0f168c6cdab8924a1c7a1b296381b45bce0a0567811ad86c2688972a35fda3f6c15e562b03a47d48617fe7611a
-SHA512 (firefox-langpacks-69.0.3-20191010.tar.xz) = e293903557dffa0231345a2ae4085705ae3b5b9c1935c1fc2890d042e63862d45134a03403bbebec1fbe068b9d590797946feb8153e2d4129e5f4e309065381a
+SHA512 (firefox-70.0.source.tar.xz) = c2643d88d59012dfd762357d66005c8892dec066b0ae9d8d33a29ea4427d1e5ae4a0376725c7d960c0025d5c9567eca816eb612b4ea987069e455c06fc442973
+SHA512 (firefox-langpacks-70.0-20191018.tar.xz) = aa17651aa8d4bc82d014846db559df9e896c329d58acfc145433480ad60cebf5a0a3774958e452d76b3f78bb70545e27208dbe226cfa13fc0a42c65ddfd48d46
4 years, 6 months
Architecture specific change in rpms/firefox.git
by githook-noreply@fedoraproject.org
The package rpms/firefox.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/firefox.git/commit/?id=302967b0a8....
Change:
-%ifarch ppc64 ppc64le
Thanks.
Full change:
============
commit 58d07b2c39a94ccd945de82a6aa65d06db8f4560
Merge: 5de2627 302967b
Author: Martin Stransky <stransky(a)redhat.com>
Date: Fri Oct 18 20:43:40 2019 +0200
Merge branch 'master' into f29
commit 302967b0a822136f55649d389e0345870cae57a9
Author: Martin Stransky <stransky(a)redhat.com>
Date: Fri Oct 18 20:43:19 2019 +0200
Updated to 70.0 Build 2
diff --git a/.gitignore b/.gitignore
index 379c588..7077731 100644
--- a/.gitignore
+++ b/.gitignore
@@ -366,3 +366,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-69.0.2.source.tar.xz
/firefox-69.0.3.source.tar.xz
/firefox-langpacks-69.0.3-20191010.tar.xz
+/firefox-70.0.source.tar.xz
+/firefox-langpacks-70.0-20191018.tar.xz
diff --git a/firefox.spec b/firefox.spec
index 872105b..7a3dffc 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -93,13 +93,13 @@ ExcludeArch: ppc64le
Summary: Mozilla Firefox Web browser
Name: firefox
-Version: 69.0.3
-Release: 2%{?pre_tag}%{?dist}
+Version: 70.0
+Release: 1%{?pre_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...
%if %{with langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20191010.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20191018.tar.xz
%endif
Source2: cbindgen-vendor.tar.xz
Source10: firefox-mozconfig
@@ -146,31 +146,15 @@ Patch228: mozilla-1583466.patch
# Upstream patches
Patch402: mozilla-1196777.patch
Patch412: mozilla-1337988.patch
-#Patch413: mozilla-1353817.patch
Patch415: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch
Patch417: bug1375074-save-restore-x28.patch
-Patch418: mozilla-1512162.patch
Patch419: mozilla-1568569.patch
-Patch420: mozilla-1566876-webrtc-ind.patch
Patch421: mozilla-1579023.patch
Patch422: mozilla-1580174-webrtc-popup.patch
# Wayland specific upstream patches
Patch574: firefox-pipewire.patch
Patch575: mozilla-1548475.patch
-Patch576: mozilla-1562827.patch
-Patch578: mozilla-1567434-1.patch
-Patch579: mozilla-1567434-2.patch
-Patch580: mozilla-1573813.patch
-Patch581: mozilla-1574036.patch
-Patch582: mozilla-1576268.patch
-Patch583: mozilla-1579794-1.patch
-Patch584: mozilla-1579794-2.patch
-Patch585: mozilla-1579849.patch
-Patch586: mozilla-1579823.patch
-Patch587: mozilla-1580152.patch
-Patch588: mozilla-1581748.patch
-Patch589: mozilla-1577024.patch
Patch590: firefox-wayland-cache-missing.patch
Patch591: mozilla-1587008.patch
@@ -370,34 +354,15 @@ This package contains results of tests executed during build.
%patch228 -p1 -b .mozilla-1583466
%patch402 -p1 -b .1196777
-#%patch413 -p1 -b .1353817
%ifarch %{arm}
%patch415 -p1 -b .1238661
%endif
-%ifarch ppc64 ppc64le
-#%patch418 -p1 -b .1512162 FIXME no longer needed?
-%endif
%patch419 -p1 -b .1568569
-%patch420 -p1 -b .1566876-webrtc-ind
%patch421 -p1 -b .1579023
# Wayland specific upstream patches
%patch574 -p1 -b .firefox-pipewire
%patch575 -p1 -b .mozilla-1548475
-%patch576 -p1 -b .mozilla-1562827
-%patch578 -p1 -b .mozilla-1567434-1
-%patch579 -p1 -b .mozilla-1567434-2
-%patch580 -p1 -b .mozilla-1573813
-%patch581 -p1 -b .mozilla-1574036
-%patch582 -p1 -b .mozilla-1576268
-%patch583 -p1 -b .mozilla-1579794-1
-%patch584 -p1 -b .mozilla-1579794-2
-%patch585 -p1 -b .mozilla-1579849
-%patch422 -p1 -b .1580174-webrtc-popup
-%patch586 -p1 -b .mozilla-1579823
-%patch587 -p1 -b .mozilla-1580152
-%patch588 -p1 -b .mozilla-1581748
-%patch589 -p1 -b .mozilla-1577024
%patch590 -p1 -b .cache-missing
%patch591 -p1 -b .mozilla-1587008
@@ -982,6 +947,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Tue Oct 15 2019 Martin Stransky <stransky(a)redhat.com> - 70.0-1
+- Updated to 70.0
+
* Mon Oct 14 2019 Martin Stransky <stransky(a)redhat.com> - 69.0.3-2
- Build firefox-wayland again (rhbz#1761578).
diff --git a/mozilla-1353817.patch b/mozilla-1353817.patch
deleted file mode 100644
index dc8d8f8..0000000
--- a/mozilla-1353817.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 1cc652f5525f458b0b4ceb12af24bf5a4367db32 Mon Sep 17 00:00:00 2001
-From: Nicolas Dufresne <nicolas.dufresne(a)collabora.com>
-Date: Tue, 23 May 2017 13:09:48 -0400
-Subject: [PATCH] Bug 1353817: Include SkNx_neon.h for ARM64 too
-
-This fixes build errors as arm_neon.h was missing along with some
-missing converters.
----
- gfx/skia/skia/src/core/SkNx.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gfx/skia/skia/src/core/SkNx.h b/gfx/skia/skia/src/core/SkNx.h
-index 6bca856..b0427aa 100644
---- a/gfx/skia/skia/src/core/SkNx.h
-+++ b/gfx/skia/skia/src/core/SkNx.h
-@@ -299,7 +299,7 @@ typedef SkNx<4, uint32_t> Sk4u;
- // Include platform specific specializations if available.
- #if !defined(SKNX_NO_SIMD) && SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2
- #include "../opts/SkNx_sse.h"
--#elif !defined(SKNX_NO_SIMD) && defined(SK_ARM_HAS_NEON)
-+#elif !defined(SKNX_NO_SIMD) && (defined(SK_ARM_HAS_NEON) || defined(SK_CPU_ARM64))
- #include "../opts/SkNx_neon.h"
- #else
-
---
-2.9.4
-
diff --git a/mozilla-1512162.patch b/mozilla-1512162.patch
deleted file mode 100644
index 99a0b14..0000000
--- a/mozilla-1512162.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-diff -up firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp.1512162 firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp
---- firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp.1512162 2019-07-17 22:51:30.000000000 +0200
-+++ firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp 2019-07-25 08:08:18.512528313 +0200
-@@ -1092,7 +1092,7 @@ class MOZ_STACK_CLASS CallMethodHelper f
- MOZ_ALWAYS_INLINE bool GetOutParamSource(uint8_t paramIndex,
- MutableHandleValue srcp) const;
-
-- MOZ_ALWAYS_INLINE bool GatherAndConvertResults();
-+ bool GatherAndConvertResults();
-
- MOZ_ALWAYS_INLINE bool QueryInterfaceFastPath();
-
-@@ -1139,7 +1139,7 @@ class MOZ_STACK_CLASS CallMethodHelper f
-
- ~CallMethodHelper();
-
-- MOZ_ALWAYS_INLINE bool Call();
-+ bool Call();
-
- // Trace implementation so we can put our CallMethodHelper in a Rooted<T>.
- void trace(JSTracer* aTrc);
-@@ -1157,6 +1157,10 @@ bool XPCWrappedNative::CallMethod(XPCCal
- return helper.get().Call();
- }
-
-+#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
-+// Work around a compiler bug on ppc64le (bug 1512162).
-+__attribute__ ((noinline,noclone))
-+#endif
- bool CallMethodHelper::Call() {
- mCallContext.SetRetVal(JS::UndefinedValue());
-
-@@ -1315,6 +1319,10 @@ bool CallMethodHelper::GetOutParamSource
- return true;
- }
-
-+#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
-+// Work around a compiler bug on ppc64le (bug 1512162).
-+__attribute__ ((noinline,noclone))
-+#endif
- bool CallMethodHelper::GatherAndConvertResults() {
- // now we iterate through the native params to gather and convert results
- uint8_t paramCount = mMethodInfo->GetParamCount();
diff --git a/mozilla-1516081.patch b/mozilla-1516081.patch
index 1ecff39..cc332a6 100644
--- a/mozilla-1516081.patch
+++ b/mozilla-1516081.patch
@@ -1,7 +1,7 @@
-diff -up firefox-69.0/build/moz.configure/toolchain.configure.1516081 firefox-69.0/build/moz.configure/toolchain.configure
---- firefox-69.0/build/moz.configure/toolchain.configure.1516081 2019-08-27 03:31:51.000000000 +0200
-+++ firefox-69.0/build/moz.configure/toolchain.configure 2019-08-29 10:42:45.872919255 +0200
-@@ -1411,7 +1411,7 @@ def pgo_flags(compiler, build_env, targe
+diff -up firefox-70.0/build/moz.configure/lto-pgo.configure.old firefox-70.0/build/moz.configure/lto-pgo.configure
+--- firefox-70.0/build/moz.configure/lto-pgo.configure.old 2019-10-18 20:33:54.240107068 +0200
++++ firefox-70.0/build/moz.configure/lto-pgo.configure 2019-10-18 20:34:44.202009678 +0200
+@@ -16,7 +16,7 @@ def pgo_flags(compiler, build_env, targe
if compiler.type == 'gcc':
return namespace(
@@ -10,29 +10,12 @@ diff -up firefox-69.0/build/moz.configure/toolchain.configure.1516081 firefox-69
gen_ldflags=['-fprofile-generate'],
use_cflags=['-fprofile-use', '-fprofile-correction',
'-Wcoverage-mismatch'],
-@@ -1434,7 +1434,8 @@ def pgo_flags(compiler, build_env, targe
+@@ -38,7 +38,7 @@ def pgo_flags(compiler, build_env, targe
+ gen_ldflags = ['-fprofile-generate']
- if gen_ldflags:
- return namespace(
-- gen_cflags=[prefix + '-fprofile-generate'],
-+ gen_cflags=[prefix + '-fprofile-generate',
-+ '-DMOZ_PROFILE_INSTRUMENTATION'],
- gen_ldflags=gen_ldflags,
- use_cflags=[prefix + '-fprofile-use=%s' % profdata,
- # Some error messages about mismatched profile data
-diff -up firefox-69.0/toolkit/components/terminator/nsTerminator.cpp.1516081 firefox-69.0/toolkit/components/terminator/nsTerminator.cpp
---- firefox-69.0/toolkit/components/terminator/nsTerminator.cpp.1516081 2019-08-27 03:32:05.000000000 +0200
-+++ firefox-69.0/toolkit/components/terminator/nsTerminator.cpp 2019-08-29 09:51:08.513440687 +0200
-@@ -419,6 +419,12 @@ void nsTerminator::StartWatchdog() {
- }
- }
- #endif
-+ // Disable watchdog for PGO train builds - writting profile information at
-+ // exit may take time and it is better to make build hang rather than
-+ // silently produce poorly performing binary.
-+#ifdef MOZ_PROFILE_INSTRUMENTATION
-+ crashAfterMS = INT32_MAX;
-+#endif
-
- UniquePtr<Options> options(new Options());
- const PRIntervalTime ticksDuration = PR_MillisecondsToInterval(1000);
+ return namespace(
+- gen_cflags=[prefix + '-fprofile-generate'],
++ gen_cflags=[prefix + '-fprofile-generate', '-DMOZ_PROFILE_INSTRUMENTATION'],
+ gen_ldflags=gen_ldflags,
+ use_cflags=[prefix + '-fprofile-use=%s' % profdata,
+ # Some error messages about mismatched profile data
diff --git a/mozilla-1562827.patch b/mozilla-1562827.patch
deleted file mode 100644
index 497133c..0000000
--- a/mozilla-1562827.patch
+++ /dev/null
@@ -1,141 +0,0 @@
-diff -up firefox-69.0/widget/gtk/nsWindow.cpp.mozilla-1562827 firefox-69.0/widget/gtk/nsWindow.cpp
---- firefox-69.0/widget/gtk/nsWindow.cpp.mozilla-1562827 2019-09-02 15:16:15.031528276 +0200
-+++ firefox-69.0/widget/gtk/nsWindow.cpp 2019-09-02 15:16:15.037528254 +0200
-@@ -818,7 +818,6 @@ void nsWindow::SetParent(nsIWidget* aNew
- if (mParent) {
- mParent->RemoveChild(this);
- }
--
- mParent = aNewParent;
-
- GtkWidget* oldContainer = GetMozContainerWidget();
-@@ -830,88 +829,73 @@ void nsWindow::SetParent(nsIWidget* aNew
- return;
- }
-
-+ nsWindow* newParent = static_cast<nsWindow*>(aNewParent);
-+ GdkWindow* newParentWindow = nullptr;
-+ GtkWidget* newContainer = nullptr;
- if (aNewParent) {
- aNewParent->AddChild(this);
-- ReparentNativeWidget(aNewParent);
-+ newParentWindow = newParent->mGdkWindow;
-+ newContainer = newParent->GetMozContainerWidget();
- } else {
- // aNewParent is nullptr, but reparent to a hidden window to avoid
- // destroying the GdkWindow and its descendants.
- // An invisible container widget is needed to hold descendant
- // GtkWidgets.
-- GtkWidget* newContainer = EnsureInvisibleContainer();
-- GdkWindow* newParentWindow = gtk_widget_get_window(newContainer);
-- ReparentNativeWidgetInternal(aNewParent, newContainer, newParentWindow,
-- oldContainer);
-- }
--}
--
--bool nsWindow::WidgetTypeSupportsAcceleration() { return !IsSmallPopup(); }
--
--void nsWindow::ReparentNativeWidget(nsIWidget* aNewParent) {
-- MOZ_ASSERT(aNewParent, "null widget");
-- NS_ASSERTION(!mIsDestroyed, "");
-- NS_ASSERTION(!static_cast<nsWindow*>(aNewParent)->mIsDestroyed, "");
--
-- GtkWidget* oldContainer = GetMozContainerWidget();
-- if (!oldContainer) {
-- // The GdkWindows have been destroyed so there is nothing else to
-- // reparent.
-- MOZ_ASSERT(gdk_window_is_destroyed(mGdkWindow),
-- "live GdkWindow with no widget");
-- return;
-+ newContainer = EnsureInvisibleContainer();
-+ newParentWindow = gtk_widget_get_window(newContainer);
- }
-- MOZ_ASSERT(!gdk_window_is_destroyed(mGdkWindow),
-- "destroyed GdkWindow with widget");
-
-- auto* newParent = static_cast<nsWindow*>(aNewParent);
-- GdkWindow* newParentWindow = newParent->mGdkWindow;
-- GtkWidget* newContainer = newParent->GetMozContainerWidget();
-- GtkWindow* shell = GTK_WINDOW(mShell);
--
-- if (shell && gtk_window_get_transient_for(shell)) {
-- GtkWindow* topLevelParent =
-- GTK_WINDOW(gtk_widget_get_toplevel(newContainer));
-- gtk_window_set_transient_for(shell, topLevelParent);
-- }
--
-- ReparentNativeWidgetInternal(aNewParent, newContainer, newParentWindow,
-- oldContainer);
--}
--
--void nsWindow::ReparentNativeWidgetInternal(nsIWidget* aNewParent,
-- GtkWidget* aNewContainer,
-- GdkWindow* aNewParentWindow,
-- GtkWidget* aOldContainer) {
-- if (!aNewContainer) {
-+ if (!newContainer) {
- // The new parent GdkWindow has been destroyed.
-- MOZ_ASSERT(!aNewParentWindow || gdk_window_is_destroyed(aNewParentWindow),
-+ MOZ_ASSERT(!newParentWindow || gdk_window_is_destroyed(newParentWindow),
- "live GdkWindow with no widget");
- Destroy();
- } else {
-- if (aNewContainer != aOldContainer) {
-- MOZ_ASSERT(!gdk_window_is_destroyed(aNewParentWindow),
-+ if (newContainer != oldContainer) {
-+ MOZ_ASSERT(!gdk_window_is_destroyed(newParentWindow),
- "destroyed GdkWindow with widget");
-- SetWidgetForHierarchy(mGdkWindow, aOldContainer, aNewContainer);
-+ SetWidgetForHierarchy(mGdkWindow, oldContainer, newContainer);
-
-- if (aOldContainer == gInvisibleContainer) {
-+ if (oldContainer == gInvisibleContainer) {
- CheckDestroyInvisibleContainer();
- }
- }
-
-- if (!mIsTopLevel) {
-- gdk_window_reparent(mGdkWindow, aNewParentWindow,
-- DevicePixelsToGdkCoordRoundDown(mBounds.x),
-- DevicePixelsToGdkCoordRoundDown(mBounds.y));
-- }
-+ gdk_window_reparent(mGdkWindow, newParentWindow,
-+ DevicePixelsToGdkCoordRoundDown(mBounds.x),
-+ DevicePixelsToGdkCoordRoundDown(mBounds.y));
-+ mToplevelParentWindow = GTK_WINDOW(gtk_widget_get_toplevel(newContainer));
- }
-
-- auto* newParent = static_cast<nsWindow*>(aNewParent);
- bool parentHasMappedToplevel = newParent && newParent->mHasMappedToplevel;
- if (mHasMappedToplevel != parentHasMappedToplevel) {
- SetHasMappedToplevel(parentHasMappedToplevel);
- }
- }
-
-+bool nsWindow::WidgetTypeSupportsAcceleration() { return !IsSmallPopup(); }
-+
-+void nsWindow::ReparentNativeWidget(nsIWidget* aNewParent) {
-+ MOZ_ASSERT(aNewParent, "null widget");
-+ MOZ_ASSERT(!mIsDestroyed, "");
-+ MOZ_ASSERT(!static_cast<nsWindow*>(aNewParent)->mIsDestroyed, "");
-+ MOZ_ASSERT(!gdk_window_is_destroyed(mGdkWindow),
-+ "destroyed GdkWindow with widget");
-+
-+ MOZ_ASSERT(
-+ !mParent,
-+ "nsWindow::ReparentNativeWidget() works on toplevel windows only.");
-+
-+ auto* newParent = static_cast<nsWindow*>(aNewParent);
-+ GtkWindow* newParentWidget = GTK_WINDOW(newParent->GetGtkWidget());
-+ GtkWindow* shell = GTK_WINDOW(mShell);
-+
-+ if (shell && gtk_window_get_transient_for(shell)) {
-+ gtk_window_set_transient_for(shell, newParentWidget);
-+ mToplevelParentWindow = newParentWidget;
-+ }
-+}
-+
- void nsWindow::SetModal(bool aModal) {
- LOG(("nsWindow::SetModal [%p] %d\n", (void*)this, aModal));
- if (mIsDestroyed) return;
-diff -up firefox-69.0/widget/gtk/nsWindow.h.mozilla-1562827 firefox-69.0/widget/gtk/nsWindow.h
diff --git a/mozilla-1566876-webrtc-ind.patch b/mozilla-1566876-webrtc-ind.patch
deleted file mode 100644
index 598f58f..0000000
--- a/mozilla-1566876-webrtc-ind.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -3504,12 +3504,6 @@
- mBounds = aRect;
- ConstrainSize(&mBounds.width, &mBounds.height);
-
-- // eWindowType_child is not supported on Wayland. Just switch to toplevel
-- // as a workaround.
-- if (!mIsX11Display && mWindowType == eWindowType_child) {
-- mWindowType = eWindowType_toplevel;
-- }
--
- // figure out our parent window
- GtkWidget* parentMozContainer = nullptr;
- GtkContainer* parentGtkContainer = nullptr;
-@@ -3543,6 +3537,18 @@
- topLevelParent = GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer));
- }
-
-+ if (!mIsX11Display) {
-+ if (mWindowType == eWindowType_child) {
-+ // eWindowType_child is not supported on Wayland. Just switch to toplevel
-+ // as a workaround.
-+ mWindowType = eWindowType_toplevel;
-+ } else if (mWindowType == eWindowType_popup && !topLevelParent) {
-+ // Workaround for Wayland where the popup windows always need to have
-+ // parent window. For example webrtc ui is a popup window without parent.
-+ mWindowType = eWindowType_toplevel;
-+ }
-+ }
-+
- // ok, create our windows
- switch (mWindowType) {
- case eWindowType_dialog:
-
diff --git a/mozilla-1567434-1.patch b/mozilla-1567434-1.patch
deleted file mode 100644
index 446cd6b..0000000
--- a/mozilla-1567434-1.patch
+++ /dev/null
@@ -1,226 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -616,8 +616,6 @@
- }
-
- if (!aFullScreenUpdate) {
-- NS_WARNING(
-- "We can't create a new Wayland buffer for non-fullscreen updates!");
- return nullptr;
- }
-
-@@ -674,8 +672,6 @@
- (void*)buffer));
-
- if (!buffer) {
-- NS_WARNING(
-- "WindowSurfaceWayland::LockWaylandBuffer(): No buffer available");
- return nullptr;
- }
-
-diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
---- a/widget/gtk/nsWindow.h
-+++ b/widget/gtk/nsWindow.h
-@@ -487,6 +487,7 @@
- GtkWidget* mShell;
- MozContainer* mContainer;
- GdkWindow* mGdkWindow;
-+ GtkWindow* mToplevelParentWindow;
- bool mWindowShouldStartDragging = false;
- PlatformCompositorWidgetDelegate* mCompositorWidgetDelegate;
-
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -401,6 +401,7 @@
- mContainer = nullptr;
- mGdkWindow = nullptr;
- mShell = nullptr;
-+ mToplevelParentWindow = nullptr;
- mCompositorWidgetDelegate = nullptr;
- mHasMappedToplevel = false;
- mIsFullyObscured = false;
-@@ -1144,6 +1145,8 @@
- nsWindow* window =
- static_cast<nsWindow*>(gVisibleWaylandPopupWindows->data);
- if (window->mPopupType != ePopupTypeTooltip) break;
-+ LOG(("nsWindow::HideWaylandTooltips [%p] hidding tooltip [%p].\n",
-+ (void*)this, window));
- window->HideWaylandWindow();
- gVisibleWaylandPopupWindows = g_list_delete_link(
- gVisibleWaylandPopupWindows, gVisibleWaylandPopupWindows);
-@@ -1172,9 +1175,12 @@
- // before we open another one on that level. It means that every open
- // popup needs to have an unique parent.
- GtkWidget* nsWindow::ConfigureWaylandPopupWindows() {
-+ LOG(("nsWindow::ConfigureWaylandPopupWindows [%p]\n", (void*)this));
-+
- // Check if we're already configured.
- if (gVisibleWaylandPopupWindows &&
- g_list_find(gVisibleWaylandPopupWindows, this)) {
-+ LOG(("...[%p] is already configured.\n", (void*)this));
- return GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell)));
- }
-
-@@ -1182,9 +1188,15 @@
- // as it's short lived temporary window.
- HideWaylandTooltips();
-
-- GtkWindow* parentWidget = nullptr;
-+ GtkWindow* parentWidget = mToplevelParentWindow;
- if (gVisibleWaylandPopupWindows) {
-+ LOG(("... there's visible active popup [%p]\n",
-+ gVisibleWaylandPopupWindows->data));
-+
- if (mPopupType == ePopupTypeTooltip) {
-+ LOG(("...[%p] is tooltip, parent [%p]\n", (void*)this,
-+ gVisibleWaylandPopupWindows->data));
-+
- // Attach tooltip window to the latest popup window
- // to have both visible.
- nsWindow* window =
-@@ -1200,12 +1212,19 @@
- // nsWindow::Create()) or we're toplevel popup without parent.
- // In both cases just use parent which was passed to nsWindow::Create().
- if (!menuPopupFrame) {
-- return GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell)));
-+ LOG(("...[%p] menuPopupFrame = null, using given parent widget [%p]\n",
-+ (void*)this, parentWidget));
-+ return GTK_WIDGET(parentWidget);
- }
-
- nsWindow* parentWindow =
- static_cast<nsWindow*>(menuPopupFrame->GetParentMenuWidget());
-+ LOG(("...[%p] GetParentMenuWidget() = %p\n", (void*)this, parentWindow));
-+
- if (!parentWindow) {
-+ LOG(("...[%p] using active/visible popups as a parent [%p]\n",
-+ (void*)this, gVisibleWaylandPopupWindows->data));
-+
- // We're toplevel popup menu attached to another menu. Just use our
- // latest popup as a parent.
- parentWindow =
-@@ -1234,10 +1253,10 @@
- }
- }
-
-+ MOZ_ASSERT(parentWidget, "Missing parent widget for wayland popup!");
- if (parentWidget) {
-+ LOG(("...[%p] set parent widget [%p]\n", (void*)this, parentWidget));
- gtk_window_set_transient_for(GTK_WINDOW(mShell), parentWidget);
-- } else {
-- parentWidget = gtk_window_get_transient_for(GTK_WINDOW(mShell));
- }
- gVisibleWaylandPopupWindows =
- g_list_prepend(gVisibleWaylandPopupWindows, this);
-@@ -1248,9 +1267,11 @@
- static void NativeMoveResizeWaylandPopupCallback(
- GdkWindow* window, const GdkRectangle* flipped_rect,
- const GdkRectangle* final_rect, gboolean flipped_x, gboolean flipped_y,
-- void* unused) {
-- LOG(("%s flipped %d %d\n", __FUNCTION__, flipped_rect->x, flipped_rect->y));
-- LOG(("%s final %d %d\n", __FUNCTION__, final_rect->x, final_rect->y));
-+ void* aWindow) {
-+ LOG(("%s [%p] flipped %d %d\n", __FUNCTION__, aWindow, flipped_rect->x,
-+ flipped_rect->y));
-+ LOG(("%s [%p] final %d %d\n", __FUNCTION__, aWindow, final_rect->x,
-+ final_rect->y));
- }
- #endif
-
-@@ -1264,6 +1285,8 @@
- // Compositor may be confused by windows with width/height = 0
- // and positioning such windows leads to Bug 1555866.
- if (!AreBoundsSane()) {
-+ LOG(("nsWindow::NativeMoveResizeWaylandPopup [%p] Bounds are not sane\n",
-+ (void*)this));
- return;
- }
-
-@@ -1277,6 +1300,8 @@
- // - gdk_window_move_to_rect() is not available
- // - the widget doesn't have a valid GdkWindow
- if (!sGdkWindowMoveToRect || !gdkWindow) {
-+ LOG(("nsWindow::NativeMoveResizeWaylandPopup [%p] use gtk_window_move()\n",
-+ (void*)this));
- gtk_window_move(GTK_WINDOW(mShell), aPosition->x, aPosition->y);
- return;
- }
-@@ -1302,8 +1327,12 @@
- }
- LOG((" request result %d %d\n", rect.x, rect.y));
- #ifdef DEBUG
-- g_signal_connect(gdkWindow, "moved-to-rect",
-- G_CALLBACK(NativeMoveResizeWaylandPopupCallback), this);
-+ if (!g_signal_handler_find(
-+ gdkWindow, G_SIGNAL_MATCH_FUNC, 0, 0, nullptr,
-+ FuncToGpointer(NativeMoveResizeWaylandPopupCallback), this)) {
-+ g_signal_connect(gdkWindow, "moved-to-rect",
-+ G_CALLBACK(NativeMoveResizeWaylandPopupCallback), this);
-+ }
- #endif
-
- GdkGravity rectAnchor = GDK_GRAVITY_NORTH_WEST;
-@@ -3508,7 +3537,6 @@
- GtkWidget* parentMozContainer = nullptr;
- GtkContainer* parentGtkContainer = nullptr;
- GdkWindow* parentGdkWindow = nullptr;
-- GtkWindow* topLevelParent = nullptr;
- nsWindow* parentnsWindow = nullptr;
- GtkWidget* eventWidget = nullptr;
- bool drawToContainer = false;
-@@ -3534,7 +3562,8 @@
-
- // get the toplevel window just in case someone needs to use it
- // for setting transients or whatever.
-- topLevelParent = GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer));
-+ mToplevelParentWindow =
-+ GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer));
- }
-
- if (!mIsX11Display) {
-@@ -3542,7 +3571,7 @@
- // eWindowType_child is not supported on Wayland. Just switch to toplevel
- // as a workaround.
- mWindowType = eWindowType_toplevel;
-- } else if (mWindowType == eWindowType_popup && !topLevelParent) {
-+ } else if (mWindowType == eWindowType_popup && !mToplevelParentWindow) {
- // Workaround for Wayland where the popup windows always need to have
- // parent window. For example webrtc ui is a popup window without parent.
- mWindowType = eWindowType_toplevel;
-@@ -3677,7 +3706,7 @@
- gdk_get_program_class());
- gtk_window_set_type_hint(GTK_WINDOW(mShell),
- GDK_WINDOW_TYPE_HINT_DIALOG);
-- gtk_window_set_transient_for(GTK_WINDOW(mShell), topLevelParent);
-+ gtk_window_set_transient_for(GTK_WINDOW(mShell), mToplevelParentWindow);
- } else if (mWindowType == eWindowType_popup) {
- gtk_window_set_wmclass(GTK_WINDOW(mShell), "Popup",
- gdk_get_program_class());
-@@ -3730,10 +3759,11 @@
- }
- gtk_window_set_type_hint(GTK_WINDOW(mShell), gtkTypeHint);
-
-- if (topLevelParent) {
-+ if (mToplevelParentWindow) {
- LOG(("nsWindow::Create [%p] Set popup parent %p\n", (void*)this,
-- topLevelParent));
-- gtk_window_set_transient_for(GTK_WINDOW(mShell), topLevelParent);
-+ mToplevelParentWindow));
-+ gtk_window_set_transient_for(GTK_WINDOW(mShell),
-+ mToplevelParentWindow);
- }
-
- // We need realized mShell at NativeMove().
-@@ -4011,7 +4041,8 @@
- #endif
- }
-
-- LOG(("nsWindow [%p]\n", (void*)this));
-+ LOG(("nsWindow [%p] %s\n", (void*)this,
-+ mWindowType == eWindowType_toplevel ? "Toplevel" : "Popup"));
- if (mShell) {
- LOG(("\tmShell %p mContainer %p mGdkWindow %p 0x%lx\n", mShell, mContainer,
- mGdkWindow, mIsX11Display ? gdk_x11_window_get_xid(mGdkWindow) : 0));
-
diff --git a/mozilla-1567434-2.patch b/mozilla-1567434-2.patch
deleted file mode 100644
index 966118a..0000000
--- a/mozilla-1567434-2.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -1208,6 +1208,7 @@
- if (frame) {
- menuPopupFrame = do_QueryFrame(frame);
- }
-+
- // The popup is not fully created yet (we're called from
- // nsWindow::Create()) or we're toplevel popup without parent.
- // In both cases just use parent which was passed to nsWindow::Create().
-@@ -1217,10 +1218,22 @@
- return GTK_WIDGET(parentWidget);
- }
-
-+ LOG(("...[%p] is %s\n", (void*)this,
-+ menuPopupFrame->IsContextMenu() ? "context menu" : "popup"));
-+
- nsWindow* parentWindow =
- static_cast<nsWindow*>(menuPopupFrame->GetParentMenuWidget());
- LOG(("...[%p] GetParentMenuWidget() = %p\n", (void*)this, parentWindow));
-
-+ // If the popup is a regular menu but GetParentMenuWidget() returns
-+ // nullptr which means it's connected non-menu parent
-+ // (bookmark toolbar for instance).
-+ // In this case use a parent given at nsWindow::Create().
-+ if (!parentWindow && !menuPopupFrame->IsContextMenu()) {
-+ parentWindow =
-+ get_window_for_gtk_widget(GTK_WIDGET(mToplevelParentWindow));
-+ }
-+
- if (!parentWindow) {
- LOG(("...[%p] using active/visible popups as a parent [%p]\n",
- (void*)this, gVisibleWaylandPopupWindows->data));
-
diff --git a/mozilla-1573813.patch b/mozilla-1573813.patch
deleted file mode 100644
index e9fca07..0000000
--- a/mozilla-1573813.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -6577,11 +6577,22 @@
- }
-
- gint nsWindow::GdkScaleFactor() {
-+ // For popup windows with parent window we need to get scale factor of the
-+ // parent window. Otherwise the scale factor of the popup is not updated
-+ // during it's hidden.
-+ GdkWindow* scaledGdkWindow = mGdkWindow;
-+ if (mToplevelParentWindow) {
-+ scaledGdkWindow = gtk_widget_get_window(GTK_WIDGET(mToplevelParentWindow));
-+ // Fallback for windows which parent has been unrealized.
-+ if (!scaledGdkWindow) {
-+ scaledGdkWindow = mGdkWindow;
-+ }
-+ }
- // Available as of GTK 3.10+
- static auto sGdkWindowGetScaleFactorPtr =
- (gint(*)(GdkWindow*))dlsym(RTLD_DEFAULT, "gdk_window_get_scale_factor");
-- if (sGdkWindowGetScaleFactorPtr && mGdkWindow)
-- return (*sGdkWindowGetScaleFactorPtr)(mGdkWindow);
-+ if (sGdkWindowGetScaleFactorPtr && scaledGdkWindow)
-+ return (*sGdkWindowGetScaleFactorPtr)(scaledGdkWindow);
- return ScreenHelperGTK::GetGTKMonitorScaleFactor();
- }
-
-
diff --git a/mozilla-1574036.patch b/mozilla-1574036.patch
deleted file mode 100644
index c3ecdc7..0000000
--- a/mozilla-1574036.patch
+++ /dev/null
@@ -1,425 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
---- a/widget/gtk/WindowSurfaceWayland.h
-+++ b/widget/gtk/WindowSurfaceWayland.h
-@@ -177,12 +177,9 @@
-
- private:
- WindowBackBuffer* CreateWaylandBuffer(int aWidth, int aHeight);
-- WindowBackBuffer* GetWaylandBufferToDraw(int aWidth, int aHeight,
-- bool aFullScreenUpdate);
-+ WindowBackBuffer* GetWaylandBufferToDraw(bool aCanSwitchBuffer);
-
-- already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(int aWidth, int aHeight,
-- bool aClearBuffer,
-- bool aFullScreenUpdate);
-+ already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(bool aCanSwitchBuffer);
- void UnlockWaylandBuffer();
-
- already_AddRefed<gfx::DrawTarget> LockImageSurface(
-@@ -198,7 +195,10 @@
-
- // TODO: Do we need to hold a reference to nsWindow object?
- nsWindow* mWindow;
-- LayoutDeviceIntRect mLastScreenRect;
-+ // Buffer screen rects helps us understand if we operate on
-+ // the same window size as we're called on WindowSurfaceWayland::Lock().
-+ // mBufferScreenRect is window size when our wayland buffer was allocated.
-+ LayoutDeviceIntRect mBufferScreenRect;
- nsWaylandDisplay* mWaylandDisplay;
- WindowBackBuffer* mWaylandBuffer;
- LayoutDeviceIntRegion mWaylandBufferDamage;
-@@ -211,7 +211,8 @@
- AutoTArray<WindowImageSurface, 30> mDelayedImageCommits;
- bool mDrawToWaylandBufferDirectly;
- bool mPendingCommit;
-- bool mWaylandBufferFullScreenDamage;
-+ bool mWholeWindowBufferDamage;
-+ bool mBufferNeedsClear;
- bool mIsMainThread;
- bool mNeedScaleFactorUpdate;
-
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -499,7 +499,8 @@
- mDelayedCommitHandle(nullptr),
- mDrawToWaylandBufferDirectly(true),
- mPendingCommit(false),
-- mWaylandBufferFullScreenDamage(false),
-+ mWholeWindowBufferDamage(false),
-+ mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
- mNeedScaleFactorUpdate(true) {
- for (int i = 0; i < BACK_BUFFER_NUM; i++) mBackupBuffer[i] = nullptr;
-@@ -565,18 +566,20 @@
- }
-
- WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(
-- int aWidth, int aHeight, bool aFullScreenUpdate) {
-+ bool aCanSwitchBuffer) {
- LOGWAYLAND(("%s [%p] Requested buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- // There's no buffer created yet, create a new one.
- if (!mWaylandBuffer) {
-- MOZ_ASSERT(aFullScreenUpdate, "Created new buffer for partial drawing!");
-+ MOZ_ASSERT(aCanSwitchBuffer && mWholeWindowBufferDamage,
-+ "Created new buffer for partial drawing!");
- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-+ (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-
-- mWaylandBuffer = CreateWaylandBuffer(aWidth, aHeight);
-- mWaylandBufferFullScreenDamage = true;
-+ mWaylandBuffer =
-+ CreateWaylandBuffer(mBufferScreenRect.width, mBufferScreenRect.height);
- mNeedScaleFactorUpdate = true;
- return mWaylandBuffer;
- }
-@@ -593,29 +596,31 @@
- LOGWAYLAND(
- ("%s [%p] Use recent buffer.\n", __PRETTY_FUNCTION__, (void*)this));
-
-- if (mWaylandBuffer->IsMatchingSize(aWidth, aHeight)) {
-+ if (mWaylandBuffer->IsMatchingSize(mBufferScreenRect.width,
-+ mBufferScreenRect.height)) {
- LOGWAYLAND(("%s [%p] Size is ok, use the buffer [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, aWidth, aHeight));
-+ __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
- return mWaylandBuffer;
- }
-
-- if (!aFullScreenUpdate) {
-+ if (!aCanSwitchBuffer) {
- NS_WARNING("We can't resize Wayland buffer for non-fullscreen updates!");
- return nullptr;
- }
-
- LOGWAYLAND(("%s [%p] Reuse buffer with resize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, aWidth, aHeight));
-+ __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-
-- mWaylandBuffer->Resize(aWidth, aHeight);
-+ mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- // There's a chance that scale factor has been changed
- // when buffer size changed
-- mWaylandBufferFullScreenDamage = true;
- mNeedScaleFactorUpdate = true;
- return mWaylandBuffer;
- }
-
-- if (!aFullScreenUpdate) {
-+ if (!aCanSwitchBuffer) {
- return nullptr;
- }
-
-@@ -625,8 +630,10 @@
- availableBuffer++) {
- if (!mBackupBuffer[availableBuffer]) {
- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-- mBackupBuffer[availableBuffer] = CreateWaylandBuffer(aWidth, aHeight);
-+ (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-+ mBackupBuffer[availableBuffer] = CreateWaylandBuffer(
-+ mBufferScreenRect.width, mBufferScreenRect.height);
- break;
- }
-
-@@ -650,23 +657,23 @@
- __PRETTY_FUNCTION__, (void*)this, (void*)lastWaylandBuffer,
- (void*)mWaylandBuffer));
-
-- mWaylandBufferFullScreenDamage = true;
- mNeedScaleFactorUpdate = true;
-
-- bool bufferNeedsResize = !mWaylandBuffer->IsMatchingSize(aWidth, aHeight);
-+ bool bufferNeedsResize = !mWaylandBuffer->IsMatchingSize(
-+ mBufferScreenRect.width, mBufferScreenRect.height);
- if (bufferNeedsResize) {
- LOGWAYLAND(("%s [%p] Resize buffer to [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-- mWaylandBuffer->Resize(aWidth, aHeight);
-+ (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-+ mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- }
-
- return mWaylandBuffer;
- }
-
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::LockWaylandBuffer(
-- int aWidth, int aHeight, bool aClearBuffer, bool aFullScreenUpdate) {
-- WindowBackBuffer* buffer =
-- GetWaylandBufferToDraw(aWidth, aHeight, aFullScreenUpdate);
-+ bool aCanSwitchBuffer) {
-+ WindowBackBuffer* buffer = GetWaylandBufferToDraw(aCanSwitchBuffer);
-
- LOGWAYLAND(("%s [%p] Got buffer %p\n", __PRETTY_FUNCTION__, (void*)this,
- (void*)buffer));
-@@ -675,8 +682,9 @@
- return nullptr;
- }
-
-- if (aClearBuffer) {
-+ if (mBufferNeedsClear && mWholeWindowBufferDamage) {
- buffer->Clear();
-+ mBufferNeedsClear = false;
- }
-
- return buffer->Lock();
-@@ -744,7 +752,7 @@
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
-+ LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-
-@@ -753,54 +761,77 @@
- mWindow->IsWaylandPopup() &&
- (eTransparencyTransparent == mWindow->GetTransparencyMode());
-
-- mDrawToWaylandBufferDirectly =
-- isTransparentPopup ? IsPopupFullScreenUpdate(screenRect, aRegion)
-- : IsWindowFullScreenUpdate(screenRect, aRegion);
-+ // We have request to lock whole buffer/window.
-+ mWholeWindowBufferDamage =
-+ isTransparentPopup ? IsPopupFullScreenUpdate(lockedScreenRect, aRegion)
-+ : IsWindowFullScreenUpdate(lockedScreenRect, aRegion);
-
-- bool needsClear = mWindow->WaylandSurfaceNeedsClear() ||
-- (isTransparentPopup && mDrawToWaylandBufferDirectly);
-+ // Clear buffer when we (re)draw new transparent popup window,
-+ // otherwise leave it as-is, mBufferNeedsClear can be set from previous
-+ // (already pending) commits which are cached now.
-+ if (mWholeWindowBufferDamage) {
-+ mBufferNeedsClear =
-+ mWindow->WaylandSurfaceNeedsClear() || isTransparentPopup;
-+ }
-
- LOGWAYLAND(("%s [%p] lockSize [%d x %d] windowSize [%d x %d]\n",
- __PRETTY_FUNCTION__, (void*)this, lockSize.width, lockSize.height,
-- screenRect.width, screenRect.height));
-+ lockedScreenRect.width, lockedScreenRect.height));
- LOGWAYLAND((" nsWindow = %p\n", mWindow));
- LOGWAYLAND((" isPopup = %d\n", mWindow->IsWaylandPopup()));
- LOGWAYLAND((" isTransparentPopup = %d\n", isTransparentPopup));
- LOGWAYLAND((" IsPopupFullScreenUpdate = %d\n",
-- IsPopupFullScreenUpdate(screenRect, aRegion)));
-+ IsPopupFullScreenUpdate(lockedScreenRect, aRegion)));
- LOGWAYLAND((" IsWindowFullScreenUpdate = %d\n",
-- IsWindowFullScreenUpdate(screenRect, aRegion)));
-- LOGWAYLAND((" needsClear = %d\n", needsClear));
-- LOGWAYLAND(
-- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
-+ IsWindowFullScreenUpdate(lockedScreenRect, aRegion)));
-+ LOGWAYLAND((" mBufferNeedsClear = %d\n", mBufferNeedsClear));
-+ LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-+
-+#if DEBUG
-+ if (!(mBufferScreenRect == lockedScreenRect)) {
-+ LOGWAYLAND((" screen size changed\n"));
-+ }
-+#endif
-
-- // Allow full screen allocation and clear
-- // when window size changed.
-- bool bufferRedraw = !(screenRect == mLastScreenRect);
-- if (bufferRedraw) {
-- mDrawToWaylandBufferDirectly = true;
-- needsClear = true;
-+ if (!(mBufferScreenRect == lockedScreenRect)) {
-+ // Screen (window) size changed and we still have some painting pending
-+ // for the last window size. That can happen when window is resized.
-+ // We can't commit them any more as they're for former window size, so
-+ // scratch them.
-+ mDelayedImageCommits.Clear();
-+
-+ if (!mWholeWindowBufferDamage) {
-+ NS_WARNING("Partial screen update when window is resized!");
-+ // This should not happen. Screen size changed but we got only
-+ // partal screen update instead of whole screen. Discard this painting
-+ // as it produces artifacts.
-+ return nullptr;
-+ }
-+ mBufferScreenRect = lockedScreenRect;
- }
-
-- if (mDrawToWaylandBufferDirectly) {
-+ if (mWholeWindowBufferDamage) {
-+ // We can lock/commit entire buffer direcly.
-+ mDrawToWaylandBufferDirectly = true;
-+
- // If there's any pending image commit scratch them as we're going
- // to redraw the whole sceen anyway.
- mDelayedImageCommits.Clear();
-
-- RefPtr<gfx::DrawTarget> dt =
-- LockWaylandBuffer(screenRect.width, screenRect.height, needsClear,
-- /* aFullScreenUpdate */ true);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-+ /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
- if (dt) {
-- if (bufferRedraw) {
-- mLastScreenRect = screenRect;
-- }
- return dt.forget();
- }
-+ }
-
-- // We don't have any front buffer available. Try indirect drawing
-- // to mImageSurface which is mirrored to front buffer at commit.
-- mDrawToWaylandBufferDirectly = false;
-- }
-+ // We do indirect drawing due to:
-+ //
-+ // 1) We don't have any front buffer available. Try indirect drawing
-+ // to mImageSurface which is mirrored to front buffer at commit.
-+ // 2) Only part of the screen is locked. We can't lock entire screen for
-+ // such drawing as it produces visible artifacts.
-+ mDrawToWaylandBufferDirectly = false;
-
- LOGWAYLAND((" Indirect drawing.\n"));
- return LockImageSurface(lockSize);
-@@ -851,16 +882,14 @@
- LayoutDeviceIntRegion& aWaylandBufferDamage) {
- MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
-
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
-+#ifdef DEBUG
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
--
- gfx::Rect rect(bounds);
-- if (rect.IsEmpty()) {
-- return false;
-- }
-+ MOZ_ASSERT(!rect.IsEmpty(), "Empty drawing?");
-+#endif
-
- LOGWAYLAND(("%s [%p] screenSize [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, screenRect.width, screenRect.height));
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- RefPtr<gfx::SourceSurface> surf =
- gfx::Factory::CreateSourceSurfaceForCairoSurface(
-@@ -871,13 +900,8 @@
- return false;
- }
-
-- // Allow full screen allocation and clear
-- // when window size changed.
-- bool bufferRedraw = !(screenRect == mLastScreenRect);
-- RefPtr<gfx::DrawTarget> dt =
-- LockWaylandBuffer(screenRect.width, screenRect.height,
-- /* needs clear*/ bufferRedraw,
-- /* aFullScreenUpdate */ bufferRedraw);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-+ /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
- if (dt) {
- LOGWAYLAND(
- (" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-@@ -885,14 +909,11 @@
-
- // Draw any delayed image commits first
- DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-+ // Draw image from recent WindowSurfaceWayland::Lock().
- WindowImageSurface::Draw(surf, dt, aRegion);
- // Submit all drawing to final Wayland buffer upload
- aWaylandBufferDamage.OrWith(aRegion);
- UnlockWaylandBuffer();
--
-- if (bufferRedraw) {
-- mLastScreenRect = screenRect;
-- }
- } else {
- mDelayedImageCommits.AppendElement(WindowImageSurface(surf, aRegion));
- LOGWAYLAND((" Added WindowImageSurfaces, cached surfaces %ld\n",
-@@ -930,29 +951,25 @@
- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
- LOGWAYLAND(
- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
-- LOGWAYLAND((" mWaylandBufferFullScreenDamage = %d\n",
-- mWaylandBufferFullScreenDamage));
-+ LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
- LOGWAYLAND((" mDelayedCommitHandle = %p\n", mDelayedCommitHandle));
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-
- if (!mDrawToWaylandBufferDirectly) {
-+ MOZ_ASSERT(mDelayedImageCommits.Length(),
-+ "Indirect drawing without any image?");
-+
- // There's some cached drawings - try to flush them now.
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
-- bool bufferRedraw = !(screenRect == mLastScreenRect);
-- RefPtr<gfx::DrawTarget> dt =
-- LockWaylandBuffer(screenRect.width, screenRect.height,
-- /* needsClear */ bufferRedraw,
-- /* full screen update */ bufferRedraw);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-+ /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-+
- if (dt) {
- LOGWAYLAND(("%s [%p] flushed indirect drawing\n", __PRETTY_FUNCTION__,
- (void*)this));
- DrawDelayedImageCommits(dt, mWaylandBufferDamage);
- UnlockWaylandBuffer();
- mDrawToWaylandBufferDirectly = true;
-- if (bufferRedraw) {
-- mLastScreenRect = screenRect;
-- }
- }
- }
-
-@@ -1000,10 +1017,10 @@
- mLastCommittedSurface = nullptr;
- }
-
-- if (mWaylandBufferFullScreenDamage) {
-- LayoutDeviceIntRect rect = mWindow->GetBounds();
-- wl_surface_damage(waylandSurface, 0, 0, rect.width, rect.height);
-- mWaylandBufferFullScreenDamage = false;
-+ if (mWholeWindowBufferDamage) {
-+ wl_surface_damage(waylandSurface, 0, 0, mBufferScreenRect.width,
-+ mBufferScreenRect.height);
-+ mWholeWindowBufferDamage = false;
- mNeedScaleFactorUpdate = true;
- } else {
- gint scaleFactor = mWindow->GdkScaleFactor();
-@@ -1043,24 +1060,24 @@
-
- #ifdef DEBUG
- {
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
- gfx::IntRect bounds = aInvalidRegion.GetBounds().ToUnknownRect();
- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-
- LOGWAYLAND(("%s [%p] lockSize [%d x %d] screenSize [%d x %d]\n",
- __PRETTY_FUNCTION__, (void*)this, lockSize.width,
-- lockSize.height, screenRect.width, screenRect.height));
-+ lockSize.height, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
-- LOGWAYLAND((" mWaylandBufferFullScreenDamage = %d\n",
-- mWaylandBufferFullScreenDamage));
-+ LOGWAYLAND(
-+ (" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
- }
- #endif
-
- if (mDrawToWaylandBufferDirectly) {
- MOZ_ASSERT(mWaylandBuffer->IsLocked());
- // If we're not at fullscreen damage add drawing area from aInvalidRegion
-- if (!mWaylandBufferFullScreenDamage) {
-+ if (!mWholeWindowBufferDamage) {
- mWaylandBufferDamage.OrWith(aInvalidRegion);
- }
- UnlockWaylandBuffer();
-
diff --git a/mozilla-1576268.patch b/mozilla-1576268.patch
deleted file mode 100644
index 85fd1a8..0000000
--- a/mozilla-1576268.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-diff --git a/widget/gtk/nsClipboardWayland.cpp b/widget/gtk/nsClipboardWayland.cpp
---- a/widget/gtk/nsClipboardWayland.cpp
-+++ b/widget/gtk/nsClipboardWayland.cpp
-@@ -195,6 +195,12 @@
- uint32_t all_actions = WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY |
- WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE;
-
-+ /* Default to move D&D action (Bug 1576268).
-+ */
-+ if (dnd_actions == 0) {
-+ all_actions = WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE;
-+ }
-+
- wl_data_offer_set_actions(mWaylandDataOffer, all_actions, dnd_actions);
-
- /* Workaround Wayland D&D architecture here. To get the data_device_drop()
-
diff --git a/mozilla-1577024.patch b/mozilla-1577024.patch
deleted file mode 100644
index b81f103..0000000
--- a/mozilla-1577024.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1577024 firefox-69.0/widget/gtk/nsWaylandDisplay.cpp
---- firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1577024 2019-09-17 21:09:15.817764591 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.cpp 2019-09-17 21:09:15.822764568 +0200
-@@ -13,10 +13,15 @@ namespace widget {
- #define GBMLIB_NAME "libgbm.so.1"
- #define DRMLIB_NAME "libdrm.so.2"
-
-+#define DMABUF_PREF "widget.wayland_dmabuf_backend.enabled"
-+// See WindowSurfaceWayland::RenderingCacheMode for details.
-+#define CACHE_MODE_PREF "widget.wayland_cache_mode"
-+
- bool nsWaylandDisplay::mIsDMABufEnabled = false;
- // -1 mean the pref was not loaded yet
- int nsWaylandDisplay::mIsDMABufPrefState = -1;
- bool nsWaylandDisplay::mIsDMABufConfigured = false;
-+int nsWaylandDisplay::mRenderingCacheModePref = -1;
-
- wl_display* WaylandDisplayGetWLDisplay(GdkDisplay* aGdkDisplay) {
- if (!aGdkDisplay) {
-@@ -373,14 +378,15 @@ nsWaylandDisplay::nsWaylandDisplay(wl_di
- wl_registry_add_listener(mRegistry, ®istry_listener, this);
-
- if (NS_IsMainThread()) {
-- // We can't load the preference from compositor/render thread,
-- // only from main one. So we can't call it directly from
-- // nsWaylandDisplay::IsDMABufEnabled() as it can be called from various
-- // threads.
-+ // We can't load the preference from compositor/render thread
-+ // so load all Wayland prefs here.
- if (mIsDMABufPrefState == -1) {
-- mIsDMABufPrefState =
-- Preferences::GetBool("widget.wayland_dmabuf_backend.enabled", false);
-+ mIsDMABufPrefState = Preferences::GetBool(DMABUF_PREF, false);
-+ }
-+ if (mRenderingCacheModePref == -1) {
-+ mRenderingCacheModePref = Preferences::GetInt(CACHE_MODE_PREF, 0);
- }
-+
- // Use default event queue in main thread operated by Gtk+.
- mEventQueue = nullptr;
- wl_display_roundtrip(mDisplay);
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1577024 firefox-69.0/widget/gtk/nsWaylandDisplay.h
---- firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1577024 2019-09-17 21:09:15.818764586 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.h 2019-09-17 21:09:15.822764568 +0200
-@@ -83,6 +83,9 @@ class nsWaylandDisplay {
- uint32_t mModifierLo);
- static bool IsDMABufEnabled();
-
-+ // See WindowSurfaceWayland::CacheMode for details.
-+ int GetRenderingCacheModePref() { return mRenderingCacheModePref; };
-+
- private:
- bool ConfigureGbm();
-
-@@ -108,6 +111,7 @@ class nsWaylandDisplay {
- static bool mIsDMABufEnabled;
- static int mIsDMABufPrefState;
- static bool mIsDMABufConfigured;
-+ static int mRenderingCacheModePref;
- };
-
- void WaylandDispatchDisplays();
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1577024 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1577024 2019-09-17 21:09:15.820764577 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-18 08:34:50.568111279 +0200
-@@ -192,7 +192,7 @@ It owns wl_buffer object, owns WaylandDM
- (which provides the DMA Buffer) and ties them together.
-
- WindowBackBufferDMABuf backend is used only when WaylandDMABufSurface is
--available and gfx.wayland_dmabuf_backend.enabled preference is set.
-+available and widget.wayland_dmabuf_backend.enabled preference is set.
-
- */
-
-@@ -519,9 +519,11 @@ WindowSurfaceWayland::WindowSurfaceWayla
- mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
- mNeedScaleFactorUpdate(true) {
-- for (int i = 0; i < BACK_BUFFER_NUM; i++) mBackupBuffer[i] = nullptr;
-- mRenderingCacheMode = CACHE_ALL;
--
-+ for (int i = 0; i < BACK_BUFFER_NUM; i++) {
-+ mBackupBuffer[i] = nullptr;
-+ }
-+ mRenderingCacheMode = static_cast<RenderingCacheMode>(
-+ mWaylandDisplay->GetRenderingCacheModePref());
- }
-
- WindowSurfaceWayland::~WindowSurfaceWayland() {
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1577024 firefox-69.0/widget/gtk/WindowSurfaceWayland.h
diff --git a/mozilla-1579794-1.patch b/mozilla-1579794-1.patch
deleted file mode 100644
index 60c8cab..0000000
--- a/mozilla-1579794-1.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
---- a/widget/gtk/WindowSurfaceWayland.h
-+++ b/widget/gtk/WindowSurfaceWayland.h
-@@ -154,11 +154,12 @@
- void Draw(gfx::DrawTarget* aDest,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
-
-- WindowImageSurface(gfx::SourceSurface* aSurface,
-+ WindowImageSurface(gfxImageSurface* aImageSurface,
- const LayoutDeviceIntRegion& aUpdateRegion);
-
- private:
- RefPtr<gfx::SourceSurface> mSurface;
-+ RefPtr<gfxImageSurface> mImageSurface;
- const LayoutDeviceIntRegion mUpdateRegion;
- };
-
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -890,8 +890,12 @@
- }
-
- WindowImageSurface::WindowImageSurface(
-- gfx::SourceSurface* aSurface, const LayoutDeviceIntRegion& aUpdateRegion)
-- : mSurface(aSurface), mUpdateRegion(aUpdateRegion){};
-+ gfxImageSurface* aImageSurface, const LayoutDeviceIntRegion& aUpdateRegion)
-+ : mImageSurface(aImageSurface), mUpdateRegion(aUpdateRegion) {
-+ mSurface = gfx::Factory::CreateSourceSurfaceForCairoSurface(
-+ mImageSurface->CairoSurface(), mImageSurface->GetSize(),
-+ mImageSurface->Format());
-+}
-
- void WindowSurfaceWayland::DrawDelayedImageCommits(
- gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-@@ -915,36 +919,24 @@
- LOGWAYLAND(("%s [%p] screenSize [%d x %d]\n", __PRETTY_FUNCTION__,
- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
-- RefPtr<gfx::SourceSurface> surf =
-- gfx::Factory::CreateSourceSurfaceForCairoSurface(
-- mImageSurface->CairoSurface(), mImageSurface->GetSize(),
-- mImageSurface->Format());
-- if (!surf) {
-- NS_WARNING("Failed to create source cairo surface!");
-- return false;
-- }
-+ mDelayedImageCommits.AppendElement(
-+ WindowImageSurface(mImageSurface, aRegion));
-+ // mImageSurface is owned by mDelayedImageCommits
-+ mImageSurface = nullptr;
-
- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-- if (dt) {
-- LOGWAYLAND(
-- (" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-- long(mDelayedImageCommits.Length() + 1)));
--
-- // Draw any delayed image commits first
-- DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-- // Draw image from recent WindowSurfaceWayland::Lock().
-- WindowImageSurface::Draw(surf, dt, aRegion);
-- // Submit all drawing to final Wayland buffer upload
-- aWaylandBufferDamage.OrWith(aRegion);
-- UnlockWaylandBuffer();
-- } else {
-- mDelayedImageCommits.AppendElement(WindowImageSurface(surf, aRegion));
-- LOGWAYLAND((" Added WindowImageSurfaces, cached surfaces %ld\n",
-- long(mDelayedImageCommits.Length())));
-+ if (!dt) {
- return false;
- }
-
-+ LOGWAYLAND((" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-+ long(mDelayedImageCommits.Length() + 1)));
-+
-+ // Draw any delayed image commits first
-+ DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-+ UnlockWaylandBuffer();
-+
- return true;
- }
-
-@@ -980,23 +972,6 @@
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-
-- if (!mDrawToWaylandBufferDirectly) {
-- MOZ_ASSERT(mDelayedImageCommits.Length(),
-- "Indirect drawing without any image?");
--
-- // There's some cached drawings - try to flush them now.
-- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
--
-- if (dt) {
-- LOGWAYLAND(("%s [%p] flushed indirect drawing\n", __PRETTY_FUNCTION__,
-- (void*)this));
-- DrawDelayedImageCommits(dt, mWaylandBufferDamage);
-- UnlockWaylandBuffer();
-- mDrawToWaylandBufferDirectly = true;
-- }
-- }
--
- wl_surface* waylandSurface = mWindow->GetWaylandSurface();
- if (!waylandSurface) {
- LOGWAYLAND(("%s [%p] mWindow->GetWaylandSurface() failed, delay commit.\n",
-@@ -1105,6 +1080,7 @@
- mWaylandBufferDamage.OrWith(aInvalidRegion);
- }
- UnlockWaylandBuffer();
-+ mPendingCommit = true;
- } else {
- MOZ_ASSERT(!mWaylandBuffer->IsLocked(),
- "Drawing to already locked buffer?");
-@@ -1112,12 +1088,13 @@
- mWaylandBufferDamage)) {
- // Our cached drawing is flushed, we can draw fullscreen again.
- mDrawToWaylandBufferDirectly = true;
-+ mPendingCommit = true;
- }
- }
-
-- // We're ready to commit.
-- mPendingCommit = true;
-- CommitWaylandBuffer();
-+ if (mPendingCommit) {
-+ CommitWaylandBuffer();
-+ }
- }
-
- void WindowSurfaceWayland::FrameCallbackHandler() {
-
diff --git a/mozilla-1579794-2.patch b/mozilla-1579794-2.patch
deleted file mode 100644
index a8c249b..0000000
--- a/mozilla-1579794-2.patch
+++ /dev/null
@@ -1,166 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
---- a/widget/gtk/WindowSurfaceWayland.h
-+++ b/widget/gtk/WindowSurfaceWayland.h
-@@ -204,7 +204,6 @@
- const LayoutDeviceIntRegion& aRegion,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
- void CommitWaylandBuffer();
-- void CalcRectScale(LayoutDeviceIntRect& aRect, int scale);
-
- void DrawDelayedImageCommits(gfx::DrawTarget* aDrawTarget,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -951,16 +951,6 @@
- }
- }
-
--void WindowSurfaceWayland::CalcRectScale(LayoutDeviceIntRect& aRect,
-- int aScale) {
-- aRect.x = aRect.x / aScale;
-- aRect.y = aRect.y / aScale;
--
-- // We don't need exact damage size - just safely cover the round errors.
-- aRect.width = (aRect.width / aScale) + 2;
-- aRect.height = (aRect.height / aScale) + 2;
--}
--
- void WindowSurfaceWayland::CommitWaylandBuffer() {
- MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
-
-@@ -1022,16 +1012,10 @@
- mWholeWindowBufferDamage = false;
- mNeedScaleFactorUpdate = true;
- } else {
-- gint scaleFactor = mWindow->GdkScaleFactor();
- for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
- iter.Next()) {
- mozilla::LayoutDeviceIntRect r = iter.Get();
-- // We need to remove the scale factor because the wl_surface_damage
-- // also multiplies by current scale factor.
-- if (scaleFactor > 1) {
-- CalcRectScale(r, scaleFactor);
-- }
-- wl_surface_damage(waylandSurface, r.x, r.y, r.width, r.height);
-+ wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
- }
- }
-
-diff --git a/widget/gtk/mozcontainer.cpp b/widget/gtk/mozcontainer.cpp
---- a/widget/gtk/mozcontainer.cpp
-+++ b/widget/gtk/mozcontainer.cpp
-@@ -578,16 +578,12 @@
- return nullptr;
- }
- GdkDisplay* display = gtk_widget_get_display(GTK_WIDGET(container));
-+ nsWaylandDisplay* waylandDisplay = WaylandDisplayGet(display);
-
- // Available as of GTK 3.8+
-- static auto sGdkWaylandDisplayGetWlCompositor =
-- (wl_compositor * (*)(GdkDisplay*))
-- dlsym(RTLD_DEFAULT, "gdk_wayland_display_get_wl_compositor");
-- struct wl_compositor* compositor =
-- sGdkWaylandDisplayGetWlCompositor(display);
-+ struct wl_compositor* compositor = waylandDisplay->GetCompositor();
- container->surface = wl_compositor_create_surface(compositor);
-
-- nsWaylandDisplay* waylandDisplay = WaylandDisplayGet(display);
- container->subsurface = wl_subcompositor_get_subsurface(
- waylandDisplay->GetSubcompositor(), container->surface,
- moz_container_get_gtk_container_surface(container));
-diff --git a/widget/gtk/mozwayland/mozwayland.h b/widget/gtk/mozwayland/mozwayland.h
---- a/widget/gtk/mozwayland/mozwayland.h
-+++ b/widget/gtk/mozwayland/mozwayland.h
-@@ -108,6 +108,17 @@
- }
- #endif
-
-+#ifndef WL_SURFACE_DAMAGE_BUFFER
-+# define WL_SURFACE_DAMAGE_BUFFER 9
-+
-+static inline void wl_surface_damage_buffer(struct wl_surface* wl_surface,
-+ int32_t x, int32_t y, int32_t width,
-+ int32_t height) {
-+ wl_proxy_marshal((struct wl_proxy*)wl_surface, WL_SURFACE_DAMAGE_BUFFER, x, y,
-+ width, height);
-+}
-+#endif
-+
- #ifdef __cplusplus
- }
- #endif
-diff --git a/widget/gtk/mozwayland/mozwayland.c b/widget/gtk/mozwayland/mozwayland.c
---- a/widget/gtk/mozwayland/mozwayland.c
-+++ b/widget/gtk/mozwayland/mozwayland.c
-@@ -30,6 +30,7 @@
- const struct wl_interface wl_seat_interface;
- const struct wl_interface wl_surface_interface;
- const struct wl_interface wl_subsurface_interface;
-+const struct wl_interface wl_compositor_interface;
- const struct wl_interface wl_subcompositor_interface;
- #pragma GCC visibility pop
-
-diff --git a/widget/gtk/nsWaylandDisplay.h b/widget/gtk/nsWaylandDisplay.h
---- a/widget/gtk/nsWaylandDisplay.h
-+++ b/widget/gtk/nsWaylandDisplay.h
-@@ -45,6 +45,7 @@
- MessageLoop* GetDispatcherThreadLoop() { return mDispatcherThreadLoop; }
- wl_display* GetDisplay() { return mDisplay; };
- wl_event_queue* GetEventQueue() { return mEventQueue; };
-+ wl_compositor* GetCompositor(void) { return mCompositor; };
- wl_subcompositor* GetSubcompositor(void) { return mSubcompositor; };
- wl_data_device_manager* GetDataDeviceManager(void) {
- return mDataDeviceManager;
-@@ -56,6 +57,7 @@
- };
-
- void SetShm(wl_shm* aShm);
-+ void SetCompositor(wl_compositor* aCompositor);
- void SetSubcompositor(wl_subcompositor* aSubcompositor);
- void SetDataDeviceManager(wl_data_device_manager* aDataDeviceManager);
- void SetSeat(wl_seat* aSeat);
-@@ -88,6 +90,7 @@
- wl_display* mDisplay;
- wl_event_queue* mEventQueue;
- wl_data_device_manager* mDataDeviceManager;
-+ wl_compositor* mCompositor;
- wl_subcompositor* mSubcompositor;
- wl_seat* mSeat;
- wl_shm* mShm;
-diff --git a/widget/gtk/nsWaylandDisplay.cpp b/widget/gtk/nsWaylandDisplay.cpp
---- a/widget/gtk/nsWaylandDisplay.cpp
-+++ b/widget/gtk/nsWaylandDisplay.cpp
-@@ -116,6 +116,10 @@
-
- void nsWaylandDisplay::SetShm(wl_shm* aShm) { mShm = aShm; }
-
-+void nsWaylandDisplay::SetCompositor(wl_compositor* aCompositor) {
-+ mCompositor = aCompositor;
-+}
-+
- void nsWaylandDisplay::SetSubcompositor(wl_subcompositor* aSubcompositor) {
- mSubcompositor = aSubcompositor;
- }
-@@ -223,6 +227,12 @@
- wl_proxy_set_queue((struct wl_proxy*)primary_selection_device_manager,
- display->GetEventQueue());
- display->SetPrimarySelectionDeviceManager(primary_selection_device_manager);
-+ } else if (strcmp(interface, "wl_compositor") == 0) {
-+ // Requested wl_compositor version 4 as we need wl_surface_damage_buffer().
-+ auto compositor = static_cast<wl_compositor*>(
-+ wl_registry_bind(registry, id, &wl_compositor_interface, 4));
-+ wl_proxy_set_queue((struct wl_proxy*)compositor, display->GetEventQueue());
-+ display->SetCompositor(compositor);
- } else if (strcmp(interface, "wl_subcompositor") == 0) {
- auto subcompositor = static_cast<wl_subcompositor*>(
- wl_registry_bind(registry, id, &wl_subcompositor_interface, 1));
-@@ -306,6 +316,7 @@
- mDisplay(aDisplay),
- mEventQueue(nullptr),
- mDataDeviceManager(nullptr),
-+ mCompositor(nullptr),
- mSubcompositor(nullptr),
- mSeat(nullptr),
- mShm(nullptr),
-
diff --git a/mozilla-1579823.patch b/mozilla-1579823.patch
deleted file mode 100644
index 9e00d4f..0000000
--- a/mozilla-1579823.patch
+++ /dev/null
@@ -1,306 +0,0 @@
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1579823 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1579823 2019-09-12 07:53:06.119602913 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-12 07:54:47.410105270 +0200
-@@ -326,13 +326,13 @@ void WindowBackBufferShm::Create(int aWi
- mHeight = aHeight;
-
- LOGWAYLAND((
-- "%s [%p] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__, (void*)this,
-+ "WindowBackBufferShm::Create [%p] wl_buffer %p ID %d\n", (void*)this,
- (void*)mWaylandBuffer,
- mWaylandBuffer ? wl_proxy_get_id((struct wl_proxy*)mWaylandBuffer) : -1));
- }
-
- void WindowBackBufferShm::Release() {
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(("WindowBackBufferShm::Release [%p]\n", (void*)this));
-
- wl_buffer_destroy(mWaylandBuffer);
- mWidth = mHeight = 0;
-@@ -358,8 +358,8 @@ WindowBackBufferShm::~WindowBackBufferSh
- bool WindowBackBufferShm::Resize(int aWidth, int aHeight) {
- if (aWidth == mWidth && aHeight == mHeight) return true;
-
-- LOGWAYLAND(
-- ("%s [%p] %d %d\n", __PRETTY_FUNCTION__, (void*)this, aWidth, aHeight));
-+ LOGWAYLAND(("WindowBackBufferShm::Resize [%p] %d %d\n", (void*)this, aWidth,
-+ aHeight));
-
- Release();
- Create(aWidth, aHeight);
-@@ -369,7 +369,7 @@ bool WindowBackBufferShm::Resize(int aWi
-
- void WindowBackBuffer::Attach(wl_surface* aSurface) {
- LOGWAYLAND(
-- ("%s [%p] wl_surface %p ID %d wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
-+ ("WindowBackBuffer::Attach [%p] wl_surface %p ID %d wl_buffer %p ID %d\n",
- (void*)this, (void*)aSurface,
- aSurface ? wl_proxy_get_id((struct wl_proxy*)aSurface) : -1,
- (void*)GetWlBuffer(),
-@@ -382,8 +382,8 @@ void WindowBackBuffer::Attach(wl_surface
- }
-
- void WindowBackBufferShm::Detach(wl_buffer* aBuffer) {
-- LOGWAYLAND(("%s [%p] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__, (void*)this,
-- (void*)aBuffer,
-+ LOGWAYLAND(("WindowBackBufferShm::Detach [%p] wl_buffer %p ID %d\n",
-+ (void*)this, (void*)aBuffer,
- aBuffer ? wl_proxy_get_id((struct wl_proxy*)aBuffer) : -1));
-
- mAttached = false;
-@@ -404,7 +404,7 @@ bool WindowBackBufferShm::SetImageDataFr
-
- already_AddRefed<gfx::DrawTarget> WindowBackBufferShm::Lock() {
- LOGWAYLAND((
-- "%s [%p] [%d x %d] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
-+ "WindowBackBufferShm::Lock [%p] [%d x %d] wl_buffer %p ID %d\n",
- (void*)this, mWidth, mHeight, (void*)mWaylandBuffer,
- mWaylandBuffer ? wl_proxy_get_id((struct wl_proxy*)mWaylandBuffer) : -1));
-
-@@ -419,16 +419,17 @@ WindowBackBufferDMABuf::WindowBackBuffer
- nsWaylandDisplay* aWaylandDisplay, int aWidth, int aHeight)
- : WindowBackBuffer(aWaylandDisplay) {
- mDMAbufSurface.Create(aWidth, aHeight);
--
-- LOGWAYLAND(("%s [%p] Created DMABuf buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-+ LOGWAYLAND(
-+ ("WindowBackBufferDMABuf::WindowBackBufferDMABuf [%p] Created DMABuf "
-+ "buffer [%d x %d]\n",
-+ (void*)this, aWidth, aHeight));
- }
-
- WindowBackBufferDMABuf::~WindowBackBufferDMABuf() { mDMAbufSurface.Release(); }
-
- already_AddRefed<gfx::DrawTarget> WindowBackBufferDMABuf::Lock() {
- LOGWAYLAND(
-- ("%s [%p] [%d x %d] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
-+ ("WindowBackBufferDMABuf::Lock [%p] [%d x %d] wl_buffer %p ID %d\n",
- (void*)this, GetWidth(), GetHeight(), (void*)GetWlBuffer(),
- GetWlBuffer() ? wl_proxy_get_id((struct wl_proxy*)GetWlBuffer()) : -1));
-
-@@ -534,7 +535,8 @@ WindowSurfaceWayland::~WindowSurfaceWayl
- bool WindowSurfaceWayland::UseDMABufBackend() {
- if (!mUseDMABufInitialized) {
- mUseDMABuf = nsWaylandDisplay::IsDMABufEnabled();
-- LOGWAYLAND(("%s DMABuf state %d\n", __PRETTY_FUNCTION__, mUseDMABuf));
-+ LOGWAYLAND(("WindowSurfaceWayland::UseDMABufBackend DMABuf state %d\n",
-+ mUseDMABuf));
- mUseDMABufInitialized = true;
- }
- return mUseDMABuf;
-@@ -567,15 +569,16 @@ WindowBackBuffer* WindowSurfaceWayland::
-
- WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(
- bool aCanSwitchBuffer) {
-- LOGWAYLAND(("%s [%p] Requested buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::GetWaylandBufferToDraw [%p] Requested buffer [%d "
-+ "x %d]\n",
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- // There's no buffer created yet, create a new one.
- if (!mWaylandBuffer) {
- MOZ_ASSERT(aCanSwitchBuffer && mWholeWindowBufferDamage,
- "Created new buffer for partial drawing!");
-- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width,
-+ LOGWAYLAND((" Created new buffer [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
-
- mWaylandBuffer =
-@@ -586,21 +589,19 @@ WindowBackBuffer* WindowSurfaceWayland::
-
- #ifdef DEBUG
- if (mWaylandBuffer->IsAttached()) {
-- LOGWAYLAND(("%s [%p] Buffer %p is attached, need to find a new one.\n",
-- __PRETTY_FUNCTION__, (void*)this, mWaylandBuffer));
-+ LOGWAYLAND((" Buffer %p is attached, need to find a new one.\n",
-+ mWaylandBuffer));
- }
- #endif
-
- // Reuse existing buffer
- if (!mWaylandBuffer->IsAttached()) {
-- LOGWAYLAND(
-- ("%s [%p] Use recent buffer.\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND((" Use recent buffer.\n"));
-
- if (mWaylandBuffer->IsMatchingSize(mBufferScreenRect.width,
- mBufferScreenRect.height)) {
-- LOGWAYLAND(("%s [%p] Size is ok, use the buffer [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ LOGWAYLAND((" Size is ok, use the buffer [%d x %d]\n",
-+ mBufferScreenRect.width, mBufferScreenRect.height));
- return mWaylandBuffer;
- }
-
-@@ -609,9 +610,8 @@ WindowBackBuffer* WindowSurfaceWayland::
- return nullptr;
- }
-
-- LOGWAYLAND(("%s [%p] Reuse buffer with resize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ LOGWAYLAND((" Reuse buffer with resize [%d x %d]\n",
-+ mBufferScreenRect.width, mBufferScreenRect.height));
-
- mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- // There's a chance that scale factor has been changed
-@@ -629,8 +629,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- for (availableBuffer = 0; availableBuffer < BACK_BUFFER_NUM;
- availableBuffer++) {
- if (!mBackupBuffer[availableBuffer]) {
-- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width,
-+ LOGWAYLAND((" Created new buffer [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
- mBackupBuffer[availableBuffer] = CreateWaylandBuffer(
- mBufferScreenRect.width, mBufferScreenRect.height);
-@@ -643,8 +642,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- }
-
- if (MOZ_UNLIKELY(availableBuffer == BACK_BUFFER_NUM)) {
-- LOGWAYLAND(("%s [%p] No drawing buffer available!\n", __PRETTY_FUNCTION__,
-- (void*)this));
-+ LOGWAYLAND((" No drawing buffer available!\n"));
- NS_WARNING("No drawing buffer available");
- return nullptr;
- }
-@@ -653,17 +651,15 @@ WindowBackBuffer* WindowSurfaceWayland::
- mWaylandBuffer = mBackupBuffer[availableBuffer];
- mBackupBuffer[availableBuffer] = lastWaylandBuffer;
-
-- LOGWAYLAND(("%s [%p] Buffer flip new back %p new front %p \n",
-- __PRETTY_FUNCTION__, (void*)this, (void*)lastWaylandBuffer,
-- (void*)mWaylandBuffer));
-+ LOGWAYLAND((" Buffer flip new back %p new front %p \n",
-+ (void*)lastWaylandBuffer, (void*)mWaylandBuffer));
-
- mNeedScaleFactorUpdate = true;
-
- bool bufferNeedsResize = !mWaylandBuffer->IsMatchingSize(
- mBufferScreenRect.width, mBufferScreenRect.height);
- if (bufferNeedsResize) {
-- LOGWAYLAND(("%s [%p] Resize buffer to [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width,
-+ LOGWAYLAND((" Resize buffer to [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
- mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- }
-@@ -675,8 +671,8 @@ already_AddRefed<gfx::DrawTarget> Window
- bool aCanSwitchBuffer) {
- WindowBackBuffer* buffer = GetWaylandBufferToDraw(aCanSwitchBuffer);
-
-- LOGWAYLAND(("%s [%p] Got buffer %p\n", __PRETTY_FUNCTION__, (void*)this,
-- (void*)buffer));
-+ LOGWAYLAND(("WindowSurfaceWayland::LockWaylandBuffer [%p] Got buffer %p\n",
-+ (void*)this, (void*)buffer));
-
- if (!buffer) {
- return nullptr;
-@@ -691,7 +687,7 @@ already_AddRefed<gfx::DrawTarget> Window
- }
-
- void WindowSurfaceWayland::UnlockWaylandBuffer() {
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(("WindowSurfaceWayland::UnlockWaylandBuffer [%p]\n", (void*)this));
- mWaylandBuffer->Unlock();
- }
-
-@@ -774,9 +770,11 @@ already_AddRefed<gfx::DrawTarget> Window
- mWindow->WaylandSurfaceNeedsClear() || isTransparentPopup;
- }
-
-- LOGWAYLAND(("%s [%p] lockSize [%d x %d] windowSize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, lockSize.width, lockSize.height,
-- lockedScreenRect.width, lockedScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::Lock [%p] lockSize [%d x %d] windowSize [%d x "
-+ "%d]\n",
-+ (void*)this, lockSize.width, lockSize.height, lockedScreenRect.width,
-+ lockedScreenRect.height));
- LOGWAYLAND((" nsWindow = %p\n", mWindow));
- LOGWAYLAND((" isPopup = %d\n", mWindow->IsWaylandPopup()));
- LOGWAYLAND((" isTransparentPopup = %d\n", isTransparentPopup));
-@@ -892,8 +890,10 @@ bool WindowSurfaceWayland::CommitImageSu
- MOZ_ASSERT(!rect.IsEmpty(), "Empty drawing?");
- #endif
-
-- LOGWAYLAND(("%s [%p] screenSize [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::CommitImageSurfaceToWaylandBuffer [%p] "
-+ "screenSize [%d x %d]\n",
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- mDelayedImageCommits.AppendElement(
- WindowImageSurface(mImageSurface, aRegion));
-@@ -930,7 +930,7 @@ static void WaylandBufferDelayCommitHand
- void WindowSurfaceWayland::CommitWaylandBuffer() {
- MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
-
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(("WindowSurfaceWayland::CommitWaylandBuffer [%p]\n", (void*)this));
- LOGWAYLAND(
- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-@@ -940,8 +940,8 @@ void WindowSurfaceWayland::CommitWayland
-
- wl_surface* waylandSurface = mWindow->GetWaylandSurface();
- if (!waylandSurface) {
-- LOGWAYLAND(("%s [%p] mWindow->GetWaylandSurface() failed, delay commit.\n",
-- __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND((" [%p] mWindow->GetWaylandSurface() failed, delay commit.\n",
-+ (void*)this));
-
- // Target window is not created yet - delay the commit. This can happen only
- // when the window is newly created and there's no active
-@@ -969,8 +969,7 @@ void WindowSurfaceWayland::CommitWayland
- // We have an active frame callback request so handle it.
- if (mFrameCallback) {
- if (waylandSurface == mLastCommittedSurface) {
-- LOGWAYLAND(("%s [%p] wait for frame callback.\n", __PRETTY_FUNCTION__,
-- (void*)this));
-+ LOGWAYLAND((" [%p] wait for frame callback.\n", (void*)this));
- // We have an active frame callback pending from our recent surface.
- // It means we should defer the commit to FrameCallbackHandler().
- return;
-@@ -1022,10 +1021,11 @@ void WindowSurfaceWayland::Commit(const
- gfx::IntRect bounds = aInvalidRegion.GetBounds().ToUnknownRect();
- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-
-- LOGWAYLAND(("%s [%p] lockSize [%d x %d] screenSize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, lockSize.width,
-- lockSize.height, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::Commit [%p] lockSize [%d x %d] screenSize [%d "
-+ "x %d]\n",
-+ (void*)this, lockSize.width, lockSize.height, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
- LOGWAYLAND(
-@@ -1064,7 +1064,8 @@ void WindowSurfaceWayland::FrameCallback
- MOZ_ASSERT(mLastCommittedSurface != nullptr,
- "FrameCallbackHandler() called without valid wl_surface!");
-
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::FrameCallbackHandler [%p]\n", (void*)this));
-
- wl_callback_destroy(mFrameCallback);
- mFrameCallback = nullptr;
-@@ -1077,7 +1078,8 @@ void WindowSurfaceWayland::FrameCallback
- void WindowSurfaceWayland::DelayedCommitHandler() {
- MOZ_ASSERT(mDelayedCommitHandle != nullptr, "Missing mDelayedCommitHandle!");
-
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::DelayedCommitHandler [%p]\n", (void*)this));
-
- *mDelayedCommitHandle = nullptr;
- free(mDelayedCommitHandle);
diff --git a/mozilla-1579849.patch b/mozilla-1579849.patch
deleted file mode 100644
index fb3e8c2..0000000
--- a/mozilla-1579849.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.old firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.old 2019-09-11 14:34:36.687382704 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-11 14:39:02.000391578 +0200
-@@ -751,6 +751,10 @@ static bool IsPopupFullScreenUpdate(Layo
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::Lock(
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-+
-+ // Disable all commits from frame callback handler and delayed comit handler
-+ // as we're updated by gecko compositor.
-+ mPendingCommit = false;
-
- LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
diff --git a/mozilla-1580152.patch b/mozilla-1580152.patch
deleted file mode 100644
index 6260d3c..0000000
--- a/mozilla-1580152.patch
+++ /dev/null
@@ -1,618 +0,0 @@
-diff -up firefox-69.0/widget/gtk/mozwayland/mozwayland.h.mozilla-1580152 firefox-69.0/widget/gtk/mozwayland/mozwayland.h
---- firefox-69.0/widget/gtk/mozwayland/mozwayland.h.mozilla-1580152 2019-09-16 11:11:30.081299217 +0200
-+++ firefox-69.0/widget/gtk/mozwayland/mozwayland.h 2019-09-16 11:11:30.089299191 +0200
-@@ -27,6 +27,9 @@ MOZ_EXPORT struct wl_proxy* wl_proxy_mar
- struct wl_proxy* proxy, uint32_t opcode,
- const struct wl_interface* interface, ...);
-
-+MOZ_EXPORT void* wl_proxy_create_wrapper(void* proxy);
-+MOZ_EXPORT void wl_proxy_wrapper_destroy(void* proxy_wrapper);
-+
- /* We need implement some missing functions from wayland-client-protocol.h
- */
- #ifndef WL_DATA_DEVICE_MANAGER_DND_ACTION_ENUM
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1580152 firefox-69.0/widget/gtk/nsWaylandDisplay.cpp
---- firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1580152 2019-09-16 11:11:30.081299217 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.cpp 2019-09-16 11:11:30.089299191 +0200
-@@ -243,6 +243,61 @@ bool nsWaylandDisplay::DispatchEventQueu
- return true;
- }
-
-+void nsWaylandDisplay::SyncEnd() {
-+ wl_callback_destroy(mSyncCallback);
-+ mSyncCallback = NULL;
-+}
-+
-+static void wayland_sync_callback(void* data, struct wl_callback* callback,
-+ uint32_t time) {
-+ auto display = static_cast<nsWaylandDisplay*>(data);
-+ display->SyncEnd();
-+}
-+
-+static const struct wl_callback_listener sync_callback_listener = {
-+ .done = wayland_sync_callback};
-+
-+void nsWaylandDisplay::SyncBegin() {
-+ WaitForSyncEnd();
-+
-+ // Use wl_display_sync() to synchronize wayland events.
-+ // See dri2_wl_swap_buffers_with_damage() from MESA
-+ // or wl_display_roundtrip_queue() from wayland-client.
-+ struct wl_display* displayWrapper =
-+ static_cast<wl_display*>(wl_proxy_create_wrapper((void*)mDisplay));
-+ if (!displayWrapper) {
-+ NS_WARNING("Failed to create wl_proxy wrapper!");
-+ return;
-+ }
-+
-+ wl_proxy_set_queue((struct wl_proxy*)displayWrapper, mEventQueue);
-+ mSyncCallback = wl_display_sync(displayWrapper);
-+ wl_proxy_wrapper_destroy((void*)displayWrapper);
-+
-+ if (!mSyncCallback) {
-+ NS_WARNING("Failed to create wl_display_sync callback!");
-+ return;
-+ }
-+
-+ wl_callback_add_listener(mSyncCallback, &sync_callback_listener, this);
-+ wl_display_flush(mDisplay);
-+}
-+
-+void nsWaylandDisplay::WaitForSyncEnd() {
-+ // We're done here
-+ if (!mSyncCallback) {
-+ return;
-+ }
-+
-+ while (mSyncCallback != NULL) {
-+ if (wl_display_dispatch_queue(mDisplay, mEventQueue) == -1) {
-+ NS_WARNING("wl_display_dispatch_queue failed!");
-+ SyncEnd();
-+ return;
-+ }
-+ }
-+}
-+
- bool nsWaylandDisplay::Matches(wl_display* aDisplay) {
- return mThreadId == PR_GetCurrentThread() && aDisplay == mDisplay;
- }
-@@ -305,6 +360,7 @@ nsWaylandDisplay::nsWaylandDisplay(wl_di
- mSubcompositor(nullptr),
- mSeat(nullptr),
- mShm(nullptr),
-+ mSyncCallback(nullptr),
- mPrimarySelectionDeviceManager(nullptr),
- mRegistry(nullptr),
- mGbmDevice(nullptr),
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1580152 firefox-69.0/widget/gtk/nsWaylandDisplay.h
---- firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1580152 2019-09-16 11:11:30.081299217 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.h 2019-09-16 11:11:30.089299191 +0200
-@@ -41,6 +41,11 @@ class nsWaylandDisplay {
- virtual ~nsWaylandDisplay();
-
- bool DispatchEventQueue();
-+
-+ void SyncBegin();
-+ void SyncEnd();
-+ void WaitForSyncEnd();
-+
- bool Matches(wl_display* aDisplay);
-
- MessageLoop* GetDispatcherThreadLoop() { return mDispatcherThreadLoop; }
-@@ -90,6 +95,7 @@ class nsWaylandDisplay {
- wl_subcompositor* mSubcompositor;
- wl_seat* mSeat;
- wl_shm* mShm;
-+ wl_callback* mSyncCallback;
- gtk_primary_selection_device_manager* mPrimarySelectionDeviceManager;
- wl_registry* mRegistry;
- zwp_linux_dmabuf_v1* mDmabuf;
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1580152 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1580152 2019-09-16 11:11:30.086299200 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-16 11:57:35.462193492 +0200
-@@ -32,6 +32,9 @@ extern mozilla::LazyLogModule gWidgetWay
- # define LOGWAYLAND(args)
- #endif /* MOZ_LOGGING */
-
-+// Maximal compositin timeout it miliseconds
-+#define COMPOSITING_TIMEOUT 200
-+
- namespace mozilla {
- namespace widget {
-
-@@ -198,6 +201,10 @@ available and gfx.wayland_dmabuf_backend
- #define BUFFER_BPP 4
- gfx::SurfaceFormat WindowBackBuffer::mFormat = gfx::SurfaceFormat::B8G8R8A8;
-
-+nsWaylandDisplay* WindowBackBuffer::GetWaylandDisplay() {
-+ return mWindowSurfaceWayland->GetWaylandDisplay();
-+}
-+
- int WaylandShmPool::CreateTemporaryFile(int aSize) {
- const char* tmppath = getenv("XDG_RUNTIME_DIR");
- MOZ_RELEASE_ASSERT(tmppath, "Missing XDG_RUNTIME_DIR env variable.");
-@@ -342,10 +349,11 @@ void WindowBackBufferShm::Clear() {
- memset(mShmPool.GetImageData(), 0, mHeight * mWidth * BUFFER_BPP);
- }
-
--WindowBackBufferShm::WindowBackBufferShm(nsWaylandDisplay* aWaylandDisplay,
-- int aWidth, int aHeight)
-- : WindowBackBuffer(aWaylandDisplay),
-- mShmPool(aWaylandDisplay, aWidth * aHeight * BUFFER_BPP),
-+WindowBackBufferShm::WindowBackBufferShm(
-+ WindowSurfaceWayland* aWindowSurfaceWayland, int aWidth, int aHeight)
-+ : WindowBackBuffer(aWindowSurfaceWayland),
-+ mShmPool(aWindowSurfaceWayland->GetWaylandDisplay(),
-+ aWidth * aHeight * BUFFER_BPP),
- mWaylandBuffer(nullptr),
- mWidth(aWidth),
- mHeight(aHeight),
-@@ -387,6 +395,9 @@ void WindowBackBufferShm::Detach(wl_buff
- aBuffer ? wl_proxy_get_id((struct wl_proxy*)aBuffer) : -1));
-
- mAttached = false;
-+
-+ // Commit any potential cached drawings from latest Lock()/Commit() cycle.
-+ mWindowSurfaceWayland->CommitWaylandBuffer();
- }
-
- bool WindowBackBufferShm::SetImageDataFromBuffer(
-@@ -416,8 +427,8 @@ already_AddRefed<gfx::DrawTarget> Window
- }
-
- WindowBackBufferDMABuf::WindowBackBufferDMABuf(
-- nsWaylandDisplay* aWaylandDisplay, int aWidth, int aHeight)
-- : WindowBackBuffer(aWaylandDisplay) {
-+ WindowSurfaceWayland* aWindowSurfaceWayland, int aWidth, int aHeight)
-+ : WindowBackBuffer(aWindowSurfaceWayland) {
- mDMAbufSurface.Create(aWidth, aHeight);
- LOGWAYLAND(
- ("WindowBackBufferDMABuf::WindowBackBufferDMABuf [%p] Created DMABuf "
-@@ -475,6 +486,9 @@ bool WindowBackBufferDMABuf::SetImageDat
-
- void WindowBackBufferDMABuf::Detach(wl_buffer* aBuffer) {
- mDMAbufSurface.WLBufferDetach();
-+
-+ // Commit any potential cached drawings from latest Lock()/Commit() cycle.
-+ mWindowSurfaceWayland->CommitWaylandBuffer();
- }
-
- void WindowBackBufferDMABuf::Clear() { mDMAbufSurface.Clear(); }
-@@ -496,10 +510,11 @@ WindowSurfaceWayland::WindowSurfaceWayla
- mWaylandBuffer(nullptr),
- mFrameCallback(nullptr),
- mLastCommittedSurface(nullptr),
-- mDisplayThreadMessageLoop(MessageLoop::current()),
- mDelayedCommitHandle(nullptr),
-+ mLastCommitTime(0),
- mDrawToWaylandBufferDirectly(true),
-- mPendingCommit(false),
-+ mBufferPendingCommit(false),
-+ mBufferCommitAllowed(false),
- mWholeWindowBufferDamage(false),
- mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
-@@ -508,7 +523,7 @@ WindowSurfaceWayland::WindowSurfaceWayla
- }
-
- WindowSurfaceWayland::~WindowSurfaceWayland() {
-- if (mPendingCommit) {
-+ if (mBufferPendingCommit) {
- NS_WARNING("Deleted WindowSurfaceWayland with a pending commit!");
- }
-
-@@ -547,7 +562,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- if (UseDMABufBackend()) {
- static bool sDMABufBufferCreated = false;
- WindowBackBuffer* buffer =
-- new WindowBackBufferDMABuf(mWaylandDisplay, aWidth, aHeight);
-+ new WindowBackBufferDMABuf(this, aWidth, aHeight);
- if (buffer) {
- sDMABufBufferCreated = true;
- return buffer;
-@@ -564,7 +579,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- }
- }
-
-- return new WindowBackBufferShm(mWaylandDisplay, aWidth, aHeight);
-+ return new WindowBackBufferShm(this, aWidth, aHeight);
- }
-
- WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(
-@@ -675,6 +690,11 @@ already_AddRefed<gfx::DrawTarget> Window
- (void*)this, (void*)buffer));
-
- if (!buffer) {
-+ if (mLastCommitTime && (g_get_monotonic_time() / 1000) - mLastCommitTime >
-+ COMPOSITING_TIMEOUT) {
-+ NS_WARNING(
-+ "Slow response from Wayland compositor, visual glitches ahead.");
-+ }
- return nullptr;
- }
-
-@@ -724,10 +744,9 @@ static bool IsPopupFullScreenUpdate(Layo
- // box is equal to window borders.
- if (aRegion.GetNumRects() > 2) return false;
-
-- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
--
-- return (screenRect.width == lockSize.width &&
-+ IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-+ return (lockSize.x == 0 && lockSize.y == 0 &&
-+ screenRect.width == lockSize.width &&
- screenRect.height == lockSize.height);
- }
-
-@@ -738,8 +757,7 @@ static bool IsPopupFullScreenUpdate(Layo
- to clip/buffer the drawing and we can return wl_buffer directly
- for drawing.
- - mWaylandBuffer is available - that's an ideal situation.
-- - mWaylandBuffer is locked by compositor - flip buffers and draw.
-- - if we can't flip buffers - go B)
-+ - mWaylandBuffer is locked by compositor - go B)
-
- B) Lock() is requested for part(s) of screen. We need to provide temporary
- surface to draw into and copy result (clipped) to target wl_surface.
-@@ -747,14 +765,17 @@ static bool IsPopupFullScreenUpdate(Layo
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::Lock(
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
--
-- // Disable all commits from frame callback handler and delayed comit handler
-- // as we're updated by gecko compositor.
-- mPendingCommit = false;
-+
-+ // Wait until all pending events are processed. There may be queued
-+ // wl_buffer release event which releases our wl_buffer for further rendering.
-+ mWaylandDisplay->WaitForSyncEnd();
-+
-+ // Disable all commits (from potential frame callback/delayed handlers)
-+ // until next WindowSurfaceWayland::Commit() call.
-+ mBufferCommitAllowed = false;
-
- LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
-- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-+ gfx::IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-
- // Are we asked for entire nsWindow to draw?
- bool isTransparentPopup =
-@@ -775,10 +796,10 @@ already_AddRefed<gfx::DrawTarget> Window
- }
-
- LOGWAYLAND(
-- ("WindowSurfaceWayland::Lock [%p] lockSize [%d x %d] windowSize [%d x "
-- "%d]\n",
-- (void*)this, lockSize.width, lockSize.height, lockedScreenRect.width,
-- lockedScreenRect.height));
-+ ("WindowSurfaceWayland::Lock [%p] [%d,%d] -> [%d x %d] rects %d "
-+ "windowSize [%d x %d]\n",
-+ (void*)this, lockSize.x, lockSize.y, lockSize.width, lockSize.height,
-+ aRegion.GetNumRects(), lockedScreenRect.width, lockedScreenRect.height));
- LOGWAYLAND((" nsWindow = %p\n", mWindow));
- LOGWAYLAND((" isPopup = %d\n", mWindow->IsWaylandPopup()));
- LOGWAYLAND((" isTransparentPopup = %d\n", isTransparentPopup));
-@@ -789,7 +810,7 @@ already_AddRefed<gfx::DrawTarget> Window
- LOGWAYLAND((" mBufferNeedsClear = %d\n", mBufferNeedsClear));
- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-
--#if DEBUG
-+#if MOZ_LOGGING
- if (!(mBufferScreenRect == lockedScreenRect)) {
- LOGWAYLAND((" screen size changed\n"));
- }
-@@ -836,7 +857,7 @@ already_AddRefed<gfx::DrawTarget> Window
- mDrawToWaylandBufferDirectly = false;
-
- LOGWAYLAND((" Indirect drawing.\n"));
-- return LockImageSurface(lockSize);
-+ return LockImageSurface(gfx::IntSize(lockSize.XMost(), lockSize.YMost()));
- }
-
- void WindowImageSurface::Draw(gfx::SourceSurface* aSurface,
-@@ -875,34 +896,42 @@ WindowImageSurface::WindowImageSurface(
- mImageSurface->Format());
- }
-
-+void WindowSurfaceWayland::CacheImageSurface(
-+ const LayoutDeviceIntRegion& aRegion) {
-+#ifdef MOZ_LOGGING
-+ gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-+ LOGWAYLAND(("WindowSurfaceWayland::CacheImageSurface [%p]\n", (void*)this));
-+ LOGWAYLAND((" rects num %d\n", aRegion.GetNumRects()));
-+ LOGWAYLAND((" bounds [ %d, %d] -> [%d x %d]\n", bounds.x, bounds.y,
-+ bounds.width, bounds.height));
-+#endif
-+
-+ mDelayedImageCommits.AppendElement(
-+ WindowImageSurface(mImageSurface, aRegion));
-+ // mImageSurface is owned by mDelayedImageCommits
-+ mImageSurface = nullptr;
-+
-+ LOGWAYLAND(
-+ (" There's %d cached images\n", int(mDelayedImageCommits.Length())));
-+}
-+
- void WindowSurfaceWayland::DrawDelayedImageCommits(
- gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::DrawDelayedImageCommits [%p]\n", (void*)this));
-+
- for (unsigned int i = 0; i < mDelayedImageCommits.Length(); i++) {
- mDelayedImageCommits[i].Draw(aDrawTarget, aWaylandBufferDamage);
- }
- mDelayedImageCommits.Clear();
- }
-
--bool WindowSurfaceWayland::CommitImageSurfaceToWaylandBuffer(
-- const LayoutDeviceIntRegion& aRegion,
-- LayoutDeviceIntRegion& aWaylandBufferDamage) {
-- MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
--
--#ifdef DEBUG
-- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::Rect rect(bounds);
-- MOZ_ASSERT(!rect.IsEmpty(), "Empty drawing?");
--#endif
--
-- LOGWAYLAND(
-- ("WindowSurfaceWayland::CommitImageSurfaceToWaylandBuffer [%p] "
-- "screenSize [%d x %d]\n",
-- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-+bool WindowSurfaceWayland::CommitImageCacheToWaylandBuffer() {
-+ if (!mDelayedImageCommits.Length()) {
-+ return false;
-+ }
-
-- mDelayedImageCommits.AppendElement(
-- WindowImageSurface(mImageSurface, aRegion));
-- // mImageSurface is owned by mDelayedImageCommits
-- mImageSurface = nullptr;
-+ MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
-
- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-@@ -911,10 +940,10 @@ bool WindowSurfaceWayland::CommitImageSu
- }
-
- LOGWAYLAND((" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-- long(mDelayedImageCommits.Length() + 1)));
-+ long(mDelayedImageCommits.Length())));
-
- // Draw any delayed image commits first
-- DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-+ DrawDelayedImageCommits(dt, mWaylandBufferDamage);
- UnlockWaylandBuffer();
-
- return true;
-@@ -932,7 +961,8 @@ static void WaylandBufferDelayCommitHand
- }
-
- void WindowSurfaceWayland::CommitWaylandBuffer() {
-- MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
-+ MOZ_ASSERT(!mWaylandBuffer->IsAttached(),
-+ "We can't draw to attached wayland buffer!");
-
- LOGWAYLAND(("WindowSurfaceWayland::CommitWaylandBuffer [%p]\n", (void*)this));
- LOGWAYLAND(
-@@ -941,6 +971,21 @@ void WindowSurfaceWayland::CommitWayland
- LOGWAYLAND((" mDelayedCommitHandle = %p\n", mDelayedCommitHandle));
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-+ LOGWAYLAND((" mBufferPendingCommit = %d\n", mBufferPendingCommit));
-+ LOGWAYLAND((" mBufferCommitAllowed = %d\n", mBufferCommitAllowed));
-+
-+ if (!mBufferCommitAllowed) {
-+ return;
-+ }
-+
-+ if (CommitImageCacheToWaylandBuffer()) {
-+ mBufferPendingCommit = true;
-+ }
-+
-+ // There's nothing to do here
-+ if (!mBufferPendingCommit) {
-+ return;
-+ }
-
- wl_surface* waylandSurface = mWindow->GetWaylandSurface();
- if (!waylandSurface) {
-@@ -986,6 +1031,7 @@ void WindowSurfaceWayland::CommitWayland
- }
-
- if (mWholeWindowBufferDamage) {
-+ LOGWAYLAND((" send whole screen damage\n"));
- wl_surface_damage(waylandSurface, 0, 0, mBufferScreenRect.width,
- mBufferScreenRect.height);
- mWholeWindowBufferDamage = false;
-@@ -994,6 +1040,8 @@ void WindowSurfaceWayland::CommitWayland
- for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
- iter.Next()) {
- mozilla::LayoutDeviceIntRect r = iter.Get();
-+ LOGWAYLAND((" wl_surface_damage_buffer [%d, %d] -> [%d, %d]\n", r.x,
-+ r.y, r.width, r.height));
- wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
- }
- }
-@@ -1012,24 +1060,31 @@ void WindowSurfaceWayland::CommitWayland
-
- mWaylandBuffer->Attach(waylandSurface);
- mLastCommittedSurface = waylandSurface;
-+ mLastCommitTime = g_get_monotonic_time() / 1000;
-+
-+ // Ask wl_display to start events synchronization. We're going wait
-+ // until all events are processed before next WindowSurfaceWayland::Lock()
-+ // as we need freed wl_buffer there.
-+ mWaylandDisplay->SyncBegin();
-
- // There's no pending commit, all changes are sent to compositor.
-- mPendingCommit = false;
-+ mBufferPendingCommit = false;
- }
-
- void WindowSurfaceWayland::Commit(const LayoutDeviceIntRegion& aInvalidRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-
--#ifdef DEBUG
-- {
-- gfx::IntRect bounds = aInvalidRegion.GetBounds().ToUnknownRect();
-- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-+ // Flush all waiting events explicitly as we need
-+ // mWaylandDisplay->FlushEventQueue();
-
-+#ifdef MOZ_LOGGING
-+ {
-+ gfx::IntRect lockSize = aInvalidRegion.GetBounds().ToUnknownRect();
- LOGWAYLAND(
-- ("WindowSurfaceWayland::Commit [%p] lockSize [%d x %d] screenSize [%d "
-- "x %d]\n",
-- (void*)this, lockSize.width, lockSize.height, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ ("WindowSurfaceWayland::Commit [%p] damage size [%d, %d] -> [%d x %d]"
-+ "screenSize [%d x %d]\n",
-+ (void*)this, lockSize.x, lockSize.y, lockSize.width, lockSize.height,
-+ mBufferScreenRect.width, mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
- LOGWAYLAND(
-@@ -1044,21 +1099,15 @@ void WindowSurfaceWayland::Commit(const
- mWaylandBufferDamage.OrWith(aInvalidRegion);
- }
- UnlockWaylandBuffer();
-- mPendingCommit = true;
-+ mBufferPendingCommit = true;
- } else {
- MOZ_ASSERT(!mWaylandBuffer->IsLocked(),
- "Drawing to already locked buffer?");
-- if (CommitImageSurfaceToWaylandBuffer(aInvalidRegion,
-- mWaylandBufferDamage)) {
-- // Our cached drawing is flushed, we can draw fullscreen again.
-- mDrawToWaylandBufferDirectly = true;
-- mPendingCommit = true;
-- }
-+ CacheImageSurface(aInvalidRegion);
- }
-
-- if (mPendingCommit) {
-- CommitWaylandBuffer();
-- }
-+ mBufferCommitAllowed = true;
-+ CommitWaylandBuffer();
- }
-
- void WindowSurfaceWayland::FrameCallbackHandler() {
-@@ -1074,9 +1123,7 @@ void WindowSurfaceWayland::FrameCallback
- wl_callback_destroy(mFrameCallback);
- mFrameCallback = nullptr;
-
-- if (mPendingCommit) {
-- CommitWaylandBuffer();
-- }
-+ CommitWaylandBuffer();
- }
-
- void WindowSurfaceWayland::DelayedCommitHandler() {
-@@ -1089,9 +1136,7 @@ void WindowSurfaceWayland::DelayedCommit
- free(mDelayedCommitHandle);
- mDelayedCommitHandle = nullptr;
-
-- if (mPendingCommit) {
-- CommitWaylandBuffer();
-- }
-+ CommitWaylandBuffer();
- }
-
- } // namespace widget
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1580152 firefox-69.0/widget/gtk/WindowSurfaceWayland.h
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1580152 2019-09-16 11:11:30.080299221 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.h 2019-09-16 11:11:30.090299187 +0200
-@@ -17,6 +17,8 @@
- namespace mozilla {
- namespace widget {
-
-+class WindowSurfaceWayland;
-+
- // Allocates and owns shared memory for Wayland drawing surface
- class WaylandShmPool {
- public:
-@@ -69,20 +71,22 @@ class WindowBackBuffer {
-
- static gfx::SurfaceFormat GetSurfaceFormat() { return mFormat; }
-
-- nsWaylandDisplay* GetWaylandDisplay() { return mWaylandDisplay; };
-+ nsWaylandDisplay* GetWaylandDisplay();
-
-- WindowBackBuffer(nsWaylandDisplay* aWaylandDisplay)
-- : mWaylandDisplay(aWaylandDisplay){};
-+ WindowBackBuffer(WindowSurfaceWayland* aWindowSurfaceWayland)
-+ : mWindowSurfaceWayland(aWindowSurfaceWayland){};
- virtual ~WindowBackBuffer(){};
-
-+ protected:
-+ WindowSurfaceWayland* mWindowSurfaceWayland;
-+
- private:
- static gfx::SurfaceFormat mFormat;
-- nsWaylandDisplay* mWaylandDisplay;
- };
-
- class WindowBackBufferShm : public WindowBackBuffer {
- public:
-- WindowBackBufferShm(nsWaylandDisplay* aWaylandDisplay, int aWidth,
-+ WindowBackBufferShm(WindowSurfaceWayland* aWindowSurfaceWayland, int aWidth,
- int aHeight);
- ~WindowBackBufferShm();
-
-@@ -121,8 +125,8 @@ class WindowBackBufferShm : public Windo
-
- class WindowBackBufferDMABuf : public WindowBackBuffer {
- public:
-- WindowBackBufferDMABuf(nsWaylandDisplay* aWaylandDisplay, int aWidth,
-- int aHeight);
-+ WindowBackBufferDMABuf(WindowSurfaceWayland* aWindowSurfaceWayland,
-+ int aWidth, int aHeight);
- ~WindowBackBufferDMABuf();
-
- bool IsAttached();
-@@ -175,6 +179,9 @@ class WindowSurfaceWayland : public Wind
- void Commit(const LayoutDeviceIntRegion& aInvalidRegion) final;
- void FrameCallbackHandler();
- void DelayedCommitHandler();
-+ void CommitWaylandBuffer();
-+
-+ nsWaylandDisplay* GetWaylandDisplay() { return mWaylandDisplay; };
-
- private:
- WindowBackBuffer* CreateWaylandBuffer(int aWidth, int aHeight);
-@@ -185,10 +192,9 @@ class WindowSurfaceWayland : public Wind
-
- already_AddRefed<gfx::DrawTarget> LockImageSurface(
- const gfx::IntSize& aLockSize);
-- bool CommitImageSurfaceToWaylandBuffer(
-- const LayoutDeviceIntRegion& aRegion,
-- LayoutDeviceIntRegion& aWaylandBufferDamage);
-- void CommitWaylandBuffer();
-+
-+ void CacheImageSurface(const LayoutDeviceIntRegion& aRegion);
-+ bool CommitImageCacheToWaylandBuffer();
-
- void DrawDelayedImageCommits(gfx::DrawTarget* aDrawTarget,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
-@@ -205,12 +211,13 @@ class WindowSurfaceWayland : public Wind
- WindowBackBuffer* mBackupBuffer[BACK_BUFFER_NUM];
- wl_callback* mFrameCallback;
- wl_surface* mLastCommittedSurface;
-- MessageLoop* mDisplayThreadMessageLoop;
- WindowSurfaceWayland** mDelayedCommitHandle;
- RefPtr<gfxImageSurface> mImageSurface;
- AutoTArray<WindowImageSurface, 30> mDelayedImageCommits;
-+ int64_t mLastCommitTime;
- bool mDrawToWaylandBufferDirectly;
-- bool mPendingCommit;
-+ bool mBufferPendingCommit;
-+ bool mBufferCommitAllowed;
- bool mWholeWindowBufferDamage;
- bool mBufferNeedsClear;
- bool mIsMainThread;
diff --git a/mozilla-1581748.patch b/mozilla-1581748.patch
deleted file mode 100644
index 9177f5b..0000000
--- a/mozilla-1581748.patch
+++ /dev/null
@@ -1,574 +0,0 @@
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1581748 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1581748 2019-09-17 13:19:47.190908284 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-17 13:19:47.196908262 +0200
-@@ -32,7 +32,7 @@ extern mozilla::LazyLogModule gWidgetWay
- # define LOGWAYLAND(args)
- #endif /* MOZ_LOGGING */
-
--// Maximal compositin timeout it miliseconds
-+// Maximal compositing timeout it miliseconds
- #define COMPOSITING_TIMEOUT 200
-
- namespace mozilla {
-@@ -513,13 +513,15 @@ WindowSurfaceWayland::WindowSurfaceWayla
- mDelayedCommitHandle(nullptr),
- mLastCommitTime(0),
- mDrawToWaylandBufferDirectly(true),
-+ mCanSwitchWaylandBuffer(true),
- mBufferPendingCommit(false),
- mBufferCommitAllowed(false),
-- mWholeWindowBufferDamage(false),
- mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
- mNeedScaleFactorUpdate(true) {
- for (int i = 0; i < BACK_BUFFER_NUM; i++) mBackupBuffer[i] = nullptr;
-+ mRenderingCacheMode = CACHE_ALL;
-+
- }
-
- WindowSurfaceWayland::~WindowSurfaceWayland() {
-@@ -591,8 +593,6 @@ WindowBackBuffer* WindowSurfaceWayland::
-
- // There's no buffer created yet, create a new one.
- if (!mWaylandBuffer) {
-- MOZ_ASSERT(aCanSwitchBuffer && mWholeWindowBufferDamage,
-- "Created new buffer for partial drawing!");
- LOGWAYLAND((" Created new buffer [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
-
-@@ -682,9 +682,8 @@ WindowBackBuffer* WindowSurfaceWayland::
- return mWaylandBuffer;
- }
-
--already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::LockWaylandBuffer(
-- bool aCanSwitchBuffer) {
-- WindowBackBuffer* buffer = GetWaylandBufferToDraw(aCanSwitchBuffer);
-+already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::LockWaylandBuffer() {
-+ WindowBackBuffer* buffer = GetWaylandBufferToDraw(mCanSwitchWaylandBuffer);
-
- LOGWAYLAND(("WindowSurfaceWayland::LockWaylandBuffer [%p] Got buffer %p\n",
- (void*)this, (void*)buffer));
-@@ -698,7 +697,9 @@ already_AddRefed<gfx::DrawTarget> Window
- return nullptr;
- }
-
-- if (mBufferNeedsClear && mWholeWindowBufferDamage) {
-+ mCanSwitchWaylandBuffer = false;
-+
-+ if (mBufferNeedsClear) {
- buffer->Clear();
- mBufferNeedsClear = false;
- }
-@@ -728,40 +729,30 @@ already_AddRefed<gfx::DrawTarget> Window
- WindowBackBuffer::GetSurfaceFormat());
- }
-
--static bool IsWindowFullScreenUpdate(LayoutDeviceIntRect& screenRect,
-- const LayoutDeviceIntRegion& aRegion) {
-- if (aRegion.GetNumRects() > 1) return false;
--
-- IntRect rect = aRegion.RectIter().Get().ToUnknownRect();
-- return (rect.x == 0 && rect.y == 0 && screenRect.width == rect.width &&
-- screenRect.height == rect.height);
-+static bool IsWindowFullScreenUpdate(
-+ LayoutDeviceIntRect& aScreenRect,
-+ const LayoutDeviceIntRegion& aUpdatedRegion) {
-+ if (aUpdatedRegion.GetNumRects() > 1) return false;
-+
-+ IntRect rect = aUpdatedRegion.RectIter().Get().ToUnknownRect();
-+ return (rect.x == 0 && rect.y == 0 && aScreenRect.width == rect.width &&
-+ aScreenRect.height == rect.height);
- }
-
--static bool IsPopupFullScreenUpdate(LayoutDeviceIntRect& screenRect,
-- const LayoutDeviceIntRegion& aRegion) {
-+static bool IsPopupFullScreenUpdate(
-+ LayoutDeviceIntRect& aScreenRect,
-+ const LayoutDeviceIntRegion& aUpdatedRegion) {
- // We know that popups can be drawn from two parts; a panel and an arrow.
- // Assume we redraw whole popups when we have two rects and bounding
- // box is equal to window borders.
-- if (aRegion.GetNumRects() > 2) return false;
-+ if (aUpdatedRegion.GetNumRects() > 2) return false;
-
-- IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-+ gfx::IntRect lockSize = aUpdatedRegion.GetBounds().ToUnknownRect();
- return (lockSize.x == 0 && lockSize.y == 0 &&
-- screenRect.width == lockSize.width &&
-- screenRect.height == lockSize.height);
-+ aScreenRect.width == lockSize.width &&
-+ aScreenRect.height == lockSize.height);
- }
-
--/*
-- There are some situations which can happen here:
--
-- A) Lock() is called to whole surface. In that case we don't need
-- to clip/buffer the drawing and we can return wl_buffer directly
-- for drawing.
-- - mWaylandBuffer is available - that's an ideal situation.
-- - mWaylandBuffer is locked by compositor - go B)
--
-- B) Lock() is requested for part(s) of screen. We need to provide temporary
-- surface to draw into and copy result (clipped) to target wl_surface.
-- */
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::Lock(
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-@@ -777,22 +768,31 @@ already_AddRefed<gfx::DrawTarget> Window
- LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
- gfx::IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-
-- // Are we asked for entire nsWindow to draw?
- bool isTransparentPopup =
- mWindow->IsWaylandPopup() &&
- (eTransparencyTransparent == mWindow->GetTransparencyMode());
-
-- // We have request to lock whole buffer/window.
-- mWholeWindowBufferDamage =
-- isTransparentPopup ? IsPopupFullScreenUpdate(lockedScreenRect, aRegion)
-- : IsWindowFullScreenUpdate(lockedScreenRect, aRegion);
--
-- // Clear buffer when we (re)draw new transparent popup window,
-- // otherwise leave it as-is, mBufferNeedsClear can be set from previous
-- // (already pending) commits which are cached now.
-- if (mWholeWindowBufferDamage) {
-+ bool windowRedraw = isTransparentPopup
-+ ? IsPopupFullScreenUpdate(lockedScreenRect, aRegion)
-+ : IsWindowFullScreenUpdate(lockedScreenRect, aRegion);
-+ if (windowRedraw) {
-+ // Clear buffer when we (re)draw new transparent popup window,
-+ // otherwise leave it as-is, mBufferNeedsClear can be set from previous
-+ // (already pending) commits which are cached now.
- mBufferNeedsClear =
- mWindow->WaylandSurfaceNeedsClear() || isTransparentPopup;
-+
-+ // Store info that we can switch WaylandBuffer when we flush
-+ // mImageSurface / mDelayedImageCommits. Don't clear it - it's cleared
-+ // at LockWaylandBuffer() when we actualy switch the buffer.
-+ mCanSwitchWaylandBuffer = windowRedraw;
-+
-+ // We do full buffer repaint so clear our cached drawings.
-+ mDelayedImageCommits.Clear();
-+ mWaylandBufferDamage.SetEmpty();
-+
-+ // Also do scale factor update for whole window updates just to be sure.
-+ mNeedScaleFactorUpdate = true;
- }
-
- LOGWAYLAND(
-@@ -808,7 +808,7 @@ already_AddRefed<gfx::DrawTarget> Window
- LOGWAYLAND((" IsWindowFullScreenUpdate = %d\n",
- IsWindowFullScreenUpdate(lockedScreenRect, aRegion)));
- LOGWAYLAND((" mBufferNeedsClear = %d\n", mBufferNeedsClear));
-- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-+ LOGWAYLAND((" windowRedraw = %d\n", windowRedraw));
-
- #if MOZ_LOGGING
- if (!(mBufferScreenRect == lockedScreenRect)) {
-@@ -822,8 +822,9 @@ already_AddRefed<gfx::DrawTarget> Window
- // We can't commit them any more as they're for former window size, so
- // scratch them.
- mDelayedImageCommits.Clear();
-+ mWaylandBufferDamage.SetEmpty();
-
-- if (!mWholeWindowBufferDamage) {
-+ if (!windowRedraw) {
- NS_WARNING("Partial screen update when window is resized!");
- // This should not happen. Screen size changed but we got only
- // partal screen update instead of whole screen. Discard this painting
-@@ -833,52 +834,56 @@ already_AddRefed<gfx::DrawTarget> Window
- mBufferScreenRect = lockedScreenRect;
- }
-
-- if (mWholeWindowBufferDamage) {
-- // We can lock/commit entire buffer direcly.
-- mDrawToWaylandBufferDirectly = true;
--
-- // If there's any pending image commit scratch them as we're going
-- // to redraw the whole sceen anyway.
-- mDelayedImageCommits.Clear();
-+ mDrawToWaylandBufferDirectly =
-+ (windowRedraw || mRenderingCacheMode != CACHE_ALL);
-
-- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-+ if (mDrawToWaylandBufferDirectly) {
-+ LOGWAYLAND((" Direct drawing\n"));
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer();
- if (dt) {
-+ if (!windowRedraw) {
-+ DrawDelayedImageCommits(dt, mWaylandBufferDamage);
-+ }
- return dt.forget();
- }
- }
-
-- // We do indirect drawing due to:
-- //
-- // 1) We don't have any front buffer available. Try indirect drawing
-- // to mImageSurface which is mirrored to front buffer at commit.
-- // 2) Only part of the screen is locked. We can't lock entire screen for
-- // such drawing as it produces visible artifacts.
-+ // Any caching is disabled and we don't have any back buffer available.
-+ if (mRenderingCacheMode == CACHE_NONE) {
-+ return nullptr;
-+ }
-+
-+ // We do indirect drawing because there isn't any front buffer available.
-+ // Do indirect drawing to mImageSurface which is commited to wayland
-+ // wl_buffer by DrawDelayedImageCommits() later.
- mDrawToWaylandBufferDirectly = false;
-
- LOGWAYLAND((" Indirect drawing.\n"));
- return LockImageSurface(gfx::IntSize(lockSize.XMost(), lockSize.YMost()));
- }
-
-+bool WindowImageSurface::OverlapsSurface(
-+ class WindowImageSurface& aBottomSurface) {
-+ return mUpdateRegion.Contains(aBottomSurface.mUpdateRegion);
-+}
-+
- void WindowImageSurface::Draw(gfx::SourceSurface* aSurface,
- gfx::DrawTarget* aDest,
- const LayoutDeviceIntRegion& aRegion) {
-- uint32_t numRects = aRegion.GetNumRects();
-- if (numRects != 1) {
-- AutoTArray<IntRect, 32> rects;
-- rects.SetCapacity(numRects);
-- for (auto iter = aRegion.RectIter(); !iter.Done(); iter.Next()) {
-- rects.AppendElement(iter.Get().ToUnknownRect());
-- }
-- aDest->PushDeviceSpaceClipRects(rects.Elements(), rects.Length());
-- }
--
-+#ifdef MOZ_LOGGING
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::Rect rect(bounds);
-- aDest->DrawSurface(aSurface, rect, rect);
-+ LOGWAYLAND(("WindowImageSurface::Draw\n"));
-+ LOGWAYLAND((" rects num %d\n", aRegion.GetNumRects()));
-+ LOGWAYLAND((" bounds [ %d, %d] -> [%d x %d]\n", bounds.x, bounds.y,
-+ bounds.width, bounds.height));
-+#endif
-
-- if (numRects != 1) {
-- aDest->PopClip();
-+ for (auto iter = aRegion.RectIter(); !iter.Done(); iter.Next()) {
-+ mozilla::LayoutDeviceIntRect r = iter.Get();
-+ gfx::Rect rect(r.ToUnknownRect());
-+ LOGWAYLAND((" draw rect [%f,%f] -> [%f x %f]\n", rect.x, rect.y,
-+ rect.width, rect.height));
-+ aDest->DrawSurface(aSurface, rect, rect);
- }
- }
-
-@@ -896,6 +901,18 @@ WindowImageSurface::WindowImageSurface(
- mImageSurface->Format());
- }
-
-+void WindowSurfaceWayland::DrawDelayedImageCommits(
-+ gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::DrawDelayedImageCommits [%p]\n", (void*)this));
-+ MOZ_ASSERT(mDelayedImageCommits.Length() > 0, "Nothing to draw?");
-+
-+ for (unsigned int i = 0; i < mDelayedImageCommits.Length(); i++) {
-+ mDelayedImageCommits[i].Draw(aDrawTarget, aWaylandBufferDamage);
-+ }
-+ mDelayedImageCommits.Clear();
-+}
-+
- void WindowSurfaceWayland::CacheImageSurface(
- const LayoutDeviceIntRegion& aRegion) {
- #ifdef MOZ_LOGGING
-@@ -906,8 +923,26 @@ void WindowSurfaceWayland::CacheImageSur
- bounds.width, bounds.height));
- #endif
-
-- mDelayedImageCommits.AppendElement(
-- WindowImageSurface(mImageSurface, aRegion));
-+ WindowImageSurface surf = WindowImageSurface(mImageSurface, aRegion);
-+
-+ if (mDelayedImageCommits.Length()) {
-+ int lastSurf = mDelayedImageCommits.Length() - 1;
-+ if (surf.OverlapsSurface(mDelayedImageCommits[lastSurf])) {
-+#ifdef MOZ_LOGGING
-+ {
-+ gfx::IntRect size = mDelayedImageCommits[lastSurf]
-+ .GetUpdateRegion()
-+ ->GetBounds()
-+ .ToUnknownRect();
-+ LOGWAYLAND((" removing [ %d, %d] -> [%d x %d]\n", size.x, size.y,
-+ size.width, size.height));
-+ }
-+#endif
-+ mDelayedImageCommits.RemoveElementAt(lastSurf);
-+ }
-+ }
-+
-+ mDelayedImageCommits.AppendElement(surf);
- // mImageSurface is owned by mDelayedImageCommits
- mImageSurface = nullptr;
-
-@@ -915,17 +950,6 @@ void WindowSurfaceWayland::CacheImageSur
- (" There's %d cached images\n", int(mDelayedImageCommits.Length())));
- }
-
--void WindowSurfaceWayland::DrawDelayedImageCommits(
-- gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-- LOGWAYLAND(
-- ("WindowSurfaceWayland::DrawDelayedImageCommits [%p]\n", (void*)this));
--
-- for (unsigned int i = 0; i < mDelayedImageCommits.Length(); i++) {
-- mDelayedImageCommits[i].Draw(aDrawTarget, aWaylandBufferDamage);
-- }
-- mDelayedImageCommits.Clear();
--}
--
- bool WindowSurfaceWayland::CommitImageCacheToWaylandBuffer() {
- if (!mDelayedImageCommits.Length()) {
- return false;
-@@ -933,8 +957,7 @@ bool WindowSurfaceWayland::CommitImageCa
-
- MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
-
-- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer();
- if (!dt) {
- return false;
- }
-@@ -942,7 +965,6 @@ bool WindowSurfaceWayland::CommitImageCa
- LOGWAYLAND((" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
- long(mDelayedImageCommits.Length())));
-
-- // Draw any delayed image commits first
- DrawDelayedImageCommits(dt, mWaylandBufferDamage);
- UnlockWaylandBuffer();
-
-@@ -967,7 +989,7 @@ void WindowSurfaceWayland::CommitWayland
- LOGWAYLAND(("WindowSurfaceWayland::CommitWaylandBuffer [%p]\n", (void*)this));
- LOGWAYLAND(
- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
-- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-+ LOGWAYLAND((" mCanSwitchWaylandBuffer = %d\n", mCanSwitchWaylandBuffer));
- LOGWAYLAND((" mDelayedCommitHandle = %p\n", mDelayedCommitHandle));
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-@@ -1030,20 +1052,11 @@ void WindowSurfaceWayland::CommitWayland
- mLastCommittedSurface = nullptr;
- }
-
-- if (mWholeWindowBufferDamage) {
-- LOGWAYLAND((" send whole screen damage\n"));
-- wl_surface_damage(waylandSurface, 0, 0, mBufferScreenRect.width,
-- mBufferScreenRect.height);
-- mWholeWindowBufferDamage = false;
-- mNeedScaleFactorUpdate = true;
-- } else {
-- for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
-- iter.Next()) {
-- mozilla::LayoutDeviceIntRect r = iter.Get();
-- LOGWAYLAND((" wl_surface_damage_buffer [%d, %d] -> [%d, %d]\n", r.x,
-- r.y, r.width, r.height));
-- wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
-- }
-+ for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done(); iter.Next()) {
-+ mozilla::LayoutDeviceIntRect r = iter.Get();
-+ LOGWAYLAND((" wl_surface_damage_buffer [%d, %d] -> [%d, %d]\n", r.x, r.y,
-+ r.width, r.height));
-+ wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
- }
-
- // Clear all back buffer damage as we're committing
-@@ -1062,9 +1075,9 @@ void WindowSurfaceWayland::CommitWayland
- mLastCommittedSurface = waylandSurface;
- mLastCommitTime = g_get_monotonic_time() / 1000;
-
-- // Ask wl_display to start events synchronization. We're going wait
-+ // Ask wl_display to start events synchronization. We're going to wait
- // until all events are processed before next WindowSurfaceWayland::Lock()
-- // as we need freed wl_buffer there.
-+ // as we hope for free wl_buffer there.
- mWaylandDisplay->SyncBegin();
-
- // There's no pending commit, all changes are sent to compositor.
-@@ -1074,9 +1087,6 @@ void WindowSurfaceWayland::CommitWayland
- void WindowSurfaceWayland::Commit(const LayoutDeviceIntRegion& aInvalidRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-
-- // Flush all waiting events explicitly as we need
-- // mWaylandDisplay->FlushEventQueue();
--
- #ifdef MOZ_LOGGING
- {
- gfx::IntRect lockSize = aInvalidRegion.GetBounds().ToUnknownRect();
-@@ -1087,17 +1097,12 @@ void WindowSurfaceWayland::Commit(const
- mBufferScreenRect.width, mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
-- LOGWAYLAND(
-- (" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
- }
- #endif
-
- if (mDrawToWaylandBufferDirectly) {
- MOZ_ASSERT(mWaylandBuffer->IsLocked());
-- // If we're not at fullscreen damage add drawing area from aInvalidRegion
-- if (!mWholeWindowBufferDamage) {
-- mWaylandBufferDamage.OrWith(aInvalidRegion);
-- }
-+ mWaylandBufferDamage.OrWith(aInvalidRegion);
- UnlockWaylandBuffer();
- mBufferPendingCommit = true;
- } else {
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1581748 firefox-69.0/widget/gtk/WindowSurfaceWayland.h
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1581748 2019-09-17 13:19:47.191908280 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.h 2019-09-17 13:19:47.197908258 +0200
-@@ -161,6 +161,10 @@ class WindowImageSurface {
- WindowImageSurface(gfxImageSurface* aImageSurface,
- const LayoutDeviceIntRegion& aUpdateRegion);
-
-+ bool OverlapsSurface(class WindowImageSurface& aBottomSurface);
-+
-+ const LayoutDeviceIntRegion* GetUpdateRegion() { return &mUpdateRegion; };
-+
- private:
- RefPtr<gfx::SourceSurface> mSurface;
- RefPtr<gfxImageSurface> mImageSurface;
-@@ -174,20 +178,59 @@ class WindowSurfaceWayland : public Wind
- explicit WindowSurfaceWayland(nsWindow* aWindow);
- ~WindowSurfaceWayland();
-
-+ // Lock() / Commit() are called by gecko when Firefox
-+ // wants to display something. Lock() returns a DrawTarget
-+ // where gecko paints. When gecko is done it calls Commit()
-+ // and we try to send the DrawTarget (backed by wl_buffer)
-+ // to wayland compositor.
-+ //
-+ // If we fail (wayland compositor is busy,
-+ // wl_surface is not created yet) we queue the painting
-+ // and we send it to wayland compositor in FrameCallbackHandler()/
-+ // DelayedCommitHandler/CommitWaylandBuffer().
- already_AddRefed<gfx::DrawTarget> Lock(
- const LayoutDeviceIntRegion& aRegion) override;
- void Commit(const LayoutDeviceIntRegion& aInvalidRegion) final;
-+
-+ // It's called from wayland compositor when there's the right
-+ // time to send wl_buffer to display. It's no-op if there's no
-+ // queued commits.
- void FrameCallbackHandler();
-+
-+ // When a new window is created we may not have a valid wl_surface
-+ // for drawing (Gtk haven't created it yet). All commits are queued
-+ // and DelayedCommitHandler() is called by timer when wl_surface is ready
-+ // for drawing.
- void DelayedCommitHandler();
-+
-+ // Try to commit all queued drawings to Wayland compositor. This is usually
-+ // called from other routines but can be used to explicitly flush
-+ // all drawings as we do when wl_buffer is released
-+ // (see WindowBackBufferShm::Detach() for instance).
- void CommitWaylandBuffer();
-
- 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.
-+ // Suitable for fullscreen content only like fullscreen video playback and
-+ // may work well with dmabuf backend.
-+ CACHE_NONE = 2
-+ } RenderingCacheMode;
-+
- private:
- WindowBackBuffer* CreateWaylandBuffer(int aWidth, int aHeight);
- WindowBackBuffer* GetWaylandBufferToDraw(bool aCanSwitchBuffer);
-
-- already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(bool aCanSwitchBuffer);
-+ already_AddRefed<gfx::DrawTarget> LockWaylandBuffer();
- void UnlockWaylandBuffer();
-
- already_AddRefed<gfx::DrawTarget> LockImageSurface(
-@@ -206,23 +249,71 @@ class WindowSurfaceWayland : public Wind
- // mBufferScreenRect is window size when our wayland buffer was allocated.
- LayoutDeviceIntRect mBufferScreenRect;
- nsWaylandDisplay* mWaylandDisplay;
-+
-+ // Actual buffer (backed by wl_buffer) where all drawings go into.
-+ // Drawn areas are stored at mWaylandBufferDamage and if there's
-+ // any uncommited drawings which needs to be send to wayland compositor
-+ // the mBufferPendingCommit is set.
- WindowBackBuffer* mWaylandBuffer;
-- LayoutDeviceIntRegion mWaylandBufferDamage;
- WindowBackBuffer* mBackupBuffer[BACK_BUFFER_NUM];
-+ LayoutDeviceIntRegion mWaylandBufferDamage;
-+
-+ // After every commit to wayland compositor a frame callback is requested.
-+ // Any next commit to wayland compositor will happen when frame callback
-+ // comes from wayland compositor back as it's the best time to do the commit.
- wl_callback* mFrameCallback;
- wl_surface* mLastCommittedSurface;
-+
-+ // Registered reference to pending DelayedCommitHandler() call.
- WindowSurfaceWayland** mDelayedCommitHandle;
-+
-+ // Cached drawings. If we can't get WaylandBuffer (wl_buffer) at
-+ // WindowSurfaceWayland::Lock() we direct gecko rendering to
-+ // mImageSurface.
-+ // If we can't get WaylandBuffer at WindowSurfaceWayland::Commit()
-+ // time, mImageSurface is moved to mDelayedImageCommits which
-+ // holds all cached drawings.
-+ // mDelayedImageCommits can be drawn by FrameCallbackHandler(),
-+ // DelayedCommitHandler() or when WaylandBuffer is detached.
- RefPtr<gfxImageSurface> mImageSurface;
- AutoTArray<WindowImageSurface, 30> mDelayedImageCommits;
-+
- int64_t mLastCommitTime;
-+
-+ // Indicates that we don't have any cached drawings at mDelayedImageCommits
-+ // and WindowSurfaceWayland::Lock() returned WaylandBuffer to gecko
-+ // to draw into.
- bool mDrawToWaylandBufferDirectly;
-+
-+ // Set when our cached drawings (mDelayedImageCommits) contains
-+ // full screen damage. That means we can safely switch WaylandBuffer
-+ // at LockWaylandBuffer().
-+ bool mCanSwitchWaylandBuffer;
-+
-+ // Set when actual WaylandBuffer contains drawings which are not send to
-+ // wayland compositor yet.
- bool mBufferPendingCommit;
-+
-+ // We can't send WaylandBuffer (wl_buffer) to compositor when gecko
-+ // is rendering into it (i.e. between WindowSurfaceWayland::Lock() /
-+ // WindowSurfaceWayland::Commit()).
-+ // Thus we use mBufferCommitAllowed to disable commit by callbacks
-+ // (FrameCallbackHandler(), DelayedCommitHandler())
- bool mBufferCommitAllowed;
-- bool mWholeWindowBufferDamage;
-+
-+ // We need to clear WaylandBuffer when entire transparent window is repainted.
-+ // This typically apply to popup windows.
- bool mBufferNeedsClear;
-+
- bool mIsMainThread;
-+
-+ // When new WaylandBuffer (wl_buffer) is send to wayland compositor
-+ // (buffer switch or resize) we also need to set its scale factor.
- bool mNeedScaleFactorUpdate;
-
-+ // Image caching strategy, see RenderingCacheMode for details.
-+ RenderingCacheMode mRenderingCacheMode;
-+
- static bool UseDMABufBackend();
- static bool mUseDMABufInitialized;
- static bool mUseDMABuf;
diff --git a/pgo.patch b/pgo.patch
index 20eb98d..1eef0d9 100644
--- a/pgo.patch
+++ b/pgo.patch
@@ -1,9 +1,10 @@
-diff -up firefox-64.0/build/unix/mozconfig.unix.pgo firefox-64.0/build/unix/mozconfig.unix
---- firefox-64.0/build/unix/mozconfig.unix.pgo 2019-01-03 15:23:16.792980384 +0100
-+++ firefox-64.0/build/unix/mozconfig.unix 2019-01-03 15:24:29.978693550 +0100
+diff -up firefox-70.0/build/mozconfig.pgo firefox-70.0/build/mozconfig
+diff -up firefox-70.0/build/unix/mozconfig.unix.pgo firefox-70.0/build/unix/mozconfig.unix
+--- firefox-70.0/build/unix/mozconfig.unix.pgo 2019-10-18 18:05:36.461701704 +0200
++++ firefox-70.0/build/unix/mozconfig.unix 2019-10-18 20:25:48.036037912 +0200
@@ -6,6 +6,15 @@ if [ -n "$FORCE_GCC" ]; then
- CC="$TOOLTOOL_DIR/gcc/bin/gcc"
- CXX="$TOOLTOOL_DIR/gcc/bin/g++"
+ CC="$MOZ_FETCHES_DIR/gcc/bin/gcc"
+ CXX="$MOZ_FETCHES_DIR/gcc/bin/g++"
+ if [ -n "$MOZ_PGO" ]; then
+ if [ -z "$USE_ARTIFACT" ]; then
@@ -16,11 +17,11 @@ diff -up firefox-64.0/build/unix/mozconfig.unix.pgo firefox-64.0/build/unix/mozc
+
# We want to make sure we use binutils and other binaries in the tooltool
# package.
- mk_add_options "export PATH=$TOOLTOOL_DIR/gcc/bin:$PATH"
-diff -up firefox-64.0/extensions/spellcheck/src/moz.build.pgo firefox-64.0/extensions/spellcheck/src/moz.build
---- firefox-64.0/extensions/spellcheck/src/moz.build.pgo 2018-12-07 03:56:27.000000000 +0100
-+++ firefox-64.0/extensions/spellcheck/src/moz.build 2019-01-03 15:21:32.793385074 +0100
-@@ -28,3 +28,5 @@ EXPORTS.mozilla += [
+ mk_add_options "export PATH=$MOZ_FETCHES_DIR/gcc/bin:$PATH"
+diff -up firefox-70.0/extensions/spellcheck/src/moz.build.pgo firefox-70.0/extensions/spellcheck/src/moz.build
+--- firefox-70.0/extensions/spellcheck/src/moz.build.pgo 2019-10-16 23:20:18.000000000 +0200
++++ firefox-70.0/extensions/spellcheck/src/moz.build 2019-10-18 18:05:36.461701704 +0200
+@@ -31,3 +31,5 @@ EXPORTS.mozilla += [
if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
CXXFLAGS += ['-Wno-error=shadow']
diff --git a/sources b/sources
index ec7b042..23e2fcc 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
SHA512 (cbindgen-vendor.tar.xz) = 88afa0bc6af525cbb46bc75578b90419b28b95b396d5002fbf299a78a173681b840096ff83ef6e48553d1a5e0aa04e79383ab4d09bf431f3b864fcbacc7de46d
-SHA512 (firefox-69.0.3.source.tar.xz) = bc4020c5f1a1eac82944f6402aa374c830231a0f168c6cdab8924a1c7a1b296381b45bce0a0567811ad86c2688972a35fda3f6c15e562b03a47d48617fe7611a
-SHA512 (firefox-langpacks-69.0.3-20191010.tar.xz) = e293903557dffa0231345a2ae4085705ae3b5b9c1935c1fc2890d042e63862d45134a03403bbebec1fbe068b9d590797946feb8153e2d4129e5f4e309065381a
+SHA512 (firefox-70.0.source.tar.xz) = c2643d88d59012dfd762357d66005c8892dec066b0ae9d8d33a29ea4427d1e5ae4a0376725c7d960c0025d5c9567eca816eb612b4ea987069e455c06fc442973
+SHA512 (firefox-langpacks-70.0-20191018.tar.xz) = aa17651aa8d4bc82d014846db559df9e896c329d58acfc145433480ad60cebf5a0a3774958e452d76b3f78bb70545e27208dbe226cfa13fc0a42c65ddfd48d46
4 years, 6 months
Architecture specific change in rpms/firefox.git
by githook-noreply@fedoraproject.org
The package rpms/firefox.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/firefox.git/commit/?id=302967b0a8....
Change:
-%ifarch ppc64 ppc64le
Thanks.
Full change:
============
commit 302967b0a822136f55649d389e0345870cae57a9
Author: Martin Stransky <stransky(a)redhat.com>
Date: Fri Oct 18 20:43:19 2019 +0200
Updated to 70.0 Build 2
diff --git a/.gitignore b/.gitignore
index 379c588..7077731 100644
--- a/.gitignore
+++ b/.gitignore
@@ -366,3 +366,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-69.0.2.source.tar.xz
/firefox-69.0.3.source.tar.xz
/firefox-langpacks-69.0.3-20191010.tar.xz
+/firefox-70.0.source.tar.xz
+/firefox-langpacks-70.0-20191018.tar.xz
diff --git a/firefox.spec b/firefox.spec
index 872105b..7a3dffc 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -93,13 +93,13 @@ ExcludeArch: ppc64le
Summary: Mozilla Firefox Web browser
Name: firefox
-Version: 69.0.3
-Release: 2%{?pre_tag}%{?dist}
+Version: 70.0
+Release: 1%{?pre_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...
%if %{with langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20191010.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20191018.tar.xz
%endif
Source2: cbindgen-vendor.tar.xz
Source10: firefox-mozconfig
@@ -146,31 +146,15 @@ Patch228: mozilla-1583466.patch
# Upstream patches
Patch402: mozilla-1196777.patch
Patch412: mozilla-1337988.patch
-#Patch413: mozilla-1353817.patch
Patch415: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch
Patch417: bug1375074-save-restore-x28.patch
-Patch418: mozilla-1512162.patch
Patch419: mozilla-1568569.patch
-Patch420: mozilla-1566876-webrtc-ind.patch
Patch421: mozilla-1579023.patch
Patch422: mozilla-1580174-webrtc-popup.patch
# Wayland specific upstream patches
Patch574: firefox-pipewire.patch
Patch575: mozilla-1548475.patch
-Patch576: mozilla-1562827.patch
-Patch578: mozilla-1567434-1.patch
-Patch579: mozilla-1567434-2.patch
-Patch580: mozilla-1573813.patch
-Patch581: mozilla-1574036.patch
-Patch582: mozilla-1576268.patch
-Patch583: mozilla-1579794-1.patch
-Patch584: mozilla-1579794-2.patch
-Patch585: mozilla-1579849.patch
-Patch586: mozilla-1579823.patch
-Patch587: mozilla-1580152.patch
-Patch588: mozilla-1581748.patch
-Patch589: mozilla-1577024.patch
Patch590: firefox-wayland-cache-missing.patch
Patch591: mozilla-1587008.patch
@@ -370,34 +354,15 @@ This package contains results of tests executed during build.
%patch228 -p1 -b .mozilla-1583466
%patch402 -p1 -b .1196777
-#%patch413 -p1 -b .1353817
%ifarch %{arm}
%patch415 -p1 -b .1238661
%endif
-%ifarch ppc64 ppc64le
-#%patch418 -p1 -b .1512162 FIXME no longer needed?
-%endif
%patch419 -p1 -b .1568569
-%patch420 -p1 -b .1566876-webrtc-ind
%patch421 -p1 -b .1579023
# Wayland specific upstream patches
%patch574 -p1 -b .firefox-pipewire
%patch575 -p1 -b .mozilla-1548475
-%patch576 -p1 -b .mozilla-1562827
-%patch578 -p1 -b .mozilla-1567434-1
-%patch579 -p1 -b .mozilla-1567434-2
-%patch580 -p1 -b .mozilla-1573813
-%patch581 -p1 -b .mozilla-1574036
-%patch582 -p1 -b .mozilla-1576268
-%patch583 -p1 -b .mozilla-1579794-1
-%patch584 -p1 -b .mozilla-1579794-2
-%patch585 -p1 -b .mozilla-1579849
-%patch422 -p1 -b .1580174-webrtc-popup
-%patch586 -p1 -b .mozilla-1579823
-%patch587 -p1 -b .mozilla-1580152
-%patch588 -p1 -b .mozilla-1581748
-%patch589 -p1 -b .mozilla-1577024
%patch590 -p1 -b .cache-missing
%patch591 -p1 -b .mozilla-1587008
@@ -982,6 +947,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Tue Oct 15 2019 Martin Stransky <stransky(a)redhat.com> - 70.0-1
+- Updated to 70.0
+
* Mon Oct 14 2019 Martin Stransky <stransky(a)redhat.com> - 69.0.3-2
- Build firefox-wayland again (rhbz#1761578).
diff --git a/mozilla-1353817.patch b/mozilla-1353817.patch
deleted file mode 100644
index dc8d8f8..0000000
--- a/mozilla-1353817.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 1cc652f5525f458b0b4ceb12af24bf5a4367db32 Mon Sep 17 00:00:00 2001
-From: Nicolas Dufresne <nicolas.dufresne(a)collabora.com>
-Date: Tue, 23 May 2017 13:09:48 -0400
-Subject: [PATCH] Bug 1353817: Include SkNx_neon.h for ARM64 too
-
-This fixes build errors as arm_neon.h was missing along with some
-missing converters.
----
- gfx/skia/skia/src/core/SkNx.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gfx/skia/skia/src/core/SkNx.h b/gfx/skia/skia/src/core/SkNx.h
-index 6bca856..b0427aa 100644
---- a/gfx/skia/skia/src/core/SkNx.h
-+++ b/gfx/skia/skia/src/core/SkNx.h
-@@ -299,7 +299,7 @@ typedef SkNx<4, uint32_t> Sk4u;
- // Include platform specific specializations if available.
- #if !defined(SKNX_NO_SIMD) && SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2
- #include "../opts/SkNx_sse.h"
--#elif !defined(SKNX_NO_SIMD) && defined(SK_ARM_HAS_NEON)
-+#elif !defined(SKNX_NO_SIMD) && (defined(SK_ARM_HAS_NEON) || defined(SK_CPU_ARM64))
- #include "../opts/SkNx_neon.h"
- #else
-
---
-2.9.4
-
diff --git a/mozilla-1512162.patch b/mozilla-1512162.patch
deleted file mode 100644
index 99a0b14..0000000
--- a/mozilla-1512162.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-diff -up firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp.1512162 firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp
---- firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp.1512162 2019-07-17 22:51:30.000000000 +0200
-+++ firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp 2019-07-25 08:08:18.512528313 +0200
-@@ -1092,7 +1092,7 @@ class MOZ_STACK_CLASS CallMethodHelper f
- MOZ_ALWAYS_INLINE bool GetOutParamSource(uint8_t paramIndex,
- MutableHandleValue srcp) const;
-
-- MOZ_ALWAYS_INLINE bool GatherAndConvertResults();
-+ bool GatherAndConvertResults();
-
- MOZ_ALWAYS_INLINE bool QueryInterfaceFastPath();
-
-@@ -1139,7 +1139,7 @@ class MOZ_STACK_CLASS CallMethodHelper f
-
- ~CallMethodHelper();
-
-- MOZ_ALWAYS_INLINE bool Call();
-+ bool Call();
-
- // Trace implementation so we can put our CallMethodHelper in a Rooted<T>.
- void trace(JSTracer* aTrc);
-@@ -1157,6 +1157,10 @@ bool XPCWrappedNative::CallMethod(XPCCal
- return helper.get().Call();
- }
-
-+#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
-+// Work around a compiler bug on ppc64le (bug 1512162).
-+__attribute__ ((noinline,noclone))
-+#endif
- bool CallMethodHelper::Call() {
- mCallContext.SetRetVal(JS::UndefinedValue());
-
-@@ -1315,6 +1319,10 @@ bool CallMethodHelper::GetOutParamSource
- return true;
- }
-
-+#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
-+// Work around a compiler bug on ppc64le (bug 1512162).
-+__attribute__ ((noinline,noclone))
-+#endif
- bool CallMethodHelper::GatherAndConvertResults() {
- // now we iterate through the native params to gather and convert results
- uint8_t paramCount = mMethodInfo->GetParamCount();
diff --git a/mozilla-1516081.patch b/mozilla-1516081.patch
index 1ecff39..cc332a6 100644
--- a/mozilla-1516081.patch
+++ b/mozilla-1516081.patch
@@ -1,7 +1,7 @@
-diff -up firefox-69.0/build/moz.configure/toolchain.configure.1516081 firefox-69.0/build/moz.configure/toolchain.configure
---- firefox-69.0/build/moz.configure/toolchain.configure.1516081 2019-08-27 03:31:51.000000000 +0200
-+++ firefox-69.0/build/moz.configure/toolchain.configure 2019-08-29 10:42:45.872919255 +0200
-@@ -1411,7 +1411,7 @@ def pgo_flags(compiler, build_env, targe
+diff -up firefox-70.0/build/moz.configure/lto-pgo.configure.old firefox-70.0/build/moz.configure/lto-pgo.configure
+--- firefox-70.0/build/moz.configure/lto-pgo.configure.old 2019-10-18 20:33:54.240107068 +0200
++++ firefox-70.0/build/moz.configure/lto-pgo.configure 2019-10-18 20:34:44.202009678 +0200
+@@ -16,7 +16,7 @@ def pgo_flags(compiler, build_env, targe
if compiler.type == 'gcc':
return namespace(
@@ -10,29 +10,12 @@ diff -up firefox-69.0/build/moz.configure/toolchain.configure.1516081 firefox-69
gen_ldflags=['-fprofile-generate'],
use_cflags=['-fprofile-use', '-fprofile-correction',
'-Wcoverage-mismatch'],
-@@ -1434,7 +1434,8 @@ def pgo_flags(compiler, build_env, targe
+@@ -38,7 +38,7 @@ def pgo_flags(compiler, build_env, targe
+ gen_ldflags = ['-fprofile-generate']
- if gen_ldflags:
- return namespace(
-- gen_cflags=[prefix + '-fprofile-generate'],
-+ gen_cflags=[prefix + '-fprofile-generate',
-+ '-DMOZ_PROFILE_INSTRUMENTATION'],
- gen_ldflags=gen_ldflags,
- use_cflags=[prefix + '-fprofile-use=%s' % profdata,
- # Some error messages about mismatched profile data
-diff -up firefox-69.0/toolkit/components/terminator/nsTerminator.cpp.1516081 firefox-69.0/toolkit/components/terminator/nsTerminator.cpp
---- firefox-69.0/toolkit/components/terminator/nsTerminator.cpp.1516081 2019-08-27 03:32:05.000000000 +0200
-+++ firefox-69.0/toolkit/components/terminator/nsTerminator.cpp 2019-08-29 09:51:08.513440687 +0200
-@@ -419,6 +419,12 @@ void nsTerminator::StartWatchdog() {
- }
- }
- #endif
-+ // Disable watchdog for PGO train builds - writting profile information at
-+ // exit may take time and it is better to make build hang rather than
-+ // silently produce poorly performing binary.
-+#ifdef MOZ_PROFILE_INSTRUMENTATION
-+ crashAfterMS = INT32_MAX;
-+#endif
-
- UniquePtr<Options> options(new Options());
- const PRIntervalTime ticksDuration = PR_MillisecondsToInterval(1000);
+ return namespace(
+- gen_cflags=[prefix + '-fprofile-generate'],
++ gen_cflags=[prefix + '-fprofile-generate', '-DMOZ_PROFILE_INSTRUMENTATION'],
+ gen_ldflags=gen_ldflags,
+ use_cflags=[prefix + '-fprofile-use=%s' % profdata,
+ # Some error messages about mismatched profile data
diff --git a/mozilla-1562827.patch b/mozilla-1562827.patch
deleted file mode 100644
index 497133c..0000000
--- a/mozilla-1562827.patch
+++ /dev/null
@@ -1,141 +0,0 @@
-diff -up firefox-69.0/widget/gtk/nsWindow.cpp.mozilla-1562827 firefox-69.0/widget/gtk/nsWindow.cpp
---- firefox-69.0/widget/gtk/nsWindow.cpp.mozilla-1562827 2019-09-02 15:16:15.031528276 +0200
-+++ firefox-69.0/widget/gtk/nsWindow.cpp 2019-09-02 15:16:15.037528254 +0200
-@@ -818,7 +818,6 @@ void nsWindow::SetParent(nsIWidget* aNew
- if (mParent) {
- mParent->RemoveChild(this);
- }
--
- mParent = aNewParent;
-
- GtkWidget* oldContainer = GetMozContainerWidget();
-@@ -830,88 +829,73 @@ void nsWindow::SetParent(nsIWidget* aNew
- return;
- }
-
-+ nsWindow* newParent = static_cast<nsWindow*>(aNewParent);
-+ GdkWindow* newParentWindow = nullptr;
-+ GtkWidget* newContainer = nullptr;
- if (aNewParent) {
- aNewParent->AddChild(this);
-- ReparentNativeWidget(aNewParent);
-+ newParentWindow = newParent->mGdkWindow;
-+ newContainer = newParent->GetMozContainerWidget();
- } else {
- // aNewParent is nullptr, but reparent to a hidden window to avoid
- // destroying the GdkWindow and its descendants.
- // An invisible container widget is needed to hold descendant
- // GtkWidgets.
-- GtkWidget* newContainer = EnsureInvisibleContainer();
-- GdkWindow* newParentWindow = gtk_widget_get_window(newContainer);
-- ReparentNativeWidgetInternal(aNewParent, newContainer, newParentWindow,
-- oldContainer);
-- }
--}
--
--bool nsWindow::WidgetTypeSupportsAcceleration() { return !IsSmallPopup(); }
--
--void nsWindow::ReparentNativeWidget(nsIWidget* aNewParent) {
-- MOZ_ASSERT(aNewParent, "null widget");
-- NS_ASSERTION(!mIsDestroyed, "");
-- NS_ASSERTION(!static_cast<nsWindow*>(aNewParent)->mIsDestroyed, "");
--
-- GtkWidget* oldContainer = GetMozContainerWidget();
-- if (!oldContainer) {
-- // The GdkWindows have been destroyed so there is nothing else to
-- // reparent.
-- MOZ_ASSERT(gdk_window_is_destroyed(mGdkWindow),
-- "live GdkWindow with no widget");
-- return;
-+ newContainer = EnsureInvisibleContainer();
-+ newParentWindow = gtk_widget_get_window(newContainer);
- }
-- MOZ_ASSERT(!gdk_window_is_destroyed(mGdkWindow),
-- "destroyed GdkWindow with widget");
-
-- auto* newParent = static_cast<nsWindow*>(aNewParent);
-- GdkWindow* newParentWindow = newParent->mGdkWindow;
-- GtkWidget* newContainer = newParent->GetMozContainerWidget();
-- GtkWindow* shell = GTK_WINDOW(mShell);
--
-- if (shell && gtk_window_get_transient_for(shell)) {
-- GtkWindow* topLevelParent =
-- GTK_WINDOW(gtk_widget_get_toplevel(newContainer));
-- gtk_window_set_transient_for(shell, topLevelParent);
-- }
--
-- ReparentNativeWidgetInternal(aNewParent, newContainer, newParentWindow,
-- oldContainer);
--}
--
--void nsWindow::ReparentNativeWidgetInternal(nsIWidget* aNewParent,
-- GtkWidget* aNewContainer,
-- GdkWindow* aNewParentWindow,
-- GtkWidget* aOldContainer) {
-- if (!aNewContainer) {
-+ if (!newContainer) {
- // The new parent GdkWindow has been destroyed.
-- MOZ_ASSERT(!aNewParentWindow || gdk_window_is_destroyed(aNewParentWindow),
-+ MOZ_ASSERT(!newParentWindow || gdk_window_is_destroyed(newParentWindow),
- "live GdkWindow with no widget");
- Destroy();
- } else {
-- if (aNewContainer != aOldContainer) {
-- MOZ_ASSERT(!gdk_window_is_destroyed(aNewParentWindow),
-+ if (newContainer != oldContainer) {
-+ MOZ_ASSERT(!gdk_window_is_destroyed(newParentWindow),
- "destroyed GdkWindow with widget");
-- SetWidgetForHierarchy(mGdkWindow, aOldContainer, aNewContainer);
-+ SetWidgetForHierarchy(mGdkWindow, oldContainer, newContainer);
-
-- if (aOldContainer == gInvisibleContainer) {
-+ if (oldContainer == gInvisibleContainer) {
- CheckDestroyInvisibleContainer();
- }
- }
-
-- if (!mIsTopLevel) {
-- gdk_window_reparent(mGdkWindow, aNewParentWindow,
-- DevicePixelsToGdkCoordRoundDown(mBounds.x),
-- DevicePixelsToGdkCoordRoundDown(mBounds.y));
-- }
-+ gdk_window_reparent(mGdkWindow, newParentWindow,
-+ DevicePixelsToGdkCoordRoundDown(mBounds.x),
-+ DevicePixelsToGdkCoordRoundDown(mBounds.y));
-+ mToplevelParentWindow = GTK_WINDOW(gtk_widget_get_toplevel(newContainer));
- }
-
-- auto* newParent = static_cast<nsWindow*>(aNewParent);
- bool parentHasMappedToplevel = newParent && newParent->mHasMappedToplevel;
- if (mHasMappedToplevel != parentHasMappedToplevel) {
- SetHasMappedToplevel(parentHasMappedToplevel);
- }
- }
-
-+bool nsWindow::WidgetTypeSupportsAcceleration() { return !IsSmallPopup(); }
-+
-+void nsWindow::ReparentNativeWidget(nsIWidget* aNewParent) {
-+ MOZ_ASSERT(aNewParent, "null widget");
-+ MOZ_ASSERT(!mIsDestroyed, "");
-+ MOZ_ASSERT(!static_cast<nsWindow*>(aNewParent)->mIsDestroyed, "");
-+ MOZ_ASSERT(!gdk_window_is_destroyed(mGdkWindow),
-+ "destroyed GdkWindow with widget");
-+
-+ MOZ_ASSERT(
-+ !mParent,
-+ "nsWindow::ReparentNativeWidget() works on toplevel windows only.");
-+
-+ auto* newParent = static_cast<nsWindow*>(aNewParent);
-+ GtkWindow* newParentWidget = GTK_WINDOW(newParent->GetGtkWidget());
-+ GtkWindow* shell = GTK_WINDOW(mShell);
-+
-+ if (shell && gtk_window_get_transient_for(shell)) {
-+ gtk_window_set_transient_for(shell, newParentWidget);
-+ mToplevelParentWindow = newParentWidget;
-+ }
-+}
-+
- void nsWindow::SetModal(bool aModal) {
- LOG(("nsWindow::SetModal [%p] %d\n", (void*)this, aModal));
- if (mIsDestroyed) return;
-diff -up firefox-69.0/widget/gtk/nsWindow.h.mozilla-1562827 firefox-69.0/widget/gtk/nsWindow.h
diff --git a/mozilla-1566876-webrtc-ind.patch b/mozilla-1566876-webrtc-ind.patch
deleted file mode 100644
index 598f58f..0000000
--- a/mozilla-1566876-webrtc-ind.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -3504,12 +3504,6 @@
- mBounds = aRect;
- ConstrainSize(&mBounds.width, &mBounds.height);
-
-- // eWindowType_child is not supported on Wayland. Just switch to toplevel
-- // as a workaround.
-- if (!mIsX11Display && mWindowType == eWindowType_child) {
-- mWindowType = eWindowType_toplevel;
-- }
--
- // figure out our parent window
- GtkWidget* parentMozContainer = nullptr;
- GtkContainer* parentGtkContainer = nullptr;
-@@ -3543,6 +3537,18 @@
- topLevelParent = GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer));
- }
-
-+ if (!mIsX11Display) {
-+ if (mWindowType == eWindowType_child) {
-+ // eWindowType_child is not supported on Wayland. Just switch to toplevel
-+ // as a workaround.
-+ mWindowType = eWindowType_toplevel;
-+ } else if (mWindowType == eWindowType_popup && !topLevelParent) {
-+ // Workaround for Wayland where the popup windows always need to have
-+ // parent window. For example webrtc ui is a popup window without parent.
-+ mWindowType = eWindowType_toplevel;
-+ }
-+ }
-+
- // ok, create our windows
- switch (mWindowType) {
- case eWindowType_dialog:
-
diff --git a/mozilla-1567434-1.patch b/mozilla-1567434-1.patch
deleted file mode 100644
index 446cd6b..0000000
--- a/mozilla-1567434-1.patch
+++ /dev/null
@@ -1,226 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -616,8 +616,6 @@
- }
-
- if (!aFullScreenUpdate) {
-- NS_WARNING(
-- "We can't create a new Wayland buffer for non-fullscreen updates!");
- return nullptr;
- }
-
-@@ -674,8 +672,6 @@
- (void*)buffer));
-
- if (!buffer) {
-- NS_WARNING(
-- "WindowSurfaceWayland::LockWaylandBuffer(): No buffer available");
- return nullptr;
- }
-
-diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
---- a/widget/gtk/nsWindow.h
-+++ b/widget/gtk/nsWindow.h
-@@ -487,6 +487,7 @@
- GtkWidget* mShell;
- MozContainer* mContainer;
- GdkWindow* mGdkWindow;
-+ GtkWindow* mToplevelParentWindow;
- bool mWindowShouldStartDragging = false;
- PlatformCompositorWidgetDelegate* mCompositorWidgetDelegate;
-
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -401,6 +401,7 @@
- mContainer = nullptr;
- mGdkWindow = nullptr;
- mShell = nullptr;
-+ mToplevelParentWindow = nullptr;
- mCompositorWidgetDelegate = nullptr;
- mHasMappedToplevel = false;
- mIsFullyObscured = false;
-@@ -1144,6 +1145,8 @@
- nsWindow* window =
- static_cast<nsWindow*>(gVisibleWaylandPopupWindows->data);
- if (window->mPopupType != ePopupTypeTooltip) break;
-+ LOG(("nsWindow::HideWaylandTooltips [%p] hidding tooltip [%p].\n",
-+ (void*)this, window));
- window->HideWaylandWindow();
- gVisibleWaylandPopupWindows = g_list_delete_link(
- gVisibleWaylandPopupWindows, gVisibleWaylandPopupWindows);
-@@ -1172,9 +1175,12 @@
- // before we open another one on that level. It means that every open
- // popup needs to have an unique parent.
- GtkWidget* nsWindow::ConfigureWaylandPopupWindows() {
-+ LOG(("nsWindow::ConfigureWaylandPopupWindows [%p]\n", (void*)this));
-+
- // Check if we're already configured.
- if (gVisibleWaylandPopupWindows &&
- g_list_find(gVisibleWaylandPopupWindows, this)) {
-+ LOG(("...[%p] is already configured.\n", (void*)this));
- return GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell)));
- }
-
-@@ -1182,9 +1188,15 @@
- // as it's short lived temporary window.
- HideWaylandTooltips();
-
-- GtkWindow* parentWidget = nullptr;
-+ GtkWindow* parentWidget = mToplevelParentWindow;
- if (gVisibleWaylandPopupWindows) {
-+ LOG(("... there's visible active popup [%p]\n",
-+ gVisibleWaylandPopupWindows->data));
-+
- if (mPopupType == ePopupTypeTooltip) {
-+ LOG(("...[%p] is tooltip, parent [%p]\n", (void*)this,
-+ gVisibleWaylandPopupWindows->data));
-+
- // Attach tooltip window to the latest popup window
- // to have both visible.
- nsWindow* window =
-@@ -1200,12 +1212,19 @@
- // nsWindow::Create()) or we're toplevel popup without parent.
- // In both cases just use parent which was passed to nsWindow::Create().
- if (!menuPopupFrame) {
-- return GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell)));
-+ LOG(("...[%p] menuPopupFrame = null, using given parent widget [%p]\n",
-+ (void*)this, parentWidget));
-+ return GTK_WIDGET(parentWidget);
- }
-
- nsWindow* parentWindow =
- static_cast<nsWindow*>(menuPopupFrame->GetParentMenuWidget());
-+ LOG(("...[%p] GetParentMenuWidget() = %p\n", (void*)this, parentWindow));
-+
- if (!parentWindow) {
-+ LOG(("...[%p] using active/visible popups as a parent [%p]\n",
-+ (void*)this, gVisibleWaylandPopupWindows->data));
-+
- // We're toplevel popup menu attached to another menu. Just use our
- // latest popup as a parent.
- parentWindow =
-@@ -1234,10 +1253,10 @@
- }
- }
-
-+ MOZ_ASSERT(parentWidget, "Missing parent widget for wayland popup!");
- if (parentWidget) {
-+ LOG(("...[%p] set parent widget [%p]\n", (void*)this, parentWidget));
- gtk_window_set_transient_for(GTK_WINDOW(mShell), parentWidget);
-- } else {
-- parentWidget = gtk_window_get_transient_for(GTK_WINDOW(mShell));
- }
- gVisibleWaylandPopupWindows =
- g_list_prepend(gVisibleWaylandPopupWindows, this);
-@@ -1248,9 +1267,11 @@
- static void NativeMoveResizeWaylandPopupCallback(
- GdkWindow* window, const GdkRectangle* flipped_rect,
- const GdkRectangle* final_rect, gboolean flipped_x, gboolean flipped_y,
-- void* unused) {
-- LOG(("%s flipped %d %d\n", __FUNCTION__, flipped_rect->x, flipped_rect->y));
-- LOG(("%s final %d %d\n", __FUNCTION__, final_rect->x, final_rect->y));
-+ void* aWindow) {
-+ LOG(("%s [%p] flipped %d %d\n", __FUNCTION__, aWindow, flipped_rect->x,
-+ flipped_rect->y));
-+ LOG(("%s [%p] final %d %d\n", __FUNCTION__, aWindow, final_rect->x,
-+ final_rect->y));
- }
- #endif
-
-@@ -1264,6 +1285,8 @@
- // Compositor may be confused by windows with width/height = 0
- // and positioning such windows leads to Bug 1555866.
- if (!AreBoundsSane()) {
-+ LOG(("nsWindow::NativeMoveResizeWaylandPopup [%p] Bounds are not sane\n",
-+ (void*)this));
- return;
- }
-
-@@ -1277,6 +1300,8 @@
- // - gdk_window_move_to_rect() is not available
- // - the widget doesn't have a valid GdkWindow
- if (!sGdkWindowMoveToRect || !gdkWindow) {
-+ LOG(("nsWindow::NativeMoveResizeWaylandPopup [%p] use gtk_window_move()\n",
-+ (void*)this));
- gtk_window_move(GTK_WINDOW(mShell), aPosition->x, aPosition->y);
- return;
- }
-@@ -1302,8 +1327,12 @@
- }
- LOG((" request result %d %d\n", rect.x, rect.y));
- #ifdef DEBUG
-- g_signal_connect(gdkWindow, "moved-to-rect",
-- G_CALLBACK(NativeMoveResizeWaylandPopupCallback), this);
-+ if (!g_signal_handler_find(
-+ gdkWindow, G_SIGNAL_MATCH_FUNC, 0, 0, nullptr,
-+ FuncToGpointer(NativeMoveResizeWaylandPopupCallback), this)) {
-+ g_signal_connect(gdkWindow, "moved-to-rect",
-+ G_CALLBACK(NativeMoveResizeWaylandPopupCallback), this);
-+ }
- #endif
-
- GdkGravity rectAnchor = GDK_GRAVITY_NORTH_WEST;
-@@ -3508,7 +3537,6 @@
- GtkWidget* parentMozContainer = nullptr;
- GtkContainer* parentGtkContainer = nullptr;
- GdkWindow* parentGdkWindow = nullptr;
-- GtkWindow* topLevelParent = nullptr;
- nsWindow* parentnsWindow = nullptr;
- GtkWidget* eventWidget = nullptr;
- bool drawToContainer = false;
-@@ -3534,7 +3562,8 @@
-
- // get the toplevel window just in case someone needs to use it
- // for setting transients or whatever.
-- topLevelParent = GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer));
-+ mToplevelParentWindow =
-+ GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer));
- }
-
- if (!mIsX11Display) {
-@@ -3542,7 +3571,7 @@
- // eWindowType_child is not supported on Wayland. Just switch to toplevel
- // as a workaround.
- mWindowType = eWindowType_toplevel;
-- } else if (mWindowType == eWindowType_popup && !topLevelParent) {
-+ } else if (mWindowType == eWindowType_popup && !mToplevelParentWindow) {
- // Workaround for Wayland where the popup windows always need to have
- // parent window. For example webrtc ui is a popup window without parent.
- mWindowType = eWindowType_toplevel;
-@@ -3677,7 +3706,7 @@
- gdk_get_program_class());
- gtk_window_set_type_hint(GTK_WINDOW(mShell),
- GDK_WINDOW_TYPE_HINT_DIALOG);
-- gtk_window_set_transient_for(GTK_WINDOW(mShell), topLevelParent);
-+ gtk_window_set_transient_for(GTK_WINDOW(mShell), mToplevelParentWindow);
- } else if (mWindowType == eWindowType_popup) {
- gtk_window_set_wmclass(GTK_WINDOW(mShell), "Popup",
- gdk_get_program_class());
-@@ -3730,10 +3759,11 @@
- }
- gtk_window_set_type_hint(GTK_WINDOW(mShell), gtkTypeHint);
-
-- if (topLevelParent) {
-+ if (mToplevelParentWindow) {
- LOG(("nsWindow::Create [%p] Set popup parent %p\n", (void*)this,
-- topLevelParent));
-- gtk_window_set_transient_for(GTK_WINDOW(mShell), topLevelParent);
-+ mToplevelParentWindow));
-+ gtk_window_set_transient_for(GTK_WINDOW(mShell),
-+ mToplevelParentWindow);
- }
-
- // We need realized mShell at NativeMove().
-@@ -4011,7 +4041,8 @@
- #endif
- }
-
-- LOG(("nsWindow [%p]\n", (void*)this));
-+ LOG(("nsWindow [%p] %s\n", (void*)this,
-+ mWindowType == eWindowType_toplevel ? "Toplevel" : "Popup"));
- if (mShell) {
- LOG(("\tmShell %p mContainer %p mGdkWindow %p 0x%lx\n", mShell, mContainer,
- mGdkWindow, mIsX11Display ? gdk_x11_window_get_xid(mGdkWindow) : 0));
-
diff --git a/mozilla-1567434-2.patch b/mozilla-1567434-2.patch
deleted file mode 100644
index 966118a..0000000
--- a/mozilla-1567434-2.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -1208,6 +1208,7 @@
- if (frame) {
- menuPopupFrame = do_QueryFrame(frame);
- }
-+
- // The popup is not fully created yet (we're called from
- // nsWindow::Create()) or we're toplevel popup without parent.
- // In both cases just use parent which was passed to nsWindow::Create().
-@@ -1217,10 +1218,22 @@
- return GTK_WIDGET(parentWidget);
- }
-
-+ LOG(("...[%p] is %s\n", (void*)this,
-+ menuPopupFrame->IsContextMenu() ? "context menu" : "popup"));
-+
- nsWindow* parentWindow =
- static_cast<nsWindow*>(menuPopupFrame->GetParentMenuWidget());
- LOG(("...[%p] GetParentMenuWidget() = %p\n", (void*)this, parentWindow));
-
-+ // If the popup is a regular menu but GetParentMenuWidget() returns
-+ // nullptr which means it's connected non-menu parent
-+ // (bookmark toolbar for instance).
-+ // In this case use a parent given at nsWindow::Create().
-+ if (!parentWindow && !menuPopupFrame->IsContextMenu()) {
-+ parentWindow =
-+ get_window_for_gtk_widget(GTK_WIDGET(mToplevelParentWindow));
-+ }
-+
- if (!parentWindow) {
- LOG(("...[%p] using active/visible popups as a parent [%p]\n",
- (void*)this, gVisibleWaylandPopupWindows->data));
-
diff --git a/mozilla-1573813.patch b/mozilla-1573813.patch
deleted file mode 100644
index e9fca07..0000000
--- a/mozilla-1573813.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -6577,11 +6577,22 @@
- }
-
- gint nsWindow::GdkScaleFactor() {
-+ // For popup windows with parent window we need to get scale factor of the
-+ // parent window. Otherwise the scale factor of the popup is not updated
-+ // during it's hidden.
-+ GdkWindow* scaledGdkWindow = mGdkWindow;
-+ if (mToplevelParentWindow) {
-+ scaledGdkWindow = gtk_widget_get_window(GTK_WIDGET(mToplevelParentWindow));
-+ // Fallback for windows which parent has been unrealized.
-+ if (!scaledGdkWindow) {
-+ scaledGdkWindow = mGdkWindow;
-+ }
-+ }
- // Available as of GTK 3.10+
- static auto sGdkWindowGetScaleFactorPtr =
- (gint(*)(GdkWindow*))dlsym(RTLD_DEFAULT, "gdk_window_get_scale_factor");
-- if (sGdkWindowGetScaleFactorPtr && mGdkWindow)
-- return (*sGdkWindowGetScaleFactorPtr)(mGdkWindow);
-+ if (sGdkWindowGetScaleFactorPtr && scaledGdkWindow)
-+ return (*sGdkWindowGetScaleFactorPtr)(scaledGdkWindow);
- return ScreenHelperGTK::GetGTKMonitorScaleFactor();
- }
-
-
diff --git a/mozilla-1574036.patch b/mozilla-1574036.patch
deleted file mode 100644
index c3ecdc7..0000000
--- a/mozilla-1574036.patch
+++ /dev/null
@@ -1,425 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
---- a/widget/gtk/WindowSurfaceWayland.h
-+++ b/widget/gtk/WindowSurfaceWayland.h
-@@ -177,12 +177,9 @@
-
- private:
- WindowBackBuffer* CreateWaylandBuffer(int aWidth, int aHeight);
-- WindowBackBuffer* GetWaylandBufferToDraw(int aWidth, int aHeight,
-- bool aFullScreenUpdate);
-+ WindowBackBuffer* GetWaylandBufferToDraw(bool aCanSwitchBuffer);
-
-- already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(int aWidth, int aHeight,
-- bool aClearBuffer,
-- bool aFullScreenUpdate);
-+ already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(bool aCanSwitchBuffer);
- void UnlockWaylandBuffer();
-
- already_AddRefed<gfx::DrawTarget> LockImageSurface(
-@@ -198,7 +195,10 @@
-
- // TODO: Do we need to hold a reference to nsWindow object?
- nsWindow* mWindow;
-- LayoutDeviceIntRect mLastScreenRect;
-+ // Buffer screen rects helps us understand if we operate on
-+ // the same window size as we're called on WindowSurfaceWayland::Lock().
-+ // mBufferScreenRect is window size when our wayland buffer was allocated.
-+ LayoutDeviceIntRect mBufferScreenRect;
- nsWaylandDisplay* mWaylandDisplay;
- WindowBackBuffer* mWaylandBuffer;
- LayoutDeviceIntRegion mWaylandBufferDamage;
-@@ -211,7 +211,8 @@
- AutoTArray<WindowImageSurface, 30> mDelayedImageCommits;
- bool mDrawToWaylandBufferDirectly;
- bool mPendingCommit;
-- bool mWaylandBufferFullScreenDamage;
-+ bool mWholeWindowBufferDamage;
-+ bool mBufferNeedsClear;
- bool mIsMainThread;
- bool mNeedScaleFactorUpdate;
-
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -499,7 +499,8 @@
- mDelayedCommitHandle(nullptr),
- mDrawToWaylandBufferDirectly(true),
- mPendingCommit(false),
-- mWaylandBufferFullScreenDamage(false),
-+ mWholeWindowBufferDamage(false),
-+ mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
- mNeedScaleFactorUpdate(true) {
- for (int i = 0; i < BACK_BUFFER_NUM; i++) mBackupBuffer[i] = nullptr;
-@@ -565,18 +566,20 @@
- }
-
- WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(
-- int aWidth, int aHeight, bool aFullScreenUpdate) {
-+ bool aCanSwitchBuffer) {
- LOGWAYLAND(("%s [%p] Requested buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- // There's no buffer created yet, create a new one.
- if (!mWaylandBuffer) {
-- MOZ_ASSERT(aFullScreenUpdate, "Created new buffer for partial drawing!");
-+ MOZ_ASSERT(aCanSwitchBuffer && mWholeWindowBufferDamage,
-+ "Created new buffer for partial drawing!");
- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-+ (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-
-- mWaylandBuffer = CreateWaylandBuffer(aWidth, aHeight);
-- mWaylandBufferFullScreenDamage = true;
-+ mWaylandBuffer =
-+ CreateWaylandBuffer(mBufferScreenRect.width, mBufferScreenRect.height);
- mNeedScaleFactorUpdate = true;
- return mWaylandBuffer;
- }
-@@ -593,29 +596,31 @@
- LOGWAYLAND(
- ("%s [%p] Use recent buffer.\n", __PRETTY_FUNCTION__, (void*)this));
-
-- if (mWaylandBuffer->IsMatchingSize(aWidth, aHeight)) {
-+ if (mWaylandBuffer->IsMatchingSize(mBufferScreenRect.width,
-+ mBufferScreenRect.height)) {
- LOGWAYLAND(("%s [%p] Size is ok, use the buffer [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, aWidth, aHeight));
-+ __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
- return mWaylandBuffer;
- }
-
-- if (!aFullScreenUpdate) {
-+ if (!aCanSwitchBuffer) {
- NS_WARNING("We can't resize Wayland buffer for non-fullscreen updates!");
- return nullptr;
- }
-
- LOGWAYLAND(("%s [%p] Reuse buffer with resize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, aWidth, aHeight));
-+ __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-
-- mWaylandBuffer->Resize(aWidth, aHeight);
-+ mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- // There's a chance that scale factor has been changed
- // when buffer size changed
-- mWaylandBufferFullScreenDamage = true;
- mNeedScaleFactorUpdate = true;
- return mWaylandBuffer;
- }
-
-- if (!aFullScreenUpdate) {
-+ if (!aCanSwitchBuffer) {
- return nullptr;
- }
-
-@@ -625,8 +630,10 @@
- availableBuffer++) {
- if (!mBackupBuffer[availableBuffer]) {
- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-- mBackupBuffer[availableBuffer] = CreateWaylandBuffer(aWidth, aHeight);
-+ (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-+ mBackupBuffer[availableBuffer] = CreateWaylandBuffer(
-+ mBufferScreenRect.width, mBufferScreenRect.height);
- break;
- }
-
-@@ -650,23 +657,23 @@
- __PRETTY_FUNCTION__, (void*)this, (void*)lastWaylandBuffer,
- (void*)mWaylandBuffer));
-
-- mWaylandBufferFullScreenDamage = true;
- mNeedScaleFactorUpdate = true;
-
-- bool bufferNeedsResize = !mWaylandBuffer->IsMatchingSize(aWidth, aHeight);
-+ bool bufferNeedsResize = !mWaylandBuffer->IsMatchingSize(
-+ mBufferScreenRect.width, mBufferScreenRect.height);
- if (bufferNeedsResize) {
- LOGWAYLAND(("%s [%p] Resize buffer to [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-- mWaylandBuffer->Resize(aWidth, aHeight);
-+ (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-+ mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- }
-
- return mWaylandBuffer;
- }
-
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::LockWaylandBuffer(
-- int aWidth, int aHeight, bool aClearBuffer, bool aFullScreenUpdate) {
-- WindowBackBuffer* buffer =
-- GetWaylandBufferToDraw(aWidth, aHeight, aFullScreenUpdate);
-+ bool aCanSwitchBuffer) {
-+ WindowBackBuffer* buffer = GetWaylandBufferToDraw(aCanSwitchBuffer);
-
- LOGWAYLAND(("%s [%p] Got buffer %p\n", __PRETTY_FUNCTION__, (void*)this,
- (void*)buffer));
-@@ -675,8 +682,9 @@
- return nullptr;
- }
-
-- if (aClearBuffer) {
-+ if (mBufferNeedsClear && mWholeWindowBufferDamage) {
- buffer->Clear();
-+ mBufferNeedsClear = false;
- }
-
- return buffer->Lock();
-@@ -744,7 +752,7 @@
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
-+ LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-
-@@ -753,54 +761,77 @@
- mWindow->IsWaylandPopup() &&
- (eTransparencyTransparent == mWindow->GetTransparencyMode());
-
-- mDrawToWaylandBufferDirectly =
-- isTransparentPopup ? IsPopupFullScreenUpdate(screenRect, aRegion)
-- : IsWindowFullScreenUpdate(screenRect, aRegion);
-+ // We have request to lock whole buffer/window.
-+ mWholeWindowBufferDamage =
-+ isTransparentPopup ? IsPopupFullScreenUpdate(lockedScreenRect, aRegion)
-+ : IsWindowFullScreenUpdate(lockedScreenRect, aRegion);
-
-- bool needsClear = mWindow->WaylandSurfaceNeedsClear() ||
-- (isTransparentPopup && mDrawToWaylandBufferDirectly);
-+ // Clear buffer when we (re)draw new transparent popup window,
-+ // otherwise leave it as-is, mBufferNeedsClear can be set from previous
-+ // (already pending) commits which are cached now.
-+ if (mWholeWindowBufferDamage) {
-+ mBufferNeedsClear =
-+ mWindow->WaylandSurfaceNeedsClear() || isTransparentPopup;
-+ }
-
- LOGWAYLAND(("%s [%p] lockSize [%d x %d] windowSize [%d x %d]\n",
- __PRETTY_FUNCTION__, (void*)this, lockSize.width, lockSize.height,
-- screenRect.width, screenRect.height));
-+ lockedScreenRect.width, lockedScreenRect.height));
- LOGWAYLAND((" nsWindow = %p\n", mWindow));
- LOGWAYLAND((" isPopup = %d\n", mWindow->IsWaylandPopup()));
- LOGWAYLAND((" isTransparentPopup = %d\n", isTransparentPopup));
- LOGWAYLAND((" IsPopupFullScreenUpdate = %d\n",
-- IsPopupFullScreenUpdate(screenRect, aRegion)));
-+ IsPopupFullScreenUpdate(lockedScreenRect, aRegion)));
- LOGWAYLAND((" IsWindowFullScreenUpdate = %d\n",
-- IsWindowFullScreenUpdate(screenRect, aRegion)));
-- LOGWAYLAND((" needsClear = %d\n", needsClear));
-- LOGWAYLAND(
-- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
-+ IsWindowFullScreenUpdate(lockedScreenRect, aRegion)));
-+ LOGWAYLAND((" mBufferNeedsClear = %d\n", mBufferNeedsClear));
-+ LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-+
-+#if DEBUG
-+ if (!(mBufferScreenRect == lockedScreenRect)) {
-+ LOGWAYLAND((" screen size changed\n"));
-+ }
-+#endif
-
-- // Allow full screen allocation and clear
-- // when window size changed.
-- bool bufferRedraw = !(screenRect == mLastScreenRect);
-- if (bufferRedraw) {
-- mDrawToWaylandBufferDirectly = true;
-- needsClear = true;
-+ if (!(mBufferScreenRect == lockedScreenRect)) {
-+ // Screen (window) size changed and we still have some painting pending
-+ // for the last window size. That can happen when window is resized.
-+ // We can't commit them any more as they're for former window size, so
-+ // scratch them.
-+ mDelayedImageCommits.Clear();
-+
-+ if (!mWholeWindowBufferDamage) {
-+ NS_WARNING("Partial screen update when window is resized!");
-+ // This should not happen. Screen size changed but we got only
-+ // partal screen update instead of whole screen. Discard this painting
-+ // as it produces artifacts.
-+ return nullptr;
-+ }
-+ mBufferScreenRect = lockedScreenRect;
- }
-
-- if (mDrawToWaylandBufferDirectly) {
-+ if (mWholeWindowBufferDamage) {
-+ // We can lock/commit entire buffer direcly.
-+ mDrawToWaylandBufferDirectly = true;
-+
- // If there's any pending image commit scratch them as we're going
- // to redraw the whole sceen anyway.
- mDelayedImageCommits.Clear();
-
-- RefPtr<gfx::DrawTarget> dt =
-- LockWaylandBuffer(screenRect.width, screenRect.height, needsClear,
-- /* aFullScreenUpdate */ true);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-+ /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
- if (dt) {
-- if (bufferRedraw) {
-- mLastScreenRect = screenRect;
-- }
- return dt.forget();
- }
-+ }
-
-- // We don't have any front buffer available. Try indirect drawing
-- // to mImageSurface which is mirrored to front buffer at commit.
-- mDrawToWaylandBufferDirectly = false;
-- }
-+ // We do indirect drawing due to:
-+ //
-+ // 1) We don't have any front buffer available. Try indirect drawing
-+ // to mImageSurface which is mirrored to front buffer at commit.
-+ // 2) Only part of the screen is locked. We can't lock entire screen for
-+ // such drawing as it produces visible artifacts.
-+ mDrawToWaylandBufferDirectly = false;
-
- LOGWAYLAND((" Indirect drawing.\n"));
- return LockImageSurface(lockSize);
-@@ -851,16 +882,14 @@
- LayoutDeviceIntRegion& aWaylandBufferDamage) {
- MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
-
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
-+#ifdef DEBUG
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
--
- gfx::Rect rect(bounds);
-- if (rect.IsEmpty()) {
-- return false;
-- }
-+ MOZ_ASSERT(!rect.IsEmpty(), "Empty drawing?");
-+#endif
-
- LOGWAYLAND(("%s [%p] screenSize [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, screenRect.width, screenRect.height));
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- RefPtr<gfx::SourceSurface> surf =
- gfx::Factory::CreateSourceSurfaceForCairoSurface(
-@@ -871,13 +900,8 @@
- return false;
- }
-
-- // Allow full screen allocation and clear
-- // when window size changed.
-- bool bufferRedraw = !(screenRect == mLastScreenRect);
-- RefPtr<gfx::DrawTarget> dt =
-- LockWaylandBuffer(screenRect.width, screenRect.height,
-- /* needs clear*/ bufferRedraw,
-- /* aFullScreenUpdate */ bufferRedraw);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-+ /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
- if (dt) {
- LOGWAYLAND(
- (" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-@@ -885,14 +909,11 @@
-
- // Draw any delayed image commits first
- DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-+ // Draw image from recent WindowSurfaceWayland::Lock().
- WindowImageSurface::Draw(surf, dt, aRegion);
- // Submit all drawing to final Wayland buffer upload
- aWaylandBufferDamage.OrWith(aRegion);
- UnlockWaylandBuffer();
--
-- if (bufferRedraw) {
-- mLastScreenRect = screenRect;
-- }
- } else {
- mDelayedImageCommits.AppendElement(WindowImageSurface(surf, aRegion));
- LOGWAYLAND((" Added WindowImageSurfaces, cached surfaces %ld\n",
-@@ -930,29 +951,25 @@
- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
- LOGWAYLAND(
- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
-- LOGWAYLAND((" mWaylandBufferFullScreenDamage = %d\n",
-- mWaylandBufferFullScreenDamage));
-+ LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
- LOGWAYLAND((" mDelayedCommitHandle = %p\n", mDelayedCommitHandle));
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-
- if (!mDrawToWaylandBufferDirectly) {
-+ MOZ_ASSERT(mDelayedImageCommits.Length(),
-+ "Indirect drawing without any image?");
-+
- // There's some cached drawings - try to flush them now.
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
-- bool bufferRedraw = !(screenRect == mLastScreenRect);
-- RefPtr<gfx::DrawTarget> dt =
-- LockWaylandBuffer(screenRect.width, screenRect.height,
-- /* needsClear */ bufferRedraw,
-- /* full screen update */ bufferRedraw);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-+ /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-+
- if (dt) {
- LOGWAYLAND(("%s [%p] flushed indirect drawing\n", __PRETTY_FUNCTION__,
- (void*)this));
- DrawDelayedImageCommits(dt, mWaylandBufferDamage);
- UnlockWaylandBuffer();
- mDrawToWaylandBufferDirectly = true;
-- if (bufferRedraw) {
-- mLastScreenRect = screenRect;
-- }
- }
- }
-
-@@ -1000,10 +1017,10 @@
- mLastCommittedSurface = nullptr;
- }
-
-- if (mWaylandBufferFullScreenDamage) {
-- LayoutDeviceIntRect rect = mWindow->GetBounds();
-- wl_surface_damage(waylandSurface, 0, 0, rect.width, rect.height);
-- mWaylandBufferFullScreenDamage = false;
-+ if (mWholeWindowBufferDamage) {
-+ wl_surface_damage(waylandSurface, 0, 0, mBufferScreenRect.width,
-+ mBufferScreenRect.height);
-+ mWholeWindowBufferDamage = false;
- mNeedScaleFactorUpdate = true;
- } else {
- gint scaleFactor = mWindow->GdkScaleFactor();
-@@ -1043,24 +1060,24 @@
-
- #ifdef DEBUG
- {
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
- gfx::IntRect bounds = aInvalidRegion.GetBounds().ToUnknownRect();
- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-
- LOGWAYLAND(("%s [%p] lockSize [%d x %d] screenSize [%d x %d]\n",
- __PRETTY_FUNCTION__, (void*)this, lockSize.width,
-- lockSize.height, screenRect.width, screenRect.height));
-+ lockSize.height, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
-- LOGWAYLAND((" mWaylandBufferFullScreenDamage = %d\n",
-- mWaylandBufferFullScreenDamage));
-+ LOGWAYLAND(
-+ (" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
- }
- #endif
-
- if (mDrawToWaylandBufferDirectly) {
- MOZ_ASSERT(mWaylandBuffer->IsLocked());
- // If we're not at fullscreen damage add drawing area from aInvalidRegion
-- if (!mWaylandBufferFullScreenDamage) {
-+ if (!mWholeWindowBufferDamage) {
- mWaylandBufferDamage.OrWith(aInvalidRegion);
- }
- UnlockWaylandBuffer();
-
diff --git a/mozilla-1576268.patch b/mozilla-1576268.patch
deleted file mode 100644
index 85fd1a8..0000000
--- a/mozilla-1576268.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-diff --git a/widget/gtk/nsClipboardWayland.cpp b/widget/gtk/nsClipboardWayland.cpp
---- a/widget/gtk/nsClipboardWayland.cpp
-+++ b/widget/gtk/nsClipboardWayland.cpp
-@@ -195,6 +195,12 @@
- uint32_t all_actions = WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY |
- WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE;
-
-+ /* Default to move D&D action (Bug 1576268).
-+ */
-+ if (dnd_actions == 0) {
-+ all_actions = WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE;
-+ }
-+
- wl_data_offer_set_actions(mWaylandDataOffer, all_actions, dnd_actions);
-
- /* Workaround Wayland D&D architecture here. To get the data_device_drop()
-
diff --git a/mozilla-1577024.patch b/mozilla-1577024.patch
deleted file mode 100644
index b81f103..0000000
--- a/mozilla-1577024.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1577024 firefox-69.0/widget/gtk/nsWaylandDisplay.cpp
---- firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1577024 2019-09-17 21:09:15.817764591 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.cpp 2019-09-17 21:09:15.822764568 +0200
-@@ -13,10 +13,15 @@ namespace widget {
- #define GBMLIB_NAME "libgbm.so.1"
- #define DRMLIB_NAME "libdrm.so.2"
-
-+#define DMABUF_PREF "widget.wayland_dmabuf_backend.enabled"
-+// See WindowSurfaceWayland::RenderingCacheMode for details.
-+#define CACHE_MODE_PREF "widget.wayland_cache_mode"
-+
- bool nsWaylandDisplay::mIsDMABufEnabled = false;
- // -1 mean the pref was not loaded yet
- int nsWaylandDisplay::mIsDMABufPrefState = -1;
- bool nsWaylandDisplay::mIsDMABufConfigured = false;
-+int nsWaylandDisplay::mRenderingCacheModePref = -1;
-
- wl_display* WaylandDisplayGetWLDisplay(GdkDisplay* aGdkDisplay) {
- if (!aGdkDisplay) {
-@@ -373,14 +378,15 @@ nsWaylandDisplay::nsWaylandDisplay(wl_di
- wl_registry_add_listener(mRegistry, ®istry_listener, this);
-
- if (NS_IsMainThread()) {
-- // We can't load the preference from compositor/render thread,
-- // only from main one. So we can't call it directly from
-- // nsWaylandDisplay::IsDMABufEnabled() as it can be called from various
-- // threads.
-+ // We can't load the preference from compositor/render thread
-+ // so load all Wayland prefs here.
- if (mIsDMABufPrefState == -1) {
-- mIsDMABufPrefState =
-- Preferences::GetBool("widget.wayland_dmabuf_backend.enabled", false);
-+ mIsDMABufPrefState = Preferences::GetBool(DMABUF_PREF, false);
-+ }
-+ if (mRenderingCacheModePref == -1) {
-+ mRenderingCacheModePref = Preferences::GetInt(CACHE_MODE_PREF, 0);
- }
-+
- // Use default event queue in main thread operated by Gtk+.
- mEventQueue = nullptr;
- wl_display_roundtrip(mDisplay);
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1577024 firefox-69.0/widget/gtk/nsWaylandDisplay.h
---- firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1577024 2019-09-17 21:09:15.818764586 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.h 2019-09-17 21:09:15.822764568 +0200
-@@ -83,6 +83,9 @@ class nsWaylandDisplay {
- uint32_t mModifierLo);
- static bool IsDMABufEnabled();
-
-+ // See WindowSurfaceWayland::CacheMode for details.
-+ int GetRenderingCacheModePref() { return mRenderingCacheModePref; };
-+
- private:
- bool ConfigureGbm();
-
-@@ -108,6 +111,7 @@ class nsWaylandDisplay {
- static bool mIsDMABufEnabled;
- static int mIsDMABufPrefState;
- static bool mIsDMABufConfigured;
-+ static int mRenderingCacheModePref;
- };
-
- void WaylandDispatchDisplays();
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1577024 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1577024 2019-09-17 21:09:15.820764577 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-18 08:34:50.568111279 +0200
-@@ -192,7 +192,7 @@ It owns wl_buffer object, owns WaylandDM
- (which provides the DMA Buffer) and ties them together.
-
- WindowBackBufferDMABuf backend is used only when WaylandDMABufSurface is
--available and gfx.wayland_dmabuf_backend.enabled preference is set.
-+available and widget.wayland_dmabuf_backend.enabled preference is set.
-
- */
-
-@@ -519,9 +519,11 @@ WindowSurfaceWayland::WindowSurfaceWayla
- mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
- mNeedScaleFactorUpdate(true) {
-- for (int i = 0; i < BACK_BUFFER_NUM; i++) mBackupBuffer[i] = nullptr;
-- mRenderingCacheMode = CACHE_ALL;
--
-+ for (int i = 0; i < BACK_BUFFER_NUM; i++) {
-+ mBackupBuffer[i] = nullptr;
-+ }
-+ mRenderingCacheMode = static_cast<RenderingCacheMode>(
-+ mWaylandDisplay->GetRenderingCacheModePref());
- }
-
- WindowSurfaceWayland::~WindowSurfaceWayland() {
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1577024 firefox-69.0/widget/gtk/WindowSurfaceWayland.h
diff --git a/mozilla-1579794-1.patch b/mozilla-1579794-1.patch
deleted file mode 100644
index 60c8cab..0000000
--- a/mozilla-1579794-1.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
---- a/widget/gtk/WindowSurfaceWayland.h
-+++ b/widget/gtk/WindowSurfaceWayland.h
-@@ -154,11 +154,12 @@
- void Draw(gfx::DrawTarget* aDest,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
-
-- WindowImageSurface(gfx::SourceSurface* aSurface,
-+ WindowImageSurface(gfxImageSurface* aImageSurface,
- const LayoutDeviceIntRegion& aUpdateRegion);
-
- private:
- RefPtr<gfx::SourceSurface> mSurface;
-+ RefPtr<gfxImageSurface> mImageSurface;
- const LayoutDeviceIntRegion mUpdateRegion;
- };
-
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -890,8 +890,12 @@
- }
-
- WindowImageSurface::WindowImageSurface(
-- gfx::SourceSurface* aSurface, const LayoutDeviceIntRegion& aUpdateRegion)
-- : mSurface(aSurface), mUpdateRegion(aUpdateRegion){};
-+ gfxImageSurface* aImageSurface, const LayoutDeviceIntRegion& aUpdateRegion)
-+ : mImageSurface(aImageSurface), mUpdateRegion(aUpdateRegion) {
-+ mSurface = gfx::Factory::CreateSourceSurfaceForCairoSurface(
-+ mImageSurface->CairoSurface(), mImageSurface->GetSize(),
-+ mImageSurface->Format());
-+}
-
- void WindowSurfaceWayland::DrawDelayedImageCommits(
- gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-@@ -915,36 +919,24 @@
- LOGWAYLAND(("%s [%p] screenSize [%d x %d]\n", __PRETTY_FUNCTION__,
- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
-- RefPtr<gfx::SourceSurface> surf =
-- gfx::Factory::CreateSourceSurfaceForCairoSurface(
-- mImageSurface->CairoSurface(), mImageSurface->GetSize(),
-- mImageSurface->Format());
-- if (!surf) {
-- NS_WARNING("Failed to create source cairo surface!");
-- return false;
-- }
-+ mDelayedImageCommits.AppendElement(
-+ WindowImageSurface(mImageSurface, aRegion));
-+ // mImageSurface is owned by mDelayedImageCommits
-+ mImageSurface = nullptr;
-
- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-- if (dt) {
-- LOGWAYLAND(
-- (" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-- long(mDelayedImageCommits.Length() + 1)));
--
-- // Draw any delayed image commits first
-- DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-- // Draw image from recent WindowSurfaceWayland::Lock().
-- WindowImageSurface::Draw(surf, dt, aRegion);
-- // Submit all drawing to final Wayland buffer upload
-- aWaylandBufferDamage.OrWith(aRegion);
-- UnlockWaylandBuffer();
-- } else {
-- mDelayedImageCommits.AppendElement(WindowImageSurface(surf, aRegion));
-- LOGWAYLAND((" Added WindowImageSurfaces, cached surfaces %ld\n",
-- long(mDelayedImageCommits.Length())));
-+ if (!dt) {
- return false;
- }
-
-+ LOGWAYLAND((" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-+ long(mDelayedImageCommits.Length() + 1)));
-+
-+ // Draw any delayed image commits first
-+ DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-+ UnlockWaylandBuffer();
-+
- return true;
- }
-
-@@ -980,23 +972,6 @@
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-
-- if (!mDrawToWaylandBufferDirectly) {
-- MOZ_ASSERT(mDelayedImageCommits.Length(),
-- "Indirect drawing without any image?");
--
-- // There's some cached drawings - try to flush them now.
-- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
--
-- if (dt) {
-- LOGWAYLAND(("%s [%p] flushed indirect drawing\n", __PRETTY_FUNCTION__,
-- (void*)this));
-- DrawDelayedImageCommits(dt, mWaylandBufferDamage);
-- UnlockWaylandBuffer();
-- mDrawToWaylandBufferDirectly = true;
-- }
-- }
--
- wl_surface* waylandSurface = mWindow->GetWaylandSurface();
- if (!waylandSurface) {
- LOGWAYLAND(("%s [%p] mWindow->GetWaylandSurface() failed, delay commit.\n",
-@@ -1105,6 +1080,7 @@
- mWaylandBufferDamage.OrWith(aInvalidRegion);
- }
- UnlockWaylandBuffer();
-+ mPendingCommit = true;
- } else {
- MOZ_ASSERT(!mWaylandBuffer->IsLocked(),
- "Drawing to already locked buffer?");
-@@ -1112,12 +1088,13 @@
- mWaylandBufferDamage)) {
- // Our cached drawing is flushed, we can draw fullscreen again.
- mDrawToWaylandBufferDirectly = true;
-+ mPendingCommit = true;
- }
- }
-
-- // We're ready to commit.
-- mPendingCommit = true;
-- CommitWaylandBuffer();
-+ if (mPendingCommit) {
-+ CommitWaylandBuffer();
-+ }
- }
-
- void WindowSurfaceWayland::FrameCallbackHandler() {
-
diff --git a/mozilla-1579794-2.patch b/mozilla-1579794-2.patch
deleted file mode 100644
index a8c249b..0000000
--- a/mozilla-1579794-2.patch
+++ /dev/null
@@ -1,166 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
---- a/widget/gtk/WindowSurfaceWayland.h
-+++ b/widget/gtk/WindowSurfaceWayland.h
-@@ -204,7 +204,6 @@
- const LayoutDeviceIntRegion& aRegion,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
- void CommitWaylandBuffer();
-- void CalcRectScale(LayoutDeviceIntRect& aRect, int scale);
-
- void DrawDelayedImageCommits(gfx::DrawTarget* aDrawTarget,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -951,16 +951,6 @@
- }
- }
-
--void WindowSurfaceWayland::CalcRectScale(LayoutDeviceIntRect& aRect,
-- int aScale) {
-- aRect.x = aRect.x / aScale;
-- aRect.y = aRect.y / aScale;
--
-- // We don't need exact damage size - just safely cover the round errors.
-- aRect.width = (aRect.width / aScale) + 2;
-- aRect.height = (aRect.height / aScale) + 2;
--}
--
- void WindowSurfaceWayland::CommitWaylandBuffer() {
- MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
-
-@@ -1022,16 +1012,10 @@
- mWholeWindowBufferDamage = false;
- mNeedScaleFactorUpdate = true;
- } else {
-- gint scaleFactor = mWindow->GdkScaleFactor();
- for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
- iter.Next()) {
- mozilla::LayoutDeviceIntRect r = iter.Get();
-- // We need to remove the scale factor because the wl_surface_damage
-- // also multiplies by current scale factor.
-- if (scaleFactor > 1) {
-- CalcRectScale(r, scaleFactor);
-- }
-- wl_surface_damage(waylandSurface, r.x, r.y, r.width, r.height);
-+ wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
- }
- }
-
-diff --git a/widget/gtk/mozcontainer.cpp b/widget/gtk/mozcontainer.cpp
---- a/widget/gtk/mozcontainer.cpp
-+++ b/widget/gtk/mozcontainer.cpp
-@@ -578,16 +578,12 @@
- return nullptr;
- }
- GdkDisplay* display = gtk_widget_get_display(GTK_WIDGET(container));
-+ nsWaylandDisplay* waylandDisplay = WaylandDisplayGet(display);
-
- // Available as of GTK 3.8+
-- static auto sGdkWaylandDisplayGetWlCompositor =
-- (wl_compositor * (*)(GdkDisplay*))
-- dlsym(RTLD_DEFAULT, "gdk_wayland_display_get_wl_compositor");
-- struct wl_compositor* compositor =
-- sGdkWaylandDisplayGetWlCompositor(display);
-+ struct wl_compositor* compositor = waylandDisplay->GetCompositor();
- container->surface = wl_compositor_create_surface(compositor);
-
-- nsWaylandDisplay* waylandDisplay = WaylandDisplayGet(display);
- container->subsurface = wl_subcompositor_get_subsurface(
- waylandDisplay->GetSubcompositor(), container->surface,
- moz_container_get_gtk_container_surface(container));
-diff --git a/widget/gtk/mozwayland/mozwayland.h b/widget/gtk/mozwayland/mozwayland.h
---- a/widget/gtk/mozwayland/mozwayland.h
-+++ b/widget/gtk/mozwayland/mozwayland.h
-@@ -108,6 +108,17 @@
- }
- #endif
-
-+#ifndef WL_SURFACE_DAMAGE_BUFFER
-+# define WL_SURFACE_DAMAGE_BUFFER 9
-+
-+static inline void wl_surface_damage_buffer(struct wl_surface* wl_surface,
-+ int32_t x, int32_t y, int32_t width,
-+ int32_t height) {
-+ wl_proxy_marshal((struct wl_proxy*)wl_surface, WL_SURFACE_DAMAGE_BUFFER, x, y,
-+ width, height);
-+}
-+#endif
-+
- #ifdef __cplusplus
- }
- #endif
-diff --git a/widget/gtk/mozwayland/mozwayland.c b/widget/gtk/mozwayland/mozwayland.c
---- a/widget/gtk/mozwayland/mozwayland.c
-+++ b/widget/gtk/mozwayland/mozwayland.c
-@@ -30,6 +30,7 @@
- const struct wl_interface wl_seat_interface;
- const struct wl_interface wl_surface_interface;
- const struct wl_interface wl_subsurface_interface;
-+const struct wl_interface wl_compositor_interface;
- const struct wl_interface wl_subcompositor_interface;
- #pragma GCC visibility pop
-
-diff --git a/widget/gtk/nsWaylandDisplay.h b/widget/gtk/nsWaylandDisplay.h
---- a/widget/gtk/nsWaylandDisplay.h
-+++ b/widget/gtk/nsWaylandDisplay.h
-@@ -45,6 +45,7 @@
- MessageLoop* GetDispatcherThreadLoop() { return mDispatcherThreadLoop; }
- wl_display* GetDisplay() { return mDisplay; };
- wl_event_queue* GetEventQueue() { return mEventQueue; };
-+ wl_compositor* GetCompositor(void) { return mCompositor; };
- wl_subcompositor* GetSubcompositor(void) { return mSubcompositor; };
- wl_data_device_manager* GetDataDeviceManager(void) {
- return mDataDeviceManager;
-@@ -56,6 +57,7 @@
- };
-
- void SetShm(wl_shm* aShm);
-+ void SetCompositor(wl_compositor* aCompositor);
- void SetSubcompositor(wl_subcompositor* aSubcompositor);
- void SetDataDeviceManager(wl_data_device_manager* aDataDeviceManager);
- void SetSeat(wl_seat* aSeat);
-@@ -88,6 +90,7 @@
- wl_display* mDisplay;
- wl_event_queue* mEventQueue;
- wl_data_device_manager* mDataDeviceManager;
-+ wl_compositor* mCompositor;
- wl_subcompositor* mSubcompositor;
- wl_seat* mSeat;
- wl_shm* mShm;
-diff --git a/widget/gtk/nsWaylandDisplay.cpp b/widget/gtk/nsWaylandDisplay.cpp
---- a/widget/gtk/nsWaylandDisplay.cpp
-+++ b/widget/gtk/nsWaylandDisplay.cpp
-@@ -116,6 +116,10 @@
-
- void nsWaylandDisplay::SetShm(wl_shm* aShm) { mShm = aShm; }
-
-+void nsWaylandDisplay::SetCompositor(wl_compositor* aCompositor) {
-+ mCompositor = aCompositor;
-+}
-+
- void nsWaylandDisplay::SetSubcompositor(wl_subcompositor* aSubcompositor) {
- mSubcompositor = aSubcompositor;
- }
-@@ -223,6 +227,12 @@
- wl_proxy_set_queue((struct wl_proxy*)primary_selection_device_manager,
- display->GetEventQueue());
- display->SetPrimarySelectionDeviceManager(primary_selection_device_manager);
-+ } else if (strcmp(interface, "wl_compositor") == 0) {
-+ // Requested wl_compositor version 4 as we need wl_surface_damage_buffer().
-+ auto compositor = static_cast<wl_compositor*>(
-+ wl_registry_bind(registry, id, &wl_compositor_interface, 4));
-+ wl_proxy_set_queue((struct wl_proxy*)compositor, display->GetEventQueue());
-+ display->SetCompositor(compositor);
- } else if (strcmp(interface, "wl_subcompositor") == 0) {
- auto subcompositor = static_cast<wl_subcompositor*>(
- wl_registry_bind(registry, id, &wl_subcompositor_interface, 1));
-@@ -306,6 +316,7 @@
- mDisplay(aDisplay),
- mEventQueue(nullptr),
- mDataDeviceManager(nullptr),
-+ mCompositor(nullptr),
- mSubcompositor(nullptr),
- mSeat(nullptr),
- mShm(nullptr),
-
diff --git a/mozilla-1579823.patch b/mozilla-1579823.patch
deleted file mode 100644
index 9e00d4f..0000000
--- a/mozilla-1579823.patch
+++ /dev/null
@@ -1,306 +0,0 @@
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1579823 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1579823 2019-09-12 07:53:06.119602913 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-12 07:54:47.410105270 +0200
-@@ -326,13 +326,13 @@ void WindowBackBufferShm::Create(int aWi
- mHeight = aHeight;
-
- LOGWAYLAND((
-- "%s [%p] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__, (void*)this,
-+ "WindowBackBufferShm::Create [%p] wl_buffer %p ID %d\n", (void*)this,
- (void*)mWaylandBuffer,
- mWaylandBuffer ? wl_proxy_get_id((struct wl_proxy*)mWaylandBuffer) : -1));
- }
-
- void WindowBackBufferShm::Release() {
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(("WindowBackBufferShm::Release [%p]\n", (void*)this));
-
- wl_buffer_destroy(mWaylandBuffer);
- mWidth = mHeight = 0;
-@@ -358,8 +358,8 @@ WindowBackBufferShm::~WindowBackBufferSh
- bool WindowBackBufferShm::Resize(int aWidth, int aHeight) {
- if (aWidth == mWidth && aHeight == mHeight) return true;
-
-- LOGWAYLAND(
-- ("%s [%p] %d %d\n", __PRETTY_FUNCTION__, (void*)this, aWidth, aHeight));
-+ LOGWAYLAND(("WindowBackBufferShm::Resize [%p] %d %d\n", (void*)this, aWidth,
-+ aHeight));
-
- Release();
- Create(aWidth, aHeight);
-@@ -369,7 +369,7 @@ bool WindowBackBufferShm::Resize(int aWi
-
- void WindowBackBuffer::Attach(wl_surface* aSurface) {
- LOGWAYLAND(
-- ("%s [%p] wl_surface %p ID %d wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
-+ ("WindowBackBuffer::Attach [%p] wl_surface %p ID %d wl_buffer %p ID %d\n",
- (void*)this, (void*)aSurface,
- aSurface ? wl_proxy_get_id((struct wl_proxy*)aSurface) : -1,
- (void*)GetWlBuffer(),
-@@ -382,8 +382,8 @@ void WindowBackBuffer::Attach(wl_surface
- }
-
- void WindowBackBufferShm::Detach(wl_buffer* aBuffer) {
-- LOGWAYLAND(("%s [%p] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__, (void*)this,
-- (void*)aBuffer,
-+ LOGWAYLAND(("WindowBackBufferShm::Detach [%p] wl_buffer %p ID %d\n",
-+ (void*)this, (void*)aBuffer,
- aBuffer ? wl_proxy_get_id((struct wl_proxy*)aBuffer) : -1));
-
- mAttached = false;
-@@ -404,7 +404,7 @@ bool WindowBackBufferShm::SetImageDataFr
-
- already_AddRefed<gfx::DrawTarget> WindowBackBufferShm::Lock() {
- LOGWAYLAND((
-- "%s [%p] [%d x %d] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
-+ "WindowBackBufferShm::Lock [%p] [%d x %d] wl_buffer %p ID %d\n",
- (void*)this, mWidth, mHeight, (void*)mWaylandBuffer,
- mWaylandBuffer ? wl_proxy_get_id((struct wl_proxy*)mWaylandBuffer) : -1));
-
-@@ -419,16 +419,17 @@ WindowBackBufferDMABuf::WindowBackBuffer
- nsWaylandDisplay* aWaylandDisplay, int aWidth, int aHeight)
- : WindowBackBuffer(aWaylandDisplay) {
- mDMAbufSurface.Create(aWidth, aHeight);
--
-- LOGWAYLAND(("%s [%p] Created DMABuf buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-+ LOGWAYLAND(
-+ ("WindowBackBufferDMABuf::WindowBackBufferDMABuf [%p] Created DMABuf "
-+ "buffer [%d x %d]\n",
-+ (void*)this, aWidth, aHeight));
- }
-
- WindowBackBufferDMABuf::~WindowBackBufferDMABuf() { mDMAbufSurface.Release(); }
-
- already_AddRefed<gfx::DrawTarget> WindowBackBufferDMABuf::Lock() {
- LOGWAYLAND(
-- ("%s [%p] [%d x %d] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
-+ ("WindowBackBufferDMABuf::Lock [%p] [%d x %d] wl_buffer %p ID %d\n",
- (void*)this, GetWidth(), GetHeight(), (void*)GetWlBuffer(),
- GetWlBuffer() ? wl_proxy_get_id((struct wl_proxy*)GetWlBuffer()) : -1));
-
-@@ -534,7 +535,8 @@ WindowSurfaceWayland::~WindowSurfaceWayl
- bool WindowSurfaceWayland::UseDMABufBackend() {
- if (!mUseDMABufInitialized) {
- mUseDMABuf = nsWaylandDisplay::IsDMABufEnabled();
-- LOGWAYLAND(("%s DMABuf state %d\n", __PRETTY_FUNCTION__, mUseDMABuf));
-+ LOGWAYLAND(("WindowSurfaceWayland::UseDMABufBackend DMABuf state %d\n",
-+ mUseDMABuf));
- mUseDMABufInitialized = true;
- }
- return mUseDMABuf;
-@@ -567,15 +569,16 @@ WindowBackBuffer* WindowSurfaceWayland::
-
- WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(
- bool aCanSwitchBuffer) {
-- LOGWAYLAND(("%s [%p] Requested buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::GetWaylandBufferToDraw [%p] Requested buffer [%d "
-+ "x %d]\n",
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- // There's no buffer created yet, create a new one.
- if (!mWaylandBuffer) {
- MOZ_ASSERT(aCanSwitchBuffer && mWholeWindowBufferDamage,
- "Created new buffer for partial drawing!");
-- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width,
-+ LOGWAYLAND((" Created new buffer [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
-
- mWaylandBuffer =
-@@ -586,21 +589,19 @@ WindowBackBuffer* WindowSurfaceWayland::
-
- #ifdef DEBUG
- if (mWaylandBuffer->IsAttached()) {
-- LOGWAYLAND(("%s [%p] Buffer %p is attached, need to find a new one.\n",
-- __PRETTY_FUNCTION__, (void*)this, mWaylandBuffer));
-+ LOGWAYLAND((" Buffer %p is attached, need to find a new one.\n",
-+ mWaylandBuffer));
- }
- #endif
-
- // Reuse existing buffer
- if (!mWaylandBuffer->IsAttached()) {
-- LOGWAYLAND(
-- ("%s [%p] Use recent buffer.\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND((" Use recent buffer.\n"));
-
- if (mWaylandBuffer->IsMatchingSize(mBufferScreenRect.width,
- mBufferScreenRect.height)) {
-- LOGWAYLAND(("%s [%p] Size is ok, use the buffer [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ LOGWAYLAND((" Size is ok, use the buffer [%d x %d]\n",
-+ mBufferScreenRect.width, mBufferScreenRect.height));
- return mWaylandBuffer;
- }
-
-@@ -609,9 +610,8 @@ WindowBackBuffer* WindowSurfaceWayland::
- return nullptr;
- }
-
-- LOGWAYLAND(("%s [%p] Reuse buffer with resize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ LOGWAYLAND((" Reuse buffer with resize [%d x %d]\n",
-+ mBufferScreenRect.width, mBufferScreenRect.height));
-
- mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- // There's a chance that scale factor has been changed
-@@ -629,8 +629,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- for (availableBuffer = 0; availableBuffer < BACK_BUFFER_NUM;
- availableBuffer++) {
- if (!mBackupBuffer[availableBuffer]) {
-- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width,
-+ LOGWAYLAND((" Created new buffer [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
- mBackupBuffer[availableBuffer] = CreateWaylandBuffer(
- mBufferScreenRect.width, mBufferScreenRect.height);
-@@ -643,8 +642,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- }
-
- if (MOZ_UNLIKELY(availableBuffer == BACK_BUFFER_NUM)) {
-- LOGWAYLAND(("%s [%p] No drawing buffer available!\n", __PRETTY_FUNCTION__,
-- (void*)this));
-+ LOGWAYLAND((" No drawing buffer available!\n"));
- NS_WARNING("No drawing buffer available");
- return nullptr;
- }
-@@ -653,17 +651,15 @@ WindowBackBuffer* WindowSurfaceWayland::
- mWaylandBuffer = mBackupBuffer[availableBuffer];
- mBackupBuffer[availableBuffer] = lastWaylandBuffer;
-
-- LOGWAYLAND(("%s [%p] Buffer flip new back %p new front %p \n",
-- __PRETTY_FUNCTION__, (void*)this, (void*)lastWaylandBuffer,
-- (void*)mWaylandBuffer));
-+ LOGWAYLAND((" Buffer flip new back %p new front %p \n",
-+ (void*)lastWaylandBuffer, (void*)mWaylandBuffer));
-
- mNeedScaleFactorUpdate = true;
-
- bool bufferNeedsResize = !mWaylandBuffer->IsMatchingSize(
- mBufferScreenRect.width, mBufferScreenRect.height);
- if (bufferNeedsResize) {
-- LOGWAYLAND(("%s [%p] Resize buffer to [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width,
-+ LOGWAYLAND((" Resize buffer to [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
- mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- }
-@@ -675,8 +671,8 @@ already_AddRefed<gfx::DrawTarget> Window
- bool aCanSwitchBuffer) {
- WindowBackBuffer* buffer = GetWaylandBufferToDraw(aCanSwitchBuffer);
-
-- LOGWAYLAND(("%s [%p] Got buffer %p\n", __PRETTY_FUNCTION__, (void*)this,
-- (void*)buffer));
-+ LOGWAYLAND(("WindowSurfaceWayland::LockWaylandBuffer [%p] Got buffer %p\n",
-+ (void*)this, (void*)buffer));
-
- if (!buffer) {
- return nullptr;
-@@ -691,7 +687,7 @@ already_AddRefed<gfx::DrawTarget> Window
- }
-
- void WindowSurfaceWayland::UnlockWaylandBuffer() {
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(("WindowSurfaceWayland::UnlockWaylandBuffer [%p]\n", (void*)this));
- mWaylandBuffer->Unlock();
- }
-
-@@ -774,9 +770,11 @@ already_AddRefed<gfx::DrawTarget> Window
- mWindow->WaylandSurfaceNeedsClear() || isTransparentPopup;
- }
-
-- LOGWAYLAND(("%s [%p] lockSize [%d x %d] windowSize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, lockSize.width, lockSize.height,
-- lockedScreenRect.width, lockedScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::Lock [%p] lockSize [%d x %d] windowSize [%d x "
-+ "%d]\n",
-+ (void*)this, lockSize.width, lockSize.height, lockedScreenRect.width,
-+ lockedScreenRect.height));
- LOGWAYLAND((" nsWindow = %p\n", mWindow));
- LOGWAYLAND((" isPopup = %d\n", mWindow->IsWaylandPopup()));
- LOGWAYLAND((" isTransparentPopup = %d\n", isTransparentPopup));
-@@ -892,8 +890,10 @@ bool WindowSurfaceWayland::CommitImageSu
- MOZ_ASSERT(!rect.IsEmpty(), "Empty drawing?");
- #endif
-
-- LOGWAYLAND(("%s [%p] screenSize [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::CommitImageSurfaceToWaylandBuffer [%p] "
-+ "screenSize [%d x %d]\n",
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- mDelayedImageCommits.AppendElement(
- WindowImageSurface(mImageSurface, aRegion));
-@@ -930,7 +930,7 @@ static void WaylandBufferDelayCommitHand
- void WindowSurfaceWayland::CommitWaylandBuffer() {
- MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
-
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(("WindowSurfaceWayland::CommitWaylandBuffer [%p]\n", (void*)this));
- LOGWAYLAND(
- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-@@ -940,8 +940,8 @@ void WindowSurfaceWayland::CommitWayland
-
- wl_surface* waylandSurface = mWindow->GetWaylandSurface();
- if (!waylandSurface) {
-- LOGWAYLAND(("%s [%p] mWindow->GetWaylandSurface() failed, delay commit.\n",
-- __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND((" [%p] mWindow->GetWaylandSurface() failed, delay commit.\n",
-+ (void*)this));
-
- // Target window is not created yet - delay the commit. This can happen only
- // when the window is newly created and there's no active
-@@ -969,8 +969,7 @@ void WindowSurfaceWayland::CommitWayland
- // We have an active frame callback request so handle it.
- if (mFrameCallback) {
- if (waylandSurface == mLastCommittedSurface) {
-- LOGWAYLAND(("%s [%p] wait for frame callback.\n", __PRETTY_FUNCTION__,
-- (void*)this));
-+ LOGWAYLAND((" [%p] wait for frame callback.\n", (void*)this));
- // We have an active frame callback pending from our recent surface.
- // It means we should defer the commit to FrameCallbackHandler().
- return;
-@@ -1022,10 +1021,11 @@ void WindowSurfaceWayland::Commit(const
- gfx::IntRect bounds = aInvalidRegion.GetBounds().ToUnknownRect();
- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-
-- LOGWAYLAND(("%s [%p] lockSize [%d x %d] screenSize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, lockSize.width,
-- lockSize.height, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::Commit [%p] lockSize [%d x %d] screenSize [%d "
-+ "x %d]\n",
-+ (void*)this, lockSize.width, lockSize.height, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
- LOGWAYLAND(
-@@ -1064,7 +1064,8 @@ void WindowSurfaceWayland::FrameCallback
- MOZ_ASSERT(mLastCommittedSurface != nullptr,
- "FrameCallbackHandler() called without valid wl_surface!");
-
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::FrameCallbackHandler [%p]\n", (void*)this));
-
- wl_callback_destroy(mFrameCallback);
- mFrameCallback = nullptr;
-@@ -1077,7 +1078,8 @@ void WindowSurfaceWayland::FrameCallback
- void WindowSurfaceWayland::DelayedCommitHandler() {
- MOZ_ASSERT(mDelayedCommitHandle != nullptr, "Missing mDelayedCommitHandle!");
-
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::DelayedCommitHandler [%p]\n", (void*)this));
-
- *mDelayedCommitHandle = nullptr;
- free(mDelayedCommitHandle);
diff --git a/mozilla-1579849.patch b/mozilla-1579849.patch
deleted file mode 100644
index fb3e8c2..0000000
--- a/mozilla-1579849.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.old firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.old 2019-09-11 14:34:36.687382704 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-11 14:39:02.000391578 +0200
-@@ -751,6 +751,10 @@ static bool IsPopupFullScreenUpdate(Layo
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::Lock(
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-+
-+ // Disable all commits from frame callback handler and delayed comit handler
-+ // as we're updated by gecko compositor.
-+ mPendingCommit = false;
-
- LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
diff --git a/mozilla-1580152.patch b/mozilla-1580152.patch
deleted file mode 100644
index 6260d3c..0000000
--- a/mozilla-1580152.patch
+++ /dev/null
@@ -1,618 +0,0 @@
-diff -up firefox-69.0/widget/gtk/mozwayland/mozwayland.h.mozilla-1580152 firefox-69.0/widget/gtk/mozwayland/mozwayland.h
---- firefox-69.0/widget/gtk/mozwayland/mozwayland.h.mozilla-1580152 2019-09-16 11:11:30.081299217 +0200
-+++ firefox-69.0/widget/gtk/mozwayland/mozwayland.h 2019-09-16 11:11:30.089299191 +0200
-@@ -27,6 +27,9 @@ MOZ_EXPORT struct wl_proxy* wl_proxy_mar
- struct wl_proxy* proxy, uint32_t opcode,
- const struct wl_interface* interface, ...);
-
-+MOZ_EXPORT void* wl_proxy_create_wrapper(void* proxy);
-+MOZ_EXPORT void wl_proxy_wrapper_destroy(void* proxy_wrapper);
-+
- /* We need implement some missing functions from wayland-client-protocol.h
- */
- #ifndef WL_DATA_DEVICE_MANAGER_DND_ACTION_ENUM
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1580152 firefox-69.0/widget/gtk/nsWaylandDisplay.cpp
---- firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1580152 2019-09-16 11:11:30.081299217 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.cpp 2019-09-16 11:11:30.089299191 +0200
-@@ -243,6 +243,61 @@ bool nsWaylandDisplay::DispatchEventQueu
- return true;
- }
-
-+void nsWaylandDisplay::SyncEnd() {
-+ wl_callback_destroy(mSyncCallback);
-+ mSyncCallback = NULL;
-+}
-+
-+static void wayland_sync_callback(void* data, struct wl_callback* callback,
-+ uint32_t time) {
-+ auto display = static_cast<nsWaylandDisplay*>(data);
-+ display->SyncEnd();
-+}
-+
-+static const struct wl_callback_listener sync_callback_listener = {
-+ .done = wayland_sync_callback};
-+
-+void nsWaylandDisplay::SyncBegin() {
-+ WaitForSyncEnd();
-+
-+ // Use wl_display_sync() to synchronize wayland events.
-+ // See dri2_wl_swap_buffers_with_damage() from MESA
-+ // or wl_display_roundtrip_queue() from wayland-client.
-+ struct wl_display* displayWrapper =
-+ static_cast<wl_display*>(wl_proxy_create_wrapper((void*)mDisplay));
-+ if (!displayWrapper) {
-+ NS_WARNING("Failed to create wl_proxy wrapper!");
-+ return;
-+ }
-+
-+ wl_proxy_set_queue((struct wl_proxy*)displayWrapper, mEventQueue);
-+ mSyncCallback = wl_display_sync(displayWrapper);
-+ wl_proxy_wrapper_destroy((void*)displayWrapper);
-+
-+ if (!mSyncCallback) {
-+ NS_WARNING("Failed to create wl_display_sync callback!");
-+ return;
-+ }
-+
-+ wl_callback_add_listener(mSyncCallback, &sync_callback_listener, this);
-+ wl_display_flush(mDisplay);
-+}
-+
-+void nsWaylandDisplay::WaitForSyncEnd() {
-+ // We're done here
-+ if (!mSyncCallback) {
-+ return;
-+ }
-+
-+ while (mSyncCallback != NULL) {
-+ if (wl_display_dispatch_queue(mDisplay, mEventQueue) == -1) {
-+ NS_WARNING("wl_display_dispatch_queue failed!");
-+ SyncEnd();
-+ return;
-+ }
-+ }
-+}
-+
- bool nsWaylandDisplay::Matches(wl_display* aDisplay) {
- return mThreadId == PR_GetCurrentThread() && aDisplay == mDisplay;
- }
-@@ -305,6 +360,7 @@ nsWaylandDisplay::nsWaylandDisplay(wl_di
- mSubcompositor(nullptr),
- mSeat(nullptr),
- mShm(nullptr),
-+ mSyncCallback(nullptr),
- mPrimarySelectionDeviceManager(nullptr),
- mRegistry(nullptr),
- mGbmDevice(nullptr),
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1580152 firefox-69.0/widget/gtk/nsWaylandDisplay.h
---- firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1580152 2019-09-16 11:11:30.081299217 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.h 2019-09-16 11:11:30.089299191 +0200
-@@ -41,6 +41,11 @@ class nsWaylandDisplay {
- virtual ~nsWaylandDisplay();
-
- bool DispatchEventQueue();
-+
-+ void SyncBegin();
-+ void SyncEnd();
-+ void WaitForSyncEnd();
-+
- bool Matches(wl_display* aDisplay);
-
- MessageLoop* GetDispatcherThreadLoop() { return mDispatcherThreadLoop; }
-@@ -90,6 +95,7 @@ class nsWaylandDisplay {
- wl_subcompositor* mSubcompositor;
- wl_seat* mSeat;
- wl_shm* mShm;
-+ wl_callback* mSyncCallback;
- gtk_primary_selection_device_manager* mPrimarySelectionDeviceManager;
- wl_registry* mRegistry;
- zwp_linux_dmabuf_v1* mDmabuf;
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1580152 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1580152 2019-09-16 11:11:30.086299200 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-16 11:57:35.462193492 +0200
-@@ -32,6 +32,9 @@ extern mozilla::LazyLogModule gWidgetWay
- # define LOGWAYLAND(args)
- #endif /* MOZ_LOGGING */
-
-+// Maximal compositin timeout it miliseconds
-+#define COMPOSITING_TIMEOUT 200
-+
- namespace mozilla {
- namespace widget {
-
-@@ -198,6 +201,10 @@ available and gfx.wayland_dmabuf_backend
- #define BUFFER_BPP 4
- gfx::SurfaceFormat WindowBackBuffer::mFormat = gfx::SurfaceFormat::B8G8R8A8;
-
-+nsWaylandDisplay* WindowBackBuffer::GetWaylandDisplay() {
-+ return mWindowSurfaceWayland->GetWaylandDisplay();
-+}
-+
- int WaylandShmPool::CreateTemporaryFile(int aSize) {
- const char* tmppath = getenv("XDG_RUNTIME_DIR");
- MOZ_RELEASE_ASSERT(tmppath, "Missing XDG_RUNTIME_DIR env variable.");
-@@ -342,10 +349,11 @@ void WindowBackBufferShm::Clear() {
- memset(mShmPool.GetImageData(), 0, mHeight * mWidth * BUFFER_BPP);
- }
-
--WindowBackBufferShm::WindowBackBufferShm(nsWaylandDisplay* aWaylandDisplay,
-- int aWidth, int aHeight)
-- : WindowBackBuffer(aWaylandDisplay),
-- mShmPool(aWaylandDisplay, aWidth * aHeight * BUFFER_BPP),
-+WindowBackBufferShm::WindowBackBufferShm(
-+ WindowSurfaceWayland* aWindowSurfaceWayland, int aWidth, int aHeight)
-+ : WindowBackBuffer(aWindowSurfaceWayland),
-+ mShmPool(aWindowSurfaceWayland->GetWaylandDisplay(),
-+ aWidth * aHeight * BUFFER_BPP),
- mWaylandBuffer(nullptr),
- mWidth(aWidth),
- mHeight(aHeight),
-@@ -387,6 +395,9 @@ void WindowBackBufferShm::Detach(wl_buff
- aBuffer ? wl_proxy_get_id((struct wl_proxy*)aBuffer) : -1));
-
- mAttached = false;
-+
-+ // Commit any potential cached drawings from latest Lock()/Commit() cycle.
-+ mWindowSurfaceWayland->CommitWaylandBuffer();
- }
-
- bool WindowBackBufferShm::SetImageDataFromBuffer(
-@@ -416,8 +427,8 @@ already_AddRefed<gfx::DrawTarget> Window
- }
-
- WindowBackBufferDMABuf::WindowBackBufferDMABuf(
-- nsWaylandDisplay* aWaylandDisplay, int aWidth, int aHeight)
-- : WindowBackBuffer(aWaylandDisplay) {
-+ WindowSurfaceWayland* aWindowSurfaceWayland, int aWidth, int aHeight)
-+ : WindowBackBuffer(aWindowSurfaceWayland) {
- mDMAbufSurface.Create(aWidth, aHeight);
- LOGWAYLAND(
- ("WindowBackBufferDMABuf::WindowBackBufferDMABuf [%p] Created DMABuf "
-@@ -475,6 +486,9 @@ bool WindowBackBufferDMABuf::SetImageDat
-
- void WindowBackBufferDMABuf::Detach(wl_buffer* aBuffer) {
- mDMAbufSurface.WLBufferDetach();
-+
-+ // Commit any potential cached drawings from latest Lock()/Commit() cycle.
-+ mWindowSurfaceWayland->CommitWaylandBuffer();
- }
-
- void WindowBackBufferDMABuf::Clear() { mDMAbufSurface.Clear(); }
-@@ -496,10 +510,11 @@ WindowSurfaceWayland::WindowSurfaceWayla
- mWaylandBuffer(nullptr),
- mFrameCallback(nullptr),
- mLastCommittedSurface(nullptr),
-- mDisplayThreadMessageLoop(MessageLoop::current()),
- mDelayedCommitHandle(nullptr),
-+ mLastCommitTime(0),
- mDrawToWaylandBufferDirectly(true),
-- mPendingCommit(false),
-+ mBufferPendingCommit(false),
-+ mBufferCommitAllowed(false),
- mWholeWindowBufferDamage(false),
- mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
-@@ -508,7 +523,7 @@ WindowSurfaceWayland::WindowSurfaceWayla
- }
-
- WindowSurfaceWayland::~WindowSurfaceWayland() {
-- if (mPendingCommit) {
-+ if (mBufferPendingCommit) {
- NS_WARNING("Deleted WindowSurfaceWayland with a pending commit!");
- }
-
-@@ -547,7 +562,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- if (UseDMABufBackend()) {
- static bool sDMABufBufferCreated = false;
- WindowBackBuffer* buffer =
-- new WindowBackBufferDMABuf(mWaylandDisplay, aWidth, aHeight);
-+ new WindowBackBufferDMABuf(this, aWidth, aHeight);
- if (buffer) {
- sDMABufBufferCreated = true;
- return buffer;
-@@ -564,7 +579,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- }
- }
-
-- return new WindowBackBufferShm(mWaylandDisplay, aWidth, aHeight);
-+ return new WindowBackBufferShm(this, aWidth, aHeight);
- }
-
- WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(
-@@ -675,6 +690,11 @@ already_AddRefed<gfx::DrawTarget> Window
- (void*)this, (void*)buffer));
-
- if (!buffer) {
-+ if (mLastCommitTime && (g_get_monotonic_time() / 1000) - mLastCommitTime >
-+ COMPOSITING_TIMEOUT) {
-+ NS_WARNING(
-+ "Slow response from Wayland compositor, visual glitches ahead.");
-+ }
- return nullptr;
- }
-
-@@ -724,10 +744,9 @@ static bool IsPopupFullScreenUpdate(Layo
- // box is equal to window borders.
- if (aRegion.GetNumRects() > 2) return false;
-
-- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
--
-- return (screenRect.width == lockSize.width &&
-+ IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-+ return (lockSize.x == 0 && lockSize.y == 0 &&
-+ screenRect.width == lockSize.width &&
- screenRect.height == lockSize.height);
- }
-
-@@ -738,8 +757,7 @@ static bool IsPopupFullScreenUpdate(Layo
- to clip/buffer the drawing and we can return wl_buffer directly
- for drawing.
- - mWaylandBuffer is available - that's an ideal situation.
-- - mWaylandBuffer is locked by compositor - flip buffers and draw.
-- - if we can't flip buffers - go B)
-+ - mWaylandBuffer is locked by compositor - go B)
-
- B) Lock() is requested for part(s) of screen. We need to provide temporary
- surface to draw into and copy result (clipped) to target wl_surface.
-@@ -747,14 +765,17 @@ static bool IsPopupFullScreenUpdate(Layo
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::Lock(
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
--
-- // Disable all commits from frame callback handler and delayed comit handler
-- // as we're updated by gecko compositor.
-- mPendingCommit = false;
-+
-+ // Wait until all pending events are processed. There may be queued
-+ // wl_buffer release event which releases our wl_buffer for further rendering.
-+ mWaylandDisplay->WaitForSyncEnd();
-+
-+ // Disable all commits (from potential frame callback/delayed handlers)
-+ // until next WindowSurfaceWayland::Commit() call.
-+ mBufferCommitAllowed = false;
-
- LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
-- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-+ gfx::IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-
- // Are we asked for entire nsWindow to draw?
- bool isTransparentPopup =
-@@ -775,10 +796,10 @@ already_AddRefed<gfx::DrawTarget> Window
- }
-
- LOGWAYLAND(
-- ("WindowSurfaceWayland::Lock [%p] lockSize [%d x %d] windowSize [%d x "
-- "%d]\n",
-- (void*)this, lockSize.width, lockSize.height, lockedScreenRect.width,
-- lockedScreenRect.height));
-+ ("WindowSurfaceWayland::Lock [%p] [%d,%d] -> [%d x %d] rects %d "
-+ "windowSize [%d x %d]\n",
-+ (void*)this, lockSize.x, lockSize.y, lockSize.width, lockSize.height,
-+ aRegion.GetNumRects(), lockedScreenRect.width, lockedScreenRect.height));
- LOGWAYLAND((" nsWindow = %p\n", mWindow));
- LOGWAYLAND((" isPopup = %d\n", mWindow->IsWaylandPopup()));
- LOGWAYLAND((" isTransparentPopup = %d\n", isTransparentPopup));
-@@ -789,7 +810,7 @@ already_AddRefed<gfx::DrawTarget> Window
- LOGWAYLAND((" mBufferNeedsClear = %d\n", mBufferNeedsClear));
- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-
--#if DEBUG
-+#if MOZ_LOGGING
- if (!(mBufferScreenRect == lockedScreenRect)) {
- LOGWAYLAND((" screen size changed\n"));
- }
-@@ -836,7 +857,7 @@ already_AddRefed<gfx::DrawTarget> Window
- mDrawToWaylandBufferDirectly = false;
-
- LOGWAYLAND((" Indirect drawing.\n"));
-- return LockImageSurface(lockSize);
-+ return LockImageSurface(gfx::IntSize(lockSize.XMost(), lockSize.YMost()));
- }
-
- void WindowImageSurface::Draw(gfx::SourceSurface* aSurface,
-@@ -875,34 +896,42 @@ WindowImageSurface::WindowImageSurface(
- mImageSurface->Format());
- }
-
-+void WindowSurfaceWayland::CacheImageSurface(
-+ const LayoutDeviceIntRegion& aRegion) {
-+#ifdef MOZ_LOGGING
-+ gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-+ LOGWAYLAND(("WindowSurfaceWayland::CacheImageSurface [%p]\n", (void*)this));
-+ LOGWAYLAND((" rects num %d\n", aRegion.GetNumRects()));
-+ LOGWAYLAND((" bounds [ %d, %d] -> [%d x %d]\n", bounds.x, bounds.y,
-+ bounds.width, bounds.height));
-+#endif
-+
-+ mDelayedImageCommits.AppendElement(
-+ WindowImageSurface(mImageSurface, aRegion));
-+ // mImageSurface is owned by mDelayedImageCommits
-+ mImageSurface = nullptr;
-+
-+ LOGWAYLAND(
-+ (" There's %d cached images\n", int(mDelayedImageCommits.Length())));
-+}
-+
- void WindowSurfaceWayland::DrawDelayedImageCommits(
- gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::DrawDelayedImageCommits [%p]\n", (void*)this));
-+
- for (unsigned int i = 0; i < mDelayedImageCommits.Length(); i++) {
- mDelayedImageCommits[i].Draw(aDrawTarget, aWaylandBufferDamage);
- }
- mDelayedImageCommits.Clear();
- }
-
--bool WindowSurfaceWayland::CommitImageSurfaceToWaylandBuffer(
-- const LayoutDeviceIntRegion& aRegion,
-- LayoutDeviceIntRegion& aWaylandBufferDamage) {
-- MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
--
--#ifdef DEBUG
-- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::Rect rect(bounds);
-- MOZ_ASSERT(!rect.IsEmpty(), "Empty drawing?");
--#endif
--
-- LOGWAYLAND(
-- ("WindowSurfaceWayland::CommitImageSurfaceToWaylandBuffer [%p] "
-- "screenSize [%d x %d]\n",
-- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-+bool WindowSurfaceWayland::CommitImageCacheToWaylandBuffer() {
-+ if (!mDelayedImageCommits.Length()) {
-+ return false;
-+ }
-
-- mDelayedImageCommits.AppendElement(
-- WindowImageSurface(mImageSurface, aRegion));
-- // mImageSurface is owned by mDelayedImageCommits
-- mImageSurface = nullptr;
-+ MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
-
- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-@@ -911,10 +940,10 @@ bool WindowSurfaceWayland::CommitImageSu
- }
-
- LOGWAYLAND((" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-- long(mDelayedImageCommits.Length() + 1)));
-+ long(mDelayedImageCommits.Length())));
-
- // Draw any delayed image commits first
-- DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-+ DrawDelayedImageCommits(dt, mWaylandBufferDamage);
- UnlockWaylandBuffer();
-
- return true;
-@@ -932,7 +961,8 @@ static void WaylandBufferDelayCommitHand
- }
-
- void WindowSurfaceWayland::CommitWaylandBuffer() {
-- MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
-+ MOZ_ASSERT(!mWaylandBuffer->IsAttached(),
-+ "We can't draw to attached wayland buffer!");
-
- LOGWAYLAND(("WindowSurfaceWayland::CommitWaylandBuffer [%p]\n", (void*)this));
- LOGWAYLAND(
-@@ -941,6 +971,21 @@ void WindowSurfaceWayland::CommitWayland
- LOGWAYLAND((" mDelayedCommitHandle = %p\n", mDelayedCommitHandle));
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-+ LOGWAYLAND((" mBufferPendingCommit = %d\n", mBufferPendingCommit));
-+ LOGWAYLAND((" mBufferCommitAllowed = %d\n", mBufferCommitAllowed));
-+
-+ if (!mBufferCommitAllowed) {
-+ return;
-+ }
-+
-+ if (CommitImageCacheToWaylandBuffer()) {
-+ mBufferPendingCommit = true;
-+ }
-+
-+ // There's nothing to do here
-+ if (!mBufferPendingCommit) {
-+ return;
-+ }
-
- wl_surface* waylandSurface = mWindow->GetWaylandSurface();
- if (!waylandSurface) {
-@@ -986,6 +1031,7 @@ void WindowSurfaceWayland::CommitWayland
- }
-
- if (mWholeWindowBufferDamage) {
-+ LOGWAYLAND((" send whole screen damage\n"));
- wl_surface_damage(waylandSurface, 0, 0, mBufferScreenRect.width,
- mBufferScreenRect.height);
- mWholeWindowBufferDamage = false;
-@@ -994,6 +1040,8 @@ void WindowSurfaceWayland::CommitWayland
- for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
- iter.Next()) {
- mozilla::LayoutDeviceIntRect r = iter.Get();
-+ LOGWAYLAND((" wl_surface_damage_buffer [%d, %d] -> [%d, %d]\n", r.x,
-+ r.y, r.width, r.height));
- wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
- }
- }
-@@ -1012,24 +1060,31 @@ void WindowSurfaceWayland::CommitWayland
-
- mWaylandBuffer->Attach(waylandSurface);
- mLastCommittedSurface = waylandSurface;
-+ mLastCommitTime = g_get_monotonic_time() / 1000;
-+
-+ // Ask wl_display to start events synchronization. We're going wait
-+ // until all events are processed before next WindowSurfaceWayland::Lock()
-+ // as we need freed wl_buffer there.
-+ mWaylandDisplay->SyncBegin();
-
- // There's no pending commit, all changes are sent to compositor.
-- mPendingCommit = false;
-+ mBufferPendingCommit = false;
- }
-
- void WindowSurfaceWayland::Commit(const LayoutDeviceIntRegion& aInvalidRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-
--#ifdef DEBUG
-- {
-- gfx::IntRect bounds = aInvalidRegion.GetBounds().ToUnknownRect();
-- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-+ // Flush all waiting events explicitly as we need
-+ // mWaylandDisplay->FlushEventQueue();
-
-+#ifdef MOZ_LOGGING
-+ {
-+ gfx::IntRect lockSize = aInvalidRegion.GetBounds().ToUnknownRect();
- LOGWAYLAND(
-- ("WindowSurfaceWayland::Commit [%p] lockSize [%d x %d] screenSize [%d "
-- "x %d]\n",
-- (void*)this, lockSize.width, lockSize.height, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ ("WindowSurfaceWayland::Commit [%p] damage size [%d, %d] -> [%d x %d]"
-+ "screenSize [%d x %d]\n",
-+ (void*)this, lockSize.x, lockSize.y, lockSize.width, lockSize.height,
-+ mBufferScreenRect.width, mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
- LOGWAYLAND(
-@@ -1044,21 +1099,15 @@ void WindowSurfaceWayland::Commit(const
- mWaylandBufferDamage.OrWith(aInvalidRegion);
- }
- UnlockWaylandBuffer();
-- mPendingCommit = true;
-+ mBufferPendingCommit = true;
- } else {
- MOZ_ASSERT(!mWaylandBuffer->IsLocked(),
- "Drawing to already locked buffer?");
-- if (CommitImageSurfaceToWaylandBuffer(aInvalidRegion,
-- mWaylandBufferDamage)) {
-- // Our cached drawing is flushed, we can draw fullscreen again.
-- mDrawToWaylandBufferDirectly = true;
-- mPendingCommit = true;
-- }
-+ CacheImageSurface(aInvalidRegion);
- }
-
-- if (mPendingCommit) {
-- CommitWaylandBuffer();
-- }
-+ mBufferCommitAllowed = true;
-+ CommitWaylandBuffer();
- }
-
- void WindowSurfaceWayland::FrameCallbackHandler() {
-@@ -1074,9 +1123,7 @@ void WindowSurfaceWayland::FrameCallback
- wl_callback_destroy(mFrameCallback);
- mFrameCallback = nullptr;
-
-- if (mPendingCommit) {
-- CommitWaylandBuffer();
-- }
-+ CommitWaylandBuffer();
- }
-
- void WindowSurfaceWayland::DelayedCommitHandler() {
-@@ -1089,9 +1136,7 @@ void WindowSurfaceWayland::DelayedCommit
- free(mDelayedCommitHandle);
- mDelayedCommitHandle = nullptr;
-
-- if (mPendingCommit) {
-- CommitWaylandBuffer();
-- }
-+ CommitWaylandBuffer();
- }
-
- } // namespace widget
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1580152 firefox-69.0/widget/gtk/WindowSurfaceWayland.h
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1580152 2019-09-16 11:11:30.080299221 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.h 2019-09-16 11:11:30.090299187 +0200
-@@ -17,6 +17,8 @@
- namespace mozilla {
- namespace widget {
-
-+class WindowSurfaceWayland;
-+
- // Allocates and owns shared memory for Wayland drawing surface
- class WaylandShmPool {
- public:
-@@ -69,20 +71,22 @@ class WindowBackBuffer {
-
- static gfx::SurfaceFormat GetSurfaceFormat() { return mFormat; }
-
-- nsWaylandDisplay* GetWaylandDisplay() { return mWaylandDisplay; };
-+ nsWaylandDisplay* GetWaylandDisplay();
-
-- WindowBackBuffer(nsWaylandDisplay* aWaylandDisplay)
-- : mWaylandDisplay(aWaylandDisplay){};
-+ WindowBackBuffer(WindowSurfaceWayland* aWindowSurfaceWayland)
-+ : mWindowSurfaceWayland(aWindowSurfaceWayland){};
- virtual ~WindowBackBuffer(){};
-
-+ protected:
-+ WindowSurfaceWayland* mWindowSurfaceWayland;
-+
- private:
- static gfx::SurfaceFormat mFormat;
-- nsWaylandDisplay* mWaylandDisplay;
- };
-
- class WindowBackBufferShm : public WindowBackBuffer {
- public:
-- WindowBackBufferShm(nsWaylandDisplay* aWaylandDisplay, int aWidth,
-+ WindowBackBufferShm(WindowSurfaceWayland* aWindowSurfaceWayland, int aWidth,
- int aHeight);
- ~WindowBackBufferShm();
-
-@@ -121,8 +125,8 @@ class WindowBackBufferShm : public Windo
-
- class WindowBackBufferDMABuf : public WindowBackBuffer {
- public:
-- WindowBackBufferDMABuf(nsWaylandDisplay* aWaylandDisplay, int aWidth,
-- int aHeight);
-+ WindowBackBufferDMABuf(WindowSurfaceWayland* aWindowSurfaceWayland,
-+ int aWidth, int aHeight);
- ~WindowBackBufferDMABuf();
-
- bool IsAttached();
-@@ -175,6 +179,9 @@ class WindowSurfaceWayland : public Wind
- void Commit(const LayoutDeviceIntRegion& aInvalidRegion) final;
- void FrameCallbackHandler();
- void DelayedCommitHandler();
-+ void CommitWaylandBuffer();
-+
-+ nsWaylandDisplay* GetWaylandDisplay() { return mWaylandDisplay; };
-
- private:
- WindowBackBuffer* CreateWaylandBuffer(int aWidth, int aHeight);
-@@ -185,10 +192,9 @@ class WindowSurfaceWayland : public Wind
-
- already_AddRefed<gfx::DrawTarget> LockImageSurface(
- const gfx::IntSize& aLockSize);
-- bool CommitImageSurfaceToWaylandBuffer(
-- const LayoutDeviceIntRegion& aRegion,
-- LayoutDeviceIntRegion& aWaylandBufferDamage);
-- void CommitWaylandBuffer();
-+
-+ void CacheImageSurface(const LayoutDeviceIntRegion& aRegion);
-+ bool CommitImageCacheToWaylandBuffer();
-
- void DrawDelayedImageCommits(gfx::DrawTarget* aDrawTarget,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
-@@ -205,12 +211,13 @@ class WindowSurfaceWayland : public Wind
- WindowBackBuffer* mBackupBuffer[BACK_BUFFER_NUM];
- wl_callback* mFrameCallback;
- wl_surface* mLastCommittedSurface;
-- MessageLoop* mDisplayThreadMessageLoop;
- WindowSurfaceWayland** mDelayedCommitHandle;
- RefPtr<gfxImageSurface> mImageSurface;
- AutoTArray<WindowImageSurface, 30> mDelayedImageCommits;
-+ int64_t mLastCommitTime;
- bool mDrawToWaylandBufferDirectly;
-- bool mPendingCommit;
-+ bool mBufferPendingCommit;
-+ bool mBufferCommitAllowed;
- bool mWholeWindowBufferDamage;
- bool mBufferNeedsClear;
- bool mIsMainThread;
diff --git a/mozilla-1581748.patch b/mozilla-1581748.patch
deleted file mode 100644
index 9177f5b..0000000
--- a/mozilla-1581748.patch
+++ /dev/null
@@ -1,574 +0,0 @@
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1581748 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1581748 2019-09-17 13:19:47.190908284 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-17 13:19:47.196908262 +0200
-@@ -32,7 +32,7 @@ extern mozilla::LazyLogModule gWidgetWay
- # define LOGWAYLAND(args)
- #endif /* MOZ_LOGGING */
-
--// Maximal compositin timeout it miliseconds
-+// Maximal compositing timeout it miliseconds
- #define COMPOSITING_TIMEOUT 200
-
- namespace mozilla {
-@@ -513,13 +513,15 @@ WindowSurfaceWayland::WindowSurfaceWayla
- mDelayedCommitHandle(nullptr),
- mLastCommitTime(0),
- mDrawToWaylandBufferDirectly(true),
-+ mCanSwitchWaylandBuffer(true),
- mBufferPendingCommit(false),
- mBufferCommitAllowed(false),
-- mWholeWindowBufferDamage(false),
- mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
- mNeedScaleFactorUpdate(true) {
- for (int i = 0; i < BACK_BUFFER_NUM; i++) mBackupBuffer[i] = nullptr;
-+ mRenderingCacheMode = CACHE_ALL;
-+
- }
-
- WindowSurfaceWayland::~WindowSurfaceWayland() {
-@@ -591,8 +593,6 @@ WindowBackBuffer* WindowSurfaceWayland::
-
- // There's no buffer created yet, create a new one.
- if (!mWaylandBuffer) {
-- MOZ_ASSERT(aCanSwitchBuffer && mWholeWindowBufferDamage,
-- "Created new buffer for partial drawing!");
- LOGWAYLAND((" Created new buffer [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
-
-@@ -682,9 +682,8 @@ WindowBackBuffer* WindowSurfaceWayland::
- return mWaylandBuffer;
- }
-
--already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::LockWaylandBuffer(
-- bool aCanSwitchBuffer) {
-- WindowBackBuffer* buffer = GetWaylandBufferToDraw(aCanSwitchBuffer);
-+already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::LockWaylandBuffer() {
-+ WindowBackBuffer* buffer = GetWaylandBufferToDraw(mCanSwitchWaylandBuffer);
-
- LOGWAYLAND(("WindowSurfaceWayland::LockWaylandBuffer [%p] Got buffer %p\n",
- (void*)this, (void*)buffer));
-@@ -698,7 +697,9 @@ already_AddRefed<gfx::DrawTarget> Window
- return nullptr;
- }
-
-- if (mBufferNeedsClear && mWholeWindowBufferDamage) {
-+ mCanSwitchWaylandBuffer = false;
-+
-+ if (mBufferNeedsClear) {
- buffer->Clear();
- mBufferNeedsClear = false;
- }
-@@ -728,40 +729,30 @@ already_AddRefed<gfx::DrawTarget> Window
- WindowBackBuffer::GetSurfaceFormat());
- }
-
--static bool IsWindowFullScreenUpdate(LayoutDeviceIntRect& screenRect,
-- const LayoutDeviceIntRegion& aRegion) {
-- if (aRegion.GetNumRects() > 1) return false;
--
-- IntRect rect = aRegion.RectIter().Get().ToUnknownRect();
-- return (rect.x == 0 && rect.y == 0 && screenRect.width == rect.width &&
-- screenRect.height == rect.height);
-+static bool IsWindowFullScreenUpdate(
-+ LayoutDeviceIntRect& aScreenRect,
-+ const LayoutDeviceIntRegion& aUpdatedRegion) {
-+ if (aUpdatedRegion.GetNumRects() > 1) return false;
-+
-+ IntRect rect = aUpdatedRegion.RectIter().Get().ToUnknownRect();
-+ return (rect.x == 0 && rect.y == 0 && aScreenRect.width == rect.width &&
-+ aScreenRect.height == rect.height);
- }
-
--static bool IsPopupFullScreenUpdate(LayoutDeviceIntRect& screenRect,
-- const LayoutDeviceIntRegion& aRegion) {
-+static bool IsPopupFullScreenUpdate(
-+ LayoutDeviceIntRect& aScreenRect,
-+ const LayoutDeviceIntRegion& aUpdatedRegion) {
- // We know that popups can be drawn from two parts; a panel and an arrow.
- // Assume we redraw whole popups when we have two rects and bounding
- // box is equal to window borders.
-- if (aRegion.GetNumRects() > 2) return false;
-+ if (aUpdatedRegion.GetNumRects() > 2) return false;
-
-- IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-+ gfx::IntRect lockSize = aUpdatedRegion.GetBounds().ToUnknownRect();
- return (lockSize.x == 0 && lockSize.y == 0 &&
-- screenRect.width == lockSize.width &&
-- screenRect.height == lockSize.height);
-+ aScreenRect.width == lockSize.width &&
-+ aScreenRect.height == lockSize.height);
- }
-
--/*
-- There are some situations which can happen here:
--
-- A) Lock() is called to whole surface. In that case we don't need
-- to clip/buffer the drawing and we can return wl_buffer directly
-- for drawing.
-- - mWaylandBuffer is available - that's an ideal situation.
-- - mWaylandBuffer is locked by compositor - go B)
--
-- B) Lock() is requested for part(s) of screen. We need to provide temporary
-- surface to draw into and copy result (clipped) to target wl_surface.
-- */
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::Lock(
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-@@ -777,22 +768,31 @@ already_AddRefed<gfx::DrawTarget> Window
- LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
- gfx::IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-
-- // Are we asked for entire nsWindow to draw?
- bool isTransparentPopup =
- mWindow->IsWaylandPopup() &&
- (eTransparencyTransparent == mWindow->GetTransparencyMode());
-
-- // We have request to lock whole buffer/window.
-- mWholeWindowBufferDamage =
-- isTransparentPopup ? IsPopupFullScreenUpdate(lockedScreenRect, aRegion)
-- : IsWindowFullScreenUpdate(lockedScreenRect, aRegion);
--
-- // Clear buffer when we (re)draw new transparent popup window,
-- // otherwise leave it as-is, mBufferNeedsClear can be set from previous
-- // (already pending) commits which are cached now.
-- if (mWholeWindowBufferDamage) {
-+ bool windowRedraw = isTransparentPopup
-+ ? IsPopupFullScreenUpdate(lockedScreenRect, aRegion)
-+ : IsWindowFullScreenUpdate(lockedScreenRect, aRegion);
-+ if (windowRedraw) {
-+ // Clear buffer when we (re)draw new transparent popup window,
-+ // otherwise leave it as-is, mBufferNeedsClear can be set from previous
-+ // (already pending) commits which are cached now.
- mBufferNeedsClear =
- mWindow->WaylandSurfaceNeedsClear() || isTransparentPopup;
-+
-+ // Store info that we can switch WaylandBuffer when we flush
-+ // mImageSurface / mDelayedImageCommits. Don't clear it - it's cleared
-+ // at LockWaylandBuffer() when we actualy switch the buffer.
-+ mCanSwitchWaylandBuffer = windowRedraw;
-+
-+ // We do full buffer repaint so clear our cached drawings.
-+ mDelayedImageCommits.Clear();
-+ mWaylandBufferDamage.SetEmpty();
-+
-+ // Also do scale factor update for whole window updates just to be sure.
-+ mNeedScaleFactorUpdate = true;
- }
-
- LOGWAYLAND(
-@@ -808,7 +808,7 @@ already_AddRefed<gfx::DrawTarget> Window
- LOGWAYLAND((" IsWindowFullScreenUpdate = %d\n",
- IsWindowFullScreenUpdate(lockedScreenRect, aRegion)));
- LOGWAYLAND((" mBufferNeedsClear = %d\n", mBufferNeedsClear));
-- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-+ LOGWAYLAND((" windowRedraw = %d\n", windowRedraw));
-
- #if MOZ_LOGGING
- if (!(mBufferScreenRect == lockedScreenRect)) {
-@@ -822,8 +822,9 @@ already_AddRefed<gfx::DrawTarget> Window
- // We can't commit them any more as they're for former window size, so
- // scratch them.
- mDelayedImageCommits.Clear();
-+ mWaylandBufferDamage.SetEmpty();
-
-- if (!mWholeWindowBufferDamage) {
-+ if (!windowRedraw) {
- NS_WARNING("Partial screen update when window is resized!");
- // This should not happen. Screen size changed but we got only
- // partal screen update instead of whole screen. Discard this painting
-@@ -833,52 +834,56 @@ already_AddRefed<gfx::DrawTarget> Window
- mBufferScreenRect = lockedScreenRect;
- }
-
-- if (mWholeWindowBufferDamage) {
-- // We can lock/commit entire buffer direcly.
-- mDrawToWaylandBufferDirectly = true;
--
-- // If there's any pending image commit scratch them as we're going
-- // to redraw the whole sceen anyway.
-- mDelayedImageCommits.Clear();
-+ mDrawToWaylandBufferDirectly =
-+ (windowRedraw || mRenderingCacheMode != CACHE_ALL);
-
-- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-+ if (mDrawToWaylandBufferDirectly) {
-+ LOGWAYLAND((" Direct drawing\n"));
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer();
- if (dt) {
-+ if (!windowRedraw) {
-+ DrawDelayedImageCommits(dt, mWaylandBufferDamage);
-+ }
- return dt.forget();
- }
- }
-
-- // We do indirect drawing due to:
-- //
-- // 1) We don't have any front buffer available. Try indirect drawing
-- // to mImageSurface which is mirrored to front buffer at commit.
-- // 2) Only part of the screen is locked. We can't lock entire screen for
-- // such drawing as it produces visible artifacts.
-+ // Any caching is disabled and we don't have any back buffer available.
-+ if (mRenderingCacheMode == CACHE_NONE) {
-+ return nullptr;
-+ }
-+
-+ // We do indirect drawing because there isn't any front buffer available.
-+ // Do indirect drawing to mImageSurface which is commited to wayland
-+ // wl_buffer by DrawDelayedImageCommits() later.
- mDrawToWaylandBufferDirectly = false;
-
- LOGWAYLAND((" Indirect drawing.\n"));
- return LockImageSurface(gfx::IntSize(lockSize.XMost(), lockSize.YMost()));
- }
-
-+bool WindowImageSurface::OverlapsSurface(
-+ class WindowImageSurface& aBottomSurface) {
-+ return mUpdateRegion.Contains(aBottomSurface.mUpdateRegion);
-+}
-+
- void WindowImageSurface::Draw(gfx::SourceSurface* aSurface,
- gfx::DrawTarget* aDest,
- const LayoutDeviceIntRegion& aRegion) {
-- uint32_t numRects = aRegion.GetNumRects();
-- if (numRects != 1) {
-- AutoTArray<IntRect, 32> rects;
-- rects.SetCapacity(numRects);
-- for (auto iter = aRegion.RectIter(); !iter.Done(); iter.Next()) {
-- rects.AppendElement(iter.Get().ToUnknownRect());
-- }
-- aDest->PushDeviceSpaceClipRects(rects.Elements(), rects.Length());
-- }
--
-+#ifdef MOZ_LOGGING
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::Rect rect(bounds);
-- aDest->DrawSurface(aSurface, rect, rect);
-+ LOGWAYLAND(("WindowImageSurface::Draw\n"));
-+ LOGWAYLAND((" rects num %d\n", aRegion.GetNumRects()));
-+ LOGWAYLAND((" bounds [ %d, %d] -> [%d x %d]\n", bounds.x, bounds.y,
-+ bounds.width, bounds.height));
-+#endif
-
-- if (numRects != 1) {
-- aDest->PopClip();
-+ for (auto iter = aRegion.RectIter(); !iter.Done(); iter.Next()) {
-+ mozilla::LayoutDeviceIntRect r = iter.Get();
-+ gfx::Rect rect(r.ToUnknownRect());
-+ LOGWAYLAND((" draw rect [%f,%f] -> [%f x %f]\n", rect.x, rect.y,
-+ rect.width, rect.height));
-+ aDest->DrawSurface(aSurface, rect, rect);
- }
- }
-
-@@ -896,6 +901,18 @@ WindowImageSurface::WindowImageSurface(
- mImageSurface->Format());
- }
-
-+void WindowSurfaceWayland::DrawDelayedImageCommits(
-+ gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::DrawDelayedImageCommits [%p]\n", (void*)this));
-+ MOZ_ASSERT(mDelayedImageCommits.Length() > 0, "Nothing to draw?");
-+
-+ for (unsigned int i = 0; i < mDelayedImageCommits.Length(); i++) {
-+ mDelayedImageCommits[i].Draw(aDrawTarget, aWaylandBufferDamage);
-+ }
-+ mDelayedImageCommits.Clear();
-+}
-+
- void WindowSurfaceWayland::CacheImageSurface(
- const LayoutDeviceIntRegion& aRegion) {
- #ifdef MOZ_LOGGING
-@@ -906,8 +923,26 @@ void WindowSurfaceWayland::CacheImageSur
- bounds.width, bounds.height));
- #endif
-
-- mDelayedImageCommits.AppendElement(
-- WindowImageSurface(mImageSurface, aRegion));
-+ WindowImageSurface surf = WindowImageSurface(mImageSurface, aRegion);
-+
-+ if (mDelayedImageCommits.Length()) {
-+ int lastSurf = mDelayedImageCommits.Length() - 1;
-+ if (surf.OverlapsSurface(mDelayedImageCommits[lastSurf])) {
-+#ifdef MOZ_LOGGING
-+ {
-+ gfx::IntRect size = mDelayedImageCommits[lastSurf]
-+ .GetUpdateRegion()
-+ ->GetBounds()
-+ .ToUnknownRect();
-+ LOGWAYLAND((" removing [ %d, %d] -> [%d x %d]\n", size.x, size.y,
-+ size.width, size.height));
-+ }
-+#endif
-+ mDelayedImageCommits.RemoveElementAt(lastSurf);
-+ }
-+ }
-+
-+ mDelayedImageCommits.AppendElement(surf);
- // mImageSurface is owned by mDelayedImageCommits
- mImageSurface = nullptr;
-
-@@ -915,17 +950,6 @@ void WindowSurfaceWayland::CacheImageSur
- (" There's %d cached images\n", int(mDelayedImageCommits.Length())));
- }
-
--void WindowSurfaceWayland::DrawDelayedImageCommits(
-- gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-- LOGWAYLAND(
-- ("WindowSurfaceWayland::DrawDelayedImageCommits [%p]\n", (void*)this));
--
-- for (unsigned int i = 0; i < mDelayedImageCommits.Length(); i++) {
-- mDelayedImageCommits[i].Draw(aDrawTarget, aWaylandBufferDamage);
-- }
-- mDelayedImageCommits.Clear();
--}
--
- bool WindowSurfaceWayland::CommitImageCacheToWaylandBuffer() {
- if (!mDelayedImageCommits.Length()) {
- return false;
-@@ -933,8 +957,7 @@ bool WindowSurfaceWayland::CommitImageCa
-
- MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
-
-- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer();
- if (!dt) {
- return false;
- }
-@@ -942,7 +965,6 @@ bool WindowSurfaceWayland::CommitImageCa
- LOGWAYLAND((" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
- long(mDelayedImageCommits.Length())));
-
-- // Draw any delayed image commits first
- DrawDelayedImageCommits(dt, mWaylandBufferDamage);
- UnlockWaylandBuffer();
-
-@@ -967,7 +989,7 @@ void WindowSurfaceWayland::CommitWayland
- LOGWAYLAND(("WindowSurfaceWayland::CommitWaylandBuffer [%p]\n", (void*)this));
- LOGWAYLAND(
- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
-- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-+ LOGWAYLAND((" mCanSwitchWaylandBuffer = %d\n", mCanSwitchWaylandBuffer));
- LOGWAYLAND((" mDelayedCommitHandle = %p\n", mDelayedCommitHandle));
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-@@ -1030,20 +1052,11 @@ void WindowSurfaceWayland::CommitWayland
- mLastCommittedSurface = nullptr;
- }
-
-- if (mWholeWindowBufferDamage) {
-- LOGWAYLAND((" send whole screen damage\n"));
-- wl_surface_damage(waylandSurface, 0, 0, mBufferScreenRect.width,
-- mBufferScreenRect.height);
-- mWholeWindowBufferDamage = false;
-- mNeedScaleFactorUpdate = true;
-- } else {
-- for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
-- iter.Next()) {
-- mozilla::LayoutDeviceIntRect r = iter.Get();
-- LOGWAYLAND((" wl_surface_damage_buffer [%d, %d] -> [%d, %d]\n", r.x,
-- r.y, r.width, r.height));
-- wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
-- }
-+ for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done(); iter.Next()) {
-+ mozilla::LayoutDeviceIntRect r = iter.Get();
-+ LOGWAYLAND((" wl_surface_damage_buffer [%d, %d] -> [%d, %d]\n", r.x, r.y,
-+ r.width, r.height));
-+ wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
- }
-
- // Clear all back buffer damage as we're committing
-@@ -1062,9 +1075,9 @@ void WindowSurfaceWayland::CommitWayland
- mLastCommittedSurface = waylandSurface;
- mLastCommitTime = g_get_monotonic_time() / 1000;
-
-- // Ask wl_display to start events synchronization. We're going wait
-+ // Ask wl_display to start events synchronization. We're going to wait
- // until all events are processed before next WindowSurfaceWayland::Lock()
-- // as we need freed wl_buffer there.
-+ // as we hope for free wl_buffer there.
- mWaylandDisplay->SyncBegin();
-
- // There's no pending commit, all changes are sent to compositor.
-@@ -1074,9 +1087,6 @@ void WindowSurfaceWayland::CommitWayland
- void WindowSurfaceWayland::Commit(const LayoutDeviceIntRegion& aInvalidRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-
-- // Flush all waiting events explicitly as we need
-- // mWaylandDisplay->FlushEventQueue();
--
- #ifdef MOZ_LOGGING
- {
- gfx::IntRect lockSize = aInvalidRegion.GetBounds().ToUnknownRect();
-@@ -1087,17 +1097,12 @@ void WindowSurfaceWayland::Commit(const
- mBufferScreenRect.width, mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
-- LOGWAYLAND(
-- (" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
- }
- #endif
-
- if (mDrawToWaylandBufferDirectly) {
- MOZ_ASSERT(mWaylandBuffer->IsLocked());
-- // If we're not at fullscreen damage add drawing area from aInvalidRegion
-- if (!mWholeWindowBufferDamage) {
-- mWaylandBufferDamage.OrWith(aInvalidRegion);
-- }
-+ mWaylandBufferDamage.OrWith(aInvalidRegion);
- UnlockWaylandBuffer();
- mBufferPendingCommit = true;
- } else {
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1581748 firefox-69.0/widget/gtk/WindowSurfaceWayland.h
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1581748 2019-09-17 13:19:47.191908280 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.h 2019-09-17 13:19:47.197908258 +0200
-@@ -161,6 +161,10 @@ class WindowImageSurface {
- WindowImageSurface(gfxImageSurface* aImageSurface,
- const LayoutDeviceIntRegion& aUpdateRegion);
-
-+ bool OverlapsSurface(class WindowImageSurface& aBottomSurface);
-+
-+ const LayoutDeviceIntRegion* GetUpdateRegion() { return &mUpdateRegion; };
-+
- private:
- RefPtr<gfx::SourceSurface> mSurface;
- RefPtr<gfxImageSurface> mImageSurface;
-@@ -174,20 +178,59 @@ class WindowSurfaceWayland : public Wind
- explicit WindowSurfaceWayland(nsWindow* aWindow);
- ~WindowSurfaceWayland();
-
-+ // Lock() / Commit() are called by gecko when Firefox
-+ // wants to display something. Lock() returns a DrawTarget
-+ // where gecko paints. When gecko is done it calls Commit()
-+ // and we try to send the DrawTarget (backed by wl_buffer)
-+ // to wayland compositor.
-+ //
-+ // If we fail (wayland compositor is busy,
-+ // wl_surface is not created yet) we queue the painting
-+ // and we send it to wayland compositor in FrameCallbackHandler()/
-+ // DelayedCommitHandler/CommitWaylandBuffer().
- already_AddRefed<gfx::DrawTarget> Lock(
- const LayoutDeviceIntRegion& aRegion) override;
- void Commit(const LayoutDeviceIntRegion& aInvalidRegion) final;
-+
-+ // It's called from wayland compositor when there's the right
-+ // time to send wl_buffer to display. It's no-op if there's no
-+ // queued commits.
- void FrameCallbackHandler();
-+
-+ // When a new window is created we may not have a valid wl_surface
-+ // for drawing (Gtk haven't created it yet). All commits are queued
-+ // and DelayedCommitHandler() is called by timer when wl_surface is ready
-+ // for drawing.
- void DelayedCommitHandler();
-+
-+ // Try to commit all queued drawings to Wayland compositor. This is usually
-+ // called from other routines but can be used to explicitly flush
-+ // all drawings as we do when wl_buffer is released
-+ // (see WindowBackBufferShm::Detach() for instance).
- void CommitWaylandBuffer();
-
- 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.
-+ // Suitable for fullscreen content only like fullscreen video playback and
-+ // may work well with dmabuf backend.
-+ CACHE_NONE = 2
-+ } RenderingCacheMode;
-+
- private:
- WindowBackBuffer* CreateWaylandBuffer(int aWidth, int aHeight);
- WindowBackBuffer* GetWaylandBufferToDraw(bool aCanSwitchBuffer);
-
-- already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(bool aCanSwitchBuffer);
-+ already_AddRefed<gfx::DrawTarget> LockWaylandBuffer();
- void UnlockWaylandBuffer();
-
- already_AddRefed<gfx::DrawTarget> LockImageSurface(
-@@ -206,23 +249,71 @@ class WindowSurfaceWayland : public Wind
- // mBufferScreenRect is window size when our wayland buffer was allocated.
- LayoutDeviceIntRect mBufferScreenRect;
- nsWaylandDisplay* mWaylandDisplay;
-+
-+ // Actual buffer (backed by wl_buffer) where all drawings go into.
-+ // Drawn areas are stored at mWaylandBufferDamage and if there's
-+ // any uncommited drawings which needs to be send to wayland compositor
-+ // the mBufferPendingCommit is set.
- WindowBackBuffer* mWaylandBuffer;
-- LayoutDeviceIntRegion mWaylandBufferDamage;
- WindowBackBuffer* mBackupBuffer[BACK_BUFFER_NUM];
-+ LayoutDeviceIntRegion mWaylandBufferDamage;
-+
-+ // After every commit to wayland compositor a frame callback is requested.
-+ // Any next commit to wayland compositor will happen when frame callback
-+ // comes from wayland compositor back as it's the best time to do the commit.
- wl_callback* mFrameCallback;
- wl_surface* mLastCommittedSurface;
-+
-+ // Registered reference to pending DelayedCommitHandler() call.
- WindowSurfaceWayland** mDelayedCommitHandle;
-+
-+ // Cached drawings. If we can't get WaylandBuffer (wl_buffer) at
-+ // WindowSurfaceWayland::Lock() we direct gecko rendering to
-+ // mImageSurface.
-+ // If we can't get WaylandBuffer at WindowSurfaceWayland::Commit()
-+ // time, mImageSurface is moved to mDelayedImageCommits which
-+ // holds all cached drawings.
-+ // mDelayedImageCommits can be drawn by FrameCallbackHandler(),
-+ // DelayedCommitHandler() or when WaylandBuffer is detached.
- RefPtr<gfxImageSurface> mImageSurface;
- AutoTArray<WindowImageSurface, 30> mDelayedImageCommits;
-+
- int64_t mLastCommitTime;
-+
-+ // Indicates that we don't have any cached drawings at mDelayedImageCommits
-+ // and WindowSurfaceWayland::Lock() returned WaylandBuffer to gecko
-+ // to draw into.
- bool mDrawToWaylandBufferDirectly;
-+
-+ // Set when our cached drawings (mDelayedImageCommits) contains
-+ // full screen damage. That means we can safely switch WaylandBuffer
-+ // at LockWaylandBuffer().
-+ bool mCanSwitchWaylandBuffer;
-+
-+ // Set when actual WaylandBuffer contains drawings which are not send to
-+ // wayland compositor yet.
- bool mBufferPendingCommit;
-+
-+ // We can't send WaylandBuffer (wl_buffer) to compositor when gecko
-+ // is rendering into it (i.e. between WindowSurfaceWayland::Lock() /
-+ // WindowSurfaceWayland::Commit()).
-+ // Thus we use mBufferCommitAllowed to disable commit by callbacks
-+ // (FrameCallbackHandler(), DelayedCommitHandler())
- bool mBufferCommitAllowed;
-- bool mWholeWindowBufferDamage;
-+
-+ // We need to clear WaylandBuffer when entire transparent window is repainted.
-+ // This typically apply to popup windows.
- bool mBufferNeedsClear;
-+
- bool mIsMainThread;
-+
-+ // When new WaylandBuffer (wl_buffer) is send to wayland compositor
-+ // (buffer switch or resize) we also need to set its scale factor.
- bool mNeedScaleFactorUpdate;
-
-+ // Image caching strategy, see RenderingCacheMode for details.
-+ RenderingCacheMode mRenderingCacheMode;
-+
- static bool UseDMABufBackend();
- static bool mUseDMABufInitialized;
- static bool mUseDMABuf;
diff --git a/pgo.patch b/pgo.patch
index 20eb98d..1eef0d9 100644
--- a/pgo.patch
+++ b/pgo.patch
@@ -1,9 +1,10 @@
-diff -up firefox-64.0/build/unix/mozconfig.unix.pgo firefox-64.0/build/unix/mozconfig.unix
---- firefox-64.0/build/unix/mozconfig.unix.pgo 2019-01-03 15:23:16.792980384 +0100
-+++ firefox-64.0/build/unix/mozconfig.unix 2019-01-03 15:24:29.978693550 +0100
+diff -up firefox-70.0/build/mozconfig.pgo firefox-70.0/build/mozconfig
+diff -up firefox-70.0/build/unix/mozconfig.unix.pgo firefox-70.0/build/unix/mozconfig.unix
+--- firefox-70.0/build/unix/mozconfig.unix.pgo 2019-10-18 18:05:36.461701704 +0200
++++ firefox-70.0/build/unix/mozconfig.unix 2019-10-18 20:25:48.036037912 +0200
@@ -6,6 +6,15 @@ if [ -n "$FORCE_GCC" ]; then
- CC="$TOOLTOOL_DIR/gcc/bin/gcc"
- CXX="$TOOLTOOL_DIR/gcc/bin/g++"
+ CC="$MOZ_FETCHES_DIR/gcc/bin/gcc"
+ CXX="$MOZ_FETCHES_DIR/gcc/bin/g++"
+ if [ -n "$MOZ_PGO" ]; then
+ if [ -z "$USE_ARTIFACT" ]; then
@@ -16,11 +17,11 @@ diff -up firefox-64.0/build/unix/mozconfig.unix.pgo firefox-64.0/build/unix/mozc
+
# We want to make sure we use binutils and other binaries in the tooltool
# package.
- mk_add_options "export PATH=$TOOLTOOL_DIR/gcc/bin:$PATH"
-diff -up firefox-64.0/extensions/spellcheck/src/moz.build.pgo firefox-64.0/extensions/spellcheck/src/moz.build
---- firefox-64.0/extensions/spellcheck/src/moz.build.pgo 2018-12-07 03:56:27.000000000 +0100
-+++ firefox-64.0/extensions/spellcheck/src/moz.build 2019-01-03 15:21:32.793385074 +0100
-@@ -28,3 +28,5 @@ EXPORTS.mozilla += [
+ mk_add_options "export PATH=$MOZ_FETCHES_DIR/gcc/bin:$PATH"
+diff -up firefox-70.0/extensions/spellcheck/src/moz.build.pgo firefox-70.0/extensions/spellcheck/src/moz.build
+--- firefox-70.0/extensions/spellcheck/src/moz.build.pgo 2019-10-16 23:20:18.000000000 +0200
++++ firefox-70.0/extensions/spellcheck/src/moz.build 2019-10-18 18:05:36.461701704 +0200
+@@ -31,3 +31,5 @@ EXPORTS.mozilla += [
if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
CXXFLAGS += ['-Wno-error=shadow']
diff --git a/sources b/sources
index ec7b042..23e2fcc 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
SHA512 (cbindgen-vendor.tar.xz) = 88afa0bc6af525cbb46bc75578b90419b28b95b396d5002fbf299a78a173681b840096ff83ef6e48553d1a5e0aa04e79383ab4d09bf431f3b864fcbacc7de46d
-SHA512 (firefox-69.0.3.source.tar.xz) = bc4020c5f1a1eac82944f6402aa374c830231a0f168c6cdab8924a1c7a1b296381b45bce0a0567811ad86c2688972a35fda3f6c15e562b03a47d48617fe7611a
-SHA512 (firefox-langpacks-69.0.3-20191010.tar.xz) = e293903557dffa0231345a2ae4085705ae3b5b9c1935c1fc2890d042e63862d45134a03403bbebec1fbe068b9d590797946feb8153e2d4129e5f4e309065381a
+SHA512 (firefox-70.0.source.tar.xz) = c2643d88d59012dfd762357d66005c8892dec066b0ae9d8d33a29ea4427d1e5ae4a0376725c7d960c0025d5c9567eca816eb612b4ea987069e455c06fc442973
+SHA512 (firefox-langpacks-70.0-20191018.tar.xz) = aa17651aa8d4bc82d014846db559df9e896c329d58acfc145433480ad60cebf5a0a3774958e452d76b3f78bb70545e27208dbe226cfa13fc0a42c65ddfd48d46
4 years, 6 months
Architecture specific change in rpms/firefox.git
by githook-noreply@fedoraproject.org
The package rpms/firefox.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/firefox.git/commit/?id=302967b0a8....
Change:
-%ifarch ppc64 ppc64le
Thanks.
Full change:
============
commit 302967b0a822136f55649d389e0345870cae57a9
Author: Martin Stransky <stransky(a)redhat.com>
Date: Fri Oct 18 20:43:19 2019 +0200
Updated to 70.0 Build 2
diff --git a/.gitignore b/.gitignore
index 379c588..7077731 100644
--- a/.gitignore
+++ b/.gitignore
@@ -366,3 +366,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-69.0.2.source.tar.xz
/firefox-69.0.3.source.tar.xz
/firefox-langpacks-69.0.3-20191010.tar.xz
+/firefox-70.0.source.tar.xz
+/firefox-langpacks-70.0-20191018.tar.xz
diff --git a/firefox.spec b/firefox.spec
index 872105b..7a3dffc 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -93,13 +93,13 @@ ExcludeArch: ppc64le
Summary: Mozilla Firefox Web browser
Name: firefox
-Version: 69.0.3
-Release: 2%{?pre_tag}%{?dist}
+Version: 70.0
+Release: 1%{?pre_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...
%if %{with langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20191010.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20191018.tar.xz
%endif
Source2: cbindgen-vendor.tar.xz
Source10: firefox-mozconfig
@@ -146,31 +146,15 @@ Patch228: mozilla-1583466.patch
# Upstream patches
Patch402: mozilla-1196777.patch
Patch412: mozilla-1337988.patch
-#Patch413: mozilla-1353817.patch
Patch415: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch
Patch417: bug1375074-save-restore-x28.patch
-Patch418: mozilla-1512162.patch
Patch419: mozilla-1568569.patch
-Patch420: mozilla-1566876-webrtc-ind.patch
Patch421: mozilla-1579023.patch
Patch422: mozilla-1580174-webrtc-popup.patch
# Wayland specific upstream patches
Patch574: firefox-pipewire.patch
Patch575: mozilla-1548475.patch
-Patch576: mozilla-1562827.patch
-Patch578: mozilla-1567434-1.patch
-Patch579: mozilla-1567434-2.patch
-Patch580: mozilla-1573813.patch
-Patch581: mozilla-1574036.patch
-Patch582: mozilla-1576268.patch
-Patch583: mozilla-1579794-1.patch
-Patch584: mozilla-1579794-2.patch
-Patch585: mozilla-1579849.patch
-Patch586: mozilla-1579823.patch
-Patch587: mozilla-1580152.patch
-Patch588: mozilla-1581748.patch
-Patch589: mozilla-1577024.patch
Patch590: firefox-wayland-cache-missing.patch
Patch591: mozilla-1587008.patch
@@ -370,34 +354,15 @@ This package contains results of tests executed during build.
%patch228 -p1 -b .mozilla-1583466
%patch402 -p1 -b .1196777
-#%patch413 -p1 -b .1353817
%ifarch %{arm}
%patch415 -p1 -b .1238661
%endif
-%ifarch ppc64 ppc64le
-#%patch418 -p1 -b .1512162 FIXME no longer needed?
-%endif
%patch419 -p1 -b .1568569
-%patch420 -p1 -b .1566876-webrtc-ind
%patch421 -p1 -b .1579023
# Wayland specific upstream patches
%patch574 -p1 -b .firefox-pipewire
%patch575 -p1 -b .mozilla-1548475
-%patch576 -p1 -b .mozilla-1562827
-%patch578 -p1 -b .mozilla-1567434-1
-%patch579 -p1 -b .mozilla-1567434-2
-%patch580 -p1 -b .mozilla-1573813
-%patch581 -p1 -b .mozilla-1574036
-%patch582 -p1 -b .mozilla-1576268
-%patch583 -p1 -b .mozilla-1579794-1
-%patch584 -p1 -b .mozilla-1579794-2
-%patch585 -p1 -b .mozilla-1579849
-%patch422 -p1 -b .1580174-webrtc-popup
-%patch586 -p1 -b .mozilla-1579823
-%patch587 -p1 -b .mozilla-1580152
-%patch588 -p1 -b .mozilla-1581748
-%patch589 -p1 -b .mozilla-1577024
%patch590 -p1 -b .cache-missing
%patch591 -p1 -b .mozilla-1587008
@@ -982,6 +947,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Tue Oct 15 2019 Martin Stransky <stransky(a)redhat.com> - 70.0-1
+- Updated to 70.0
+
* Mon Oct 14 2019 Martin Stransky <stransky(a)redhat.com> - 69.0.3-2
- Build firefox-wayland again (rhbz#1761578).
diff --git a/mozilla-1353817.patch b/mozilla-1353817.patch
deleted file mode 100644
index dc8d8f8..0000000
--- a/mozilla-1353817.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 1cc652f5525f458b0b4ceb12af24bf5a4367db32 Mon Sep 17 00:00:00 2001
-From: Nicolas Dufresne <nicolas.dufresne(a)collabora.com>
-Date: Tue, 23 May 2017 13:09:48 -0400
-Subject: [PATCH] Bug 1353817: Include SkNx_neon.h for ARM64 too
-
-This fixes build errors as arm_neon.h was missing along with some
-missing converters.
----
- gfx/skia/skia/src/core/SkNx.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/gfx/skia/skia/src/core/SkNx.h b/gfx/skia/skia/src/core/SkNx.h
-index 6bca856..b0427aa 100644
---- a/gfx/skia/skia/src/core/SkNx.h
-+++ b/gfx/skia/skia/src/core/SkNx.h
-@@ -299,7 +299,7 @@ typedef SkNx<4, uint32_t> Sk4u;
- // Include platform specific specializations if available.
- #if !defined(SKNX_NO_SIMD) && SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2
- #include "../opts/SkNx_sse.h"
--#elif !defined(SKNX_NO_SIMD) && defined(SK_ARM_HAS_NEON)
-+#elif !defined(SKNX_NO_SIMD) && (defined(SK_ARM_HAS_NEON) || defined(SK_CPU_ARM64))
- #include "../opts/SkNx_neon.h"
- #else
-
---
-2.9.4
-
diff --git a/mozilla-1512162.patch b/mozilla-1512162.patch
deleted file mode 100644
index 99a0b14..0000000
--- a/mozilla-1512162.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-diff -up firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp.1512162 firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp
---- firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp.1512162 2019-07-17 22:51:30.000000000 +0200
-+++ firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp 2019-07-25 08:08:18.512528313 +0200
-@@ -1092,7 +1092,7 @@ class MOZ_STACK_CLASS CallMethodHelper f
- MOZ_ALWAYS_INLINE bool GetOutParamSource(uint8_t paramIndex,
- MutableHandleValue srcp) const;
-
-- MOZ_ALWAYS_INLINE bool GatherAndConvertResults();
-+ bool GatherAndConvertResults();
-
- MOZ_ALWAYS_INLINE bool QueryInterfaceFastPath();
-
-@@ -1139,7 +1139,7 @@ class MOZ_STACK_CLASS CallMethodHelper f
-
- ~CallMethodHelper();
-
-- MOZ_ALWAYS_INLINE bool Call();
-+ bool Call();
-
- // Trace implementation so we can put our CallMethodHelper in a Rooted<T>.
- void trace(JSTracer* aTrc);
-@@ -1157,6 +1157,10 @@ bool XPCWrappedNative::CallMethod(XPCCal
- return helper.get().Call();
- }
-
-+#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
-+// Work around a compiler bug on ppc64le (bug 1512162).
-+__attribute__ ((noinline,noclone))
-+#endif
- bool CallMethodHelper::Call() {
- mCallContext.SetRetVal(JS::UndefinedValue());
-
-@@ -1315,6 +1319,10 @@ bool CallMethodHelper::GetOutParamSource
- return true;
- }
-
-+#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
-+// Work around a compiler bug on ppc64le (bug 1512162).
-+__attribute__ ((noinline,noclone))
-+#endif
- bool CallMethodHelper::GatherAndConvertResults() {
- // now we iterate through the native params to gather and convert results
- uint8_t paramCount = mMethodInfo->GetParamCount();
diff --git a/mozilla-1516081.patch b/mozilla-1516081.patch
index 1ecff39..cc332a6 100644
--- a/mozilla-1516081.patch
+++ b/mozilla-1516081.patch
@@ -1,7 +1,7 @@
-diff -up firefox-69.0/build/moz.configure/toolchain.configure.1516081 firefox-69.0/build/moz.configure/toolchain.configure
---- firefox-69.0/build/moz.configure/toolchain.configure.1516081 2019-08-27 03:31:51.000000000 +0200
-+++ firefox-69.0/build/moz.configure/toolchain.configure 2019-08-29 10:42:45.872919255 +0200
-@@ -1411,7 +1411,7 @@ def pgo_flags(compiler, build_env, targe
+diff -up firefox-70.0/build/moz.configure/lto-pgo.configure.old firefox-70.0/build/moz.configure/lto-pgo.configure
+--- firefox-70.0/build/moz.configure/lto-pgo.configure.old 2019-10-18 20:33:54.240107068 +0200
++++ firefox-70.0/build/moz.configure/lto-pgo.configure 2019-10-18 20:34:44.202009678 +0200
+@@ -16,7 +16,7 @@ def pgo_flags(compiler, build_env, targe
if compiler.type == 'gcc':
return namespace(
@@ -10,29 +10,12 @@ diff -up firefox-69.0/build/moz.configure/toolchain.configure.1516081 firefox-69
gen_ldflags=['-fprofile-generate'],
use_cflags=['-fprofile-use', '-fprofile-correction',
'-Wcoverage-mismatch'],
-@@ -1434,7 +1434,8 @@ def pgo_flags(compiler, build_env, targe
+@@ -38,7 +38,7 @@ def pgo_flags(compiler, build_env, targe
+ gen_ldflags = ['-fprofile-generate']
- if gen_ldflags:
- return namespace(
-- gen_cflags=[prefix + '-fprofile-generate'],
-+ gen_cflags=[prefix + '-fprofile-generate',
-+ '-DMOZ_PROFILE_INSTRUMENTATION'],
- gen_ldflags=gen_ldflags,
- use_cflags=[prefix + '-fprofile-use=%s' % profdata,
- # Some error messages about mismatched profile data
-diff -up firefox-69.0/toolkit/components/terminator/nsTerminator.cpp.1516081 firefox-69.0/toolkit/components/terminator/nsTerminator.cpp
---- firefox-69.0/toolkit/components/terminator/nsTerminator.cpp.1516081 2019-08-27 03:32:05.000000000 +0200
-+++ firefox-69.0/toolkit/components/terminator/nsTerminator.cpp 2019-08-29 09:51:08.513440687 +0200
-@@ -419,6 +419,12 @@ void nsTerminator::StartWatchdog() {
- }
- }
- #endif
-+ // Disable watchdog for PGO train builds - writting profile information at
-+ // exit may take time and it is better to make build hang rather than
-+ // silently produce poorly performing binary.
-+#ifdef MOZ_PROFILE_INSTRUMENTATION
-+ crashAfterMS = INT32_MAX;
-+#endif
-
- UniquePtr<Options> options(new Options());
- const PRIntervalTime ticksDuration = PR_MillisecondsToInterval(1000);
+ return namespace(
+- gen_cflags=[prefix + '-fprofile-generate'],
++ gen_cflags=[prefix + '-fprofile-generate', '-DMOZ_PROFILE_INSTRUMENTATION'],
+ gen_ldflags=gen_ldflags,
+ use_cflags=[prefix + '-fprofile-use=%s' % profdata,
+ # Some error messages about mismatched profile data
diff --git a/mozilla-1562827.patch b/mozilla-1562827.patch
deleted file mode 100644
index 497133c..0000000
--- a/mozilla-1562827.patch
+++ /dev/null
@@ -1,141 +0,0 @@
-diff -up firefox-69.0/widget/gtk/nsWindow.cpp.mozilla-1562827 firefox-69.0/widget/gtk/nsWindow.cpp
---- firefox-69.0/widget/gtk/nsWindow.cpp.mozilla-1562827 2019-09-02 15:16:15.031528276 +0200
-+++ firefox-69.0/widget/gtk/nsWindow.cpp 2019-09-02 15:16:15.037528254 +0200
-@@ -818,7 +818,6 @@ void nsWindow::SetParent(nsIWidget* aNew
- if (mParent) {
- mParent->RemoveChild(this);
- }
--
- mParent = aNewParent;
-
- GtkWidget* oldContainer = GetMozContainerWidget();
-@@ -830,88 +829,73 @@ void nsWindow::SetParent(nsIWidget* aNew
- return;
- }
-
-+ nsWindow* newParent = static_cast<nsWindow*>(aNewParent);
-+ GdkWindow* newParentWindow = nullptr;
-+ GtkWidget* newContainer = nullptr;
- if (aNewParent) {
- aNewParent->AddChild(this);
-- ReparentNativeWidget(aNewParent);
-+ newParentWindow = newParent->mGdkWindow;
-+ newContainer = newParent->GetMozContainerWidget();
- } else {
- // aNewParent is nullptr, but reparent to a hidden window to avoid
- // destroying the GdkWindow and its descendants.
- // An invisible container widget is needed to hold descendant
- // GtkWidgets.
-- GtkWidget* newContainer = EnsureInvisibleContainer();
-- GdkWindow* newParentWindow = gtk_widget_get_window(newContainer);
-- ReparentNativeWidgetInternal(aNewParent, newContainer, newParentWindow,
-- oldContainer);
-- }
--}
--
--bool nsWindow::WidgetTypeSupportsAcceleration() { return !IsSmallPopup(); }
--
--void nsWindow::ReparentNativeWidget(nsIWidget* aNewParent) {
-- MOZ_ASSERT(aNewParent, "null widget");
-- NS_ASSERTION(!mIsDestroyed, "");
-- NS_ASSERTION(!static_cast<nsWindow*>(aNewParent)->mIsDestroyed, "");
--
-- GtkWidget* oldContainer = GetMozContainerWidget();
-- if (!oldContainer) {
-- // The GdkWindows have been destroyed so there is nothing else to
-- // reparent.
-- MOZ_ASSERT(gdk_window_is_destroyed(mGdkWindow),
-- "live GdkWindow with no widget");
-- return;
-+ newContainer = EnsureInvisibleContainer();
-+ newParentWindow = gtk_widget_get_window(newContainer);
- }
-- MOZ_ASSERT(!gdk_window_is_destroyed(mGdkWindow),
-- "destroyed GdkWindow with widget");
-
-- auto* newParent = static_cast<nsWindow*>(aNewParent);
-- GdkWindow* newParentWindow = newParent->mGdkWindow;
-- GtkWidget* newContainer = newParent->GetMozContainerWidget();
-- GtkWindow* shell = GTK_WINDOW(mShell);
--
-- if (shell && gtk_window_get_transient_for(shell)) {
-- GtkWindow* topLevelParent =
-- GTK_WINDOW(gtk_widget_get_toplevel(newContainer));
-- gtk_window_set_transient_for(shell, topLevelParent);
-- }
--
-- ReparentNativeWidgetInternal(aNewParent, newContainer, newParentWindow,
-- oldContainer);
--}
--
--void nsWindow::ReparentNativeWidgetInternal(nsIWidget* aNewParent,
-- GtkWidget* aNewContainer,
-- GdkWindow* aNewParentWindow,
-- GtkWidget* aOldContainer) {
-- if (!aNewContainer) {
-+ if (!newContainer) {
- // The new parent GdkWindow has been destroyed.
-- MOZ_ASSERT(!aNewParentWindow || gdk_window_is_destroyed(aNewParentWindow),
-+ MOZ_ASSERT(!newParentWindow || gdk_window_is_destroyed(newParentWindow),
- "live GdkWindow with no widget");
- Destroy();
- } else {
-- if (aNewContainer != aOldContainer) {
-- MOZ_ASSERT(!gdk_window_is_destroyed(aNewParentWindow),
-+ if (newContainer != oldContainer) {
-+ MOZ_ASSERT(!gdk_window_is_destroyed(newParentWindow),
- "destroyed GdkWindow with widget");
-- SetWidgetForHierarchy(mGdkWindow, aOldContainer, aNewContainer);
-+ SetWidgetForHierarchy(mGdkWindow, oldContainer, newContainer);
-
-- if (aOldContainer == gInvisibleContainer) {
-+ if (oldContainer == gInvisibleContainer) {
- CheckDestroyInvisibleContainer();
- }
- }
-
-- if (!mIsTopLevel) {
-- gdk_window_reparent(mGdkWindow, aNewParentWindow,
-- DevicePixelsToGdkCoordRoundDown(mBounds.x),
-- DevicePixelsToGdkCoordRoundDown(mBounds.y));
-- }
-+ gdk_window_reparent(mGdkWindow, newParentWindow,
-+ DevicePixelsToGdkCoordRoundDown(mBounds.x),
-+ DevicePixelsToGdkCoordRoundDown(mBounds.y));
-+ mToplevelParentWindow = GTK_WINDOW(gtk_widget_get_toplevel(newContainer));
- }
-
-- auto* newParent = static_cast<nsWindow*>(aNewParent);
- bool parentHasMappedToplevel = newParent && newParent->mHasMappedToplevel;
- if (mHasMappedToplevel != parentHasMappedToplevel) {
- SetHasMappedToplevel(parentHasMappedToplevel);
- }
- }
-
-+bool nsWindow::WidgetTypeSupportsAcceleration() { return !IsSmallPopup(); }
-+
-+void nsWindow::ReparentNativeWidget(nsIWidget* aNewParent) {
-+ MOZ_ASSERT(aNewParent, "null widget");
-+ MOZ_ASSERT(!mIsDestroyed, "");
-+ MOZ_ASSERT(!static_cast<nsWindow*>(aNewParent)->mIsDestroyed, "");
-+ MOZ_ASSERT(!gdk_window_is_destroyed(mGdkWindow),
-+ "destroyed GdkWindow with widget");
-+
-+ MOZ_ASSERT(
-+ !mParent,
-+ "nsWindow::ReparentNativeWidget() works on toplevel windows only.");
-+
-+ auto* newParent = static_cast<nsWindow*>(aNewParent);
-+ GtkWindow* newParentWidget = GTK_WINDOW(newParent->GetGtkWidget());
-+ GtkWindow* shell = GTK_WINDOW(mShell);
-+
-+ if (shell && gtk_window_get_transient_for(shell)) {
-+ gtk_window_set_transient_for(shell, newParentWidget);
-+ mToplevelParentWindow = newParentWidget;
-+ }
-+}
-+
- void nsWindow::SetModal(bool aModal) {
- LOG(("nsWindow::SetModal [%p] %d\n", (void*)this, aModal));
- if (mIsDestroyed) return;
-diff -up firefox-69.0/widget/gtk/nsWindow.h.mozilla-1562827 firefox-69.0/widget/gtk/nsWindow.h
diff --git a/mozilla-1566876-webrtc-ind.patch b/mozilla-1566876-webrtc-ind.patch
deleted file mode 100644
index 598f58f..0000000
--- a/mozilla-1566876-webrtc-ind.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -3504,12 +3504,6 @@
- mBounds = aRect;
- ConstrainSize(&mBounds.width, &mBounds.height);
-
-- // eWindowType_child is not supported on Wayland. Just switch to toplevel
-- // as a workaround.
-- if (!mIsX11Display && mWindowType == eWindowType_child) {
-- mWindowType = eWindowType_toplevel;
-- }
--
- // figure out our parent window
- GtkWidget* parentMozContainer = nullptr;
- GtkContainer* parentGtkContainer = nullptr;
-@@ -3543,6 +3537,18 @@
- topLevelParent = GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer));
- }
-
-+ if (!mIsX11Display) {
-+ if (mWindowType == eWindowType_child) {
-+ // eWindowType_child is not supported on Wayland. Just switch to toplevel
-+ // as a workaround.
-+ mWindowType = eWindowType_toplevel;
-+ } else if (mWindowType == eWindowType_popup && !topLevelParent) {
-+ // Workaround for Wayland where the popup windows always need to have
-+ // parent window. For example webrtc ui is a popup window without parent.
-+ mWindowType = eWindowType_toplevel;
-+ }
-+ }
-+
- // ok, create our windows
- switch (mWindowType) {
- case eWindowType_dialog:
-
diff --git a/mozilla-1567434-1.patch b/mozilla-1567434-1.patch
deleted file mode 100644
index 446cd6b..0000000
--- a/mozilla-1567434-1.patch
+++ /dev/null
@@ -1,226 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -616,8 +616,6 @@
- }
-
- if (!aFullScreenUpdate) {
-- NS_WARNING(
-- "We can't create a new Wayland buffer for non-fullscreen updates!");
- return nullptr;
- }
-
-@@ -674,8 +672,6 @@
- (void*)buffer));
-
- if (!buffer) {
-- NS_WARNING(
-- "WindowSurfaceWayland::LockWaylandBuffer(): No buffer available");
- return nullptr;
- }
-
-diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
---- a/widget/gtk/nsWindow.h
-+++ b/widget/gtk/nsWindow.h
-@@ -487,6 +487,7 @@
- GtkWidget* mShell;
- MozContainer* mContainer;
- GdkWindow* mGdkWindow;
-+ GtkWindow* mToplevelParentWindow;
- bool mWindowShouldStartDragging = false;
- PlatformCompositorWidgetDelegate* mCompositorWidgetDelegate;
-
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -401,6 +401,7 @@
- mContainer = nullptr;
- mGdkWindow = nullptr;
- mShell = nullptr;
-+ mToplevelParentWindow = nullptr;
- mCompositorWidgetDelegate = nullptr;
- mHasMappedToplevel = false;
- mIsFullyObscured = false;
-@@ -1144,6 +1145,8 @@
- nsWindow* window =
- static_cast<nsWindow*>(gVisibleWaylandPopupWindows->data);
- if (window->mPopupType != ePopupTypeTooltip) break;
-+ LOG(("nsWindow::HideWaylandTooltips [%p] hidding tooltip [%p].\n",
-+ (void*)this, window));
- window->HideWaylandWindow();
- gVisibleWaylandPopupWindows = g_list_delete_link(
- gVisibleWaylandPopupWindows, gVisibleWaylandPopupWindows);
-@@ -1172,9 +1175,12 @@
- // before we open another one on that level. It means that every open
- // popup needs to have an unique parent.
- GtkWidget* nsWindow::ConfigureWaylandPopupWindows() {
-+ LOG(("nsWindow::ConfigureWaylandPopupWindows [%p]\n", (void*)this));
-+
- // Check if we're already configured.
- if (gVisibleWaylandPopupWindows &&
- g_list_find(gVisibleWaylandPopupWindows, this)) {
-+ LOG(("...[%p] is already configured.\n", (void*)this));
- return GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell)));
- }
-
-@@ -1182,9 +1188,15 @@
- // as it's short lived temporary window.
- HideWaylandTooltips();
-
-- GtkWindow* parentWidget = nullptr;
-+ GtkWindow* parentWidget = mToplevelParentWindow;
- if (gVisibleWaylandPopupWindows) {
-+ LOG(("... there's visible active popup [%p]\n",
-+ gVisibleWaylandPopupWindows->data));
-+
- if (mPopupType == ePopupTypeTooltip) {
-+ LOG(("...[%p] is tooltip, parent [%p]\n", (void*)this,
-+ gVisibleWaylandPopupWindows->data));
-+
- // Attach tooltip window to the latest popup window
- // to have both visible.
- nsWindow* window =
-@@ -1200,12 +1212,19 @@
- // nsWindow::Create()) or we're toplevel popup without parent.
- // In both cases just use parent which was passed to nsWindow::Create().
- if (!menuPopupFrame) {
-- return GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell)));
-+ LOG(("...[%p] menuPopupFrame = null, using given parent widget [%p]\n",
-+ (void*)this, parentWidget));
-+ return GTK_WIDGET(parentWidget);
- }
-
- nsWindow* parentWindow =
- static_cast<nsWindow*>(menuPopupFrame->GetParentMenuWidget());
-+ LOG(("...[%p] GetParentMenuWidget() = %p\n", (void*)this, parentWindow));
-+
- if (!parentWindow) {
-+ LOG(("...[%p] using active/visible popups as a parent [%p]\n",
-+ (void*)this, gVisibleWaylandPopupWindows->data));
-+
- // We're toplevel popup menu attached to another menu. Just use our
- // latest popup as a parent.
- parentWindow =
-@@ -1234,10 +1253,10 @@
- }
- }
-
-+ MOZ_ASSERT(parentWidget, "Missing parent widget for wayland popup!");
- if (parentWidget) {
-+ LOG(("...[%p] set parent widget [%p]\n", (void*)this, parentWidget));
- gtk_window_set_transient_for(GTK_WINDOW(mShell), parentWidget);
-- } else {
-- parentWidget = gtk_window_get_transient_for(GTK_WINDOW(mShell));
- }
- gVisibleWaylandPopupWindows =
- g_list_prepend(gVisibleWaylandPopupWindows, this);
-@@ -1248,9 +1267,11 @@
- static void NativeMoveResizeWaylandPopupCallback(
- GdkWindow* window, const GdkRectangle* flipped_rect,
- const GdkRectangle* final_rect, gboolean flipped_x, gboolean flipped_y,
-- void* unused) {
-- LOG(("%s flipped %d %d\n", __FUNCTION__, flipped_rect->x, flipped_rect->y));
-- LOG(("%s final %d %d\n", __FUNCTION__, final_rect->x, final_rect->y));
-+ void* aWindow) {
-+ LOG(("%s [%p] flipped %d %d\n", __FUNCTION__, aWindow, flipped_rect->x,
-+ flipped_rect->y));
-+ LOG(("%s [%p] final %d %d\n", __FUNCTION__, aWindow, final_rect->x,
-+ final_rect->y));
- }
- #endif
-
-@@ -1264,6 +1285,8 @@
- // Compositor may be confused by windows with width/height = 0
- // and positioning such windows leads to Bug 1555866.
- if (!AreBoundsSane()) {
-+ LOG(("nsWindow::NativeMoveResizeWaylandPopup [%p] Bounds are not sane\n",
-+ (void*)this));
- return;
- }
-
-@@ -1277,6 +1300,8 @@
- // - gdk_window_move_to_rect() is not available
- // - the widget doesn't have a valid GdkWindow
- if (!sGdkWindowMoveToRect || !gdkWindow) {
-+ LOG(("nsWindow::NativeMoveResizeWaylandPopup [%p] use gtk_window_move()\n",
-+ (void*)this));
- gtk_window_move(GTK_WINDOW(mShell), aPosition->x, aPosition->y);
- return;
- }
-@@ -1302,8 +1327,12 @@
- }
- LOG((" request result %d %d\n", rect.x, rect.y));
- #ifdef DEBUG
-- g_signal_connect(gdkWindow, "moved-to-rect",
-- G_CALLBACK(NativeMoveResizeWaylandPopupCallback), this);
-+ if (!g_signal_handler_find(
-+ gdkWindow, G_SIGNAL_MATCH_FUNC, 0, 0, nullptr,
-+ FuncToGpointer(NativeMoveResizeWaylandPopupCallback), this)) {
-+ g_signal_connect(gdkWindow, "moved-to-rect",
-+ G_CALLBACK(NativeMoveResizeWaylandPopupCallback), this);
-+ }
- #endif
-
- GdkGravity rectAnchor = GDK_GRAVITY_NORTH_WEST;
-@@ -3508,7 +3537,6 @@
- GtkWidget* parentMozContainer = nullptr;
- GtkContainer* parentGtkContainer = nullptr;
- GdkWindow* parentGdkWindow = nullptr;
-- GtkWindow* topLevelParent = nullptr;
- nsWindow* parentnsWindow = nullptr;
- GtkWidget* eventWidget = nullptr;
- bool drawToContainer = false;
-@@ -3534,7 +3562,8 @@
-
- // get the toplevel window just in case someone needs to use it
- // for setting transients or whatever.
-- topLevelParent = GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer));
-+ mToplevelParentWindow =
-+ GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer));
- }
-
- if (!mIsX11Display) {
-@@ -3542,7 +3571,7 @@
- // eWindowType_child is not supported on Wayland. Just switch to toplevel
- // as a workaround.
- mWindowType = eWindowType_toplevel;
-- } else if (mWindowType == eWindowType_popup && !topLevelParent) {
-+ } else if (mWindowType == eWindowType_popup && !mToplevelParentWindow) {
- // Workaround for Wayland where the popup windows always need to have
- // parent window. For example webrtc ui is a popup window without parent.
- mWindowType = eWindowType_toplevel;
-@@ -3677,7 +3706,7 @@
- gdk_get_program_class());
- gtk_window_set_type_hint(GTK_WINDOW(mShell),
- GDK_WINDOW_TYPE_HINT_DIALOG);
-- gtk_window_set_transient_for(GTK_WINDOW(mShell), topLevelParent);
-+ gtk_window_set_transient_for(GTK_WINDOW(mShell), mToplevelParentWindow);
- } else if (mWindowType == eWindowType_popup) {
- gtk_window_set_wmclass(GTK_WINDOW(mShell), "Popup",
- gdk_get_program_class());
-@@ -3730,10 +3759,11 @@
- }
- gtk_window_set_type_hint(GTK_WINDOW(mShell), gtkTypeHint);
-
-- if (topLevelParent) {
-+ if (mToplevelParentWindow) {
- LOG(("nsWindow::Create [%p] Set popup parent %p\n", (void*)this,
-- topLevelParent));
-- gtk_window_set_transient_for(GTK_WINDOW(mShell), topLevelParent);
-+ mToplevelParentWindow));
-+ gtk_window_set_transient_for(GTK_WINDOW(mShell),
-+ mToplevelParentWindow);
- }
-
- // We need realized mShell at NativeMove().
-@@ -4011,7 +4041,8 @@
- #endif
- }
-
-- LOG(("nsWindow [%p]\n", (void*)this));
-+ LOG(("nsWindow [%p] %s\n", (void*)this,
-+ mWindowType == eWindowType_toplevel ? "Toplevel" : "Popup"));
- if (mShell) {
- LOG(("\tmShell %p mContainer %p mGdkWindow %p 0x%lx\n", mShell, mContainer,
- mGdkWindow, mIsX11Display ? gdk_x11_window_get_xid(mGdkWindow) : 0));
-
diff --git a/mozilla-1567434-2.patch b/mozilla-1567434-2.patch
deleted file mode 100644
index 966118a..0000000
--- a/mozilla-1567434-2.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -1208,6 +1208,7 @@
- if (frame) {
- menuPopupFrame = do_QueryFrame(frame);
- }
-+
- // The popup is not fully created yet (we're called from
- // nsWindow::Create()) or we're toplevel popup without parent.
- // In both cases just use parent which was passed to nsWindow::Create().
-@@ -1217,10 +1218,22 @@
- return GTK_WIDGET(parentWidget);
- }
-
-+ LOG(("...[%p] is %s\n", (void*)this,
-+ menuPopupFrame->IsContextMenu() ? "context menu" : "popup"));
-+
- nsWindow* parentWindow =
- static_cast<nsWindow*>(menuPopupFrame->GetParentMenuWidget());
- LOG(("...[%p] GetParentMenuWidget() = %p\n", (void*)this, parentWindow));
-
-+ // If the popup is a regular menu but GetParentMenuWidget() returns
-+ // nullptr which means it's connected non-menu parent
-+ // (bookmark toolbar for instance).
-+ // In this case use a parent given at nsWindow::Create().
-+ if (!parentWindow && !menuPopupFrame->IsContextMenu()) {
-+ parentWindow =
-+ get_window_for_gtk_widget(GTK_WIDGET(mToplevelParentWindow));
-+ }
-+
- if (!parentWindow) {
- LOG(("...[%p] using active/visible popups as a parent [%p]\n",
- (void*)this, gVisibleWaylandPopupWindows->data));
-
diff --git a/mozilla-1573813.patch b/mozilla-1573813.patch
deleted file mode 100644
index e9fca07..0000000
--- a/mozilla-1573813.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -6577,11 +6577,22 @@
- }
-
- gint nsWindow::GdkScaleFactor() {
-+ // For popup windows with parent window we need to get scale factor of the
-+ // parent window. Otherwise the scale factor of the popup is not updated
-+ // during it's hidden.
-+ GdkWindow* scaledGdkWindow = mGdkWindow;
-+ if (mToplevelParentWindow) {
-+ scaledGdkWindow = gtk_widget_get_window(GTK_WIDGET(mToplevelParentWindow));
-+ // Fallback for windows which parent has been unrealized.
-+ if (!scaledGdkWindow) {
-+ scaledGdkWindow = mGdkWindow;
-+ }
-+ }
- // Available as of GTK 3.10+
- static auto sGdkWindowGetScaleFactorPtr =
- (gint(*)(GdkWindow*))dlsym(RTLD_DEFAULT, "gdk_window_get_scale_factor");
-- if (sGdkWindowGetScaleFactorPtr && mGdkWindow)
-- return (*sGdkWindowGetScaleFactorPtr)(mGdkWindow);
-+ if (sGdkWindowGetScaleFactorPtr && scaledGdkWindow)
-+ return (*sGdkWindowGetScaleFactorPtr)(scaledGdkWindow);
- return ScreenHelperGTK::GetGTKMonitorScaleFactor();
- }
-
-
diff --git a/mozilla-1574036.patch b/mozilla-1574036.patch
deleted file mode 100644
index c3ecdc7..0000000
--- a/mozilla-1574036.patch
+++ /dev/null
@@ -1,425 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
---- a/widget/gtk/WindowSurfaceWayland.h
-+++ b/widget/gtk/WindowSurfaceWayland.h
-@@ -177,12 +177,9 @@
-
- private:
- WindowBackBuffer* CreateWaylandBuffer(int aWidth, int aHeight);
-- WindowBackBuffer* GetWaylandBufferToDraw(int aWidth, int aHeight,
-- bool aFullScreenUpdate);
-+ WindowBackBuffer* GetWaylandBufferToDraw(bool aCanSwitchBuffer);
-
-- already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(int aWidth, int aHeight,
-- bool aClearBuffer,
-- bool aFullScreenUpdate);
-+ already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(bool aCanSwitchBuffer);
- void UnlockWaylandBuffer();
-
- already_AddRefed<gfx::DrawTarget> LockImageSurface(
-@@ -198,7 +195,10 @@
-
- // TODO: Do we need to hold a reference to nsWindow object?
- nsWindow* mWindow;
-- LayoutDeviceIntRect mLastScreenRect;
-+ // Buffer screen rects helps us understand if we operate on
-+ // the same window size as we're called on WindowSurfaceWayland::Lock().
-+ // mBufferScreenRect is window size when our wayland buffer was allocated.
-+ LayoutDeviceIntRect mBufferScreenRect;
- nsWaylandDisplay* mWaylandDisplay;
- WindowBackBuffer* mWaylandBuffer;
- LayoutDeviceIntRegion mWaylandBufferDamage;
-@@ -211,7 +211,8 @@
- AutoTArray<WindowImageSurface, 30> mDelayedImageCommits;
- bool mDrawToWaylandBufferDirectly;
- bool mPendingCommit;
-- bool mWaylandBufferFullScreenDamage;
-+ bool mWholeWindowBufferDamage;
-+ bool mBufferNeedsClear;
- bool mIsMainThread;
- bool mNeedScaleFactorUpdate;
-
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -499,7 +499,8 @@
- mDelayedCommitHandle(nullptr),
- mDrawToWaylandBufferDirectly(true),
- mPendingCommit(false),
-- mWaylandBufferFullScreenDamage(false),
-+ mWholeWindowBufferDamage(false),
-+ mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
- mNeedScaleFactorUpdate(true) {
- for (int i = 0; i < BACK_BUFFER_NUM; i++) mBackupBuffer[i] = nullptr;
-@@ -565,18 +566,20 @@
- }
-
- WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(
-- int aWidth, int aHeight, bool aFullScreenUpdate) {
-+ bool aCanSwitchBuffer) {
- LOGWAYLAND(("%s [%p] Requested buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- // There's no buffer created yet, create a new one.
- if (!mWaylandBuffer) {
-- MOZ_ASSERT(aFullScreenUpdate, "Created new buffer for partial drawing!");
-+ MOZ_ASSERT(aCanSwitchBuffer && mWholeWindowBufferDamage,
-+ "Created new buffer for partial drawing!");
- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-+ (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-
-- mWaylandBuffer = CreateWaylandBuffer(aWidth, aHeight);
-- mWaylandBufferFullScreenDamage = true;
-+ mWaylandBuffer =
-+ CreateWaylandBuffer(mBufferScreenRect.width, mBufferScreenRect.height);
- mNeedScaleFactorUpdate = true;
- return mWaylandBuffer;
- }
-@@ -593,29 +596,31 @@
- LOGWAYLAND(
- ("%s [%p] Use recent buffer.\n", __PRETTY_FUNCTION__, (void*)this));
-
-- if (mWaylandBuffer->IsMatchingSize(aWidth, aHeight)) {
-+ if (mWaylandBuffer->IsMatchingSize(mBufferScreenRect.width,
-+ mBufferScreenRect.height)) {
- LOGWAYLAND(("%s [%p] Size is ok, use the buffer [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, aWidth, aHeight));
-+ __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
- return mWaylandBuffer;
- }
-
-- if (!aFullScreenUpdate) {
-+ if (!aCanSwitchBuffer) {
- NS_WARNING("We can't resize Wayland buffer for non-fullscreen updates!");
- return nullptr;
- }
-
- LOGWAYLAND(("%s [%p] Reuse buffer with resize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, aWidth, aHeight));
-+ __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-
-- mWaylandBuffer->Resize(aWidth, aHeight);
-+ mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- // There's a chance that scale factor has been changed
- // when buffer size changed
-- mWaylandBufferFullScreenDamage = true;
- mNeedScaleFactorUpdate = true;
- return mWaylandBuffer;
- }
-
-- if (!aFullScreenUpdate) {
-+ if (!aCanSwitchBuffer) {
- return nullptr;
- }
-
-@@ -625,8 +630,10 @@
- availableBuffer++) {
- if (!mBackupBuffer[availableBuffer]) {
- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-- mBackupBuffer[availableBuffer] = CreateWaylandBuffer(aWidth, aHeight);
-+ (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-+ mBackupBuffer[availableBuffer] = CreateWaylandBuffer(
-+ mBufferScreenRect.width, mBufferScreenRect.height);
- break;
- }
-
-@@ -650,23 +657,23 @@
- __PRETTY_FUNCTION__, (void*)this, (void*)lastWaylandBuffer,
- (void*)mWaylandBuffer));
-
-- mWaylandBufferFullScreenDamage = true;
- mNeedScaleFactorUpdate = true;
-
-- bool bufferNeedsResize = !mWaylandBuffer->IsMatchingSize(aWidth, aHeight);
-+ bool bufferNeedsResize = !mWaylandBuffer->IsMatchingSize(
-+ mBufferScreenRect.width, mBufferScreenRect.height);
- if (bufferNeedsResize) {
- LOGWAYLAND(("%s [%p] Resize buffer to [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-- mWaylandBuffer->Resize(aWidth, aHeight);
-+ (void*)this, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
-+ mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- }
-
- return mWaylandBuffer;
- }
-
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::LockWaylandBuffer(
-- int aWidth, int aHeight, bool aClearBuffer, bool aFullScreenUpdate) {
-- WindowBackBuffer* buffer =
-- GetWaylandBufferToDraw(aWidth, aHeight, aFullScreenUpdate);
-+ bool aCanSwitchBuffer) {
-+ WindowBackBuffer* buffer = GetWaylandBufferToDraw(aCanSwitchBuffer);
-
- LOGWAYLAND(("%s [%p] Got buffer %p\n", __PRETTY_FUNCTION__, (void*)this,
- (void*)buffer));
-@@ -675,8 +682,9 @@
- return nullptr;
- }
-
-- if (aClearBuffer) {
-+ if (mBufferNeedsClear && mWholeWindowBufferDamage) {
- buffer->Clear();
-+ mBufferNeedsClear = false;
- }
-
- return buffer->Lock();
-@@ -744,7 +752,7 @@
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
-+ LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-
-@@ -753,54 +761,77 @@
- mWindow->IsWaylandPopup() &&
- (eTransparencyTransparent == mWindow->GetTransparencyMode());
-
-- mDrawToWaylandBufferDirectly =
-- isTransparentPopup ? IsPopupFullScreenUpdate(screenRect, aRegion)
-- : IsWindowFullScreenUpdate(screenRect, aRegion);
-+ // We have request to lock whole buffer/window.
-+ mWholeWindowBufferDamage =
-+ isTransparentPopup ? IsPopupFullScreenUpdate(lockedScreenRect, aRegion)
-+ : IsWindowFullScreenUpdate(lockedScreenRect, aRegion);
-
-- bool needsClear = mWindow->WaylandSurfaceNeedsClear() ||
-- (isTransparentPopup && mDrawToWaylandBufferDirectly);
-+ // Clear buffer when we (re)draw new transparent popup window,
-+ // otherwise leave it as-is, mBufferNeedsClear can be set from previous
-+ // (already pending) commits which are cached now.
-+ if (mWholeWindowBufferDamage) {
-+ mBufferNeedsClear =
-+ mWindow->WaylandSurfaceNeedsClear() || isTransparentPopup;
-+ }
-
- LOGWAYLAND(("%s [%p] lockSize [%d x %d] windowSize [%d x %d]\n",
- __PRETTY_FUNCTION__, (void*)this, lockSize.width, lockSize.height,
-- screenRect.width, screenRect.height));
-+ lockedScreenRect.width, lockedScreenRect.height));
- LOGWAYLAND((" nsWindow = %p\n", mWindow));
- LOGWAYLAND((" isPopup = %d\n", mWindow->IsWaylandPopup()));
- LOGWAYLAND((" isTransparentPopup = %d\n", isTransparentPopup));
- LOGWAYLAND((" IsPopupFullScreenUpdate = %d\n",
-- IsPopupFullScreenUpdate(screenRect, aRegion)));
-+ IsPopupFullScreenUpdate(lockedScreenRect, aRegion)));
- LOGWAYLAND((" IsWindowFullScreenUpdate = %d\n",
-- IsWindowFullScreenUpdate(screenRect, aRegion)));
-- LOGWAYLAND((" needsClear = %d\n", needsClear));
-- LOGWAYLAND(
-- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
-+ IsWindowFullScreenUpdate(lockedScreenRect, aRegion)));
-+ LOGWAYLAND((" mBufferNeedsClear = %d\n", mBufferNeedsClear));
-+ LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-+
-+#if DEBUG
-+ if (!(mBufferScreenRect == lockedScreenRect)) {
-+ LOGWAYLAND((" screen size changed\n"));
-+ }
-+#endif
-
-- // Allow full screen allocation and clear
-- // when window size changed.
-- bool bufferRedraw = !(screenRect == mLastScreenRect);
-- if (bufferRedraw) {
-- mDrawToWaylandBufferDirectly = true;
-- needsClear = true;
-+ if (!(mBufferScreenRect == lockedScreenRect)) {
-+ // Screen (window) size changed and we still have some painting pending
-+ // for the last window size. That can happen when window is resized.
-+ // We can't commit them any more as they're for former window size, so
-+ // scratch them.
-+ mDelayedImageCommits.Clear();
-+
-+ if (!mWholeWindowBufferDamage) {
-+ NS_WARNING("Partial screen update when window is resized!");
-+ // This should not happen. Screen size changed but we got only
-+ // partal screen update instead of whole screen. Discard this painting
-+ // as it produces artifacts.
-+ return nullptr;
-+ }
-+ mBufferScreenRect = lockedScreenRect;
- }
-
-- if (mDrawToWaylandBufferDirectly) {
-+ if (mWholeWindowBufferDamage) {
-+ // We can lock/commit entire buffer direcly.
-+ mDrawToWaylandBufferDirectly = true;
-+
- // If there's any pending image commit scratch them as we're going
- // to redraw the whole sceen anyway.
- mDelayedImageCommits.Clear();
-
-- RefPtr<gfx::DrawTarget> dt =
-- LockWaylandBuffer(screenRect.width, screenRect.height, needsClear,
-- /* aFullScreenUpdate */ true);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-+ /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
- if (dt) {
-- if (bufferRedraw) {
-- mLastScreenRect = screenRect;
-- }
- return dt.forget();
- }
-+ }
-
-- // We don't have any front buffer available. Try indirect drawing
-- // to mImageSurface which is mirrored to front buffer at commit.
-- mDrawToWaylandBufferDirectly = false;
-- }
-+ // We do indirect drawing due to:
-+ //
-+ // 1) We don't have any front buffer available. Try indirect drawing
-+ // to mImageSurface which is mirrored to front buffer at commit.
-+ // 2) Only part of the screen is locked. We can't lock entire screen for
-+ // such drawing as it produces visible artifacts.
-+ mDrawToWaylandBufferDirectly = false;
-
- LOGWAYLAND((" Indirect drawing.\n"));
- return LockImageSurface(lockSize);
-@@ -851,16 +882,14 @@
- LayoutDeviceIntRegion& aWaylandBufferDamage) {
- MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
-
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
-+#ifdef DEBUG
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
--
- gfx::Rect rect(bounds);
-- if (rect.IsEmpty()) {
-- return false;
-- }
-+ MOZ_ASSERT(!rect.IsEmpty(), "Empty drawing?");
-+#endif
-
- LOGWAYLAND(("%s [%p] screenSize [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, screenRect.width, screenRect.height));
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- RefPtr<gfx::SourceSurface> surf =
- gfx::Factory::CreateSourceSurfaceForCairoSurface(
-@@ -871,13 +900,8 @@
- return false;
- }
-
-- // Allow full screen allocation and clear
-- // when window size changed.
-- bool bufferRedraw = !(screenRect == mLastScreenRect);
-- RefPtr<gfx::DrawTarget> dt =
-- LockWaylandBuffer(screenRect.width, screenRect.height,
-- /* needs clear*/ bufferRedraw,
-- /* aFullScreenUpdate */ bufferRedraw);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-+ /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
- if (dt) {
- LOGWAYLAND(
- (" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-@@ -885,14 +909,11 @@
-
- // Draw any delayed image commits first
- DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-+ // Draw image from recent WindowSurfaceWayland::Lock().
- WindowImageSurface::Draw(surf, dt, aRegion);
- // Submit all drawing to final Wayland buffer upload
- aWaylandBufferDamage.OrWith(aRegion);
- UnlockWaylandBuffer();
--
-- if (bufferRedraw) {
-- mLastScreenRect = screenRect;
-- }
- } else {
- mDelayedImageCommits.AppendElement(WindowImageSurface(surf, aRegion));
- LOGWAYLAND((" Added WindowImageSurfaces, cached surfaces %ld\n",
-@@ -930,29 +951,25 @@
- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
- LOGWAYLAND(
- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
-- LOGWAYLAND((" mWaylandBufferFullScreenDamage = %d\n",
-- mWaylandBufferFullScreenDamage));
-+ LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
- LOGWAYLAND((" mDelayedCommitHandle = %p\n", mDelayedCommitHandle));
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-
- if (!mDrawToWaylandBufferDirectly) {
-+ MOZ_ASSERT(mDelayedImageCommits.Length(),
-+ "Indirect drawing without any image?");
-+
- // There's some cached drawings - try to flush them now.
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
-- bool bufferRedraw = !(screenRect == mLastScreenRect);
-- RefPtr<gfx::DrawTarget> dt =
-- LockWaylandBuffer(screenRect.width, screenRect.height,
-- /* needsClear */ bufferRedraw,
-- /* full screen update */ bufferRedraw);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-+ /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-+
- if (dt) {
- LOGWAYLAND(("%s [%p] flushed indirect drawing\n", __PRETTY_FUNCTION__,
- (void*)this));
- DrawDelayedImageCommits(dt, mWaylandBufferDamage);
- UnlockWaylandBuffer();
- mDrawToWaylandBufferDirectly = true;
-- if (bufferRedraw) {
-- mLastScreenRect = screenRect;
-- }
- }
- }
-
-@@ -1000,10 +1017,10 @@
- mLastCommittedSurface = nullptr;
- }
-
-- if (mWaylandBufferFullScreenDamage) {
-- LayoutDeviceIntRect rect = mWindow->GetBounds();
-- wl_surface_damage(waylandSurface, 0, 0, rect.width, rect.height);
-- mWaylandBufferFullScreenDamage = false;
-+ if (mWholeWindowBufferDamage) {
-+ wl_surface_damage(waylandSurface, 0, 0, mBufferScreenRect.width,
-+ mBufferScreenRect.height);
-+ mWholeWindowBufferDamage = false;
- mNeedScaleFactorUpdate = true;
- } else {
- gint scaleFactor = mWindow->GdkScaleFactor();
-@@ -1043,24 +1060,24 @@
-
- #ifdef DEBUG
- {
-- LayoutDeviceIntRect screenRect = mWindow->GetBounds();
- gfx::IntRect bounds = aInvalidRegion.GetBounds().ToUnknownRect();
- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-
- LOGWAYLAND(("%s [%p] lockSize [%d x %d] screenSize [%d x %d]\n",
- __PRETTY_FUNCTION__, (void*)this, lockSize.width,
-- lockSize.height, screenRect.width, screenRect.height));
-+ lockSize.height, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
-- LOGWAYLAND((" mWaylandBufferFullScreenDamage = %d\n",
-- mWaylandBufferFullScreenDamage));
-+ LOGWAYLAND(
-+ (" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
- }
- #endif
-
- if (mDrawToWaylandBufferDirectly) {
- MOZ_ASSERT(mWaylandBuffer->IsLocked());
- // If we're not at fullscreen damage add drawing area from aInvalidRegion
-- if (!mWaylandBufferFullScreenDamage) {
-+ if (!mWholeWindowBufferDamage) {
- mWaylandBufferDamage.OrWith(aInvalidRegion);
- }
- UnlockWaylandBuffer();
-
diff --git a/mozilla-1576268.patch b/mozilla-1576268.patch
deleted file mode 100644
index 85fd1a8..0000000
--- a/mozilla-1576268.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-diff --git a/widget/gtk/nsClipboardWayland.cpp b/widget/gtk/nsClipboardWayland.cpp
---- a/widget/gtk/nsClipboardWayland.cpp
-+++ b/widget/gtk/nsClipboardWayland.cpp
-@@ -195,6 +195,12 @@
- uint32_t all_actions = WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY |
- WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE;
-
-+ /* Default to move D&D action (Bug 1576268).
-+ */
-+ if (dnd_actions == 0) {
-+ all_actions = WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE;
-+ }
-+
- wl_data_offer_set_actions(mWaylandDataOffer, all_actions, dnd_actions);
-
- /* Workaround Wayland D&D architecture here. To get the data_device_drop()
-
diff --git a/mozilla-1577024.patch b/mozilla-1577024.patch
deleted file mode 100644
index b81f103..0000000
--- a/mozilla-1577024.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1577024 firefox-69.0/widget/gtk/nsWaylandDisplay.cpp
---- firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1577024 2019-09-17 21:09:15.817764591 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.cpp 2019-09-17 21:09:15.822764568 +0200
-@@ -13,10 +13,15 @@ namespace widget {
- #define GBMLIB_NAME "libgbm.so.1"
- #define DRMLIB_NAME "libdrm.so.2"
-
-+#define DMABUF_PREF "widget.wayland_dmabuf_backend.enabled"
-+// See WindowSurfaceWayland::RenderingCacheMode for details.
-+#define CACHE_MODE_PREF "widget.wayland_cache_mode"
-+
- bool nsWaylandDisplay::mIsDMABufEnabled = false;
- // -1 mean the pref was not loaded yet
- int nsWaylandDisplay::mIsDMABufPrefState = -1;
- bool nsWaylandDisplay::mIsDMABufConfigured = false;
-+int nsWaylandDisplay::mRenderingCacheModePref = -1;
-
- wl_display* WaylandDisplayGetWLDisplay(GdkDisplay* aGdkDisplay) {
- if (!aGdkDisplay) {
-@@ -373,14 +378,15 @@ nsWaylandDisplay::nsWaylandDisplay(wl_di
- wl_registry_add_listener(mRegistry, ®istry_listener, this);
-
- if (NS_IsMainThread()) {
-- // We can't load the preference from compositor/render thread,
-- // only from main one. So we can't call it directly from
-- // nsWaylandDisplay::IsDMABufEnabled() as it can be called from various
-- // threads.
-+ // We can't load the preference from compositor/render thread
-+ // so load all Wayland prefs here.
- if (mIsDMABufPrefState == -1) {
-- mIsDMABufPrefState =
-- Preferences::GetBool("widget.wayland_dmabuf_backend.enabled", false);
-+ mIsDMABufPrefState = Preferences::GetBool(DMABUF_PREF, false);
-+ }
-+ if (mRenderingCacheModePref == -1) {
-+ mRenderingCacheModePref = Preferences::GetInt(CACHE_MODE_PREF, 0);
- }
-+
- // Use default event queue in main thread operated by Gtk+.
- mEventQueue = nullptr;
- wl_display_roundtrip(mDisplay);
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1577024 firefox-69.0/widget/gtk/nsWaylandDisplay.h
---- firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1577024 2019-09-17 21:09:15.818764586 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.h 2019-09-17 21:09:15.822764568 +0200
-@@ -83,6 +83,9 @@ class nsWaylandDisplay {
- uint32_t mModifierLo);
- static bool IsDMABufEnabled();
-
-+ // See WindowSurfaceWayland::CacheMode for details.
-+ int GetRenderingCacheModePref() { return mRenderingCacheModePref; };
-+
- private:
- bool ConfigureGbm();
-
-@@ -108,6 +111,7 @@ class nsWaylandDisplay {
- static bool mIsDMABufEnabled;
- static int mIsDMABufPrefState;
- static bool mIsDMABufConfigured;
-+ static int mRenderingCacheModePref;
- };
-
- void WaylandDispatchDisplays();
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1577024 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1577024 2019-09-17 21:09:15.820764577 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-18 08:34:50.568111279 +0200
-@@ -192,7 +192,7 @@ It owns wl_buffer object, owns WaylandDM
- (which provides the DMA Buffer) and ties them together.
-
- WindowBackBufferDMABuf backend is used only when WaylandDMABufSurface is
--available and gfx.wayland_dmabuf_backend.enabled preference is set.
-+available and widget.wayland_dmabuf_backend.enabled preference is set.
-
- */
-
-@@ -519,9 +519,11 @@ WindowSurfaceWayland::WindowSurfaceWayla
- mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
- mNeedScaleFactorUpdate(true) {
-- for (int i = 0; i < BACK_BUFFER_NUM; i++) mBackupBuffer[i] = nullptr;
-- mRenderingCacheMode = CACHE_ALL;
--
-+ for (int i = 0; i < BACK_BUFFER_NUM; i++) {
-+ mBackupBuffer[i] = nullptr;
-+ }
-+ mRenderingCacheMode = static_cast<RenderingCacheMode>(
-+ mWaylandDisplay->GetRenderingCacheModePref());
- }
-
- WindowSurfaceWayland::~WindowSurfaceWayland() {
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1577024 firefox-69.0/widget/gtk/WindowSurfaceWayland.h
diff --git a/mozilla-1579794-1.patch b/mozilla-1579794-1.patch
deleted file mode 100644
index 60c8cab..0000000
--- a/mozilla-1579794-1.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
---- a/widget/gtk/WindowSurfaceWayland.h
-+++ b/widget/gtk/WindowSurfaceWayland.h
-@@ -154,11 +154,12 @@
- void Draw(gfx::DrawTarget* aDest,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
-
-- WindowImageSurface(gfx::SourceSurface* aSurface,
-+ WindowImageSurface(gfxImageSurface* aImageSurface,
- const LayoutDeviceIntRegion& aUpdateRegion);
-
- private:
- RefPtr<gfx::SourceSurface> mSurface;
-+ RefPtr<gfxImageSurface> mImageSurface;
- const LayoutDeviceIntRegion mUpdateRegion;
- };
-
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -890,8 +890,12 @@
- }
-
- WindowImageSurface::WindowImageSurface(
-- gfx::SourceSurface* aSurface, const LayoutDeviceIntRegion& aUpdateRegion)
-- : mSurface(aSurface), mUpdateRegion(aUpdateRegion){};
-+ gfxImageSurface* aImageSurface, const LayoutDeviceIntRegion& aUpdateRegion)
-+ : mImageSurface(aImageSurface), mUpdateRegion(aUpdateRegion) {
-+ mSurface = gfx::Factory::CreateSourceSurfaceForCairoSurface(
-+ mImageSurface->CairoSurface(), mImageSurface->GetSize(),
-+ mImageSurface->Format());
-+}
-
- void WindowSurfaceWayland::DrawDelayedImageCommits(
- gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-@@ -915,36 +919,24 @@
- LOGWAYLAND(("%s [%p] screenSize [%d x %d]\n", __PRETTY_FUNCTION__,
- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
-- RefPtr<gfx::SourceSurface> surf =
-- gfx::Factory::CreateSourceSurfaceForCairoSurface(
-- mImageSurface->CairoSurface(), mImageSurface->GetSize(),
-- mImageSurface->Format());
-- if (!surf) {
-- NS_WARNING("Failed to create source cairo surface!");
-- return false;
-- }
-+ mDelayedImageCommits.AppendElement(
-+ WindowImageSurface(mImageSurface, aRegion));
-+ // mImageSurface is owned by mDelayedImageCommits
-+ mImageSurface = nullptr;
-
- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-- if (dt) {
-- LOGWAYLAND(
-- (" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-- long(mDelayedImageCommits.Length() + 1)));
--
-- // Draw any delayed image commits first
-- DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-- // Draw image from recent WindowSurfaceWayland::Lock().
-- WindowImageSurface::Draw(surf, dt, aRegion);
-- // Submit all drawing to final Wayland buffer upload
-- aWaylandBufferDamage.OrWith(aRegion);
-- UnlockWaylandBuffer();
-- } else {
-- mDelayedImageCommits.AppendElement(WindowImageSurface(surf, aRegion));
-- LOGWAYLAND((" Added WindowImageSurfaces, cached surfaces %ld\n",
-- long(mDelayedImageCommits.Length())));
-+ if (!dt) {
- return false;
- }
-
-+ LOGWAYLAND((" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-+ long(mDelayedImageCommits.Length() + 1)));
-+
-+ // Draw any delayed image commits first
-+ DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-+ UnlockWaylandBuffer();
-+
- return true;
- }
-
-@@ -980,23 +972,6 @@
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-
-- if (!mDrawToWaylandBufferDirectly) {
-- MOZ_ASSERT(mDelayedImageCommits.Length(),
-- "Indirect drawing without any image?");
--
-- // There's some cached drawings - try to flush them now.
-- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
--
-- if (dt) {
-- LOGWAYLAND(("%s [%p] flushed indirect drawing\n", __PRETTY_FUNCTION__,
-- (void*)this));
-- DrawDelayedImageCommits(dt, mWaylandBufferDamage);
-- UnlockWaylandBuffer();
-- mDrawToWaylandBufferDirectly = true;
-- }
-- }
--
- wl_surface* waylandSurface = mWindow->GetWaylandSurface();
- if (!waylandSurface) {
- LOGWAYLAND(("%s [%p] mWindow->GetWaylandSurface() failed, delay commit.\n",
-@@ -1105,6 +1080,7 @@
- mWaylandBufferDamage.OrWith(aInvalidRegion);
- }
- UnlockWaylandBuffer();
-+ mPendingCommit = true;
- } else {
- MOZ_ASSERT(!mWaylandBuffer->IsLocked(),
- "Drawing to already locked buffer?");
-@@ -1112,12 +1088,13 @@
- mWaylandBufferDamage)) {
- // Our cached drawing is flushed, we can draw fullscreen again.
- mDrawToWaylandBufferDirectly = true;
-+ mPendingCommit = true;
- }
- }
-
-- // We're ready to commit.
-- mPendingCommit = true;
-- CommitWaylandBuffer();
-+ if (mPendingCommit) {
-+ CommitWaylandBuffer();
-+ }
- }
-
- void WindowSurfaceWayland::FrameCallbackHandler() {
-
diff --git a/mozilla-1579794-2.patch b/mozilla-1579794-2.patch
deleted file mode 100644
index a8c249b..0000000
--- a/mozilla-1579794-2.patch
+++ /dev/null
@@ -1,166 +0,0 @@
-diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
---- a/widget/gtk/WindowSurfaceWayland.h
-+++ b/widget/gtk/WindowSurfaceWayland.h
-@@ -204,7 +204,6 @@
- const LayoutDeviceIntRegion& aRegion,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
- void CommitWaylandBuffer();
-- void CalcRectScale(LayoutDeviceIntRect& aRect, int scale);
-
- void DrawDelayedImageCommits(gfx::DrawTarget* aDrawTarget,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
-diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
---- a/widget/gtk/WindowSurfaceWayland.cpp
-+++ b/widget/gtk/WindowSurfaceWayland.cpp
-@@ -951,16 +951,6 @@
- }
- }
-
--void WindowSurfaceWayland::CalcRectScale(LayoutDeviceIntRect& aRect,
-- int aScale) {
-- aRect.x = aRect.x / aScale;
-- aRect.y = aRect.y / aScale;
--
-- // We don't need exact damage size - just safely cover the round errors.
-- aRect.width = (aRect.width / aScale) + 2;
-- aRect.height = (aRect.height / aScale) + 2;
--}
--
- void WindowSurfaceWayland::CommitWaylandBuffer() {
- MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
-
-@@ -1022,16 +1012,10 @@
- mWholeWindowBufferDamage = false;
- mNeedScaleFactorUpdate = true;
- } else {
-- gint scaleFactor = mWindow->GdkScaleFactor();
- for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
- iter.Next()) {
- mozilla::LayoutDeviceIntRect r = iter.Get();
-- // We need to remove the scale factor because the wl_surface_damage
-- // also multiplies by current scale factor.
-- if (scaleFactor > 1) {
-- CalcRectScale(r, scaleFactor);
-- }
-- wl_surface_damage(waylandSurface, r.x, r.y, r.width, r.height);
-+ wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
- }
- }
-
-diff --git a/widget/gtk/mozcontainer.cpp b/widget/gtk/mozcontainer.cpp
---- a/widget/gtk/mozcontainer.cpp
-+++ b/widget/gtk/mozcontainer.cpp
-@@ -578,16 +578,12 @@
- return nullptr;
- }
- GdkDisplay* display = gtk_widget_get_display(GTK_WIDGET(container));
-+ nsWaylandDisplay* waylandDisplay = WaylandDisplayGet(display);
-
- // Available as of GTK 3.8+
-- static auto sGdkWaylandDisplayGetWlCompositor =
-- (wl_compositor * (*)(GdkDisplay*))
-- dlsym(RTLD_DEFAULT, "gdk_wayland_display_get_wl_compositor");
-- struct wl_compositor* compositor =
-- sGdkWaylandDisplayGetWlCompositor(display);
-+ struct wl_compositor* compositor = waylandDisplay->GetCompositor();
- container->surface = wl_compositor_create_surface(compositor);
-
-- nsWaylandDisplay* waylandDisplay = WaylandDisplayGet(display);
- container->subsurface = wl_subcompositor_get_subsurface(
- waylandDisplay->GetSubcompositor(), container->surface,
- moz_container_get_gtk_container_surface(container));
-diff --git a/widget/gtk/mozwayland/mozwayland.h b/widget/gtk/mozwayland/mozwayland.h
---- a/widget/gtk/mozwayland/mozwayland.h
-+++ b/widget/gtk/mozwayland/mozwayland.h
-@@ -108,6 +108,17 @@
- }
- #endif
-
-+#ifndef WL_SURFACE_DAMAGE_BUFFER
-+# define WL_SURFACE_DAMAGE_BUFFER 9
-+
-+static inline void wl_surface_damage_buffer(struct wl_surface* wl_surface,
-+ int32_t x, int32_t y, int32_t width,
-+ int32_t height) {
-+ wl_proxy_marshal((struct wl_proxy*)wl_surface, WL_SURFACE_DAMAGE_BUFFER, x, y,
-+ width, height);
-+}
-+#endif
-+
- #ifdef __cplusplus
- }
- #endif
-diff --git a/widget/gtk/mozwayland/mozwayland.c b/widget/gtk/mozwayland/mozwayland.c
---- a/widget/gtk/mozwayland/mozwayland.c
-+++ b/widget/gtk/mozwayland/mozwayland.c
-@@ -30,6 +30,7 @@
- const struct wl_interface wl_seat_interface;
- const struct wl_interface wl_surface_interface;
- const struct wl_interface wl_subsurface_interface;
-+const struct wl_interface wl_compositor_interface;
- const struct wl_interface wl_subcompositor_interface;
- #pragma GCC visibility pop
-
-diff --git a/widget/gtk/nsWaylandDisplay.h b/widget/gtk/nsWaylandDisplay.h
---- a/widget/gtk/nsWaylandDisplay.h
-+++ b/widget/gtk/nsWaylandDisplay.h
-@@ -45,6 +45,7 @@
- MessageLoop* GetDispatcherThreadLoop() { return mDispatcherThreadLoop; }
- wl_display* GetDisplay() { return mDisplay; };
- wl_event_queue* GetEventQueue() { return mEventQueue; };
-+ wl_compositor* GetCompositor(void) { return mCompositor; };
- wl_subcompositor* GetSubcompositor(void) { return mSubcompositor; };
- wl_data_device_manager* GetDataDeviceManager(void) {
- return mDataDeviceManager;
-@@ -56,6 +57,7 @@
- };
-
- void SetShm(wl_shm* aShm);
-+ void SetCompositor(wl_compositor* aCompositor);
- void SetSubcompositor(wl_subcompositor* aSubcompositor);
- void SetDataDeviceManager(wl_data_device_manager* aDataDeviceManager);
- void SetSeat(wl_seat* aSeat);
-@@ -88,6 +90,7 @@
- wl_display* mDisplay;
- wl_event_queue* mEventQueue;
- wl_data_device_manager* mDataDeviceManager;
-+ wl_compositor* mCompositor;
- wl_subcompositor* mSubcompositor;
- wl_seat* mSeat;
- wl_shm* mShm;
-diff --git a/widget/gtk/nsWaylandDisplay.cpp b/widget/gtk/nsWaylandDisplay.cpp
---- a/widget/gtk/nsWaylandDisplay.cpp
-+++ b/widget/gtk/nsWaylandDisplay.cpp
-@@ -116,6 +116,10 @@
-
- void nsWaylandDisplay::SetShm(wl_shm* aShm) { mShm = aShm; }
-
-+void nsWaylandDisplay::SetCompositor(wl_compositor* aCompositor) {
-+ mCompositor = aCompositor;
-+}
-+
- void nsWaylandDisplay::SetSubcompositor(wl_subcompositor* aSubcompositor) {
- mSubcompositor = aSubcompositor;
- }
-@@ -223,6 +227,12 @@
- wl_proxy_set_queue((struct wl_proxy*)primary_selection_device_manager,
- display->GetEventQueue());
- display->SetPrimarySelectionDeviceManager(primary_selection_device_manager);
-+ } else if (strcmp(interface, "wl_compositor") == 0) {
-+ // Requested wl_compositor version 4 as we need wl_surface_damage_buffer().
-+ auto compositor = static_cast<wl_compositor*>(
-+ wl_registry_bind(registry, id, &wl_compositor_interface, 4));
-+ wl_proxy_set_queue((struct wl_proxy*)compositor, display->GetEventQueue());
-+ display->SetCompositor(compositor);
- } else if (strcmp(interface, "wl_subcompositor") == 0) {
- auto subcompositor = static_cast<wl_subcompositor*>(
- wl_registry_bind(registry, id, &wl_subcompositor_interface, 1));
-@@ -306,6 +316,7 @@
- mDisplay(aDisplay),
- mEventQueue(nullptr),
- mDataDeviceManager(nullptr),
-+ mCompositor(nullptr),
- mSubcompositor(nullptr),
- mSeat(nullptr),
- mShm(nullptr),
-
diff --git a/mozilla-1579823.patch b/mozilla-1579823.patch
deleted file mode 100644
index 9e00d4f..0000000
--- a/mozilla-1579823.patch
+++ /dev/null
@@ -1,306 +0,0 @@
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1579823 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1579823 2019-09-12 07:53:06.119602913 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-12 07:54:47.410105270 +0200
-@@ -326,13 +326,13 @@ void WindowBackBufferShm::Create(int aWi
- mHeight = aHeight;
-
- LOGWAYLAND((
-- "%s [%p] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__, (void*)this,
-+ "WindowBackBufferShm::Create [%p] wl_buffer %p ID %d\n", (void*)this,
- (void*)mWaylandBuffer,
- mWaylandBuffer ? wl_proxy_get_id((struct wl_proxy*)mWaylandBuffer) : -1));
- }
-
- void WindowBackBufferShm::Release() {
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(("WindowBackBufferShm::Release [%p]\n", (void*)this));
-
- wl_buffer_destroy(mWaylandBuffer);
- mWidth = mHeight = 0;
-@@ -358,8 +358,8 @@ WindowBackBufferShm::~WindowBackBufferSh
- bool WindowBackBufferShm::Resize(int aWidth, int aHeight) {
- if (aWidth == mWidth && aHeight == mHeight) return true;
-
-- LOGWAYLAND(
-- ("%s [%p] %d %d\n", __PRETTY_FUNCTION__, (void*)this, aWidth, aHeight));
-+ LOGWAYLAND(("WindowBackBufferShm::Resize [%p] %d %d\n", (void*)this, aWidth,
-+ aHeight));
-
- Release();
- Create(aWidth, aHeight);
-@@ -369,7 +369,7 @@ bool WindowBackBufferShm::Resize(int aWi
-
- void WindowBackBuffer::Attach(wl_surface* aSurface) {
- LOGWAYLAND(
-- ("%s [%p] wl_surface %p ID %d wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
-+ ("WindowBackBuffer::Attach [%p] wl_surface %p ID %d wl_buffer %p ID %d\n",
- (void*)this, (void*)aSurface,
- aSurface ? wl_proxy_get_id((struct wl_proxy*)aSurface) : -1,
- (void*)GetWlBuffer(),
-@@ -382,8 +382,8 @@ void WindowBackBuffer::Attach(wl_surface
- }
-
- void WindowBackBufferShm::Detach(wl_buffer* aBuffer) {
-- LOGWAYLAND(("%s [%p] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__, (void*)this,
-- (void*)aBuffer,
-+ LOGWAYLAND(("WindowBackBufferShm::Detach [%p] wl_buffer %p ID %d\n",
-+ (void*)this, (void*)aBuffer,
- aBuffer ? wl_proxy_get_id((struct wl_proxy*)aBuffer) : -1));
-
- mAttached = false;
-@@ -404,7 +404,7 @@ bool WindowBackBufferShm::SetImageDataFr
-
- already_AddRefed<gfx::DrawTarget> WindowBackBufferShm::Lock() {
- LOGWAYLAND((
-- "%s [%p] [%d x %d] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
-+ "WindowBackBufferShm::Lock [%p] [%d x %d] wl_buffer %p ID %d\n",
- (void*)this, mWidth, mHeight, (void*)mWaylandBuffer,
- mWaylandBuffer ? wl_proxy_get_id((struct wl_proxy*)mWaylandBuffer) : -1));
-
-@@ -419,16 +419,17 @@ WindowBackBufferDMABuf::WindowBackBuffer
- nsWaylandDisplay* aWaylandDisplay, int aWidth, int aHeight)
- : WindowBackBuffer(aWaylandDisplay) {
- mDMAbufSurface.Create(aWidth, aHeight);
--
-- LOGWAYLAND(("%s [%p] Created DMABuf buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, aWidth, aHeight));
-+ LOGWAYLAND(
-+ ("WindowBackBufferDMABuf::WindowBackBufferDMABuf [%p] Created DMABuf "
-+ "buffer [%d x %d]\n",
-+ (void*)this, aWidth, aHeight));
- }
-
- WindowBackBufferDMABuf::~WindowBackBufferDMABuf() { mDMAbufSurface.Release(); }
-
- already_AddRefed<gfx::DrawTarget> WindowBackBufferDMABuf::Lock() {
- LOGWAYLAND(
-- ("%s [%p] [%d x %d] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
-+ ("WindowBackBufferDMABuf::Lock [%p] [%d x %d] wl_buffer %p ID %d\n",
- (void*)this, GetWidth(), GetHeight(), (void*)GetWlBuffer(),
- GetWlBuffer() ? wl_proxy_get_id((struct wl_proxy*)GetWlBuffer()) : -1));
-
-@@ -534,7 +535,8 @@ WindowSurfaceWayland::~WindowSurfaceWayl
- bool WindowSurfaceWayland::UseDMABufBackend() {
- if (!mUseDMABufInitialized) {
- mUseDMABuf = nsWaylandDisplay::IsDMABufEnabled();
-- LOGWAYLAND(("%s DMABuf state %d\n", __PRETTY_FUNCTION__, mUseDMABuf));
-+ LOGWAYLAND(("WindowSurfaceWayland::UseDMABufBackend DMABuf state %d\n",
-+ mUseDMABuf));
- mUseDMABufInitialized = true;
- }
- return mUseDMABuf;
-@@ -567,15 +569,16 @@ WindowBackBuffer* WindowSurfaceWayland::
-
- WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(
- bool aCanSwitchBuffer) {
-- LOGWAYLAND(("%s [%p] Requested buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::GetWaylandBufferToDraw [%p] Requested buffer [%d "
-+ "x %d]\n",
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- // There's no buffer created yet, create a new one.
- if (!mWaylandBuffer) {
- MOZ_ASSERT(aCanSwitchBuffer && mWholeWindowBufferDamage,
- "Created new buffer for partial drawing!");
-- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width,
-+ LOGWAYLAND((" Created new buffer [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
-
- mWaylandBuffer =
-@@ -586,21 +589,19 @@ WindowBackBuffer* WindowSurfaceWayland::
-
- #ifdef DEBUG
- if (mWaylandBuffer->IsAttached()) {
-- LOGWAYLAND(("%s [%p] Buffer %p is attached, need to find a new one.\n",
-- __PRETTY_FUNCTION__, (void*)this, mWaylandBuffer));
-+ LOGWAYLAND((" Buffer %p is attached, need to find a new one.\n",
-+ mWaylandBuffer));
- }
- #endif
-
- // Reuse existing buffer
- if (!mWaylandBuffer->IsAttached()) {
-- LOGWAYLAND(
-- ("%s [%p] Use recent buffer.\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND((" Use recent buffer.\n"));
-
- if (mWaylandBuffer->IsMatchingSize(mBufferScreenRect.width,
- mBufferScreenRect.height)) {
-- LOGWAYLAND(("%s [%p] Size is ok, use the buffer [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ LOGWAYLAND((" Size is ok, use the buffer [%d x %d]\n",
-+ mBufferScreenRect.width, mBufferScreenRect.height));
- return mWaylandBuffer;
- }
-
-@@ -609,9 +610,8 @@ WindowBackBuffer* WindowSurfaceWayland::
- return nullptr;
- }
-
-- LOGWAYLAND(("%s [%p] Reuse buffer with resize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ LOGWAYLAND((" Reuse buffer with resize [%d x %d]\n",
-+ mBufferScreenRect.width, mBufferScreenRect.height));
-
- mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- // There's a chance that scale factor has been changed
-@@ -629,8 +629,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- for (availableBuffer = 0; availableBuffer < BACK_BUFFER_NUM;
- availableBuffer++) {
- if (!mBackupBuffer[availableBuffer]) {
-- LOGWAYLAND(("%s [%p] Created new buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width,
-+ LOGWAYLAND((" Created new buffer [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
- mBackupBuffer[availableBuffer] = CreateWaylandBuffer(
- mBufferScreenRect.width, mBufferScreenRect.height);
-@@ -643,8 +642,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- }
-
- if (MOZ_UNLIKELY(availableBuffer == BACK_BUFFER_NUM)) {
-- LOGWAYLAND(("%s [%p] No drawing buffer available!\n", __PRETTY_FUNCTION__,
-- (void*)this));
-+ LOGWAYLAND((" No drawing buffer available!\n"));
- NS_WARNING("No drawing buffer available");
- return nullptr;
- }
-@@ -653,17 +651,15 @@ WindowBackBuffer* WindowSurfaceWayland::
- mWaylandBuffer = mBackupBuffer[availableBuffer];
- mBackupBuffer[availableBuffer] = lastWaylandBuffer;
-
-- LOGWAYLAND(("%s [%p] Buffer flip new back %p new front %p \n",
-- __PRETTY_FUNCTION__, (void*)this, (void*)lastWaylandBuffer,
-- (void*)mWaylandBuffer));
-+ LOGWAYLAND((" Buffer flip new back %p new front %p \n",
-+ (void*)lastWaylandBuffer, (void*)mWaylandBuffer));
-
- mNeedScaleFactorUpdate = true;
-
- bool bufferNeedsResize = !mWaylandBuffer->IsMatchingSize(
- mBufferScreenRect.width, mBufferScreenRect.height);
- if (bufferNeedsResize) {
-- LOGWAYLAND(("%s [%p] Resize buffer to [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width,
-+ LOGWAYLAND((" Resize buffer to [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
- mWaylandBuffer->Resize(mBufferScreenRect.width, mBufferScreenRect.height);
- }
-@@ -675,8 +671,8 @@ already_AddRefed<gfx::DrawTarget> Window
- bool aCanSwitchBuffer) {
- WindowBackBuffer* buffer = GetWaylandBufferToDraw(aCanSwitchBuffer);
-
-- LOGWAYLAND(("%s [%p] Got buffer %p\n", __PRETTY_FUNCTION__, (void*)this,
-- (void*)buffer));
-+ LOGWAYLAND(("WindowSurfaceWayland::LockWaylandBuffer [%p] Got buffer %p\n",
-+ (void*)this, (void*)buffer));
-
- if (!buffer) {
- return nullptr;
-@@ -691,7 +687,7 @@ already_AddRefed<gfx::DrawTarget> Window
- }
-
- void WindowSurfaceWayland::UnlockWaylandBuffer() {
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(("WindowSurfaceWayland::UnlockWaylandBuffer [%p]\n", (void*)this));
- mWaylandBuffer->Unlock();
- }
-
-@@ -774,9 +770,11 @@ already_AddRefed<gfx::DrawTarget> Window
- mWindow->WaylandSurfaceNeedsClear() || isTransparentPopup;
- }
-
-- LOGWAYLAND(("%s [%p] lockSize [%d x %d] windowSize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, lockSize.width, lockSize.height,
-- lockedScreenRect.width, lockedScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::Lock [%p] lockSize [%d x %d] windowSize [%d x "
-+ "%d]\n",
-+ (void*)this, lockSize.width, lockSize.height, lockedScreenRect.width,
-+ lockedScreenRect.height));
- LOGWAYLAND((" nsWindow = %p\n", mWindow));
- LOGWAYLAND((" isPopup = %d\n", mWindow->IsWaylandPopup()));
- LOGWAYLAND((" isTransparentPopup = %d\n", isTransparentPopup));
-@@ -892,8 +890,10 @@ bool WindowSurfaceWayland::CommitImageSu
- MOZ_ASSERT(!rect.IsEmpty(), "Empty drawing?");
- #endif
-
-- LOGWAYLAND(("%s [%p] screenSize [%d x %d]\n", __PRETTY_FUNCTION__,
-- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::CommitImageSurfaceToWaylandBuffer [%p] "
-+ "screenSize [%d x %d]\n",
-+ (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-
- mDelayedImageCommits.AppendElement(
- WindowImageSurface(mImageSurface, aRegion));
-@@ -930,7 +930,7 @@ static void WaylandBufferDelayCommitHand
- void WindowSurfaceWayland::CommitWaylandBuffer() {
- MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
-
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(("WindowSurfaceWayland::CommitWaylandBuffer [%p]\n", (void*)this));
- LOGWAYLAND(
- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-@@ -940,8 +940,8 @@ void WindowSurfaceWayland::CommitWayland
-
- wl_surface* waylandSurface = mWindow->GetWaylandSurface();
- if (!waylandSurface) {
-- LOGWAYLAND(("%s [%p] mWindow->GetWaylandSurface() failed, delay commit.\n",
-- __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND((" [%p] mWindow->GetWaylandSurface() failed, delay commit.\n",
-+ (void*)this));
-
- // Target window is not created yet - delay the commit. This can happen only
- // when the window is newly created and there's no active
-@@ -969,8 +969,7 @@ void WindowSurfaceWayland::CommitWayland
- // We have an active frame callback request so handle it.
- if (mFrameCallback) {
- if (waylandSurface == mLastCommittedSurface) {
-- LOGWAYLAND(("%s [%p] wait for frame callback.\n", __PRETTY_FUNCTION__,
-- (void*)this));
-+ LOGWAYLAND((" [%p] wait for frame callback.\n", (void*)this));
- // We have an active frame callback pending from our recent surface.
- // It means we should defer the commit to FrameCallbackHandler().
- return;
-@@ -1022,10 +1021,11 @@ void WindowSurfaceWayland::Commit(const
- gfx::IntRect bounds = aInvalidRegion.GetBounds().ToUnknownRect();
- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-
-- LOGWAYLAND(("%s [%p] lockSize [%d x %d] screenSize [%d x %d]\n",
-- __PRETTY_FUNCTION__, (void*)this, lockSize.width,
-- lockSize.height, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::Commit [%p] lockSize [%d x %d] screenSize [%d "
-+ "x %d]\n",
-+ (void*)this, lockSize.width, lockSize.height, mBufferScreenRect.width,
-+ mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
- LOGWAYLAND(
-@@ -1064,7 +1064,8 @@ void WindowSurfaceWayland::FrameCallback
- MOZ_ASSERT(mLastCommittedSurface != nullptr,
- "FrameCallbackHandler() called without valid wl_surface!");
-
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::FrameCallbackHandler [%p]\n", (void*)this));
-
- wl_callback_destroy(mFrameCallback);
- mFrameCallback = nullptr;
-@@ -1077,7 +1078,8 @@ void WindowSurfaceWayland::FrameCallback
- void WindowSurfaceWayland::DelayedCommitHandler() {
- MOZ_ASSERT(mDelayedCommitHandle != nullptr, "Missing mDelayedCommitHandle!");
-
-- LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::DelayedCommitHandler [%p]\n", (void*)this));
-
- *mDelayedCommitHandle = nullptr;
- free(mDelayedCommitHandle);
diff --git a/mozilla-1579849.patch b/mozilla-1579849.patch
deleted file mode 100644
index fb3e8c2..0000000
--- a/mozilla-1579849.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.old firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.old 2019-09-11 14:34:36.687382704 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-11 14:39:02.000391578 +0200
-@@ -751,6 +751,10 @@ static bool IsPopupFullScreenUpdate(Layo
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::Lock(
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-+
-+ // Disable all commits from frame callback handler and delayed comit handler
-+ // as we're updated by gecko compositor.
-+ mPendingCommit = false;
-
- LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
diff --git a/mozilla-1580152.patch b/mozilla-1580152.patch
deleted file mode 100644
index 6260d3c..0000000
--- a/mozilla-1580152.patch
+++ /dev/null
@@ -1,618 +0,0 @@
-diff -up firefox-69.0/widget/gtk/mozwayland/mozwayland.h.mozilla-1580152 firefox-69.0/widget/gtk/mozwayland/mozwayland.h
---- firefox-69.0/widget/gtk/mozwayland/mozwayland.h.mozilla-1580152 2019-09-16 11:11:30.081299217 +0200
-+++ firefox-69.0/widget/gtk/mozwayland/mozwayland.h 2019-09-16 11:11:30.089299191 +0200
-@@ -27,6 +27,9 @@ MOZ_EXPORT struct wl_proxy* wl_proxy_mar
- struct wl_proxy* proxy, uint32_t opcode,
- const struct wl_interface* interface, ...);
-
-+MOZ_EXPORT void* wl_proxy_create_wrapper(void* proxy);
-+MOZ_EXPORT void wl_proxy_wrapper_destroy(void* proxy_wrapper);
-+
- /* We need implement some missing functions from wayland-client-protocol.h
- */
- #ifndef WL_DATA_DEVICE_MANAGER_DND_ACTION_ENUM
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1580152 firefox-69.0/widget/gtk/nsWaylandDisplay.cpp
---- firefox-69.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1580152 2019-09-16 11:11:30.081299217 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.cpp 2019-09-16 11:11:30.089299191 +0200
-@@ -243,6 +243,61 @@ bool nsWaylandDisplay::DispatchEventQueu
- return true;
- }
-
-+void nsWaylandDisplay::SyncEnd() {
-+ wl_callback_destroy(mSyncCallback);
-+ mSyncCallback = NULL;
-+}
-+
-+static void wayland_sync_callback(void* data, struct wl_callback* callback,
-+ uint32_t time) {
-+ auto display = static_cast<nsWaylandDisplay*>(data);
-+ display->SyncEnd();
-+}
-+
-+static const struct wl_callback_listener sync_callback_listener = {
-+ .done = wayland_sync_callback};
-+
-+void nsWaylandDisplay::SyncBegin() {
-+ WaitForSyncEnd();
-+
-+ // Use wl_display_sync() to synchronize wayland events.
-+ // See dri2_wl_swap_buffers_with_damage() from MESA
-+ // or wl_display_roundtrip_queue() from wayland-client.
-+ struct wl_display* displayWrapper =
-+ static_cast<wl_display*>(wl_proxy_create_wrapper((void*)mDisplay));
-+ if (!displayWrapper) {
-+ NS_WARNING("Failed to create wl_proxy wrapper!");
-+ return;
-+ }
-+
-+ wl_proxy_set_queue((struct wl_proxy*)displayWrapper, mEventQueue);
-+ mSyncCallback = wl_display_sync(displayWrapper);
-+ wl_proxy_wrapper_destroy((void*)displayWrapper);
-+
-+ if (!mSyncCallback) {
-+ NS_WARNING("Failed to create wl_display_sync callback!");
-+ return;
-+ }
-+
-+ wl_callback_add_listener(mSyncCallback, &sync_callback_listener, this);
-+ wl_display_flush(mDisplay);
-+}
-+
-+void nsWaylandDisplay::WaitForSyncEnd() {
-+ // We're done here
-+ if (!mSyncCallback) {
-+ return;
-+ }
-+
-+ while (mSyncCallback != NULL) {
-+ if (wl_display_dispatch_queue(mDisplay, mEventQueue) == -1) {
-+ NS_WARNING("wl_display_dispatch_queue failed!");
-+ SyncEnd();
-+ return;
-+ }
-+ }
-+}
-+
- bool nsWaylandDisplay::Matches(wl_display* aDisplay) {
- return mThreadId == PR_GetCurrentThread() && aDisplay == mDisplay;
- }
-@@ -305,6 +360,7 @@ nsWaylandDisplay::nsWaylandDisplay(wl_di
- mSubcompositor(nullptr),
- mSeat(nullptr),
- mShm(nullptr),
-+ mSyncCallback(nullptr),
- mPrimarySelectionDeviceManager(nullptr),
- mRegistry(nullptr),
- mGbmDevice(nullptr),
-diff -up firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1580152 firefox-69.0/widget/gtk/nsWaylandDisplay.h
---- firefox-69.0/widget/gtk/nsWaylandDisplay.h.mozilla-1580152 2019-09-16 11:11:30.081299217 +0200
-+++ firefox-69.0/widget/gtk/nsWaylandDisplay.h 2019-09-16 11:11:30.089299191 +0200
-@@ -41,6 +41,11 @@ class nsWaylandDisplay {
- virtual ~nsWaylandDisplay();
-
- bool DispatchEventQueue();
-+
-+ void SyncBegin();
-+ void SyncEnd();
-+ void WaitForSyncEnd();
-+
- bool Matches(wl_display* aDisplay);
-
- MessageLoop* GetDispatcherThreadLoop() { return mDispatcherThreadLoop; }
-@@ -90,6 +95,7 @@ class nsWaylandDisplay {
- wl_subcompositor* mSubcompositor;
- wl_seat* mSeat;
- wl_shm* mShm;
-+ wl_callback* mSyncCallback;
- gtk_primary_selection_device_manager* mPrimarySelectionDeviceManager;
- wl_registry* mRegistry;
- zwp_linux_dmabuf_v1* mDmabuf;
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1580152 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1580152 2019-09-16 11:11:30.086299200 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-16 11:57:35.462193492 +0200
-@@ -32,6 +32,9 @@ extern mozilla::LazyLogModule gWidgetWay
- # define LOGWAYLAND(args)
- #endif /* MOZ_LOGGING */
-
-+// Maximal compositin timeout it miliseconds
-+#define COMPOSITING_TIMEOUT 200
-+
- namespace mozilla {
- namespace widget {
-
-@@ -198,6 +201,10 @@ available and gfx.wayland_dmabuf_backend
- #define BUFFER_BPP 4
- gfx::SurfaceFormat WindowBackBuffer::mFormat = gfx::SurfaceFormat::B8G8R8A8;
-
-+nsWaylandDisplay* WindowBackBuffer::GetWaylandDisplay() {
-+ return mWindowSurfaceWayland->GetWaylandDisplay();
-+}
-+
- int WaylandShmPool::CreateTemporaryFile(int aSize) {
- const char* tmppath = getenv("XDG_RUNTIME_DIR");
- MOZ_RELEASE_ASSERT(tmppath, "Missing XDG_RUNTIME_DIR env variable.");
-@@ -342,10 +349,11 @@ void WindowBackBufferShm::Clear() {
- memset(mShmPool.GetImageData(), 0, mHeight * mWidth * BUFFER_BPP);
- }
-
--WindowBackBufferShm::WindowBackBufferShm(nsWaylandDisplay* aWaylandDisplay,
-- int aWidth, int aHeight)
-- : WindowBackBuffer(aWaylandDisplay),
-- mShmPool(aWaylandDisplay, aWidth * aHeight * BUFFER_BPP),
-+WindowBackBufferShm::WindowBackBufferShm(
-+ WindowSurfaceWayland* aWindowSurfaceWayland, int aWidth, int aHeight)
-+ : WindowBackBuffer(aWindowSurfaceWayland),
-+ mShmPool(aWindowSurfaceWayland->GetWaylandDisplay(),
-+ aWidth * aHeight * BUFFER_BPP),
- mWaylandBuffer(nullptr),
- mWidth(aWidth),
- mHeight(aHeight),
-@@ -387,6 +395,9 @@ void WindowBackBufferShm::Detach(wl_buff
- aBuffer ? wl_proxy_get_id((struct wl_proxy*)aBuffer) : -1));
-
- mAttached = false;
-+
-+ // Commit any potential cached drawings from latest Lock()/Commit() cycle.
-+ mWindowSurfaceWayland->CommitWaylandBuffer();
- }
-
- bool WindowBackBufferShm::SetImageDataFromBuffer(
-@@ -416,8 +427,8 @@ already_AddRefed<gfx::DrawTarget> Window
- }
-
- WindowBackBufferDMABuf::WindowBackBufferDMABuf(
-- nsWaylandDisplay* aWaylandDisplay, int aWidth, int aHeight)
-- : WindowBackBuffer(aWaylandDisplay) {
-+ WindowSurfaceWayland* aWindowSurfaceWayland, int aWidth, int aHeight)
-+ : WindowBackBuffer(aWindowSurfaceWayland) {
- mDMAbufSurface.Create(aWidth, aHeight);
- LOGWAYLAND(
- ("WindowBackBufferDMABuf::WindowBackBufferDMABuf [%p] Created DMABuf "
-@@ -475,6 +486,9 @@ bool WindowBackBufferDMABuf::SetImageDat
-
- void WindowBackBufferDMABuf::Detach(wl_buffer* aBuffer) {
- mDMAbufSurface.WLBufferDetach();
-+
-+ // Commit any potential cached drawings from latest Lock()/Commit() cycle.
-+ mWindowSurfaceWayland->CommitWaylandBuffer();
- }
-
- void WindowBackBufferDMABuf::Clear() { mDMAbufSurface.Clear(); }
-@@ -496,10 +510,11 @@ WindowSurfaceWayland::WindowSurfaceWayla
- mWaylandBuffer(nullptr),
- mFrameCallback(nullptr),
- mLastCommittedSurface(nullptr),
-- mDisplayThreadMessageLoop(MessageLoop::current()),
- mDelayedCommitHandle(nullptr),
-+ mLastCommitTime(0),
- mDrawToWaylandBufferDirectly(true),
-- mPendingCommit(false),
-+ mBufferPendingCommit(false),
-+ mBufferCommitAllowed(false),
- mWholeWindowBufferDamage(false),
- mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
-@@ -508,7 +523,7 @@ WindowSurfaceWayland::WindowSurfaceWayla
- }
-
- WindowSurfaceWayland::~WindowSurfaceWayland() {
-- if (mPendingCommit) {
-+ if (mBufferPendingCommit) {
- NS_WARNING("Deleted WindowSurfaceWayland with a pending commit!");
- }
-
-@@ -547,7 +562,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- if (UseDMABufBackend()) {
- static bool sDMABufBufferCreated = false;
- WindowBackBuffer* buffer =
-- new WindowBackBufferDMABuf(mWaylandDisplay, aWidth, aHeight);
-+ new WindowBackBufferDMABuf(this, aWidth, aHeight);
- if (buffer) {
- sDMABufBufferCreated = true;
- return buffer;
-@@ -564,7 +579,7 @@ WindowBackBuffer* WindowSurfaceWayland::
- }
- }
-
-- return new WindowBackBufferShm(mWaylandDisplay, aWidth, aHeight);
-+ return new WindowBackBufferShm(this, aWidth, aHeight);
- }
-
- WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(
-@@ -675,6 +690,11 @@ already_AddRefed<gfx::DrawTarget> Window
- (void*)this, (void*)buffer));
-
- if (!buffer) {
-+ if (mLastCommitTime && (g_get_monotonic_time() / 1000) - mLastCommitTime >
-+ COMPOSITING_TIMEOUT) {
-+ NS_WARNING(
-+ "Slow response from Wayland compositor, visual glitches ahead.");
-+ }
- return nullptr;
- }
-
-@@ -724,10 +744,9 @@ static bool IsPopupFullScreenUpdate(Layo
- // box is equal to window borders.
- if (aRegion.GetNumRects() > 2) return false;
-
-- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
--
-- return (screenRect.width == lockSize.width &&
-+ IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-+ return (lockSize.x == 0 && lockSize.y == 0 &&
-+ screenRect.width == lockSize.width &&
- screenRect.height == lockSize.height);
- }
-
-@@ -738,8 +757,7 @@ static bool IsPopupFullScreenUpdate(Layo
- to clip/buffer the drawing and we can return wl_buffer directly
- for drawing.
- - mWaylandBuffer is available - that's an ideal situation.
-- - mWaylandBuffer is locked by compositor - flip buffers and draw.
-- - if we can't flip buffers - go B)
-+ - mWaylandBuffer is locked by compositor - go B)
-
- B) Lock() is requested for part(s) of screen. We need to provide temporary
- surface to draw into and copy result (clipped) to target wl_surface.
-@@ -747,14 +765,17 @@ static bool IsPopupFullScreenUpdate(Layo
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::Lock(
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
--
-- // Disable all commits from frame callback handler and delayed comit handler
-- // as we're updated by gecko compositor.
-- mPendingCommit = false;
-+
-+ // Wait until all pending events are processed. There may be queued
-+ // wl_buffer release event which releases our wl_buffer for further rendering.
-+ mWaylandDisplay->WaitForSyncEnd();
-+
-+ // Disable all commits (from potential frame callback/delayed handlers)
-+ // until next WindowSurfaceWayland::Commit() call.
-+ mBufferCommitAllowed = false;
-
- LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
-- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-+ gfx::IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-
- // Are we asked for entire nsWindow to draw?
- bool isTransparentPopup =
-@@ -775,10 +796,10 @@ already_AddRefed<gfx::DrawTarget> Window
- }
-
- LOGWAYLAND(
-- ("WindowSurfaceWayland::Lock [%p] lockSize [%d x %d] windowSize [%d x "
-- "%d]\n",
-- (void*)this, lockSize.width, lockSize.height, lockedScreenRect.width,
-- lockedScreenRect.height));
-+ ("WindowSurfaceWayland::Lock [%p] [%d,%d] -> [%d x %d] rects %d "
-+ "windowSize [%d x %d]\n",
-+ (void*)this, lockSize.x, lockSize.y, lockSize.width, lockSize.height,
-+ aRegion.GetNumRects(), lockedScreenRect.width, lockedScreenRect.height));
- LOGWAYLAND((" nsWindow = %p\n", mWindow));
- LOGWAYLAND((" isPopup = %d\n", mWindow->IsWaylandPopup()));
- LOGWAYLAND((" isTransparentPopup = %d\n", isTransparentPopup));
-@@ -789,7 +810,7 @@ already_AddRefed<gfx::DrawTarget> Window
- LOGWAYLAND((" mBufferNeedsClear = %d\n", mBufferNeedsClear));
- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-
--#if DEBUG
-+#if MOZ_LOGGING
- if (!(mBufferScreenRect == lockedScreenRect)) {
- LOGWAYLAND((" screen size changed\n"));
- }
-@@ -836,7 +857,7 @@ already_AddRefed<gfx::DrawTarget> Window
- mDrawToWaylandBufferDirectly = false;
-
- LOGWAYLAND((" Indirect drawing.\n"));
-- return LockImageSurface(lockSize);
-+ return LockImageSurface(gfx::IntSize(lockSize.XMost(), lockSize.YMost()));
- }
-
- void WindowImageSurface::Draw(gfx::SourceSurface* aSurface,
-@@ -875,34 +896,42 @@ WindowImageSurface::WindowImageSurface(
- mImageSurface->Format());
- }
-
-+void WindowSurfaceWayland::CacheImageSurface(
-+ const LayoutDeviceIntRegion& aRegion) {
-+#ifdef MOZ_LOGGING
-+ gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-+ LOGWAYLAND(("WindowSurfaceWayland::CacheImageSurface [%p]\n", (void*)this));
-+ LOGWAYLAND((" rects num %d\n", aRegion.GetNumRects()));
-+ LOGWAYLAND((" bounds [ %d, %d] -> [%d x %d]\n", bounds.x, bounds.y,
-+ bounds.width, bounds.height));
-+#endif
-+
-+ mDelayedImageCommits.AppendElement(
-+ WindowImageSurface(mImageSurface, aRegion));
-+ // mImageSurface is owned by mDelayedImageCommits
-+ mImageSurface = nullptr;
-+
-+ LOGWAYLAND(
-+ (" There's %d cached images\n", int(mDelayedImageCommits.Length())));
-+}
-+
- void WindowSurfaceWayland::DrawDelayedImageCommits(
- gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::DrawDelayedImageCommits [%p]\n", (void*)this));
-+
- for (unsigned int i = 0; i < mDelayedImageCommits.Length(); i++) {
- mDelayedImageCommits[i].Draw(aDrawTarget, aWaylandBufferDamage);
- }
- mDelayedImageCommits.Clear();
- }
-
--bool WindowSurfaceWayland::CommitImageSurfaceToWaylandBuffer(
-- const LayoutDeviceIntRegion& aRegion,
-- LayoutDeviceIntRegion& aWaylandBufferDamage) {
-- MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
--
--#ifdef DEBUG
-- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::Rect rect(bounds);
-- MOZ_ASSERT(!rect.IsEmpty(), "Empty drawing?");
--#endif
--
-- LOGWAYLAND(
-- ("WindowSurfaceWayland::CommitImageSurfaceToWaylandBuffer [%p] "
-- "screenSize [%d x %d]\n",
-- (void*)this, mBufferScreenRect.width, mBufferScreenRect.height));
-+bool WindowSurfaceWayland::CommitImageCacheToWaylandBuffer() {
-+ if (!mDelayedImageCommits.Length()) {
-+ return false;
-+ }
-
-- mDelayedImageCommits.AppendElement(
-- WindowImageSurface(mImageSurface, aRegion));
-- // mImageSurface is owned by mDelayedImageCommits
-- mImageSurface = nullptr;
-+ MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
-
- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-@@ -911,10 +940,10 @@ bool WindowSurfaceWayland::CommitImageSu
- }
-
- LOGWAYLAND((" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
-- long(mDelayedImageCommits.Length() + 1)));
-+ long(mDelayedImageCommits.Length())));
-
- // Draw any delayed image commits first
-- DrawDelayedImageCommits(dt, aWaylandBufferDamage);
-+ DrawDelayedImageCommits(dt, mWaylandBufferDamage);
- UnlockWaylandBuffer();
-
- return true;
-@@ -932,7 +961,8 @@ static void WaylandBufferDelayCommitHand
- }
-
- void WindowSurfaceWayland::CommitWaylandBuffer() {
-- MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
-+ MOZ_ASSERT(!mWaylandBuffer->IsAttached(),
-+ "We can't draw to attached wayland buffer!");
-
- LOGWAYLAND(("WindowSurfaceWayland::CommitWaylandBuffer [%p]\n", (void*)this));
- LOGWAYLAND(
-@@ -941,6 +971,21 @@ void WindowSurfaceWayland::CommitWayland
- LOGWAYLAND((" mDelayedCommitHandle = %p\n", mDelayedCommitHandle));
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-+ LOGWAYLAND((" mBufferPendingCommit = %d\n", mBufferPendingCommit));
-+ LOGWAYLAND((" mBufferCommitAllowed = %d\n", mBufferCommitAllowed));
-+
-+ if (!mBufferCommitAllowed) {
-+ return;
-+ }
-+
-+ if (CommitImageCacheToWaylandBuffer()) {
-+ mBufferPendingCommit = true;
-+ }
-+
-+ // There's nothing to do here
-+ if (!mBufferPendingCommit) {
-+ return;
-+ }
-
- wl_surface* waylandSurface = mWindow->GetWaylandSurface();
- if (!waylandSurface) {
-@@ -986,6 +1031,7 @@ void WindowSurfaceWayland::CommitWayland
- }
-
- if (mWholeWindowBufferDamage) {
-+ LOGWAYLAND((" send whole screen damage\n"));
- wl_surface_damage(waylandSurface, 0, 0, mBufferScreenRect.width,
- mBufferScreenRect.height);
- mWholeWindowBufferDamage = false;
-@@ -994,6 +1040,8 @@ void WindowSurfaceWayland::CommitWayland
- for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
- iter.Next()) {
- mozilla::LayoutDeviceIntRect r = iter.Get();
-+ LOGWAYLAND((" wl_surface_damage_buffer [%d, %d] -> [%d, %d]\n", r.x,
-+ r.y, r.width, r.height));
- wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
- }
- }
-@@ -1012,24 +1060,31 @@ void WindowSurfaceWayland::CommitWayland
-
- mWaylandBuffer->Attach(waylandSurface);
- mLastCommittedSurface = waylandSurface;
-+ mLastCommitTime = g_get_monotonic_time() / 1000;
-+
-+ // Ask wl_display to start events synchronization. We're going wait
-+ // until all events are processed before next WindowSurfaceWayland::Lock()
-+ // as we need freed wl_buffer there.
-+ mWaylandDisplay->SyncBegin();
-
- // There's no pending commit, all changes are sent to compositor.
-- mPendingCommit = false;
-+ mBufferPendingCommit = false;
- }
-
- void WindowSurfaceWayland::Commit(const LayoutDeviceIntRegion& aInvalidRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-
--#ifdef DEBUG
-- {
-- gfx::IntRect bounds = aInvalidRegion.GetBounds().ToUnknownRect();
-- gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
-+ // Flush all waiting events explicitly as we need
-+ // mWaylandDisplay->FlushEventQueue();
-
-+#ifdef MOZ_LOGGING
-+ {
-+ gfx::IntRect lockSize = aInvalidRegion.GetBounds().ToUnknownRect();
- LOGWAYLAND(
-- ("WindowSurfaceWayland::Commit [%p] lockSize [%d x %d] screenSize [%d "
-- "x %d]\n",
-- (void*)this, lockSize.width, lockSize.height, mBufferScreenRect.width,
-- mBufferScreenRect.height));
-+ ("WindowSurfaceWayland::Commit [%p] damage size [%d, %d] -> [%d x %d]"
-+ "screenSize [%d x %d]\n",
-+ (void*)this, lockSize.x, lockSize.y, lockSize.width, lockSize.height,
-+ mBufferScreenRect.width, mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
- LOGWAYLAND(
-@@ -1044,21 +1099,15 @@ void WindowSurfaceWayland::Commit(const
- mWaylandBufferDamage.OrWith(aInvalidRegion);
- }
- UnlockWaylandBuffer();
-- mPendingCommit = true;
-+ mBufferPendingCommit = true;
- } else {
- MOZ_ASSERT(!mWaylandBuffer->IsLocked(),
- "Drawing to already locked buffer?");
-- if (CommitImageSurfaceToWaylandBuffer(aInvalidRegion,
-- mWaylandBufferDamage)) {
-- // Our cached drawing is flushed, we can draw fullscreen again.
-- mDrawToWaylandBufferDirectly = true;
-- mPendingCommit = true;
-- }
-+ CacheImageSurface(aInvalidRegion);
- }
-
-- if (mPendingCommit) {
-- CommitWaylandBuffer();
-- }
-+ mBufferCommitAllowed = true;
-+ CommitWaylandBuffer();
- }
-
- void WindowSurfaceWayland::FrameCallbackHandler() {
-@@ -1074,9 +1123,7 @@ void WindowSurfaceWayland::FrameCallback
- wl_callback_destroy(mFrameCallback);
- mFrameCallback = nullptr;
-
-- if (mPendingCommit) {
-- CommitWaylandBuffer();
-- }
-+ CommitWaylandBuffer();
- }
-
- void WindowSurfaceWayland::DelayedCommitHandler() {
-@@ -1089,9 +1136,7 @@ void WindowSurfaceWayland::DelayedCommit
- free(mDelayedCommitHandle);
- mDelayedCommitHandle = nullptr;
-
-- if (mPendingCommit) {
-- CommitWaylandBuffer();
-- }
-+ CommitWaylandBuffer();
- }
-
- } // namespace widget
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1580152 firefox-69.0/widget/gtk/WindowSurfaceWayland.h
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1580152 2019-09-16 11:11:30.080299221 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.h 2019-09-16 11:11:30.090299187 +0200
-@@ -17,6 +17,8 @@
- namespace mozilla {
- namespace widget {
-
-+class WindowSurfaceWayland;
-+
- // Allocates and owns shared memory for Wayland drawing surface
- class WaylandShmPool {
- public:
-@@ -69,20 +71,22 @@ class WindowBackBuffer {
-
- static gfx::SurfaceFormat GetSurfaceFormat() { return mFormat; }
-
-- nsWaylandDisplay* GetWaylandDisplay() { return mWaylandDisplay; };
-+ nsWaylandDisplay* GetWaylandDisplay();
-
-- WindowBackBuffer(nsWaylandDisplay* aWaylandDisplay)
-- : mWaylandDisplay(aWaylandDisplay){};
-+ WindowBackBuffer(WindowSurfaceWayland* aWindowSurfaceWayland)
-+ : mWindowSurfaceWayland(aWindowSurfaceWayland){};
- virtual ~WindowBackBuffer(){};
-
-+ protected:
-+ WindowSurfaceWayland* mWindowSurfaceWayland;
-+
- private:
- static gfx::SurfaceFormat mFormat;
-- nsWaylandDisplay* mWaylandDisplay;
- };
-
- class WindowBackBufferShm : public WindowBackBuffer {
- public:
-- WindowBackBufferShm(nsWaylandDisplay* aWaylandDisplay, int aWidth,
-+ WindowBackBufferShm(WindowSurfaceWayland* aWindowSurfaceWayland, int aWidth,
- int aHeight);
- ~WindowBackBufferShm();
-
-@@ -121,8 +125,8 @@ class WindowBackBufferShm : public Windo
-
- class WindowBackBufferDMABuf : public WindowBackBuffer {
- public:
-- WindowBackBufferDMABuf(nsWaylandDisplay* aWaylandDisplay, int aWidth,
-- int aHeight);
-+ WindowBackBufferDMABuf(WindowSurfaceWayland* aWindowSurfaceWayland,
-+ int aWidth, int aHeight);
- ~WindowBackBufferDMABuf();
-
- bool IsAttached();
-@@ -175,6 +179,9 @@ class WindowSurfaceWayland : public Wind
- void Commit(const LayoutDeviceIntRegion& aInvalidRegion) final;
- void FrameCallbackHandler();
- void DelayedCommitHandler();
-+ void CommitWaylandBuffer();
-+
-+ nsWaylandDisplay* GetWaylandDisplay() { return mWaylandDisplay; };
-
- private:
- WindowBackBuffer* CreateWaylandBuffer(int aWidth, int aHeight);
-@@ -185,10 +192,9 @@ class WindowSurfaceWayland : public Wind
-
- already_AddRefed<gfx::DrawTarget> LockImageSurface(
- const gfx::IntSize& aLockSize);
-- bool CommitImageSurfaceToWaylandBuffer(
-- const LayoutDeviceIntRegion& aRegion,
-- LayoutDeviceIntRegion& aWaylandBufferDamage);
-- void CommitWaylandBuffer();
-+
-+ void CacheImageSurface(const LayoutDeviceIntRegion& aRegion);
-+ bool CommitImageCacheToWaylandBuffer();
-
- void DrawDelayedImageCommits(gfx::DrawTarget* aDrawTarget,
- LayoutDeviceIntRegion& aWaylandBufferDamage);
-@@ -205,12 +211,13 @@ class WindowSurfaceWayland : public Wind
- WindowBackBuffer* mBackupBuffer[BACK_BUFFER_NUM];
- wl_callback* mFrameCallback;
- wl_surface* mLastCommittedSurface;
-- MessageLoop* mDisplayThreadMessageLoop;
- WindowSurfaceWayland** mDelayedCommitHandle;
- RefPtr<gfxImageSurface> mImageSurface;
- AutoTArray<WindowImageSurface, 30> mDelayedImageCommits;
-+ int64_t mLastCommitTime;
- bool mDrawToWaylandBufferDirectly;
-- bool mPendingCommit;
-+ bool mBufferPendingCommit;
-+ bool mBufferCommitAllowed;
- bool mWholeWindowBufferDamage;
- bool mBufferNeedsClear;
- bool mIsMainThread;
diff --git a/mozilla-1581748.patch b/mozilla-1581748.patch
deleted file mode 100644
index 9177f5b..0000000
--- a/mozilla-1581748.patch
+++ /dev/null
@@ -1,574 +0,0 @@
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1581748 firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1581748 2019-09-17 13:19:47.190908284 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.cpp 2019-09-17 13:19:47.196908262 +0200
-@@ -32,7 +32,7 @@ extern mozilla::LazyLogModule gWidgetWay
- # define LOGWAYLAND(args)
- #endif /* MOZ_LOGGING */
-
--// Maximal compositin timeout it miliseconds
-+// Maximal compositing timeout it miliseconds
- #define COMPOSITING_TIMEOUT 200
-
- namespace mozilla {
-@@ -513,13 +513,15 @@ WindowSurfaceWayland::WindowSurfaceWayla
- mDelayedCommitHandle(nullptr),
- mLastCommitTime(0),
- mDrawToWaylandBufferDirectly(true),
-+ mCanSwitchWaylandBuffer(true),
- mBufferPendingCommit(false),
- mBufferCommitAllowed(false),
-- mWholeWindowBufferDamage(false),
- mBufferNeedsClear(false),
- mIsMainThread(NS_IsMainThread()),
- mNeedScaleFactorUpdate(true) {
- for (int i = 0; i < BACK_BUFFER_NUM; i++) mBackupBuffer[i] = nullptr;
-+ mRenderingCacheMode = CACHE_ALL;
-+
- }
-
- WindowSurfaceWayland::~WindowSurfaceWayland() {
-@@ -591,8 +593,6 @@ WindowBackBuffer* WindowSurfaceWayland::
-
- // There's no buffer created yet, create a new one.
- if (!mWaylandBuffer) {
-- MOZ_ASSERT(aCanSwitchBuffer && mWholeWindowBufferDamage,
-- "Created new buffer for partial drawing!");
- LOGWAYLAND((" Created new buffer [%d x %d]\n", mBufferScreenRect.width,
- mBufferScreenRect.height));
-
-@@ -682,9 +682,8 @@ WindowBackBuffer* WindowSurfaceWayland::
- return mWaylandBuffer;
- }
-
--already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::LockWaylandBuffer(
-- bool aCanSwitchBuffer) {
-- WindowBackBuffer* buffer = GetWaylandBufferToDraw(aCanSwitchBuffer);
-+already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::LockWaylandBuffer() {
-+ WindowBackBuffer* buffer = GetWaylandBufferToDraw(mCanSwitchWaylandBuffer);
-
- LOGWAYLAND(("WindowSurfaceWayland::LockWaylandBuffer [%p] Got buffer %p\n",
- (void*)this, (void*)buffer));
-@@ -698,7 +697,9 @@ already_AddRefed<gfx::DrawTarget> Window
- return nullptr;
- }
-
-- if (mBufferNeedsClear && mWholeWindowBufferDamage) {
-+ mCanSwitchWaylandBuffer = false;
-+
-+ if (mBufferNeedsClear) {
- buffer->Clear();
- mBufferNeedsClear = false;
- }
-@@ -728,40 +729,30 @@ already_AddRefed<gfx::DrawTarget> Window
- WindowBackBuffer::GetSurfaceFormat());
- }
-
--static bool IsWindowFullScreenUpdate(LayoutDeviceIntRect& screenRect,
-- const LayoutDeviceIntRegion& aRegion) {
-- if (aRegion.GetNumRects() > 1) return false;
--
-- IntRect rect = aRegion.RectIter().Get().ToUnknownRect();
-- return (rect.x == 0 && rect.y == 0 && screenRect.width == rect.width &&
-- screenRect.height == rect.height);
-+static bool IsWindowFullScreenUpdate(
-+ LayoutDeviceIntRect& aScreenRect,
-+ const LayoutDeviceIntRegion& aUpdatedRegion) {
-+ if (aUpdatedRegion.GetNumRects() > 1) return false;
-+
-+ IntRect rect = aUpdatedRegion.RectIter().Get().ToUnknownRect();
-+ return (rect.x == 0 && rect.y == 0 && aScreenRect.width == rect.width &&
-+ aScreenRect.height == rect.height);
- }
-
--static bool IsPopupFullScreenUpdate(LayoutDeviceIntRect& screenRect,
-- const LayoutDeviceIntRegion& aRegion) {
-+static bool IsPopupFullScreenUpdate(
-+ LayoutDeviceIntRect& aScreenRect,
-+ const LayoutDeviceIntRegion& aUpdatedRegion) {
- // We know that popups can be drawn from two parts; a panel and an arrow.
- // Assume we redraw whole popups when we have two rects and bounding
- // box is equal to window borders.
-- if (aRegion.GetNumRects() > 2) return false;
-+ if (aUpdatedRegion.GetNumRects() > 2) return false;
-
-- IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-+ gfx::IntRect lockSize = aUpdatedRegion.GetBounds().ToUnknownRect();
- return (lockSize.x == 0 && lockSize.y == 0 &&
-- screenRect.width == lockSize.width &&
-- screenRect.height == lockSize.height);
-+ aScreenRect.width == lockSize.width &&
-+ aScreenRect.height == lockSize.height);
- }
-
--/*
-- There are some situations which can happen here:
--
-- A) Lock() is called to whole surface. In that case we don't need
-- to clip/buffer the drawing and we can return wl_buffer directly
-- for drawing.
-- - mWaylandBuffer is available - that's an ideal situation.
-- - mWaylandBuffer is locked by compositor - go B)
--
-- B) Lock() is requested for part(s) of screen. We need to provide temporary
-- surface to draw into and copy result (clipped) to target wl_surface.
-- */
- already_AddRefed<gfx::DrawTarget> WindowSurfaceWayland::Lock(
- const LayoutDeviceIntRegion& aRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-@@ -777,22 +768,31 @@ already_AddRefed<gfx::DrawTarget> Window
- LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds();
- gfx::IntRect lockSize = aRegion.GetBounds().ToUnknownRect();
-
-- // Are we asked for entire nsWindow to draw?
- bool isTransparentPopup =
- mWindow->IsWaylandPopup() &&
- (eTransparencyTransparent == mWindow->GetTransparencyMode());
-
-- // We have request to lock whole buffer/window.
-- mWholeWindowBufferDamage =
-- isTransparentPopup ? IsPopupFullScreenUpdate(lockedScreenRect, aRegion)
-- : IsWindowFullScreenUpdate(lockedScreenRect, aRegion);
--
-- // Clear buffer when we (re)draw new transparent popup window,
-- // otherwise leave it as-is, mBufferNeedsClear can be set from previous
-- // (already pending) commits which are cached now.
-- if (mWholeWindowBufferDamage) {
-+ bool windowRedraw = isTransparentPopup
-+ ? IsPopupFullScreenUpdate(lockedScreenRect, aRegion)
-+ : IsWindowFullScreenUpdate(lockedScreenRect, aRegion);
-+ if (windowRedraw) {
-+ // Clear buffer when we (re)draw new transparent popup window,
-+ // otherwise leave it as-is, mBufferNeedsClear can be set from previous
-+ // (already pending) commits which are cached now.
- mBufferNeedsClear =
- mWindow->WaylandSurfaceNeedsClear() || isTransparentPopup;
-+
-+ // Store info that we can switch WaylandBuffer when we flush
-+ // mImageSurface / mDelayedImageCommits. Don't clear it - it's cleared
-+ // at LockWaylandBuffer() when we actualy switch the buffer.
-+ mCanSwitchWaylandBuffer = windowRedraw;
-+
-+ // We do full buffer repaint so clear our cached drawings.
-+ mDelayedImageCommits.Clear();
-+ mWaylandBufferDamage.SetEmpty();
-+
-+ // Also do scale factor update for whole window updates just to be sure.
-+ mNeedScaleFactorUpdate = true;
- }
-
- LOGWAYLAND(
-@@ -808,7 +808,7 @@ already_AddRefed<gfx::DrawTarget> Window
- LOGWAYLAND((" IsWindowFullScreenUpdate = %d\n",
- IsWindowFullScreenUpdate(lockedScreenRect, aRegion)));
- LOGWAYLAND((" mBufferNeedsClear = %d\n", mBufferNeedsClear));
-- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-+ LOGWAYLAND((" windowRedraw = %d\n", windowRedraw));
-
- #if MOZ_LOGGING
- if (!(mBufferScreenRect == lockedScreenRect)) {
-@@ -822,8 +822,9 @@ already_AddRefed<gfx::DrawTarget> Window
- // We can't commit them any more as they're for former window size, so
- // scratch them.
- mDelayedImageCommits.Clear();
-+ mWaylandBufferDamage.SetEmpty();
-
-- if (!mWholeWindowBufferDamage) {
-+ if (!windowRedraw) {
- NS_WARNING("Partial screen update when window is resized!");
- // This should not happen. Screen size changed but we got only
- // partal screen update instead of whole screen. Discard this painting
-@@ -833,52 +834,56 @@ already_AddRefed<gfx::DrawTarget> Window
- mBufferScreenRect = lockedScreenRect;
- }
-
-- if (mWholeWindowBufferDamage) {
-- // We can lock/commit entire buffer direcly.
-- mDrawToWaylandBufferDirectly = true;
--
-- // If there's any pending image commit scratch them as we're going
-- // to redraw the whole sceen anyway.
-- mDelayedImageCommits.Clear();
-+ mDrawToWaylandBufferDirectly =
-+ (windowRedraw || mRenderingCacheMode != CACHE_ALL);
-
-- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-+ if (mDrawToWaylandBufferDirectly) {
-+ LOGWAYLAND((" Direct drawing\n"));
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer();
- if (dt) {
-+ if (!windowRedraw) {
-+ DrawDelayedImageCommits(dt, mWaylandBufferDamage);
-+ }
- return dt.forget();
- }
- }
-
-- // We do indirect drawing due to:
-- //
-- // 1) We don't have any front buffer available. Try indirect drawing
-- // to mImageSurface which is mirrored to front buffer at commit.
-- // 2) Only part of the screen is locked. We can't lock entire screen for
-- // such drawing as it produces visible artifacts.
-+ // Any caching is disabled and we don't have any back buffer available.
-+ if (mRenderingCacheMode == CACHE_NONE) {
-+ return nullptr;
-+ }
-+
-+ // We do indirect drawing because there isn't any front buffer available.
-+ // Do indirect drawing to mImageSurface which is commited to wayland
-+ // wl_buffer by DrawDelayedImageCommits() later.
- mDrawToWaylandBufferDirectly = false;
-
- LOGWAYLAND((" Indirect drawing.\n"));
- return LockImageSurface(gfx::IntSize(lockSize.XMost(), lockSize.YMost()));
- }
-
-+bool WindowImageSurface::OverlapsSurface(
-+ class WindowImageSurface& aBottomSurface) {
-+ return mUpdateRegion.Contains(aBottomSurface.mUpdateRegion);
-+}
-+
- void WindowImageSurface::Draw(gfx::SourceSurface* aSurface,
- gfx::DrawTarget* aDest,
- const LayoutDeviceIntRegion& aRegion) {
-- uint32_t numRects = aRegion.GetNumRects();
-- if (numRects != 1) {
-- AutoTArray<IntRect, 32> rects;
-- rects.SetCapacity(numRects);
-- for (auto iter = aRegion.RectIter(); !iter.Done(); iter.Next()) {
-- rects.AppendElement(iter.Get().ToUnknownRect());
-- }
-- aDest->PushDeviceSpaceClipRects(rects.Elements(), rects.Length());
-- }
--
-+#ifdef MOZ_LOGGING
- gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
-- gfx::Rect rect(bounds);
-- aDest->DrawSurface(aSurface, rect, rect);
-+ LOGWAYLAND(("WindowImageSurface::Draw\n"));
-+ LOGWAYLAND((" rects num %d\n", aRegion.GetNumRects()));
-+ LOGWAYLAND((" bounds [ %d, %d] -> [%d x %d]\n", bounds.x, bounds.y,
-+ bounds.width, bounds.height));
-+#endif
-
-- if (numRects != 1) {
-- aDest->PopClip();
-+ for (auto iter = aRegion.RectIter(); !iter.Done(); iter.Next()) {
-+ mozilla::LayoutDeviceIntRect r = iter.Get();
-+ gfx::Rect rect(r.ToUnknownRect());
-+ LOGWAYLAND((" draw rect [%f,%f] -> [%f x %f]\n", rect.x, rect.y,
-+ rect.width, rect.height));
-+ aDest->DrawSurface(aSurface, rect, rect);
- }
- }
-
-@@ -896,6 +901,18 @@ WindowImageSurface::WindowImageSurface(
- mImageSurface->Format());
- }
-
-+void WindowSurfaceWayland::DrawDelayedImageCommits(
-+ gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-+ LOGWAYLAND(
-+ ("WindowSurfaceWayland::DrawDelayedImageCommits [%p]\n", (void*)this));
-+ MOZ_ASSERT(mDelayedImageCommits.Length() > 0, "Nothing to draw?");
-+
-+ for (unsigned int i = 0; i < mDelayedImageCommits.Length(); i++) {
-+ mDelayedImageCommits[i].Draw(aDrawTarget, aWaylandBufferDamage);
-+ }
-+ mDelayedImageCommits.Clear();
-+}
-+
- void WindowSurfaceWayland::CacheImageSurface(
- const LayoutDeviceIntRegion& aRegion) {
- #ifdef MOZ_LOGGING
-@@ -906,8 +923,26 @@ void WindowSurfaceWayland::CacheImageSur
- bounds.width, bounds.height));
- #endif
-
-- mDelayedImageCommits.AppendElement(
-- WindowImageSurface(mImageSurface, aRegion));
-+ WindowImageSurface surf = WindowImageSurface(mImageSurface, aRegion);
-+
-+ if (mDelayedImageCommits.Length()) {
-+ int lastSurf = mDelayedImageCommits.Length() - 1;
-+ if (surf.OverlapsSurface(mDelayedImageCommits[lastSurf])) {
-+#ifdef MOZ_LOGGING
-+ {
-+ gfx::IntRect size = mDelayedImageCommits[lastSurf]
-+ .GetUpdateRegion()
-+ ->GetBounds()
-+ .ToUnknownRect();
-+ LOGWAYLAND((" removing [ %d, %d] -> [%d x %d]\n", size.x, size.y,
-+ size.width, size.height));
-+ }
-+#endif
-+ mDelayedImageCommits.RemoveElementAt(lastSurf);
-+ }
-+ }
-+
-+ mDelayedImageCommits.AppendElement(surf);
- // mImageSurface is owned by mDelayedImageCommits
- mImageSurface = nullptr;
-
-@@ -915,17 +950,6 @@ void WindowSurfaceWayland::CacheImageSur
- (" There's %d cached images\n", int(mDelayedImageCommits.Length())));
- }
-
--void WindowSurfaceWayland::DrawDelayedImageCommits(
-- gfx::DrawTarget* aDrawTarget, LayoutDeviceIntRegion& aWaylandBufferDamage) {
-- LOGWAYLAND(
-- ("WindowSurfaceWayland::DrawDelayedImageCommits [%p]\n", (void*)this));
--
-- for (unsigned int i = 0; i < mDelayedImageCommits.Length(); i++) {
-- mDelayedImageCommits[i].Draw(aDrawTarget, aWaylandBufferDamage);
-- }
-- mDelayedImageCommits.Clear();
--}
--
- bool WindowSurfaceWayland::CommitImageCacheToWaylandBuffer() {
- if (!mDelayedImageCommits.Length()) {
- return false;
-@@ -933,8 +957,7 @@ bool WindowSurfaceWayland::CommitImageCa
-
- MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
-
-- RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(
-- /* aCanSwitchBuffer */ mWholeWindowBufferDamage);
-+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer();
- if (!dt) {
- return false;
- }
-@@ -942,7 +965,6 @@ bool WindowSurfaceWayland::CommitImageCa
- LOGWAYLAND((" Flushing %ld cached WindowImageSurfaces to Wayland buffer\n",
- long(mDelayedImageCommits.Length())));
-
-- // Draw any delayed image commits first
- DrawDelayedImageCommits(dt, mWaylandBufferDamage);
- UnlockWaylandBuffer();
-
-@@ -967,7 +989,7 @@ void WindowSurfaceWayland::CommitWayland
- LOGWAYLAND(("WindowSurfaceWayland::CommitWaylandBuffer [%p]\n", (void*)this));
- LOGWAYLAND(
- (" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
-- LOGWAYLAND((" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
-+ LOGWAYLAND((" mCanSwitchWaylandBuffer = %d\n", mCanSwitchWaylandBuffer));
- LOGWAYLAND((" mDelayedCommitHandle = %p\n", mDelayedCommitHandle));
- LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
- LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
-@@ -1030,20 +1052,11 @@ void WindowSurfaceWayland::CommitWayland
- mLastCommittedSurface = nullptr;
- }
-
-- if (mWholeWindowBufferDamage) {
-- LOGWAYLAND((" send whole screen damage\n"));
-- wl_surface_damage(waylandSurface, 0, 0, mBufferScreenRect.width,
-- mBufferScreenRect.height);
-- mWholeWindowBufferDamage = false;
-- mNeedScaleFactorUpdate = true;
-- } else {
-- for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
-- iter.Next()) {
-- mozilla::LayoutDeviceIntRect r = iter.Get();
-- LOGWAYLAND((" wl_surface_damage_buffer [%d, %d] -> [%d, %d]\n", r.x,
-- r.y, r.width, r.height));
-- wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
-- }
-+ for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done(); iter.Next()) {
-+ mozilla::LayoutDeviceIntRect r = iter.Get();
-+ LOGWAYLAND((" wl_surface_damage_buffer [%d, %d] -> [%d, %d]\n", r.x, r.y,
-+ r.width, r.height));
-+ wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
- }
-
- // Clear all back buffer damage as we're committing
-@@ -1062,9 +1075,9 @@ void WindowSurfaceWayland::CommitWayland
- mLastCommittedSurface = waylandSurface;
- mLastCommitTime = g_get_monotonic_time() / 1000;
-
-- // Ask wl_display to start events synchronization. We're going wait
-+ // Ask wl_display to start events synchronization. We're going to wait
- // until all events are processed before next WindowSurfaceWayland::Lock()
-- // as we need freed wl_buffer there.
-+ // as we hope for free wl_buffer there.
- mWaylandDisplay->SyncBegin();
-
- // There's no pending commit, all changes are sent to compositor.
-@@ -1074,9 +1087,6 @@ void WindowSurfaceWayland::CommitWayland
- void WindowSurfaceWayland::Commit(const LayoutDeviceIntRegion& aInvalidRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-
-- // Flush all waiting events explicitly as we need
-- // mWaylandDisplay->FlushEventQueue();
--
- #ifdef MOZ_LOGGING
- {
- gfx::IntRect lockSize = aInvalidRegion.GetBounds().ToUnknownRect();
-@@ -1087,17 +1097,12 @@ void WindowSurfaceWayland::Commit(const
- mBufferScreenRect.width, mBufferScreenRect.height));
- LOGWAYLAND((" mDrawToWaylandBufferDirectly = %d\n",
- mDrawToWaylandBufferDirectly));
-- LOGWAYLAND(
-- (" mWholeWindowBufferDamage = %d\n", mWholeWindowBufferDamage));
- }
- #endif
-
- if (mDrawToWaylandBufferDirectly) {
- MOZ_ASSERT(mWaylandBuffer->IsLocked());
-- // If we're not at fullscreen damage add drawing area from aInvalidRegion
-- if (!mWholeWindowBufferDamage) {
-- mWaylandBufferDamage.OrWith(aInvalidRegion);
-- }
-+ mWaylandBufferDamage.OrWith(aInvalidRegion);
- UnlockWaylandBuffer();
- mBufferPendingCommit = true;
- } else {
-diff -up firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1581748 firefox-69.0/widget/gtk/WindowSurfaceWayland.h
---- firefox-69.0/widget/gtk/WindowSurfaceWayland.h.mozilla-1581748 2019-09-17 13:19:47.191908280 +0200
-+++ firefox-69.0/widget/gtk/WindowSurfaceWayland.h 2019-09-17 13:19:47.197908258 +0200
-@@ -161,6 +161,10 @@ class WindowImageSurface {
- WindowImageSurface(gfxImageSurface* aImageSurface,
- const LayoutDeviceIntRegion& aUpdateRegion);
-
-+ bool OverlapsSurface(class WindowImageSurface& aBottomSurface);
-+
-+ const LayoutDeviceIntRegion* GetUpdateRegion() { return &mUpdateRegion; };
-+
- private:
- RefPtr<gfx::SourceSurface> mSurface;
- RefPtr<gfxImageSurface> mImageSurface;
-@@ -174,20 +178,59 @@ class WindowSurfaceWayland : public Wind
- explicit WindowSurfaceWayland(nsWindow* aWindow);
- ~WindowSurfaceWayland();
-
-+ // Lock() / Commit() are called by gecko when Firefox
-+ // wants to display something. Lock() returns a DrawTarget
-+ // where gecko paints. When gecko is done it calls Commit()
-+ // and we try to send the DrawTarget (backed by wl_buffer)
-+ // to wayland compositor.
-+ //
-+ // If we fail (wayland compositor is busy,
-+ // wl_surface is not created yet) we queue the painting
-+ // and we send it to wayland compositor in FrameCallbackHandler()/
-+ // DelayedCommitHandler/CommitWaylandBuffer().
- already_AddRefed<gfx::DrawTarget> Lock(
- const LayoutDeviceIntRegion& aRegion) override;
- void Commit(const LayoutDeviceIntRegion& aInvalidRegion) final;
-+
-+ // It's called from wayland compositor when there's the right
-+ // time to send wl_buffer to display. It's no-op if there's no
-+ // queued commits.
- void FrameCallbackHandler();
-+
-+ // When a new window is created we may not have a valid wl_surface
-+ // for drawing (Gtk haven't created it yet). All commits are queued
-+ // and DelayedCommitHandler() is called by timer when wl_surface is ready
-+ // for drawing.
- void DelayedCommitHandler();
-+
-+ // Try to commit all queued drawings to Wayland compositor. This is usually
-+ // called from other routines but can be used to explicitly flush
-+ // all drawings as we do when wl_buffer is released
-+ // (see WindowBackBufferShm::Detach() for instance).
- void CommitWaylandBuffer();
-
- 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.
-+ // Suitable for fullscreen content only like fullscreen video playback and
-+ // may work well with dmabuf backend.
-+ CACHE_NONE = 2
-+ } RenderingCacheMode;
-+
- private:
- WindowBackBuffer* CreateWaylandBuffer(int aWidth, int aHeight);
- WindowBackBuffer* GetWaylandBufferToDraw(bool aCanSwitchBuffer);
-
-- already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(bool aCanSwitchBuffer);
-+ already_AddRefed<gfx::DrawTarget> LockWaylandBuffer();
- void UnlockWaylandBuffer();
-
- already_AddRefed<gfx::DrawTarget> LockImageSurface(
-@@ -206,23 +249,71 @@ class WindowSurfaceWayland : public Wind
- // mBufferScreenRect is window size when our wayland buffer was allocated.
- LayoutDeviceIntRect mBufferScreenRect;
- nsWaylandDisplay* mWaylandDisplay;
-+
-+ // Actual buffer (backed by wl_buffer) where all drawings go into.
-+ // Drawn areas are stored at mWaylandBufferDamage and if there's
-+ // any uncommited drawings which needs to be send to wayland compositor
-+ // the mBufferPendingCommit is set.
- WindowBackBuffer* mWaylandBuffer;
-- LayoutDeviceIntRegion mWaylandBufferDamage;
- WindowBackBuffer* mBackupBuffer[BACK_BUFFER_NUM];
-+ LayoutDeviceIntRegion mWaylandBufferDamage;
-+
-+ // After every commit to wayland compositor a frame callback is requested.
-+ // Any next commit to wayland compositor will happen when frame callback
-+ // comes from wayland compositor back as it's the best time to do the commit.
- wl_callback* mFrameCallback;
- wl_surface* mLastCommittedSurface;
-+
-+ // Registered reference to pending DelayedCommitHandler() call.
- WindowSurfaceWayland** mDelayedCommitHandle;
-+
-+ // Cached drawings. If we can't get WaylandBuffer (wl_buffer) at
-+ // WindowSurfaceWayland::Lock() we direct gecko rendering to
-+ // mImageSurface.
-+ // If we can't get WaylandBuffer at WindowSurfaceWayland::Commit()
-+ // time, mImageSurface is moved to mDelayedImageCommits which
-+ // holds all cached drawings.
-+ // mDelayedImageCommits can be drawn by FrameCallbackHandler(),
-+ // DelayedCommitHandler() or when WaylandBuffer is detached.
- RefPtr<gfxImageSurface> mImageSurface;
- AutoTArray<WindowImageSurface, 30> mDelayedImageCommits;
-+
- int64_t mLastCommitTime;
-+
-+ // Indicates that we don't have any cached drawings at mDelayedImageCommits
-+ // and WindowSurfaceWayland::Lock() returned WaylandBuffer to gecko
-+ // to draw into.
- bool mDrawToWaylandBufferDirectly;
-+
-+ // Set when our cached drawings (mDelayedImageCommits) contains
-+ // full screen damage. That means we can safely switch WaylandBuffer
-+ // at LockWaylandBuffer().
-+ bool mCanSwitchWaylandBuffer;
-+
-+ // Set when actual WaylandBuffer contains drawings which are not send to
-+ // wayland compositor yet.
- bool mBufferPendingCommit;
-+
-+ // We can't send WaylandBuffer (wl_buffer) to compositor when gecko
-+ // is rendering into it (i.e. between WindowSurfaceWayland::Lock() /
-+ // WindowSurfaceWayland::Commit()).
-+ // Thus we use mBufferCommitAllowed to disable commit by callbacks
-+ // (FrameCallbackHandler(), DelayedCommitHandler())
- bool mBufferCommitAllowed;
-- bool mWholeWindowBufferDamage;
-+
-+ // We need to clear WaylandBuffer when entire transparent window is repainted.
-+ // This typically apply to popup windows.
- bool mBufferNeedsClear;
-+
- bool mIsMainThread;
-+
-+ // When new WaylandBuffer (wl_buffer) is send to wayland compositor
-+ // (buffer switch or resize) we also need to set its scale factor.
- bool mNeedScaleFactorUpdate;
-
-+ // Image caching strategy, see RenderingCacheMode for details.
-+ RenderingCacheMode mRenderingCacheMode;
-+
- static bool UseDMABufBackend();
- static bool mUseDMABufInitialized;
- static bool mUseDMABuf;
diff --git a/pgo.patch b/pgo.patch
index 20eb98d..1eef0d9 100644
--- a/pgo.patch
+++ b/pgo.patch
@@ -1,9 +1,10 @@
-diff -up firefox-64.0/build/unix/mozconfig.unix.pgo firefox-64.0/build/unix/mozconfig.unix
---- firefox-64.0/build/unix/mozconfig.unix.pgo 2019-01-03 15:23:16.792980384 +0100
-+++ firefox-64.0/build/unix/mozconfig.unix 2019-01-03 15:24:29.978693550 +0100
+diff -up firefox-70.0/build/mozconfig.pgo firefox-70.0/build/mozconfig
+diff -up firefox-70.0/build/unix/mozconfig.unix.pgo firefox-70.0/build/unix/mozconfig.unix
+--- firefox-70.0/build/unix/mozconfig.unix.pgo 2019-10-18 18:05:36.461701704 +0200
++++ firefox-70.0/build/unix/mozconfig.unix 2019-10-18 20:25:48.036037912 +0200
@@ -6,6 +6,15 @@ if [ -n "$FORCE_GCC" ]; then
- CC="$TOOLTOOL_DIR/gcc/bin/gcc"
- CXX="$TOOLTOOL_DIR/gcc/bin/g++"
+ CC="$MOZ_FETCHES_DIR/gcc/bin/gcc"
+ CXX="$MOZ_FETCHES_DIR/gcc/bin/g++"
+ if [ -n "$MOZ_PGO" ]; then
+ if [ -z "$USE_ARTIFACT" ]; then
@@ -16,11 +17,11 @@ diff -up firefox-64.0/build/unix/mozconfig.unix.pgo firefox-64.0/build/unix/mozc
+
# We want to make sure we use binutils and other binaries in the tooltool
# package.
- mk_add_options "export PATH=$TOOLTOOL_DIR/gcc/bin:$PATH"
-diff -up firefox-64.0/extensions/spellcheck/src/moz.build.pgo firefox-64.0/extensions/spellcheck/src/moz.build
---- firefox-64.0/extensions/spellcheck/src/moz.build.pgo 2018-12-07 03:56:27.000000000 +0100
-+++ firefox-64.0/extensions/spellcheck/src/moz.build 2019-01-03 15:21:32.793385074 +0100
-@@ -28,3 +28,5 @@ EXPORTS.mozilla += [
+ mk_add_options "export PATH=$MOZ_FETCHES_DIR/gcc/bin:$PATH"
+diff -up firefox-70.0/extensions/spellcheck/src/moz.build.pgo firefox-70.0/extensions/spellcheck/src/moz.build
+--- firefox-70.0/extensions/spellcheck/src/moz.build.pgo 2019-10-16 23:20:18.000000000 +0200
++++ firefox-70.0/extensions/spellcheck/src/moz.build 2019-10-18 18:05:36.461701704 +0200
+@@ -31,3 +31,5 @@ EXPORTS.mozilla += [
if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
CXXFLAGS += ['-Wno-error=shadow']
diff --git a/sources b/sources
index ec7b042..23e2fcc 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
SHA512 (cbindgen-vendor.tar.xz) = 88afa0bc6af525cbb46bc75578b90419b28b95b396d5002fbf299a78a173681b840096ff83ef6e48553d1a5e0aa04e79383ab4d09bf431f3b864fcbacc7de46d
-SHA512 (firefox-69.0.3.source.tar.xz) = bc4020c5f1a1eac82944f6402aa374c830231a0f168c6cdab8924a1c7a1b296381b45bce0a0567811ad86c2688972a35fda3f6c15e562b03a47d48617fe7611a
-SHA512 (firefox-langpacks-69.0.3-20191010.tar.xz) = e293903557dffa0231345a2ae4085705ae3b5b9c1935c1fc2890d042e63862d45134a03403bbebec1fbe068b9d590797946feb8153e2d4129e5f4e309065381a
+SHA512 (firefox-70.0.source.tar.xz) = c2643d88d59012dfd762357d66005c8892dec066b0ae9d8d33a29ea4427d1e5ae4a0376725c7d960c0025d5c9567eca816eb612b4ea987069e455c06fc442973
+SHA512 (firefox-langpacks-70.0-20191018.tar.xz) = aa17651aa8d4bc82d014846db559df9e896c329d58acfc145433480ad60cebf5a0a3774958e452d76b3f78bb70545e27208dbe226cfa13fc0a42c65ddfd48d46
4 years, 6 months
Architecture specific change in rpms/suricata.git
by githook-noreply@fedoraproject.org
The package rpms/suricata.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/suricata.git/commit/?id=1f1dbb36f....
Change:
+%ifarch x86_64
Thanks.
Full change:
============
commit 1f1dbb36f9d217b3505a3ac3973b61286e791954
Author: Steve Grubb <sgrubb(a)redhat.com>
Date: Fri Oct 18 13:23:41 2019 -0400
New feature release (which also fixes a security issue)
Enable ebpf on x86_64 only
Disable building on ppc64le due to rust problems
diff --git a/suricata.spec b/suricata.spec
index d795b3a..66c97db 100644
--- a/suricata.spec
+++ b/suricata.spec
@@ -1,7 +1,7 @@
Summary: Intrusion Detection System
Name: suricata
Version: 5.0.0
-Release: 1%{?dist}
+Release: 2%{?dist}
License: GPLv2
URL: https://suricata-ids.org/
Source0: https://www.openinfosecfoundation.org/download/%{name}-%{version}.tar.gz
@@ -68,7 +68,9 @@ install -m 644 %{SOURCE2} doc/
%patch2 -p1
%patch3 -p1
sed -i 's/(datadir)/(sysconfdir)/' etc/Makefile.am
+%ifarch x86_64
sed -i 's/-D__KERNEL__/-D__KERNEL__ -D__x86_64__/' ebpf/Makefile.am
+%endif
autoreconf -fv --install
%build
@@ -165,9 +167,10 @@ getent passwd suricata >/dev/null || useradd -r -M -s /sbin/nologin suricata
%{_datadir}/%{name}/rules
%changelog
-* Thu Oct 17 2019 Steve Grubb <sgrubb(a)redhat.com> 5.0.0-1
+* Fri Oct 18 2019 Steve Grubb <sgrubb(a)redhat.com> 5.0.0-2
- New feature release (which also fixes a security issue)
- Enable ebpf on x86_64 only
+- Disable building on ppc64le due to rust problems
* Thu Aug 01 2019 Steve Grubb <sgrubb(a)redhat.com> 4.1.4-4
- Fix FTBFS bz 1736727
4 years, 6 months