Bug 1813407 [Linux] Allow to initialize WindowSurfaceProvider with GtkCompositorWidget for OMTC rendering r=emilio

Depends on D169905

Differential Revision: https://phabricator.services.mozilla.com/D169906
This commit is contained in:
stransky 2023-02-21 09:30:10 +00:00
Родитель b429a675e0
Коммит 1b56bde4d2
4 изменённых файлов: 16 добавлений и 10 удалений

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

@ -48,7 +48,7 @@ GtkCompositorWidget::GtkCompositorWidget(
#endif
#if defined(MOZ_WAYLAND)
if (GdkIsWaylandDisplay()) {
ConfigureWaylandBackend(mWidget);
ConfigureWaylandBackend();
LOG("GtkCompositorWidget::GtkCompositorWidget() [%p] mWidget %p "
"mIsRenderingSuspended %d\n",
(void*)mWidget.get(), (void*)mWidget, !!mIsRenderingSuspended);
@ -178,8 +178,8 @@ void GtkCompositorWidget::DisableRendering() {
}
#if defined(MOZ_WAYLAND)
bool GtkCompositorWidget::ConfigureWaylandBackend(RefPtr<nsWindow> aWindow) {
mProvider.Initialize(aWindow);
bool GtkCompositorWidget::ConfigureWaylandBackend() {
mProvider.Initialize(this);
return true;
}
#endif
@ -221,7 +221,7 @@ void GtkCompositorWidget::EnableRendering(const uintptr_t aXWindow,
#if defined(MOZ_WAYLAND)
if (GdkIsWaylandDisplay()) {
LOG(" configure widget %p\n", mWidget.get());
if (!ConfigureWaylandBackend(mWidget)) {
if (!ConfigureWaylandBackend()) {
return;
}
}

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

@ -99,7 +99,7 @@ class GtkCompositorWidget : public CompositorWidget,
private:
#if defined(MOZ_WAYLAND)
bool ConfigureWaylandBackend(RefPtr<nsWindow> aWindow);
bool ConfigureWaylandBackend();
#endif
#if defined(MOZ_X11)
bool ConfigureX11Backend(Window aXWindow, bool aShaped);

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

@ -7,6 +7,7 @@
#include "WindowSurfaceProvider.h"
#include "gfxPlatformGtk.h"
#include "GtkCompositorWidget.h"
#include "mozilla/gfx/Logging.h"
#include "mozilla/layers/LayersTypes.h"
#include "nsWindow.h"
@ -41,10 +42,6 @@ WindowSurfaceProvider::WindowSurfaceProvider()
: mWindowSurface(nullptr),
mMutex("WindowSurfaceProvider"),
mWindowSurfaceValid(false)
#ifdef MOZ_WAYLAND
,
mWidget(nullptr)
#endif
#ifdef MOZ_X11
,
mIsShaped(false),
@ -60,6 +57,11 @@ void WindowSurfaceProvider::Initialize(RefPtr<nsWindow> aWidget) {
mWindowSurfaceValid = false;
mWidget = std::move(aWidget);
}
void WindowSurfaceProvider::Initialize(GtkCompositorWidget* aCompositorWidget) {
mWindowSurfaceValid = false;
mCompositorWidget = aCompositorWidget;
mWidget = static_cast<nsWindow*>(aCompositorWidget->RealWidget());
}
#endif
#ifdef MOZ_X11
void WindowSurfaceProvider::Initialize(Window aWindow, Visual* aVisual,
@ -93,7 +95,7 @@ RefPtr<WindowSurface> WindowSurfaceProvider::CreateWindowSurface() {
if (!mWidget) {
return nullptr;
}
return MakeRefPtr<WindowSurfaceWaylandMB>(mWidget);
return MakeRefPtr<WindowSurfaceWaylandMB>(mWidget, mCompositorWidget);
}
#endif
#ifdef MOZ_X11

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

@ -44,6 +44,7 @@ class WindowSurfaceProvider final {
*/
#ifdef MOZ_WAYLAND
void Initialize(RefPtr<nsWindow> aWidget);
void Initialize(GtkCompositorWidget* aCompositorWidget);
#endif
#ifdef MOZ_X11
void Initialize(Window aWindow, Visual* aVisual, int aDepth, bool aIsShaped);
@ -80,6 +81,9 @@ class WindowSurfaceProvider final {
mozilla::Atomic<bool> mWindowSurfaceValid;
#ifdef MOZ_WAYLAND
RefPtr<nsWindow> mWidget;
// WindowSurfaceProvider is owned by GtkCompositorWidget so we don't need
// to reference it.
GtkCompositorWidget* mCompositorWidget = nullptr;
#endif
#ifdef MOZ_X11
bool mIsShaped;