From 726992d7a4722b8a283d797d04432d0c6335ca96 Mon Sep 17 00:00:00 2001 From: Mirko Bonadei Date: Mon, 17 Jul 2023 06:47:51 +0000 Subject: [PATCH] Revert "[fuchsia] remove Scenic and GFX dependencies in DesktopCapturer" This reverts commit fe5be2eb4ff8dccd96257fb8cbf32500c636c358. Reason for revert: This breaks the WebRTC roll into Chromium: - https://chromium-review.googlesource.com/c/chromium/src/+/4688561 - https://ci.chromium.org/ui/p/chromium/builders/try/fuchsia-binary-size/399140/overview Error: [4273/4389] CXX obj/third_party/webrtc/modules/desktop_capture/desktop_capture/screen_capturer_fuchsia.o FAILED: obj/third_party/webrtc/modules/desktop_capture/desktop_capture/screen_capturer_fuchsia.o ../../buildtools/reclient/rewrapper -cfg=../../buildtools/reclient_cfgs/chromium-browser-clang/rewra...(too long) ../../third_party/webrtc/modules/desktop_capture/screen_capturer_fuchsia.cc:59:10: error: use of undeclared identifier 'capturer' 59 | return capturer(new ScreenCapturerFuchsia()); | ^ ../../third_party/webrtc/modules/desktop_capture/screen_capturer_fuchsia.cc:199:36: error: no type named 'InfoSyncPtr' in namespace 'fuchsia::ui::display::singleton' Original change's description: > [fuchsia] remove Scenic and GFX dependencies in DesktopCapturer > > We previously used: > - fuchsia.ui.scenic.Scenic/UsesFlatland to determine whether to use > Flatland; from now on it should always be the case, so this check is > no longer necessary. > - fuchsia.ui.scenic.Scenic/GetDisplayInfo to get > fuchsia.ui.gfx.DisplayInfo. This has been migrated to > fuchsia.ui.display.singleton.Info/GetMetrics and > fuchsia.ui.display.singleton.Metrics. > > Bug: fuchsia:100303 > Change-Id: I147da9ffdf0ca49e1c5bde5d188e434fc660becc > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/311860 > Reviewed-by: Emircan Uysaler > Reviewed-by: Alexander Cooper > Commit-Queue: Caroline Liu > Cr-Commit-Position: refs/heads/main@{#40432} Bug: fuchsia:100303, b/291393959 Change-Id: Iae70e568a8c9819e40e48069af8cea0d4ef2b6c5 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/311801 Owners-Override: Mirko Bonadei Bot-Commit: rubber-stamper@appspot.gserviceaccount.com Commit-Queue: Mirko Bonadei Cr-Commit-Position: refs/heads/main@{#40436} --- modules/desktop_capture/BUILD.gn | 3 +- .../screen_capturer_fuchsia.cc | 50 +++++++++++++++---- .../desktop_capture/screen_capturer_fuchsia.h | 2 + 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/modules/desktop_capture/BUILD.gn b/modules/desktop_capture/BUILD.gn index 068cc2e8aa..6f3e9d26c5 100644 --- a/modules/desktop_capture/BUILD.gn +++ b/modules/desktop_capture/BUILD.gn @@ -451,7 +451,8 @@ rtc_library("desktop_capture") { "../../rtc_base:divide_round", "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.sysmem", "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.ui.composition", - "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.ui.display.singleton", + "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.ui.scenic", + "//third_party/fuchsia-sdk/sdk/pkg/scenic_cpp", "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp", ] } diff --git a/modules/desktop_capture/screen_capturer_fuchsia.cc b/modules/desktop_capture/screen_capturer_fuchsia.cc index 1072b93d63..19c4c735ad 100644 --- a/modules/desktop_capture/screen_capturer_fuchsia.cc +++ b/modules/desktop_capture/screen_capturer_fuchsia.cc @@ -12,7 +12,7 @@ #include #include -#include +#include #include #include @@ -56,7 +56,17 @@ size_t RoundUpToMultiple(size_t value, size_t multiple) { std::unique_ptr DesktopCapturer::CreateRawScreenCapturer( const DesktopCaptureOptions& options) { - return capturer(new ScreenCapturerFuchsia()); + if (ScreenCapturerFuchsia::CheckRequirements()) { + std::unique_ptr capturer( + new ScreenCapturerFuchsia()); + return capturer; + } + return nullptr; +} + +ScreenCapturerFuchsia::ScreenCapturerFuchsia() + : component_context_(sys::ComponentContext::Create()) { + RTC_DCHECK(CheckRequirements()); } ScreenCapturerFuchsia::~ScreenCapturerFuchsia() { @@ -72,6 +82,26 @@ ScreenCapturerFuchsia::~ScreenCapturerFuchsia() { } } +// TODO(fxbug.dev/100303): Remove this function when Flatland is the only API. +bool ScreenCapturerFuchsia::CheckRequirements() { + std::unique_ptr component_context = + sys::ComponentContext::Create(); + fuchsia::ui::scenic::ScenicSyncPtr scenic; + zx_status_t status = component_context->svc()->Connect(scenic.NewRequest()); + if (status != ZX_OK) { + RTC_LOG(LS_ERROR) << "Failed to connect to Scenic: " << status; + return false; + } + + bool scenic_uses_flatland = false; + scenic->UsesFlatland(&scenic_uses_flatland); + if (!scenic_uses_flatland) { + RTC_LOG(LS_ERROR) << "Screen capture not supported without Flatland."; + } + + return scenic_uses_flatland; +} + void ScreenCapturerFuchsia::Start(Callback* callback) { RTC_DCHECK(!callback_); RTC_DCHECK(callback); @@ -196,26 +226,24 @@ ScreenCapturerFuchsia::GetBufferConstraints() { } void ScreenCapturerFuchsia::SetupBuffers() { - fuchsia::ui::display::singleton::InfoSyncPtr display_info; - zx_status_t status = - component_context_->svc()->Connect(display_info.NewRequest()); + fuchsia::ui::scenic::ScenicSyncPtr scenic; + zx_status_t status = component_context_->svc()->Connect(scenic.NewRequest()); if (status != ZX_OK) { fatal_error_ = true; - RTC_LOG(LS_ERROR) - << "Failed to connect to fuchsia.ui.display.singleton.Info: " << status; + RTC_LOG(LS_ERROR) << "Failed to connect to Scenic: " << status; return; } - fuchsia::ui::display::singleton::Metrics metrics; - status = display_info->GetMetrics(&metrics); + fuchsia::ui::gfx::DisplayInfo display_info; + status = scenic->GetDisplayInfo(&display_info); if (status != ZX_OK) { fatal_error_ = true; RTC_LOG(LS_ERROR) << "Failed to connect to get display dimensions: " << status; return; } - width_ = metrics.extent_in_px().width; - height_ = metrics.extent_in_px().height; + width_ = display_info.width_in_px; + height_ = display_info.height_in_px; status = component_context_->svc()->Connect(sysmem_allocator_.NewRequest()); if (status != ZX_OK) { diff --git a/modules/desktop_capture/screen_capturer_fuchsia.h b/modules/desktop_capture/screen_capturer_fuchsia.h index 6e0f87cc58..444930963f 100644 --- a/modules/desktop_capture/screen_capturer_fuchsia.h +++ b/modules/desktop_capture/screen_capturer_fuchsia.h @@ -29,6 +29,8 @@ class ScreenCapturerFuchsia final : public DesktopCapturer { ScreenCapturerFuchsia(); ~ScreenCapturerFuchsia() override; + static bool CheckRequirements(); + // DesktopCapturer interface. void Start(Callback* callback) override; void CaptureFrame() override;