Skip to content

Commit e2c9fce

Browse files
Disable cef GPU acceleration to prevent crashes
1 parent 99e906c commit e2c9fce

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

desktop/src/cef/internal/app.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use cef::rc::{Rc, RcImpl};
22
use cef::sys::{_cef_app_t, cef_base_ref_counted_t};
3-
use cef::{BrowserProcessHandler, ImplApp, SchemeRegistrar, WrapApp};
3+
use cef::{BrowserProcessHandler, CefString, ImplApp, ImplCommandLine, SchemeRegistrar, WrapApp};
44

55
use crate::cef::CefEventHandler;
66
use crate::cef::scheme_handler::GraphiteSchemeHandlerFactory;
@@ -29,6 +29,14 @@ impl<H: CefEventHandler + Clone> ImplApp for AppImpl<H> {
2929
GraphiteSchemeHandlerFactory::register_schemes(registrar);
3030
}
3131

32+
fn on_before_command_line_processing(&self, _process_type: Option<&cef::CefString>, command_line: Option<&mut cef::CommandLine>) {
33+
if let Some(cmd) = command_line {
34+
// Disable GPU acceleration, because it is not supported for Offscreen Rendering and can cause crashes.
35+
cmd.append_switch(Some(&CefString::from("disable-gpu")));
36+
cmd.append_switch(Some(&CefString::from("disable-gpu-compositing")));
37+
}
38+
}
39+
3240
fn get_raw(&self) -> *mut _cef_app_t {
3341
self.object.cast()
3442
}

desktop/src/cef/internal/browser_process_handler.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ impl<H: CefEventHandler + Clone> ImplBrowserProcessHandler for BrowserProcessHan
2525
cef::register_scheme_handler_factory(Some(&CefString::from(GRAPHITE_SCHEME)), None, Some(&mut SchemeHandlerFactory::new(GraphiteSchemeHandlerFactory::new())));
2626
}
2727

28-
fn get_raw(&self) -> *mut _cef_browser_process_handler_t {
29-
self.object.cast()
30-
}
31-
3228
fn on_schedule_message_pump_work(&self, delay_ms: i64) {
3329
self.event_handler.schedule_cef_message_loop_work(Instant::now() + Duration::from_millis(delay_ms as u64));
3430
}
31+
32+
fn get_raw(&self) -> *mut _cef_browser_process_handler_t {
33+
self.object.cast()
34+
}
3535
}
3636

3737
impl<H: CefEventHandler + Clone> Clone for BrowserProcessHandlerImpl<H> {

0 commit comments

Comments
 (0)