зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
a8dd741056
Коммит
7aa5ec67ec
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче