summaryrefslogtreecommitdiff
path: root/mozilla-1468911.patch
diff options
context:
space:
mode:
Diffstat (limited to 'mozilla-1468911.patch')
-rw-r--r--mozilla-1468911.patch276
1 files changed, 0 insertions, 276 deletions
diff --git a/mozilla-1468911.patch b/mozilla-1468911.patch
deleted file mode 100644
index 209a5a7..0000000
--- a/mozilla-1468911.patch
+++ /dev/null
@@ -1,276 +0,0 @@
-changeset: 465236:be9a6c98a4a7
-tag: tip
-user: Martin Stransky <stransky@redhat.com>
-date: Mon Mar 18 10:42:48 2019 +0100
-summary: tearing
-
-
-diff --git a/widget/gtk/nsAppShell.cpp b/widget/gtk/nsAppShell.cpp
---- a/widget/gtk/nsAppShell.cpp
-+++ b/widget/gtk/nsAppShell.cpp
-@@ -35,16 +35,17 @@ using mozilla::widget::ScreenHelperGTK;
- using mozilla::widget::ScreenManager;
-
- #define NOTIFY_TOKEN 0xFA
-
- LazyLogModule gWidgetLog("Widget");
- LazyLogModule gWidgetFocusLog("WidgetFocus");
- LazyLogModule gWidgetDragLog("WidgetDrag");
- LazyLogModule gWidgetDrawLog("WidgetDraw");
-+LazyLogModule gWidgetWaylandLog("WidgetWayland");
-
- static GPollFunc sPollFunc;
-
- // Wrapper function to disable hang monitoring while waiting in poll().
- static gint PollWrapper(GPollFD* ufds, guint nfsd, gint timeout_) {
- mozilla::BackgroundHangMonitor().NotifyWait();
- gint result;
- {
-
-diff -up firefox-66.0/widget/gtk/WindowSurfaceWayland.cpp.old firefox-66.0/widget/gtk/WindowSurfaceWayland.cpp
---- firefox-66.0/widget/gtk/WindowSurfaceWayland.cpp.old 2019-03-20 15:48:52.265966904 +0100
-+++ firefox-66.0/widget/gtk/WindowSurfaceWayland.cpp 2019-03-20 14:48:21.082035284 +0100
-@@ -20,6 +20,18 @@
- #include <fcntl.h>
- #include <errno.h>
-
-+#undef LOG
-+#ifdef MOZ_LOGGING
-+# include "mozilla/Logging.h"
-+# include "nsTArray.h"
-+# include "Units.h"
-+extern mozilla::LazyLogModule gWidgetWaylandLog;
-+# define LOGWAYLAND(args) \
-+ MOZ_LOG(gWidgetWaylandLog, mozilla::LogLevel::Debug, args)
-+#else
-+# define LOGWAYLAND(args)
-+#endif /* MOZ_LOGGING */
-+
- namespace mozilla {
- namespace widget {
-
-@@ -241,7 +253,7 @@ WaylandShmPool::~WaylandShmPool() {
-
- static void buffer_release(void* data, wl_buffer* buffer) {
- auto surface = reinterpret_cast<WindowBackBuffer*>(data);
-- surface->Detach();
-+ surface->Detach(buffer);
- }
-
- static const struct wl_buffer_listener buffer_listener = {buffer_release};
-@@ -261,9 +273,16 @@ void WindowBackBuffer::Create(int aWidth
-
- mWidth = aWidth;
- mHeight = aHeight;
-+
-+ LOGWAYLAND((
-+ "%s [%p] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__, (void*)this,
-+ (void*)mWaylandBuffer,
-+ mWaylandBuffer ? wl_proxy_get_id((struct wl_proxy*)mWaylandBuffer) : -1));
- }
-
- void WindowBackBuffer::Release() {
-+ LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
-+
- wl_buffer_destroy(mWaylandBuffer);
- mWidth = mHeight = 0;
- }
-@@ -288,6 +307,9 @@ WindowBackBuffer::~WindowBackBuffer() {
- bool WindowBackBuffer::Resize(int aWidth, int aHeight) {
- if (aWidth == mWidth && aHeight == mHeight) return true;
-
-+ LOGWAYLAND(
-+ ("%s [%p] %d %d\n", __PRETTY_FUNCTION__, (void*)this, aWidth, aHeight));
-+
- Release();
- Create(aWidth, aHeight);
-
-@@ -295,13 +317,26 @@ bool WindowBackBuffer::Resize(int aWidth
- }
-
- void WindowBackBuffer::Attach(wl_surface* aSurface) {
-+ LOGWAYLAND((
-+ "%s [%p] wl_surface %p ID %d wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
-+ (void*)this, (void*)aSurface,
-+ aSurface ? wl_proxy_get_id((struct wl_proxy*)aSurface) : -1,
-+ (void*)mWaylandBuffer,
-+ mWaylandBuffer ? wl_proxy_get_id((struct wl_proxy*)mWaylandBuffer) : -1));
-+
- wl_surface_attach(aSurface, mWaylandBuffer, 0, 0);
- wl_surface_commit(aSurface);
- wl_display_flush(mWaylandDisplay->GetDisplay());
- mAttached = true;
- }
-
--void WindowBackBuffer::Detach() { mAttached = false; }
-+void WindowBackBuffer::Detach(wl_buffer* aBuffer) {
-+ LOGWAYLAND(("%s [%p] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__, (void*)this,
-+ (void*)aBuffer,
-+ aBuffer ? wl_proxy_get_id((struct wl_proxy*)aBuffer) : -1));
-+
-+ mAttached = false;
-+}
-
- bool WindowBackBuffer::SetImageDataFromBuffer(
- class WindowBackBuffer* aSourceBuffer) {
-@@ -316,6 +351,11 @@ bool WindowBackBuffer::SetImageDataFromB
- }
-
- already_AddRefed<gfx::DrawTarget> WindowBackBuffer::Lock() {
-+ LOGWAYLAND((
-+ "%s [%p] [%d x %d] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
-+ (void*)this, mWidth, mHeight, (void*)mWaylandBuffer,
-+ mWaylandBuffer ? wl_proxy_get_id((struct wl_proxy*)mWaylandBuffer) : -1));
-+
- gfx::IntSize lockSize(mWidth, mHeight);
- return gfxPlatform::CreateDrawTargetForData(
- static_cast<unsigned char*>(mShmPool.GetImageData()), lockSize,
-@@ -345,7 +385,8 @@ WindowSurfaceWayland::WindowSurfaceWayla
- mPendingCommit(false),
- mWaylandBufferFullScreenDamage(false),
- mIsMainThread(NS_IsMainThread()),
-- mNeedScaleFactorUpdate(true) {
-+ mNeedScaleFactorUpdate(true),
-+ mWaitToFullScreenUpdate(true) {
- for (int i = 0; i < BACK_BUFFER_NUM; i++) mBackupBuffer[i] = nullptr;
- }
-
-@@ -387,7 +428,11 @@ WindowSurfaceWayland::~WindowSurfaceWayl
- WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(int aWidth,
- int aHeight) {
- if (!mWaylandBuffer) {
-+ LOGWAYLAND(("%s [%p] Create [%d x %d]\n", __PRETTY_FUNCTION__, (void*)this,
-+ aWidth, aHeight));
-+
- mWaylandBuffer = new WindowBackBuffer(mWaylandDisplay, aWidth, aHeight);
-+ mWaitToFullScreenUpdate = true;
- return mWaylandBuffer;
- }
-
-@@ -396,8 +441,11 @@ WindowBackBuffer* WindowSurfaceWayland::
- mWaylandBuffer->Resize(aWidth, aHeight);
- // There's a chance that scale factor has been changed
- // when buffer size changed
-- mNeedScaleFactorUpdate = true;
-+ mWaitToFullScreenUpdate = true;
- }
-+ LOGWAYLAND(("%s [%p] Reuse buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-+ (void*)this, aWidth, aHeight));
-+
- return mWaylandBuffer;
- }
-
-@@ -420,6 +468,8 @@ WindowBackBuffer* WindowSurfaceWayland::
- }
-
- if (MOZ_UNLIKELY(availableBuffer == BACK_BUFFER_NUM)) {
-+ LOGWAYLAND(("%s [%p] No drawing buffer available!\n", __PRETTY_FUNCTION__,
-+ (void*)this));
- NS_WARNING("No drawing buffer available");
- return nullptr;
- }
-@@ -429,6 +479,8 @@ WindowBackBuffer* WindowSurfaceWayland::
- mBackupBuffer[availableBuffer] = lastWaylandBuffer;
-
- if (lastWaylandBuffer->IsMatchingSize(aWidth, aHeight)) {
-+ LOGWAYLAND(("%s [%p] Copy from old buffer [%d x %d]\n", __PRETTY_FUNCTION__,
-+ (void*)this, aWidth, aHeight));
- // Former front buffer has the same size as a requested one.
- // Gecko may expect a content already drawn on screen so copy
- // existing data to the new buffer.
-@@ -437,9 +489,12 @@ WindowBackBuffer* WindowSurfaceWayland::
- // (https://bugzilla.redhat.com/show_bug.cgi?id=1418260)
- mWaylandBufferFullScreenDamage = true;
- } else {
-+ LOGWAYLAND(("%s [%p] Resize to [%d x %d]\n", __PRETTY_FUNCTION__,
-+ (void*)this, aWidth, aHeight));
- // Former buffer has different size from the new request. Only resize
- // the new buffer and leave gecko to render new whole content.
- mWaylandBuffer->Resize(aWidth, aHeight);
-+ mWaitToFullScreenUpdate = true;
- }
-
- return mWaylandBuffer;
-@@ -499,6 +554,10 @@ already_AddRefed<gfx::DrawTarget> Window
- gfx::IntRect bounds = aRegion.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, lockSize.height));
-+
- // Are we asked for entire nsWindow to draw?
- mDrawToWaylandBufferDirectly =
- (aRegion.GetNumRects() == 1 && bounds.x == 0 && bounds.y == 0 &&
-@@ -510,6 +569,13 @@ already_AddRefed<gfx::DrawTarget> Window
- LockWaylandBuffer(screenRect.width, screenRect.height,
- mWindow->WaylandSurfaceNeedsClear());
- if (dt) {
-+ // When we have a request to update whole screen at once
-+ // (surface was created, resized or changed somehow)
-+ // we also need update scale factor of the screen.
-+ if (mWaitToFullScreenUpdate) {
-+ mWaitToFullScreenUpdate = false;
-+ mNeedScaleFactorUpdate = true;
-+ }
- return dt.forget();
- }
-
-@@ -576,6 +642,10 @@ static void WaylandBufferDelayCommitHand
- void WindowSurfaceWayland::CommitWaylandBuffer() {
- MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
-
-+ if (mWaitToFullScreenUpdate) {
-+ return;
-+ }
-+
- wl_surface* waylandSurface = mWindow->GetWaylandSurface();
- if (!waylandSurface) {
- // Target window is not created yet - delay the commit. This can happen only
-@@ -619,6 +689,7 @@ void WindowSurfaceWayland::CommitWayland
- LayoutDeviceIntRect rect = mWindow->GetBounds();
- wl_surface_damage(waylandSurface, 0, 0, rect.width, rect.height);
- mWaylandBufferFullScreenDamage = false;
-+ mNeedScaleFactorUpdate = true;
- } else {
- gint scaleFactor = mWindow->GdkScaleFactor();
- for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
-@@ -653,6 +724,18 @@ void WindowSurfaceWayland::CommitWayland
- void WindowSurfaceWayland::Commit(const LayoutDeviceIntRegion& aInvalidRegion) {
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
-
-+#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, lockSize.height));
-+ }
-+#endif
-+
- // We have new content at mImageSurface - copy data to mWaylandBuffer first.
- if (!mDrawToWaylandBufferDirectly) {
- CommitImageSurfaceToWaylandBuffer(aInvalidRegion);
-diff -up firefox-66.0/widget/gtk/WindowSurfaceWayland.h.old firefox-66.0/widget/gtk/WindowSurfaceWayland.h
---- firefox-66.0/widget/gtk/WindowSurfaceWayland.h.old 2019-03-20 15:48:56.218949138 +0100
-+++ firefox-66.0/widget/gtk/WindowSurfaceWayland.h 2019-03-20 14:48:21.082035284 +0100
-@@ -46,7 +46,7 @@ class WindowBackBuffer {
- already_AddRefed<gfx::DrawTarget> Lock();
-
- void Attach(wl_surface* aSurface);
-- void Detach();
-+ void Detach(wl_buffer* aBuffer);
- bool IsAttached() { return mAttached; }
-
- void Clear();
-@@ -118,6 +118,7 @@ class WindowSurfaceWayland : public Wind
- bool mWaylandBufferFullScreenDamage;
- bool mIsMainThread;
- bool mNeedScaleFactorUpdate;
-+ bool mWaitToFullScreenUpdate;
- };
-
- } // namespace widget
bgstack15