Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Revert "Explicitly make the X connection for EGL. (#21831)" #21851

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions shell/platform/linux/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,6 @@ source_set("flutter_linux") {
"//flutter/shell/platform/linux/config:gtk",
"//flutter/shell/platform/linux/config:egl",
"//flutter/shell/platform/linux/config:wayland-egl",
"//flutter/shell/platform/linux/config:x11",
"//third_party/khronos:khronos_headers",
]

Expand Down Expand Up @@ -173,7 +172,6 @@ executable("flutter_linux_unittests") {
configs += [
"//flutter/shell/platform/linux/config:gtk",
"//flutter/shell/platform/linux/config:wayland-egl",
"//flutter/shell/platform/linux/config:x11",
]

# Set flag to allow public headers to be directly included (library users should not do this)
Expand Down
6 changes: 4 additions & 2 deletions shell/platform/linux/config/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
import("//build/config/linux/pkg_config.gni")
import("//flutter/shell/platform/glfw/config.gni")

pkg_config("x11") {
packages = [ "x11" ]
if (build_glfw_shell) {
pkg_config("x11") {
packages = [ "x11" ]
}
}

pkg_config("gtk") {
Expand Down
33 changes: 5 additions & 28 deletions shell/platform/linux/fl_renderer_x11.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,14 @@
#include "fl_renderer_x11.h"
#ifdef GDK_WINDOWING_X11

#include <X11/X.h>

#include "flutter/shell/platform/linux/egl_utils.h"

struct _FlRendererX11 {
FlRenderer parent_instance;

// Connection to the X server.
Display* display;
};

G_DEFINE_TYPE(FlRendererX11, fl_renderer_x11, fl_renderer_get_type())

static void fl_renderer_x11_dispose(GObject* object) {
FlRendererX11* self = FL_RENDERER_X11(object);

if (self->display != nullptr) {
XCloseDisplay(self->display);
self->display = nullptr;
}

G_OBJECT_CLASS(fl_renderer_x11_parent_class)->dispose(object);
}

// Implements FlRenderer::setup_window_attr.
static gboolean fl_renderer_x11_setup_window_attr(
FlRenderer* renderer,
Expand Down Expand Up @@ -66,17 +50,11 @@ static gboolean fl_renderer_x11_setup_window_attr(

// Implements FlRenderer::create_display.
static EGLDisplay fl_renderer_x11_create_display(FlRenderer* renderer) {
FlRendererX11* self = FL_RENDERER_X11(renderer);

// Create a dedicated connection to the X server because the EGL calls are
// made from Flutter on a different thread to GTK. Re-using the existing
// GTK X11 connection would crash as Xlib is not thread safe.
if (self->display == nullptr) {
Display* display = gdk_x11_get_default_xdisplay();
self->display = XOpenDisplay(DisplayString(display));
}

return eglGetDisplay(self->display);
// Note the use of EGL_DEFAULT_DISPLAY rather than sharing the existing
// display connection from GTK. This is because this EGL display is going to
// be accessed by a thread from Flutter. The GTK/X11 display connection is not
// thread safe and would cause a crash.
return eglGetDisplay(EGL_DEFAULT_DISPLAY);
}

// Implements FlRenderer::create_surfaces.
Expand Down Expand Up @@ -121,7 +99,6 @@ static gboolean fl_renderer_x11_create_surfaces(FlRenderer* renderer,
}

static void fl_renderer_x11_class_init(FlRendererX11Class* klass) {
G_OBJECT_CLASS(klass)->dispose = fl_renderer_x11_dispose;
FL_RENDERER_CLASS(klass)->setup_window_attr =
fl_renderer_x11_setup_window_attr;
FL_RENDERER_CLASS(klass)->create_display = fl_renderer_x11_create_display;
Expand Down