From owner-svn-ports-branches@freebsd.org  Tue Feb 26 17:06:06 2019
Return-Path: <owner-svn-ports-branches@freebsd.org>
Delivered-To: svn-ports-branches@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 29153151F70E;
 Tue, 26 Feb 2019 17:06:06 +0000 (UTC)
 (envelope-from jbeich@FreeBSD.org)
Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org
 [IPv6:2610:1c1:1:606c::19:3])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 server-signature RSA-PSS (4096 bits)
 client-signature RSA-PSS (4096 bits) client-digest SHA256)
 (Client CN "mxrelay.nyi.freebsd.org",
 Issuer "Let's Encrypt Authority X3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id BE75D8E768;
 Tue, 26 Feb 2019 17:06:05 +0000 (UTC)
 (envelope-from jbeich@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id AADCD8195;
 Tue, 26 Feb 2019 17:06:05 +0000 (UTC)
 (envelope-from jbeich@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x1QH65Nx039560;
 Tue, 26 Feb 2019 17:06:05 GMT (envelope-from jbeich@FreeBSD.org)
Received: (from jbeich@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id x1QH65K8039558;
 Tue, 26 Feb 2019 17:06:05 GMT (envelope-from jbeich@FreeBSD.org)
Message-Id: <201902261706.x1QH65K8039558@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: jbeich set sender to
 jbeich@FreeBSD.org using -f
From: Jan Beich <jbeich@FreeBSD.org>
Date: Tue, 26 Feb 2019 17:06:05 +0000 (UTC)
To: ports-committers@freebsd.org, svn-ports-all@freebsd.org,
 svn-ports-branches@freebsd.org
Subject: svn commit: r493974 - in branches/2019Q1/www/firefox: . files
X-SVN-Group: ports-branches
X-SVN-Commit-Author: jbeich
X-SVN-Commit-Paths: in branches/2019Q1/www/firefox: . files
X-SVN-Commit-Revision: 493974
X-SVN-Commit-Repository: ports
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Rspamd-Queue-Id: BE75D8E768
X-Spamd-Bar: --
Authentication-Results: mx1.freebsd.org
X-Spamd-Result: default: False [-2.95 / 15.00];
 local_wl_from(0.00)[FreeBSD.org];
 NEURAL_HAM_MEDIUM(-1.00)[-0.999,0];
 NEURAL_HAM_SHORT(-0.95)[-0.952,0];
 NEURAL_HAM_LONG(-1.00)[-1.000,0];
 ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]
X-BeenThere: svn-ports-branches@freebsd.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: SVN commit messages for all the branches of the ports tree
 <svn-ports-branches.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-ports-branches>, 
 <mailto:svn-ports-branches-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-ports-branches/>
List-Post: <mailto:svn-ports-branches@freebsd.org>
List-Help: <mailto:svn-ports-branches-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-ports-branches>, 
 <mailto:svn-ports-branches-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 26 Feb 2019 17:06:06 -0000

Author: jbeich
Date: Tue Feb 26 17:06:05 2019
New Revision: 493974
URL: https://svnweb.freebsd.org/changeset/ports/493974

Log:
  MFH: r493973
  
  www/firefox: backport another Wayland+WebRender fix
  
  Obtained from:	      upstream (Firefox 67)
  Approved by:	ports-secteam blanket

Added:
  branches/2019Q1/www/firefox/files/patch-bug1527804
     - copied unchanged from r493973, head/www/firefox/files/patch-bug1527804
Modified:
  branches/2019Q1/www/firefox/Makefile
Directory Properties:
  branches/2019Q1/   (props changed)

Modified: branches/2019Q1/www/firefox/Makefile
==============================================================================
--- branches/2019Q1/www/firefox/Makefile	Tue Feb 26 17:03:56 2019	(r493973)
+++ branches/2019Q1/www/firefox/Makefile	Tue Feb 26 17:06:05 2019	(r493974)
@@ -3,7 +3,7 @@
 
 PORTNAME=	firefox
 DISTVERSION=	65.0.1
-PORTREVISION=	1
+PORTREVISION=	2
 PORTEPOCH=	1
 CATEGORIES=	www ipv6
 MASTER_SITES=	MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \

Copied: branches/2019Q1/www/firefox/files/patch-bug1527804 (from r493973, head/www/firefox/files/patch-bug1527804)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2019Q1/www/firefox/files/patch-bug1527804	Tue Feb 26 17:06:05 2019	(r493974, copy of r493973, head/www/firefox/files/patch-bug1527804)
@@ -0,0 +1,218 @@
+commit 1579a88e491f
+Author: sotaro <sotaro.ikeda.g@gmail.com>
+Date:   Mon Feb 25 12:15:50 2019 +0000
+
+    Bug 1527804 - Trigger composite from frame_callback_handler() r=stransky
+    
+    Bug 1514156 expects that nsWindow::OnExposeEvent() is called after frame_callback_handler() called. But it did not happen during opening add-ons(gecko profiler). Then we need to trigger rendering directly from frame_callback_handler() call.
+    
+    Differential Revision: https://phabricator.services.mozilla.com/D20272
+    
+    --HG--
+    extra : moz-landing-system : lando
+---
+ widget/gtk/mozcontainer.cpp | 20 +++++++++----------
+ widget/gtk/mozcontainer.h   |  7 +++++--
+ widget/gtk/nsWindow.cpp     | 48 ++++++++++++++++++++++++++++++---------------
+ widget/gtk/nsWindow.h       |  4 +++-
+ 4 files changed, 50 insertions(+), 29 deletions(-)
+
+diff --git widget/gtk/mozcontainer.cpp widget/gtk/mozcontainer.cpp
+index 77ac02e2a049..efe5f7ba86e3 100644
+--- widget/gtk/mozcontainer.cpp
++++ widget/gtk/mozcontainer.cpp
+@@ -160,7 +160,7 @@ void moz_container_init(MozContainer *container) {
+   // We can draw to x11 window any time.
+   container->ready_to_draw = GDK_IS_X11_DISPLAY(gdk_display_get_default());
+   container->surface_needs_clear = true;
+-  container->egl_surface_needs_update = false;
++  container->inital_draw_cb = nullptr;
+ #endif
+ }
+ 
+@@ -178,12 +178,18 @@ static void frame_callback_handler(void *data, struct wl_callback *callback,
+                                    uint32_t time) {
+   MozContainer *container = MOZ_CONTAINER(data);
+   g_clear_pointer(&container->frame_callback_handler, wl_callback_destroy);
+-  if (!container->ready_to_draw) {
+-    container->egl_surface_needs_update = true;
++  if (!container->ready_to_draw && container->inital_draw_cb) {
++    container->inital_draw_cb();
+   }
+   container->ready_to_draw = true;
+ }
+ 
++void moz_container_set_initial_draw_callback(
++    MozContainer *container,
++    std::function<void(void)> inital_draw_cb) {
++  container->inital_draw_cb = inital_draw_cb;
++}
++
+ static const struct wl_callback_listener frame_listener = {
+     frame_callback_handler};
+ 
+@@ -214,8 +220,8 @@ static void moz_container_unmap_wayland(MozContainer *container) {
+   g_clear_pointer(&container->frame_callback_handler, wl_callback_destroy);
+ 
+   container->surface_needs_clear = true;
+-  container->egl_surface_needs_update = false;
+   container->ready_to_draw = false;
++  container->inital_draw_cb = nullptr;
+ }
+ 
+ static gint moz_container_get_scale(MozContainer *container) {
+@@ -560,12 +566,6 @@ gboolean moz_container_surface_needs_clear(MozContainer *container) {
+   container->surface_needs_clear = false;
+   return state;
+ }
+-
+-gboolean moz_container_egl_surface_needs_update(MozContainer *container){
+-  gboolean state = container->egl_surface_needs_update;
+-  container->egl_surface_needs_update = false;
+-  return state;
+-}
+ #endif
+ 
+ void moz_container_force_default_visual(MozContainer *container) {
+diff --git widget/gtk/mozcontainer.h widget/gtk/mozcontainer.h
+index ae6d656646c8..51be814ef975 100644
+--- widget/gtk/mozcontainer.h
++++ widget/gtk/mozcontainer.h
+@@ -9,6 +9,7 @@
+ #define __MOZ_CONTAINER_H__
+ 
+ #include <gtk/gtk.h>
++#include <functional>
+ 
+ /*
+  * MozContainer
+@@ -77,8 +78,8 @@ struct _MozContainer {
+   struct wl_egl_window *eglwindow;
+   struct wl_callback *frame_callback_handler;
+   gboolean surface_needs_clear;
+-  gboolean egl_surface_needs_update;
+   gboolean ready_to_draw;
++  std::function<void(void)> inital_draw_cb;
+ #endif
+   gboolean force_default_visual;
+ };
+@@ -97,7 +98,9 @@ struct wl_egl_window *moz_container_get_wl_egl_window(
+ 
+ gboolean moz_container_has_wl_egl_window(MozContainer *container);
+ gboolean moz_container_surface_needs_clear(MozContainer *container);
+-gboolean moz_container_egl_surface_needs_update(MozContainer *container);
++void moz_container_set_initial_draw_callback(
++    MozContainer *container,
++    std::function<void(void)> inital_draw_cb);
+ #endif
+ 
+ #endif /* __MOZ_CONTAINER_H__ */
+diff --git widget/gtk/nsWindow.cpp widget/gtk/nsWindow.cpp
+index acb957d3fb55..54b121ec5514 100644
+--- widget/gtk/nsWindow.cpp
++++ widget/gtk/nsWindow.cpp
+@@ -675,6 +675,12 @@ void nsWindow::Destroy() {
+     gFocusWindow = nullptr;
+   }
+ 
++#ifdef MOZ_WAYLAND
++  if (mContainer) {
++    moz_container_set_initial_draw_callback(mContainer, nullptr);
++  }
++#endif
++
+   GtkWidget *owningWidget = GetMozContainerWidget();
+   if (mShell) {
+     gtk_widget_destroy(mShell);
+@@ -1860,6 +1866,23 @@ static bool ExtractExposeRegion(LayoutDeviceIntRegion &aRegion, cairo_t *cr) {
+   return true;
+ }
+ 
++#ifdef MOZ_WAYLAND
++void nsWindow::WaylandEGLSurfaceForceRedraw() {
++  MOZ_RELEASE_ASSERT(NS_IsMainThread());
++
++  if (mIsDestroyed) {
++    return;
++  }
++
++  if (CompositorBridgeChild* remoteRenderer = GetRemoteRenderer()) {
++    if (mCompositorWidgetDelegate) {
++      mCompositorWidgetDelegate->RequestsUpdatingEGLSurface();
++    }
++    remoteRenderer->SendForcePresent();
++  }
++}
++#endif
++
+ gboolean nsWindow::OnExposeEvent(cairo_t *cr) {
+   // Send any pending resize events so that layout can update.
+   // May run event loop.
+@@ -1888,11 +1911,6 @@ gboolean nsWindow::OnExposeEvent(cairo_t *cr) {
+   region.ScaleRoundOut(scale, scale);
+ 
+   if (GetLayerManager()->AsKnowsCompositor() && mCompositorSession) {
+-#ifdef MOZ_WAYLAND
+-    if(mCompositorWidgetDelegate && WaylandRequestsUpdatingEGLSurface()) {
+-      mCompositorWidgetDelegate->RequestsUpdatingEGLSurface();
+-    }
+-#endif
+     // We need to paint to the screen even if nothing changed, since if we
+     // don't have a compositing window manager, our pixels could be stale.
+     GetLayerManager()->SetNeedsComposite(true);
+@@ -3454,6 +3472,15 @@ nsresult nsWindow::Create(nsIWidget *aParent, nsNativeWidget aNativeParent,
+       // Create a container to hold child windows and child GtkWidgets.
+       GtkWidget *container = moz_container_new();
+       mContainer = MOZ_CONTAINER(container);
++#ifdef MOZ_WAYLAND
++      if (!mIsX11Display && ComputeShouldAccelerate()) {
++        RefPtr<nsWindow> self(this);
++        moz_container_set_initial_draw_callback(mContainer,
++            [self]() -> void {
++              self->WaylandEGLSurfaceForceRedraw();
++            });
++      }
++#endif
+ 
+       // "csd" style is set when widget is realized so we need to call
+       // it explicitly now.
+@@ -6564,17 +6591,6 @@ bool nsWindow::WaylandSurfaceNeedsClear() {
+       "nsWindow::WaylandSurfaceNeedsClear(): We don't have any mContainer!");
+   return false;
+ }
+-
+-bool nsWindow::WaylandRequestsUpdatingEGLSurface() {
+-  if (mContainer) {
+-    return moz_container_egl_surface_needs_update(MOZ_CONTAINER(mContainer));
+-  }
+-
+-  NS_WARNING(
+-      "nsWindow::WaylandSurfaceNeedsClear(): We don't have any mContainer!");
+-  return false;
+-}
+-
+ #endif
+ 
+ #ifdef MOZ_X11
+diff --git widget/gtk/nsWindow.h widget/gtk/nsWindow.h
+index 5d119b4911e1..dbced693be1c 100644
+--- widget/gtk/nsWindow.h
++++ widget/gtk/nsWindow.h
+@@ -245,6 +245,9 @@ class nsWindow final : public nsBaseWidget {
+ 
+   void DispatchContextMenuEventFromMouseEvent(uint16_t domButton,
+                                               GdkEventButton* aEvent);
++#ifdef MOZ_WAYLAND
++  void WaylandEGLSurfaceForceRedraw();
++#endif
+ 
+  public:
+   void ThemeChanged(void);
+@@ -342,7 +345,6 @@ class nsWindow final : public nsBaseWidget {
+   wl_display* GetWaylandDisplay();
+   wl_surface* GetWaylandSurface();
+   bool WaylandSurfaceNeedsClear();
+-  bool WaylandRequestsUpdatingEGLSurface();
+ #endif
+   virtual void GetCompositorWidgetInitData(
+       mozilla::widget::CompositorWidgetInitData* aInitData) override;