From 7d6a754d474c278e13d025f752baa7da04b86065 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Wed, 14 Feb 2024 11:56:29 -0800 Subject: [PATCH] fix: skip the first two invalid updates when SCK is enabled (#41340) --- patches/chromium/.patches | 2 +- ...irst_2_no-op_refreshes_in_thumb_cap.patch} | 19 +++++++++++++------ .../api/electron_api_desktop_capturer.cc | 6 ++++-- 3 files changed, 18 insertions(+), 9 deletions(-) rename patches/chromium/{fix_add_support_for_skipping_first_no-op_refresh_in_thumb_cap.patch => fix_add_support_for_skipping_first_2_no-op_refreshes_in_thumb_cap.patch} (64%) diff --git a/patches/chromium/.patches b/patches/chromium/.patches index 0310c5a162..ee985721f7 100644 --- a/patches/chromium/.patches +++ b/patches/chromium/.patches @@ -128,4 +128,4 @@ feat_allow_code_cache_in_custom_schemes.patch build_run_reclient_cfg_generator_after_chrome.patch fix_suppress_clang_-wimplicit-const-int-float-conversion_in.patch fix_getcursorscreenpoint_wrongly_returns_0_0.patch -fix_add_support_for_skipping_first_no-op_refresh_in_thumb_cap.patch +fix_add_support_for_skipping_first_2_no-op_refreshes_in_thumb_cap.patch diff --git a/patches/chromium/fix_add_support_for_skipping_first_no-op_refresh_in_thumb_cap.patch b/patches/chromium/fix_add_support_for_skipping_first_2_no-op_refreshes_in_thumb_cap.patch similarity index 64% rename from patches/chromium/fix_add_support_for_skipping_first_no-op_refresh_in_thumb_cap.patch rename to patches/chromium/fix_add_support_for_skipping_first_2_no-op_refreshes_in_thumb_cap.patch index 93736650a4..9319125798 100644 --- a/patches/chromium/fix_add_support_for_skipping_first_no-op_refresh_in_thumb_cap.patch +++ b/patches/chromium/fix_add_support_for_skipping_first_2_no-op_refreshes_in_thumb_cap.patch @@ -1,13 +1,20 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Tue, 13 Feb 2024 17:40:15 -0800 -Subject: fix: add support for skipping first no-op refresh in thumb cap +Subject: fix: add support for skipping first 2 no-op refreshes in thumb cap Fixes a bug in the SCK thumbnail capturer, will be reported upstream for a hopefully less hacky fix. +The first refresh is "no windows yet, no thumbnails". +The second refresh is "we have windows, we queued the thumbnail requests" +The third refresh (the one we want) is "we have windows, and have thumbnail requests" + +This really isn't ideal at all, we need to refactor desktopCapturer (read completely re-implement it) +to use StartUpdating and handle the events instead of using the "get the list once" method. + diff --git a/chrome/browser/media/webrtc/desktop_media_list.h b/chrome/browser/media/webrtc/desktop_media_list.h -index 0c6fccf16a11bbaff10115308e4b489490e5d3e6..3b541e6830ca902cf45483a3193376c0e559185e 100644 +index 0c6fccf16a11bbaff10115308e4b489490e5d3e6..e5ec31054a43989e630115605de435399d36559b 100644 --- a/chrome/browser/media/webrtc/desktop_media_list.h +++ b/chrome/browser/media/webrtc/desktop_media_list.h @@ -143,6 +143,8 @@ class DesktopMediaList { @@ -15,12 +22,12 @@ index 0c6fccf16a11bbaff10115308e4b489490e5d3e6..3b541e6830ca902cf45483a3193376c0 // delegated source list when it should be hidden. virtual void HideList() = 0; + -+ bool skip_next_refresh_ = false; ++ int skip_next_refresh_ = 0; }; #endif // CHROME_BROWSER_MEDIA_WEBRTC_DESKTOP_MEDIA_LIST_H_ diff --git a/chrome/browser/media/webrtc/desktop_media_list_base.cc b/chrome/browser/media/webrtc/desktop_media_list_base.cc -index 780927301744ea7312f230cec76a24a33d71f767..321d3ff46cbb67e880d5414d83a199fb16457038 100644 +index 780927301744ea7312f230cec76a24a33d71f767..d19b1cc9dedf839f12f4113db64293e5c8150f51 100644 --- a/chrome/browser/media/webrtc/desktop_media_list_base.cc +++ b/chrome/browser/media/webrtc/desktop_media_list_base.cc @@ -230,7 +230,11 @@ uint32_t DesktopMediaListBase::GetImageHash(const gfx::Image& image) { @@ -28,8 +35,8 @@ index 780927301744ea7312f230cec76a24a33d71f767..321d3ff46cbb67e880d5414d83a199fb DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK(refresh_callback_); - std::move(refresh_callback_).Run(); -+ if (skip_next_refresh_) { -+ skip_next_refresh_ = false; ++ if (skip_next_refresh_ > 0) { ++ skip_next_refresh_--; + } else { + std::move(refresh_callback_).Run(); + } diff --git a/shell/browser/api/electron_api_desktop_capturer.cc b/shell/browser/api/electron_api_desktop_capturer.cc index a99ec520c0..fc50e73ab8 100644 --- a/shell/browser/api/electron_api_desktop_capturer.cc +++ b/shell/browser/api/electron_api_desktop_capturer.cc @@ -305,7 +305,8 @@ void DesktopCapturer::StartHandling(bool capture_window, window_capturer_->SetThumbnailSize(thumbnail_size); #if BUILDFLAG(IS_MAC) window_capturer_->skip_next_refresh_ = - ShouldUseThumbnailCapturerMac(DesktopMediaList::Type::kWindow); + ShouldUseThumbnailCapturerMac(DesktopMediaList::Type::kWindow) ? 2 + : 0; #endif OnceCallback update_callback = base::BindOnce( @@ -334,7 +335,8 @@ void DesktopCapturer::StartHandling(bool capture_window, screen_capturer_->SetThumbnailSize(thumbnail_size); #if BUILDFLAG(IS_MAC) screen_capturer_->skip_next_refresh_ = - ShouldUseThumbnailCapturerMac(DesktopMediaList::Type::kScreen); + ShouldUseThumbnailCapturerMac(DesktopMediaList::Type::kScreen) ? 2 + : 0; #endif OnceCallback update_callback = base::BindOnce(