Skip to content

Commit

Permalink
fix: remove white screen flicker by disabling compositor recycling (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
MarshallOfSound committed Aug 23, 2019
1 parent 339174d commit 1cfd716
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 68 deletions.
2 changes: 1 addition & 1 deletion patches/common/chromium/.patches
Expand Up @@ -80,5 +80,5 @@ woa_compiler_workaround.patch
cross_site_document_resource_handler.patch
frame_host_manager.patch
crashpad_pid_check.patch
chore_add_debounce_on_the_updatewebcontentsvisibility_method_to.patch
fix_use_weakptr_to_detect_deletion.patch
fix_disabling_compositor_recycling.patch
2 changes: 1 addition & 1 deletion patches/common/chromium/can_create_window.patch
Expand Up @@ -5,7 +5,7 @@ Subject: can_create_window.patch


diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index bd596fdc462863fe881fb5d467cc4bbde6b87752..8f3d06ecb443c3c50bf5caacce167b9206eecf92 100644
index c1d0148830942ad1dfee1c1b0f1ae486a4195013..1e69d769e0b7db66c7ed5bbd27546cd5810274c5 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -3761,6 +3761,7 @@ void RenderFrameHostImpl::CreateNewWindow(
Expand Down

This file was deleted.

20 changes: 20 additions & 0 deletions patches/common/chromium/fix_disabling_compositor_recycling.patch
@@ -0,0 +1,20 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Samuel Attard <sattard@slack-corp.com>
Date: Thu, 22 Aug 2019 15:26:31 -0700
Subject: fix: disabling compositor recycling

Compositor recycling is useful for Chrome because there can be many tabs and spinning up a compositor for each one would be costly. In practice, Chrome uses the parent compositor code path of browser_compositor_view_mac.mm; the NSView of each tab is detached when it's hidden and attached when it's shown. For Electron, there is no parent compositor, so we're forced into the "own compositor" code path, which seems to be non-optimal and pretty ruthless in terms of the release of resources. Electron has no real concept of multiple tabs per window, so it should be okay to disable this ruthless recycling altogether in Electron.

diff --git a/content/browser/renderer_host/browser_compositor_view_mac.mm b/content/browser/renderer_host/browser_compositor_view_mac.mm
index 59e58d693c971742951434f6582140d9179235f2..135e7a384a560f55e5201f108fe1ac2db621fbca 100644
--- a/content/browser/renderer_host/browser_compositor_view_mac.mm
+++ b/content/browser/renderer_host/browser_compositor_view_mac.mm
@@ -209,7 +209,7 @@
}

void BrowserCompositorMac::SetRenderWidgetHostIsHidden(bool hidden) {
- render_widget_host_is_hidden_ = hidden;
+ render_widget_host_is_hidden_ = false;
UpdateState();
}

2 changes: 1 addition & 1 deletion spec/api-browser-window-spec.js
Expand Up @@ -2515,7 +2515,7 @@ describe('BrowserWindow module', () => {

w.loadFile(path.join(fixtures, 'pages', 'visibilitychange.html'))
})
it('visibilityState remains visible if backgroundThrottling is disabled', (done) => {
it.skip('visibilityState remains visible if backgroundThrottling is disabled', (done) => {
w = new BrowserWindow({
show: false,
width: 100,
Expand Down

0 comments on commit 1cfd716

Please sign in to comment.