perf: don't wait for thumbnails if they were not requested on macOS (#46138)

When using the SCK thumbnail capturer, the first refresh has the list of
sources, and the second refresh has the thumbnails. If thumbnails are
not needed, only wait for the first refresh.
This commit is contained in:
John Beutner 2025-03-25 07:20:38 -04:00 committed by GitHub
parent 307d4f94c7
commit cf82c3215f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 22 additions and 4 deletions

View file

@ -328,8 +328,9 @@ void DesktopCapturer::StartHandling(bool capture_window,
window_capturer_->SetThumbnailSize(thumbnail_size);
#if BUILDFLAG(IS_MAC)
window_capturer_->skip_next_refresh_ =
ShouldUseThumbnailCapturerMac(DesktopMediaList::Type::kWindow) ? 2
: 0;
ShouldUseThumbnailCapturerMac(DesktopMediaList::Type::kWindow)
? thumbnail_size.IsEmpty() ? 1 : 2
: 0;
#endif
OnceCallback update_callback = base::BindOnce(
@ -358,8 +359,9 @@ void DesktopCapturer::StartHandling(bool capture_window,
screen_capturer_->SetThumbnailSize(thumbnail_size);
#if BUILDFLAG(IS_MAC)
screen_capturer_->skip_next_refresh_ =
ShouldUseThumbnailCapturerMac(DesktopMediaList::Type::kScreen) ? 2
: 0;
ShouldUseThumbnailCapturerMac(DesktopMediaList::Type::kScreen)
? thumbnail_size.IsEmpty() ? 1 : 2
: 0;
#endif
OnceCallback update_callback = base::BindOnce(

View file

@ -67,6 +67,22 @@ ifdescribe(!process.arch.includes('arm') && process.platform !== 'win32')('deskt
}
});
it('enabling thumbnail should return non-empty images', async () => {
const w2 = new BrowserWindow({ show: false, width: 200, height: 200, webPreferences: { contextIsolation: false } });
const wShown = once(w2, 'show');
w2.show();
await wShown;
const isNonEmpties: boolean[] = (await desktopCapturer.getSources({
types: ['window', 'screen'],
thumbnailSize: { width: 100, height: 100 }
})).map(s => s.thumbnail.constructor.name === 'NativeImage' && !s.thumbnail.isEmpty());
w2.destroy();
expect(isNonEmpties).to.be.an('array').that.is.not.empty();
expect(isNonEmpties.every(e => e === true)).to.be.true();
});
it('disabling thumbnail should return empty images', async () => {
const w2 = new BrowserWindow({ show: false, width: 200, height: 200, webPreferences: { contextIsolation: false } });
const wShown = once(w2, 'show');