Use injected clock in DesktopCaptureOptions This will allow for desktop capturers to use an injected clock rather than the global clock methods. Bug: webrtc:42223992 Change-Id: I99ef447da8b3ce1dd9623a942064d1926a6a6964 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/464502 Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Commit-Queue: Evan Shrubsole <eshr@webrtc.org> Cr-Commit-Position: refs/heads/main@{#47489}
diff --git a/modules/desktop_capture/BUILD.gn b/modules/desktop_capture/BUILD.gn index 6b15ad7..ac1b886 100644 --- a/modules/desktop_capture/BUILD.gn +++ b/modules/desktop_capture/BUILD.gn
@@ -286,9 +286,12 @@ visibility = [ "*" ] defines = [] deps = [ + "../../api/environment", "../../media:video_common", "../../rtc_base/containers:flat_map", "../../rtc_base/containers:flat_set", + "../../system_wrappers", + "//third_party/abseil-cpp/absl/base:nullability", "//third_party/abseil-cpp/absl/memory", "//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/strings:string_view", @@ -667,6 +670,7 @@ "../../api:refcountedbase", "../../api:scoped_refptr", "../../api:sequence_checker", + "../../api/environment", "../../rtc_base:checks", "../../rtc_base:event_tracer", "../../rtc_base:logging", @@ -676,7 +680,9 @@ "../../rtc_base/synchronization:mutex", "../../rtc_base/system:rtc_export", "../../sdk:helpers_objc", + "../../system_wrappers", "//third_party/abseil-cpp/absl/base:core_headers", + "//third_party/abseil-cpp/absl/base:nullability", "//third_party/abseil-cpp/absl/strings:str_format", ] frameworks = [
diff --git a/modules/desktop_capture/desktop_capture_options.cc b/modules/desktop_capture/desktop_capture_options.cc index 97070d0..e5e3017 100644 --- a/modules/desktop_capture/desktop_capture_options.cc +++ b/modules/desktop_capture/desktop_capture_options.cc
@@ -24,21 +24,9 @@ namespace webrtc { -DesktopCaptureOptions::DesktopCaptureOptions() {} -DesktopCaptureOptions::DesktopCaptureOptions( - const DesktopCaptureOptions& options) = default; -DesktopCaptureOptions::DesktopCaptureOptions(DesktopCaptureOptions&& options) = - default; -DesktopCaptureOptions::~DesktopCaptureOptions() {} +namespace { -DesktopCaptureOptions& DesktopCaptureOptions::operator=( - const DesktopCaptureOptions& options) = default; -DesktopCaptureOptions& DesktopCaptureOptions::operator=( - DesktopCaptureOptions&& options) = default; - -// static -DesktopCaptureOptions DesktopCaptureOptions::CreateDefault() { - DesktopCaptureOptions result; +void ApplyDefaultSettings(DesktopCaptureOptions& result) { #if defined(WEBRTC_USE_X11) result.set_x_display(SharedXDisplay::CreateDefault()); #endif @@ -56,6 +44,36 @@ make_ref_counted<FullScreenWindowDetector>( CreateFullScreenWinApplicationHandler)); #endif +} + +} // namespace + +DesktopCaptureOptions::DesktopCaptureOptions() {} +DesktopCaptureOptions::DesktopCaptureOptions(const Environment& env) + : env_(env) {} +DesktopCaptureOptions::DesktopCaptureOptions( + const DesktopCaptureOptions& options) = default; +DesktopCaptureOptions::DesktopCaptureOptions(DesktopCaptureOptions&& options) = + default; +DesktopCaptureOptions::~DesktopCaptureOptions() {} + +DesktopCaptureOptions& DesktopCaptureOptions::operator=( + const DesktopCaptureOptions& options) = default; +DesktopCaptureOptions& DesktopCaptureOptions::operator=( + DesktopCaptureOptions&& options) = default; + +// static +DesktopCaptureOptions DesktopCaptureOptions::CreateDefault() { + DesktopCaptureOptions result; + ApplyDefaultSettings(result); + return result; +} + +// static +DesktopCaptureOptions DesktopCaptureOptions::CreateDefault( + const Environment& env) { + DesktopCaptureOptions result(env); + ApplyDefaultSettings(result); return result; }
diff --git a/modules/desktop_capture/desktop_capture_options.h b/modules/desktop_capture/desktop_capture_options.h index 9cba039..010e5e1 100644 --- a/modules/desktop_capture/desktop_capture_options.h +++ b/modules/desktop_capture/desktop_capture_options.h
@@ -12,6 +12,7 @@ #include <cstdint> +#include "api/environment/environment.h" #include "api/scoped_refptr.h" #include "rtc_base/system/rtc_export.h" @@ -32,6 +33,7 @@ #endif #include "modules/desktop_capture/full_screen_window_detector.h" +#include "system_wrappers/include/clock.h" namespace webrtc { @@ -43,8 +45,10 @@ // also initializes X window connection. x_display() will be set to null if // X11 connection failed (e.g. DISPLAY isn't set). static DesktopCaptureOptions CreateDefault(); + static DesktopCaptureOptions CreateDefault(const Environment& env); DesktopCaptureOptions(); + explicit DesktopCaptureOptions(const Environment& env); DesktopCaptureOptions(const DesktopCaptureOptions& options); DesktopCaptureOptions(DesktopCaptureOptions&& options); ~DesktopCaptureOptions(); @@ -52,6 +56,10 @@ DesktopCaptureOptions& operator=(const DesktopCaptureOptions& options); DesktopCaptureOptions& operator=(DesktopCaptureOptions&& options); + Clock& clock() const { + return env_.has_value() ? env_->clock() : *Clock::GetRealTimeClock(); + } + #if defined(WEBRTC_USE_X11) const scoped_refptr<SharedXDisplay>& x_display() const { return x_display_; } void set_x_display(scoped_refptr<SharedXDisplay> x_display) { @@ -313,6 +321,7 @@ bool disable_effects_ = true; bool detect_updated_region_ = false; bool prefer_cursor_embedded_ = false; + std::optional<Environment> env_; #if defined(WEBRTC_USE_PIPEWIRE) bool allow_pipewire_ = false; bool pipewire_use_damage_region_ = true;
diff --git a/modules/desktop_capture/linux/x11/mouse_cursor_monitor_x11.h b/modules/desktop_capture/linux/x11/mouse_cursor_monitor_x11.h index 855d5c6..4167e08 100644 --- a/modules/desktop_capture/linux/x11/mouse_cursor_monitor_x11.h +++ b/modules/desktop_capture/linux/x11/mouse_cursor_monitor_x11.h
@@ -13,6 +13,10 @@ #include <X11/X.h> +// X11 creates a CurrentTime macro, which causes compilation errors when +// including webrtc::Clock. +#undef CurrentTime + #include <memory> #include "api/scoped_refptr.h"
diff --git a/modules/desktop_capture/linux/x11/screen_capturer_x11.h b/modules/desktop_capture/linux/x11/screen_capturer_x11.h index 4379094..bd423ea 100644 --- a/modules/desktop_capture/linux/x11/screen_capturer_x11.h +++ b/modules/desktop_capture/linux/x11/screen_capturer_x11.h
@@ -17,6 +17,10 @@ #include <X11/extensions/Xfixes.h> #include <X11/extensions/Xrandr.h> +// X11 creates a CurrentTime macro, which causes compilation errors when +// including webrtc::Clock. +#undef CurrentTime + #include <memory> #include "modules/desktop_capture/desktop_capture_options.h"
diff --git a/modules/desktop_capture/linux/x11/window_capturer_x11.h b/modules/desktop_capture/linux/x11/window_capturer_x11.h index 2605c54..67d001f 100644 --- a/modules/desktop_capture/linux/x11/window_capturer_x11.h +++ b/modules/desktop_capture/linux/x11/window_capturer_x11.h
@@ -14,6 +14,10 @@ #include <X11/X.h> #include <X11/Xlib.h> +// X11 creates a CurrentTime macro, which causes compilation errors when +// including webrtc::Clock. +#undef CurrentTime + #include <memory> #include <string>