Bug 1847336 [Linux] Propagate SetEGLNativeWindowSize() to WebRender/OGL compositor r=emilio

Propagate return code from nsWindow::SetEGLNativeWindowSize() to WebRender/OGL compositors.
It allows to skip rendering in case of incompatible recent EGL buffer size.

Depends on D187889

Differential Revision: https://phabricator.services.mozilla.com/D187890
This commit is contained in:
stransky 2023-09-12 18:32:44 +00:00
Родитель a8dd741056
Коммит 7aa5ec67ec
4 изменённых файлов: 13 добавлений и 7 удалений

Просмотреть файл

@ -132,13 +132,14 @@ EGLNativeWindowType GtkCompositorWidget::GetEGLNativeWindow() {
return window;
}
void GtkCompositorWidget::SetEGLNativeWindowSize(
bool GtkCompositorWidget::SetEGLNativeWindowSize(
const LayoutDeviceIntSize& aEGLWindowSize) {
#if defined(MOZ_WAYLAND)
if (mWidget) {
mWidget->SetEGLNativeWindowSize(aEGLWindowSize);
return mWidget->SetEGLNativeWindowSize(aEGLWindowSize);
}
#endif
return true;
}
LayoutDeviceIntRegion GtkCompositorWidget::GetTransparentRegion() {

Просмотреть файл

@ -79,7 +79,9 @@ class GtkCompositorWidget : public CompositorWidget,
// Resume rendering with to given aXWindow (X11) or nsWindow (Wayland).
void EnableRendering(const uintptr_t aXWindow, const bool aShaped) override;
void SetEGLNativeWindowSize(const LayoutDeviceIntSize& aEGLWindowSize);
// If we fail to set window size (due to different screen scale or so)
// we can't paint the frame by compositor.
bool SetEGLNativeWindowSize(const LayoutDeviceIntSize& aEGLWindowSize);
#if defined(MOZ_X11)
Window XWindow() const { return mXWindow; }

Просмотреть файл

@ -9781,14 +9781,16 @@ void nsWindow::LockAspectRatio(bool aShouldLock) {
nsWindow* nsWindow::GetFocusedWindow() { return gFocusWindow; }
#ifdef MOZ_WAYLAND
void nsWindow::SetEGLNativeWindowSize(
bool nsWindow::SetEGLNativeWindowSize(
const LayoutDeviceIntSize& aEGLWindowSize) {
if (!GdkIsWaylandDisplay()) {
return;
return true;
}
// SetEGLNativeWindowSize() is called from renderer/compositor thread,
// make sure nsWindow is not destroyed.
bool paint = false;
// See NS_NATIVE_EGL_WINDOW why we can't block here.
if (mDestroyMutex.TryLock()) {
if (!mIsDestroyed && mContainer) {
@ -9797,11 +9799,12 @@ void nsWindow::SetEGLNativeWindowSize(
"%d)",
aEGLWindowSize.width, aEGLWindowSize.height, scale,
aEGLWindowSize.width / scale, aEGLWindowSize.height / scale);
moz_container_wayland_egl_window_set_size(
paint = moz_container_wayland_egl_window_set_size(
mContainer, aEGLWindowSize.ToUnknownSize(), scale);
}
mDestroyMutex.Unlock();
}
return paint;
}
#endif

Просмотреть файл

@ -420,7 +420,7 @@ class nsWindow final : public nsBaseWidget {
void FocusWaylandWindow(const char* aTokenID);
bool GetCSDDecorationOffset(int* aDx, int* aDy);
void SetEGLNativeWindowSize(const LayoutDeviceIntSize& aEGLWindowSize);
bool SetEGLNativeWindowSize(const LayoutDeviceIntSize& aEGLWindowSize);
void WaylandDragWorkaround(GdkEventButton* aEvent);
void CreateCompositorVsyncDispatcher() override;