tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 48f708b060f926a7a204bf52539b6aa355e2850f
parent 231f77a6353a04c1e2e573d67a694143bbadbf03
Author: Dan Baker <dbaker@mozilla.com>
Date:   Wed, 19 Nov 2025 19:24:03 -0700

Bug 2000941 - Vendor libwebrtc from db0e64c5e8

We already cherry-picked this when we vendored 5b634ccedc.

Upstream commit: https://webrtc.googlesource.com/src/+/db0e64c5e80168839d74ae0cc6173ccd537ae211
    Revert "Remove use of global clocks in TestClient"

    This reverts commit 5b634ccedca5ab7969edc68fca15d327aa0440d3.

    Reason for revert: Breaks downstream

    Bug: webrtc:42223992
    Original change's description:
    > Remove use of global clocks in TestClient
    >
    > The functions that are relevant here can be abstracted away with
    > WaitUntil, which is available since this is a test-only target. This
    > may be updated once the ClockVariant is simplified to relevant clocks
    > for testing.
    >
    > Bug: webrtc:42223992
    > Change-Id: I68a0514be56931e44777f4cd086f5ea794da377a
    > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/407405
    > Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
    > Commit-Queue: Evan Shrubsole <eshr@webrtc.org>
    > Auto-Submit: Evan Shrubsole <eshr@webrtc.org>
    > Cr-Commit-Position: refs/heads/main@{#45529}

    Bug: webrtc:42223992
    No-Presubmit: true
    No-Tree-Checks: true
    No-Try: true
    Change-Id: I6bc22c6d604536a3eb163dbef77b025ff2cd124a
    Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/407442
    Auto-Submit: Evan Shrubsole <eshr@webrtc.org>
    Reviewed-by: Harald Alvestrand <hta@webrtc.org>
    Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
    Commit-Queue: Harald Alvestrand <hta@webrtc.org>
    Cr-Commit-Position: refs/heads/main@{#45531}

Diffstat:
Mthird_party/libwebrtc/README.mozilla.last-vendor | 4++--
Dthird_party/libwebrtc/moz-patch-stack/db0e64c5e8.no-op-cherry-pick-msg | 1-
Mthird_party/libwebrtc/moz-patch-stack/p0001.patch | 352+++++++++++++------------------------------------------------------------------
Mthird_party/libwebrtc/moz-patch-stack/p0002.patch | 380+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
Dthird_party/libwebrtc/moz-patch-stack/p0003.patch | 331-------------------------------------------------------------------------------
5 files changed, 382 insertions(+), 686 deletions(-)

diff --git a/third_party/libwebrtc/README.mozilla.last-vendor b/third_party/libwebrtc/README.mozilla.last-vendor @@ -1,4 +1,4 @@ # ./mach python dom/media/webrtc/third_party_build/vendor-libwebrtc.py --from-local /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc --commit mozpatches libwebrtc -libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-11-20T01:51:00.752853+00:00. +libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-11-20T02:23:50.116134+00:00. # base of lastest vendoring -91d13f7105 +db0e64c5e8 diff --git a/third_party/libwebrtc/moz-patch-stack/db0e64c5e8.no-op-cherry-pick-msg b/third_party/libwebrtc/moz-patch-stack/db0e64c5e8.no-op-cherry-pick-msg @@ -1 +0,0 @@ -We already cherry-picked this when we vendored 5b634ccedc. diff --git a/third_party/libwebrtc/moz-patch-stack/p0001.patch b/third_party/libwebrtc/moz-patch-stack/p0001.patch @@ -1,303 +1,61 @@ -From: Daniel Baker <dbaker@mozilla.com> -Date: Wed, 19 Nov 2025 17:59:49 -0700 -Subject: (tmp-cherry-pick) Revert "Remove use of global clocks in TestClient" - (db0e64c5e8) +From: =?UTF-8?q?Henrik=20Bostr=C3=B6m?= <hbos@webrtc.org> +Date: Wed, 10 Sep 2025 12:47:04 +0200 +Subject: (cherry-pick-branch-heads/7390) [M141] Do not hide inbound-rtp if + media is received. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit -This reverts commit 5b634ccedca5ab7969edc68fca15d327aa0440d3. +This condition neglected the fact that if Insertable Streams API is used +we can have frames or samples despite packets never being received. -Reason for revert: Breaks downstream +This CL fixes this unintended regression. -Bug: webrtc:42223992 -Original change's description: -> Remove use of global clocks in TestClient -> -> The functions that are relevant here can be abstracted away with -> WaitUntil, which is available since this is a test-only target. This -> may be updated once the ClockVariant is simplified to relevant clocks -> for testing. -> -> Bug: webrtc:42223992 -> Change-Id: I68a0514be56931e44777f4cd086f5ea794da377a -> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/407405 -> Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> -> Commit-Queue: Evan Shrubsole <eshr@webrtc.org> -> Auto-Submit: Evan Shrubsole <eshr@webrtc.org> -> Cr-Commit-Position: refs/heads/main@{#45529} +# Ignore unrelated compile issues on ios webrtc bots +NOTRY=True -Bug: webrtc:42223992 -No-Presubmit: true -No-Tree-Checks: true -No-Try: true -Change-Id: I6bc22c6d604536a3eb163dbef77b025ff2cd124a -Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/407442 -Auto-Submit: Evan Shrubsole <eshr@webrtc.org> -Reviewed-by: Harald Alvestrand <hta@webrtc.org> -Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> -Commit-Queue: Harald Alvestrand <hta@webrtc.org> -Cr-Commit-Position: refs/heads/main@{#45531} +(cherry picked from commit c15949eda5a00122e2f3b5a643e15781049b9927) + +Bug: chromium:444048024, chromium:444384230 +Change-Id: Ie6e17a3bc96701476787f5898446f3f706715d15 +Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/408884 +Commit-Queue: Guido Urdaneta <guidou@webrtc.org> +Reviewed-by: Guido Urdaneta <guidou@webrtc.org> +Auto-Submit: Henrik Boström <hbos@webrtc.org> +Commit-Queue: Henrik Boström <hbos@webrtc.org> +Cr-Original-Commit-Position: refs/heads/main@{#45616} +Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/409020 +Cr-Commit-Position: refs/branch-heads/7390@{#2} +Cr-Branched-From: 2f553bf8d573c90176d51559b76dfc836996c8f5-refs/heads/main@{#45520} --- - p2p/test/stun_server_unittest.cc | 2 +- - rtc_base/BUILD.gn | 1 - - rtc_base/socket_unittest.cc | 6 ++-- - rtc_base/test_client.cc | 58 +++++++++++++++++++++----------- - rtc_base/test_client.h | 18 +++++----- - 5 files changed, 51 insertions(+), 34 deletions(-) + pc/rtc_stats_collector.cc | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) -diff --git a/p2p/test/stun_server_unittest.cc b/p2p/test/stun_server_unittest.cc -index 085fbc2a85..8baa8b7b37 100644 ---- a/p2p/test/stun_server_unittest.cc -+++ b/p2p/test/stun_server_unittest.cc -@@ -54,7 +54,7 @@ class StunServerTest : public ::testing::Test { - StunMessage* Receive() { - StunMessage* msg = nullptr; - std::unique_ptr<TestClient::Packet> packet = -- client_->NextPacket(TestClient::kTimeout); -+ client_->NextPacket(TestClient::kTimeoutMs); - if (packet) { - ByteBufferReader buf(packet->buf); - msg = new StunMessage(); -diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn -index 4ee00c8848..27cf292d16 100644 ---- a/rtc_base/BUILD.gn -+++ b/rtc_base/BUILD.gn -@@ -1722,7 +1722,6 @@ rtc_library("testclient") { - ":timeutils", - "../api/units:time_delta", - "../api/units:timestamp", -- "../test:wait_until", - "network:received_packet", - "synchronization:mutex", - "third_party/sigslot", -diff --git a/rtc_base/socket_unittest.cc b/rtc_base/socket_unittest.cc -index d258f3d7c7..90dd485544 100644 ---- a/rtc_base/socket_unittest.cc -+++ b/rtc_base/socket_unittest.cc -@@ -1266,15 +1266,13 @@ void SocketTest::UdpSocketRecvTimestampUseRtcEpoch(const IPAddress& loopback) { - - SocketAddress addr2; - client2->SendTo("foo", 3, address); -- std::unique_ptr<TestClient::Packet> packet_1 = -- client1->NextPacket(TimeDelta::Seconds(10)); -+ std::unique_ptr<TestClient::Packet> packet_1 = client1->NextPacket(10000); - ASSERT_TRUE(packet_1 != nullptr); - EXPECT_NEAR(packet_1->packet_time->us(), TimeMicros(), 1000'000); - - Thread::SleepMs(100); - client2->SendTo("bar", 3, address); -- std::unique_ptr<TestClient::Packet> packet_2 = -- client1->NextPacket(TimeDelta::Seconds(10)); -+ std::unique_ptr<TestClient::Packet> packet_2 = client1->NextPacket(10000); - ASSERT_TRUE(packet_2 != nullptr); - EXPECT_GT(packet_2->packet_time->us(), packet_1->packet_time->us()); - EXPECT_NEAR(packet_2->packet_time->us(), TimeMicros(), 1000'000); -diff --git a/rtc_base/test_client.cc b/rtc_base/test_client.cc -index ff28deaa6a..a7577d54bd 100644 ---- a/rtc_base/test_client.cc -+++ b/rtc_base/test_client.cc -@@ -10,20 +10,22 @@ - - #include "rtc_base/test_client.h" - -+#include <cstdint> - #include <cstring> - #include <memory> - #include <optional> - #include <utility> --#include <variant> - - #include "api/units/time_delta.h" - #include "api/units/timestamp.h" - #include "rtc_base/async_packet_socket.h" -+#include "rtc_base/fake_clock.h" - #include "rtc_base/network/received_packet.h" - #include "rtc_base/socket.h" - #include "rtc_base/socket_address.h" - #include "rtc_base/synchronization/mutex.h" --#include "test/wait_until.h" -+#include "rtc_base/thread.h" -+#include "rtc_base/time_utils.h" - - namespace webrtc { - -@@ -32,11 +34,11 @@ namespace webrtc { - // NextPacket. - - TestClient::TestClient(std::unique_ptr<AsyncPacketSocket> socket) -- : TestClient(std::move(socket), std::monostate()) {} -+ : TestClient(std::move(socket), nullptr) {} - - TestClient::TestClient(std::unique_ptr<AsyncPacketSocket> socket, -- ClockVariant clock) -- : clock_(clock), socket_(std::move(socket)) { -+ ThreadProcessingFakeClock* fake_clock) -+ : fake_clock_(fake_clock), socket_(std::move(socket)) { - socket_->RegisterReceivedPacketCallback( - [&](AsyncPacketSocket* socket, const ReceivedIpPacket& packet) { - OnPacket(socket, packet); -@@ -48,8 +50,11 @@ TestClient::~TestClient() {} - - bool TestClient::CheckConnState(AsyncPacketSocket::State state) { - // Wait for our timeout value until the socket reaches the desired state. -- return WaitUntil([&]() { return socket_->GetState() == state; }, -- {.clock = clock_}); -+ int64_t end = TimeAfter(kTimeoutMs); -+ while (socket_->GetState() != state && TimeUntil(end) > 0) { -+ AdvanceTime(1); -+ } -+ return (socket_->GetState() == state); - } - - int TestClient::Send(const char* buf, size_t size) { -@@ -64,7 +69,7 @@ int TestClient::SendTo(const char* buf, - return socket_->SendTo(buf, size, dest, options); - } - --std::unique_ptr<TestClient::Packet> TestClient::NextPacket(TimeDelta timeout) { -+std::unique_ptr<TestClient::Packet> TestClient::NextPacket(int timeout_ms) { - // If no packets are currently available, we go into a get/dispatch loop for - // at most timeout_ms. If, during the loop, a packet arrives, then we can - // stop early and return it. -@@ -76,20 +81,21 @@ std::unique_ptr<TestClient::Packet> TestClient::NextPacket(TimeDelta timeout) { - // Pumping another thread's queue could lead to messages being dispatched from - // the wrong thread to non-thread-safe objects. - -- bool packets_available = WaitUntil( -- [&] { -- MutexLock lock(&mutex_); -- return !packets_.empty(); -- }, -- { -- .timeout = timeout, -- .clock = clock_, -- }); -+ int64_t end = TimeAfter(timeout_ms); -+ while (TimeUntil(end) > 0) { -+ { -+ MutexLock lock(&mutex_); -+ if (!packets_.empty()) { -+ break; -+ } -+ } -+ AdvanceTime(1); -+ } - - // Return the first packet placed in the queue. - std::unique_ptr<Packet> packet; - MutexLock lock(&mutex_); -- if (packets_available) { -+ if (!packets_.empty()) { - packet = std::move(packets_.front()); - packets_.erase(packets_.begin()); - } -@@ -101,7 +107,7 @@ bool TestClient::CheckNextPacket(const char* buf, - size_t size, - SocketAddress* addr) { - bool res = false; -- std::unique_ptr<Packet> packet = NextPacket(kTimeout); -+ std::unique_ptr<Packet> packet = NextPacket(kTimeoutMs); - if (packet) { - res = (packet->buf.size() == size && - memcmp(packet->buf.data(), buf, size) == 0 && -@@ -126,8 +132,20 @@ bool TestClient::CheckTimestamp(std::optional<Timestamp> packet_timestamp) { - return res; - } - -+void TestClient::AdvanceTime(int ms) { -+ // If the test is using a fake clock, we must advance the fake clock to -+ // advance time. Otherwise, ProcessMessages will work. -+ if (fake_clock_) { -+ for (int64_t start = TimeMillis(); TimeMillis() < start + ms;) { -+ fake_clock_->AdvanceTime(TimeDelta::Millis(1)); -+ }; -+ } else { -+ Thread::Current()->ProcessMessages(1); -+ } -+} -+ - bool TestClient::CheckNoPacket() { -- return NextPacket(kNoPacketTimeout) == nullptr; -+ return NextPacket(kNoPacketTimeoutMs) == nullptr; - } - - int TestClient::GetError() { -diff --git a/rtc_base/test_client.h b/rtc_base/test_client.h -index 7a7d77106b..355f578711 100644 ---- a/rtc_base/test_client.h -+++ b/rtc_base/test_client.h -@@ -16,16 +16,15 @@ - #include <optional> - #include <vector> - --#include "api/units/time_delta.h" - #include "api/units/timestamp.h" - #include "rtc_base/async_packet_socket.h" - #include "rtc_base/buffer.h" -+#include "rtc_base/fake_clock.h" - #include "rtc_base/network/received_packet.h" - #include "rtc_base/socket.h" - #include "rtc_base/socket_address.h" - #include "rtc_base/synchronization/mutex.h" - #include "rtc_base/third_party/sigslot/sigslot.h" --#include "test/wait_until.h" - - namespace webrtc { - -@@ -44,7 +43,7 @@ class TestClient : public sigslot::has_slots<> { - }; - - // Default timeout for NextPacket reads. -- static constexpr TimeDelta kTimeout = TimeDelta::Seconds(5); -+ static const int kTimeoutMs = 5000; - - // Creates a client that will send and receive with the given socket and - // will post itself messages with the given thread. -@@ -52,7 +51,8 @@ class TestClient : public sigslot::has_slots<> { - // Create a test client that will use a fake clock. NextPacket needs to wait - // for a packet to be received, and thus it needs to advance the fake clock - // if the test is using one, rather than just sleeping. -- TestClient(std::unique_ptr<AsyncPacketSocket> socket, ClockVariant clock); -+ TestClient(std::unique_ptr<AsyncPacketSocket> socket, -+ ThreadProcessingFakeClock* fake_clock); - ~TestClient() override; - - TestClient(const TestClient&) = delete; -@@ -77,11 +77,11 @@ class TestClient : public sigslot::has_slots<> { - - // Returns the next packet received by the client or null if none is received - // within the specified timeout. -- std::unique_ptr<Packet> NextPacket(TimeDelta timeout); -+ std::unique_ptr<Packet> NextPacket(int timeout_ms); - - // Checks that the next packet has the given contents. Returns the remote - // address that the packet was sent from. -- bool CheckNextPacket(const char* buf, size_t size, SocketAddress* addr); -+ bool CheckNextPacket(const char* buf, size_t len, SocketAddress* addr); - - // Checks that no packets have arrived or will arrive in the next second. - bool CheckNoPacket(); -@@ -96,7 +96,7 @@ class TestClient : public sigslot::has_slots<> { - - private: - // Timeout for reads when no packet is expected. -- static constexpr TimeDelta kNoPacketTimeout = TimeDelta::Seconds(1); -+ static const int kNoPacketTimeoutMs = 1000; - // Workaround for the fact that AsyncPacketSocket::GetConnState doesn't exist. - Socket::ConnState GetState(); - -@@ -104,8 +104,9 @@ class TestClient : public sigslot::has_slots<> { - const ReceivedIpPacket& received_packet); - void OnReadyToSend(AsyncPacketSocket* socket); - bool CheckTimestamp(std::optional<Timestamp> packet_timestamp); -+ void AdvanceTime(int ms); - -- ClockVariant clock_; -+ ThreadProcessingFakeClock* fake_clock_ = nullptr; - Mutex mutex_; - std::unique_ptr<AsyncPacketSocket> socket_; - std::vector<std::unique_ptr<Packet>> packets_; -@@ -115,4 +116,5 @@ class TestClient : public sigslot::has_slots<> { - - } // namespace webrtc - -+ - #endif // RTC_BASE_TEST_CLIENT_H_ +diff --git a/pc/rtc_stats_collector.cc b/pc/rtc_stats_collector.cc +index 8686143e68..8d6cc22426 100644 +--- a/pc/rtc_stats_collector.cc ++++ b/pc/rtc_stats_collector.cc +@@ -1754,7 +1754,10 @@ void RTCStatsCollector::ProduceAudioRTPStreamStats_n( + if (!voice_receiver_info.connected()) { + continue; // The SSRC is not known yet. + } +- if (spec_lifetime && voice_receiver_info.packets_received == 0) { ++ // Check both packets received and samples received to handle the Insertable ++ // Streams use case of receiving media without receiving packets. ++ if (spec_lifetime && voice_receiver_info.packets_received == 0 && ++ voice_receiver_info.total_samples_received == 0) { + // The SSRC is known despite not receiving any packets. This happens if + // SSRC is signalled in the SDP which we should not rely on for getStats. + continue; +@@ -1868,7 +1871,10 @@ void RTCStatsCollector::ProduceVideoRTPStreamStats_n( + if (!video_receiver_info.connected()) { + continue; // The SSRC is not known yet. + } +- if (spec_lifetime && video_receiver_info.packets_received == 0) { ++ // Check both packets received and frames received to handle the Insertable ++ // Streams use case of receiving media without receiving packets. ++ if (spec_lifetime && video_receiver_info.packets_received == 0 && ++ video_receiver_info.frames_received == 0) { + // The SSRC is known despite not receiving any packets. This happens if + // SSRC is signalled in the SDP which we should not rely on for getStats. + continue; diff --git a/third_party/libwebrtc/moz-patch-stack/p0002.patch b/third_party/libwebrtc/moz-patch-stack/p0002.patch @@ -1,61 +1,331 @@ -From: =?UTF-8?q?Henrik=20Bostr=C3=B6m?= <hbos@webrtc.org> -Date: Wed, 10 Sep 2025 12:47:04 +0200 -Subject: (cherry-pick-branch-heads/7390) [M141] Do not hide inbound-rtp if - media is received. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit +From: Palak Agarwal <agpalak@google.com> +Date: Tue, 7 Oct 2025 13:45:52 +0200 +Subject: (cherry-pick-branch-heads/7390) [M141] Add logging while creating + {Window|Screen}Capturer -This condition neglected the fact that if Insertable Streams API is used -we can have frames or samples despite packets never being received. +(cherry picked from commit 6908505ae0eba5d530ad0bb4b37d4654a4f36c95) -This CL fixes this unintended regression. - -# Ignore unrelated compile issues on ios webrtc bots -NOTRY=True - -(cherry picked from commit c15949eda5a00122e2f3b5a643e15781049b9927) - -Bug: chromium:444048024, chromium:444384230 -Change-Id: Ie6e17a3bc96701476787f5898446f3f706715d15 -Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/408884 -Commit-Queue: Guido Urdaneta <guidou@webrtc.org> -Reviewed-by: Guido Urdaneta <guidou@webrtc.org> -Auto-Submit: Henrik Boström <hbos@webrtc.org> -Commit-Queue: Henrik Boström <hbos@webrtc.org> -Cr-Original-Commit-Position: refs/heads/main@{#45616} -Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/409020 -Cr-Commit-Position: refs/branch-heads/7390@{#2} +Fixed: chromium:450184498 +Bug: chromium:448881311 +Change-Id: I0f043f58bf831e6822451cac99a8972a054ffdf7 +Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/414800 +Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> +Reviewed-by: Harald Alvestrand <hta@webrtc.org> +Commit-Queue: Palak Agarwal <agpalak@google.com> +Cr-Original-Commit-Position: refs/heads/main@{#45856} +Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/415420 +Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org> +Cr-Commit-Position: refs/branch-heads/7390@{#3} Cr-Branched-From: 2f553bf8d573c90176d51559b76dfc836996c8f5-refs/heads/main@{#45520} --- - pc/rtc_stats_collector.cc | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) + modules/desktop_capture/desktop_capturer.cc | 15 +++++++++++++++ + .../linux/x11/screen_capturer_x11.cc | 6 ++++++ + .../linux/x11/window_capturer_x11.cc | 4 ++++ + modules/desktop_capture/screen_capturer_darwin.mm | 7 +++++++ + .../desktop_capture/screen_capturer_fuchsia.cc | 3 +++ + modules/desktop_capture/screen_capturer_linux.cc | 4 ++++ + modules/desktop_capture/screen_capturer_null.cc | 4 ++++ + modules/desktop_capture/screen_capturer_win.cc | 6 ++++++ + modules/desktop_capture/window_capturer_linux.cc | 4 ++++ + modules/desktop_capture/window_capturer_mac.mm | 2 ++ + modules/desktop_capture/window_capturer_null.cc | 3 +++ + modules/desktop_capture/window_capturer_win.cc | 7 +++++++ + 12 files changed, 65 insertions(+) -diff --git a/pc/rtc_stats_collector.cc b/pc/rtc_stats_collector.cc -index 8686143e68..8d6cc22426 100644 ---- a/pc/rtc_stats_collector.cc -+++ b/pc/rtc_stats_collector.cc -@@ -1754,7 +1754,10 @@ void RTCStatsCollector::ProduceAudioRTPStreamStats_n( - if (!voice_receiver_info.connected()) { - continue; // The SSRC is not known yet. - } -- if (spec_lifetime && voice_receiver_info.packets_received == 0) { -+ // Check both packets received and samples received to handle the Insertable -+ // Streams use case of receiving media without receiving packets. -+ if (spec_lifetime && voice_receiver_info.packets_received == 0 && -+ voice_receiver_info.total_samples_received == 0) { - // The SSRC is known despite not receiving any packets. This happens if - // SSRC is signalled in the SDP which we should not rely on for getStats. - continue; -@@ -1868,7 +1871,10 @@ void RTCStatsCollector::ProduceVideoRTPStreamStats_n( - if (!video_receiver_info.connected()) { - continue; // The SSRC is not known yet. +diff --git a/modules/desktop_capture/desktop_capturer.cc b/modules/desktop_capture/desktop_capturer.cc +index ae9aba26ee..bf63f73178 100644 +--- a/modules/desktop_capture/desktop_capturer.cc ++++ b/modules/desktop_capture/desktop_capturer.cc +@@ -21,6 +21,7 @@ + #include "modules/desktop_capture/desktop_capturer_differ_wrapper.h" + #include "modules/desktop_capture/desktop_geometry.h" + #include "modules/desktop_capture/shared_memory.h" ++#include "rtc_base/logging.h" + #include "system_wrappers/include/metrics.h" + + #if defined(WEBRTC_WIN) +@@ -81,18 +82,26 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateWindowCapturer( + #if defined(RTC_ENABLE_WIN_WGC) + if (options.allow_wgc_window_capturer() && + IsWgcSupported(CaptureType::kWindow)) { ++ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateWindowCapturer " ++ "creates DesktopCapturer of type WgcCapturerWin"; + return WgcCapturerWin::CreateRawWindowCapturer(options); + } + #endif // defined(RTC_ENABLE_WIN_WGC) + + #if defined(WEBRTC_WIN) + if (options.allow_cropping_window_capturer()) { ++ RTC_LOG(LS_INFO) ++ << "video capture: DesktopCapturer::CreateWindowCapturer " ++ "creates DesktopCapturer of type CroppingWindowCapturerWin"; + return CroppingWindowCapturer::CreateCapturer(options); + } + #endif // defined(WEBRTC_WIN) + + std::unique_ptr<DesktopCapturer> capturer = CreateRawWindowCapturer(options); + if (capturer && options.detect_updated_region()) { ++ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateWindowCapturer " ++ "creates DesktopCapturer of type " ++ "DesktopCapturerDifferWrapper over a base capturer"; + capturer.reset(new DesktopCapturerDifferWrapper(std::move(capturer))); + } + +@@ -105,12 +114,18 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateScreenCapturer( + #if defined(RTC_ENABLE_WIN_WGC) + if (options.allow_wgc_screen_capturer() && + IsWgcSupported(CaptureType::kScreen)) { ++ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateScreenCapturer " ++ "creates DesktopCapturer of type WgcCapturerWin"; + return WgcCapturerWin::CreateRawScreenCapturer(options); + } + #endif // defined(RTC_ENABLE_WIN_WGC) + + std::unique_ptr<DesktopCapturer> capturer = CreateRawScreenCapturer(options); + if (capturer && options.detect_updated_region()) { ++ RTC_LOG(LS_INFO) ++ << "video capture: DesktopCapturer::CreateScreenCapturer creates " ++ "DesktopCapturer of type DesktopCapturerDifferWrapper over a base " ++ "capturer"; + capturer.reset(new DesktopCapturerDifferWrapper(std::move(capturer))); + } + +diff --git a/modules/desktop_capture/linux/x11/screen_capturer_x11.cc b/modules/desktop_capture/linux/x11/screen_capturer_x11.cc +index 90dd797cb3..f10dcabc7e 100644 +--- a/modules/desktop_capture/linux/x11/screen_capturer_x11.cc ++++ b/modules/desktop_capture/linux/x11/screen_capturer_x11.cc +@@ -511,8 +511,14 @@ std::unique_ptr<DesktopCapturer> ScreenCapturerX11::CreateRawScreenCapturer( + if (!options.x_display()) + return nullptr; + ++ RTC_LOG(LS_INFO) ++ << "video capture: ScreenCapturerX11::CreateRawScreenCapturer creates " ++ "DesktopCapturer of type ScreenCapturerX11"; + std::unique_ptr<ScreenCapturerX11> capturer(new ScreenCapturerX11()); + if (!capturer->Init(options)) { ++ RTC_LOG(LS_INFO) ++ << "video capture: ScreenCapturerX11::CreateRawScreenCapturer " ++ "DesktopCapturer is null because it can not be initiated"; + return nullptr; + } + +diff --git a/modules/desktop_capture/linux/x11/window_capturer_x11.cc b/modules/desktop_capture/linux/x11/window_capturer_x11.cc +index 8e592ff2d9..9505205b76 100644 +--- a/modules/desktop_capture/linux/x11/window_capturer_x11.cc ++++ b/modules/desktop_capture/linux/x11/window_capturer_x11.cc +@@ -247,6 +247,10 @@ std::unique_ptr<DesktopCapturer> WindowCapturerX11::CreateRawWindowCapturer( + const DesktopCaptureOptions& options) { + if (!options.x_display()) + return nullptr; ++ ++ RTC_LOG(LS_INFO) ++ << "video capture: WindowCapturerX11::CreateRawWindowCapturer creates " ++ "DesktopCapturer of type WindowCapturerX11"; + return std::unique_ptr<DesktopCapturer>(new WindowCapturerX11(options)); + } + +diff --git a/modules/desktop_capture/screen_capturer_darwin.mm b/modules/desktop_capture/screen_capturer_darwin.mm +index 95a877c45d..3f14ddfe58 100644 +--- a/modules/desktop_capture/screen_capturer_darwin.mm ++++ b/modules/desktop_capture/screen_capturer_darwin.mm +@@ -12,6 +12,7 @@ + + #include "modules/desktop_capture/mac/screen_capturer_mac.h" + #include "modules/desktop_capture/mac/screen_capturer_sck.h" ++#include "rtc_base/logging.h" + + namespace webrtc { + +@@ -27,10 +28,16 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( + std::unique_ptr<DesktopCapturer> sck_capturer = + CreateScreenCapturerSck(options); + if (sck_capturer) { ++ RTC_LOG(LS_INFO) ++ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates " ++ "DesktopCapturer of type ScreenCapturerSck"; + return sck_capturer; } -- if (spec_lifetime && video_receiver_info.packets_received == 0) { -+ // Check both packets received and frames received to handle the Insertable -+ // Streams use case of receiving media without receiving packets. -+ if (spec_lifetime && video_receiver_info.packets_received == 0 && -+ video_receiver_info.frames_received == 0) { - // The SSRC is known despite not receiving any packets. This happens if - // SSRC is signalled in the SDP which we should not rely on for getStats. - continue; + } + ++ RTC_LOG(LS_INFO) ++ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates " ++ "DesktopCapturer of type ScreenCapturerMac"; + auto capturer = + std::make_unique<ScreenCapturerMac>(options.configuration_monitor(), + options.detect_updated_region(), +diff --git a/modules/desktop_capture/screen_capturer_fuchsia.cc b/modules/desktop_capture/screen_capturer_fuchsia.cc +index c3f51ef0fc..2a6c5e753d 100644 +--- a/modules/desktop_capture/screen_capturer_fuchsia.cc ++++ b/modules/desktop_capture/screen_capturer_fuchsia.cc +@@ -56,6 +56,9 @@ size_t RoundUpToMultiple(size_t value, size_t multiple) { + + std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( + const DesktopCaptureOptions& options) { ++ RTC_LOG(LS_INFO) ++ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates " ++ "DesktopCapturer of type ScreenCapturerFuchsia"; + std::unique_ptr<ScreenCapturerFuchsia> capturer(new ScreenCapturerFuchsia()); + return capturer; + } +diff --git a/modules/desktop_capture/screen_capturer_linux.cc b/modules/desktop_capture/screen_capturer_linux.cc +index 94726750c5..f25e08fb59 100644 +--- a/modules/desktop_capture/screen_capturer_linux.cc ++++ b/modules/desktop_capture/screen_capturer_linux.cc +@@ -13,6 +13,7 @@ + #include "modules/desktop_capture/desktop_capture_options.h" + #include "modules/desktop_capture/desktop_capture_types.h" + #include "modules/desktop_capture/desktop_capturer.h" ++#include "rtc_base/logging.h" + + #if defined(WEBRTC_USE_PIPEWIRE) + #include "modules/desktop_capture/linux/wayland/base_capturer_pipewire.h" +@@ -29,6 +30,9 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( + const DesktopCaptureOptions& options) { + #if defined(WEBRTC_USE_PIPEWIRE) + if (options.allow_pipewire() && BaseCapturerPipeWire::IsSupported()) { ++ RTC_LOG(LS_INFO) ++ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates " ++ "DesktopCapturer of type BaseCapturerPipeWire"; + return std::make_unique<BaseCapturerPipeWire>(options, + CaptureType::kScreen); + } +diff --git a/modules/desktop_capture/screen_capturer_null.cc b/modules/desktop_capture/screen_capturer_null.cc +index aa6d4991a0..21b2f46c4d 100644 +--- a/modules/desktop_capture/screen_capturer_null.cc ++++ b/modules/desktop_capture/screen_capturer_null.cc +@@ -11,12 +11,16 @@ + #include <memory> + + #include "modules/desktop_capture/desktop_capturer.h" ++#include "rtc_base/logging.h" + + namespace webrtc { + + // static + std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( + const DesktopCaptureOptions& options) { ++ RTC_LOG(LS_INFO) ++ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates null " ++ "DesktopCapturer"; + return nullptr; + } + +diff --git a/modules/desktop_capture/screen_capturer_win.cc b/modules/desktop_capture/screen_capturer_win.cc +index a5f2052979..6620888f18 100644 +--- a/modules/desktop_capture/screen_capturer_win.cc ++++ b/modules/desktop_capture/screen_capturer_win.cc +@@ -19,6 +19,7 @@ + #include "modules/desktop_capture/win/dxgi_duplicator_controller.h" + #include "modules/desktop_capture/win/screen_capturer_win_directx.h" + #include "modules/desktop_capture/win/screen_capturer_win_gdi.h" ++#include "rtc_base/logging.h" + + namespace webrtc { + +@@ -26,6 +27,9 @@ namespace { + + std::unique_ptr<DesktopCapturer> CreateScreenCapturerWinDirectx( + const DesktopCaptureOptions& options) { ++ RTC_LOG(LS_INFO) ++ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates " ++ "DesktopCapturer of type ScreenCapturerWinDirectx"; + std::unique_ptr<DesktopCapturer> capturer( + new ScreenCapturerWinDirectx(options)); + capturer.reset(new BlankDetectorDesktopCapturerWrapper( +@@ -39,6 +43,8 @@ std::unique_ptr<DesktopCapturer> CreateScreenCapturerWinDirectx( + std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( + const DesktopCaptureOptions& options) { + // Default capturer if no options are enabled is GDI. ++ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateRawScreenCapturer " ++ "creates DesktopCapturer of type ScreenCapturerWinGdi"; + std::unique_ptr<DesktopCapturer> capturer(new ScreenCapturerWinGdi(options)); + + // If DirectX is enabled use it as main capturer with GDI as fallback. +diff --git a/modules/desktop_capture/window_capturer_linux.cc b/modules/desktop_capture/window_capturer_linux.cc +index f621a63e72..87ea3d5721 100644 +--- a/modules/desktop_capture/window_capturer_linux.cc ++++ b/modules/desktop_capture/window_capturer_linux.cc +@@ -13,6 +13,7 @@ + #include "modules/desktop_capture/desktop_capture_options.h" + #include "modules/desktop_capture/desktop_capture_types.h" + #include "modules/desktop_capture/desktop_capturer.h" ++#include "rtc_base/logging.h" + + #if defined(WEBRTC_USE_PIPEWIRE) + #include "modules/desktop_capture/linux/wayland/base_capturer_pipewire.h" +@@ -29,6 +30,9 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( + const DesktopCaptureOptions& options) { + #if defined(WEBRTC_USE_PIPEWIRE) + if (options.allow_pipewire() && BaseCapturerPipeWire::IsSupported()) { ++ RTC_LOG(LS_INFO) ++ << "video capture: DesktopCapturer::CreateRawWindowCapturer creates " ++ "DesktopCapturer of type BaseCapturerPipeWire"; + return std::make_unique<BaseCapturerPipeWire>(options, + CaptureType::kWindow); + } +diff --git a/modules/desktop_capture/window_capturer_mac.mm b/modules/desktop_capture/window_capturer_mac.mm +index a1e6157b87..731090d3fb 100644 +--- a/modules/desktop_capture/window_capturer_mac.mm ++++ b/modules/desktop_capture/window_capturer_mac.mm +@@ -217,6 +217,8 @@ void WindowCapturerMac::CaptureFrame() { + // static + std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( + const DesktopCaptureOptions& options) { ++ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateRawWindowCapturer " ++ "creates DesktopCapturer of type WindowCapturerMac"; + return std::unique_ptr<DesktopCapturer>(new WindowCapturerMac( + options.full_screen_window_detector(), options.configuration_monitor())); + } +diff --git a/modules/desktop_capture/window_capturer_null.cc b/modules/desktop_capture/window_capturer_null.cc +index 2061dc5248..384e186d20 100644 +--- a/modules/desktop_capture/window_capturer_null.cc ++++ b/modules/desktop_capture/window_capturer_null.cc +@@ -12,6 +12,7 @@ + + #include "modules/desktop_capture/desktop_capturer.h" + #include "rtc_base/checks.h" ++#include "rtc_base/logging.h" + + namespace webrtc { + +@@ -65,6 +66,8 @@ void WindowCapturerNull::CaptureFrame() { + // static + std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( + const DesktopCaptureOptions& options) { ++ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateRawWindowCapturer " ++ "creates DesktopCapturer of type WindowCapturerNull"; + return std::unique_ptr<DesktopCapturer>(new WindowCapturerNull()); + } + +diff --git a/modules/desktop_capture/window_capturer_win.cc b/modules/desktop_capture/window_capturer_win.cc +index 115bc7d9b0..15ed7f5121 100644 +--- a/modules/desktop_capture/window_capturer_win.cc ++++ b/modules/desktop_capture/window_capturer_win.cc +@@ -15,6 +15,7 @@ + #include "modules/desktop_capture/desktop_capturer.h" + #include "modules/desktop_capture/rgba_color.h" + #include "modules/desktop_capture/win/window_capturer_win_gdi.h" ++#include "rtc_base/logging.h" + + #if defined(RTC_ENABLE_WIN_WGC) + #include "modules/desktop_capture/blank_detector_desktop_capturer_wrapper.h" +@@ -28,6 +29,8 @@ namespace webrtc { + // static + std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( + const DesktopCaptureOptions& options) { ++ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateRawWindowCapturer " ++ "creates DesktopCapturer of type WindowCapturerWinGdi"; + std::unique_ptr<DesktopCapturer> capturer( + WindowCapturerWinGdi::CreateRawWindowCapturer(options)); + #if defined(RTC_ENABLE_WIN_WGC) +@@ -36,6 +39,10 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( + // BlankDectector capturer will send an error when it detects a failed + // GDI rendering, then Fallback capturer will try to capture it again with + // WGC. ++ RTC_LOG(LS_INFO) ++ << "video capture: DesktopCapturer::CreateRawWindowCapturer creates " ++ "DesktopCapturer of type FallbackDesktopCapturerWrapper which has a " ++ "fallback capturer of type WgcCapturerWin"; + capturer = std::make_unique<BlankDetectorDesktopCapturerWrapper>( + std::move(capturer), RgbaColor(0, 0, 0, 0), + /*check_per_capture*/ true); diff --git a/third_party/libwebrtc/moz-patch-stack/p0003.patch b/third_party/libwebrtc/moz-patch-stack/p0003.patch @@ -1,331 +0,0 @@ -From: Palak Agarwal <agpalak@google.com> -Date: Tue, 7 Oct 2025 13:45:52 +0200 -Subject: (cherry-pick-branch-heads/7390) [M141] Add logging while creating - {Window|Screen}Capturer - -(cherry picked from commit 6908505ae0eba5d530ad0bb4b37d4654a4f36c95) - -Fixed: chromium:450184498 -Bug: chromium:448881311 -Change-Id: I0f043f58bf831e6822451cac99a8972a054ffdf7 -Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/414800 -Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> -Reviewed-by: Harald Alvestrand <hta@webrtc.org> -Commit-Queue: Palak Agarwal <agpalak@google.com> -Cr-Original-Commit-Position: refs/heads/main@{#45856} -Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/415420 -Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org> -Cr-Commit-Position: refs/branch-heads/7390@{#3} -Cr-Branched-From: 2f553bf8d573c90176d51559b76dfc836996c8f5-refs/heads/main@{#45520} ---- - modules/desktop_capture/desktop_capturer.cc | 15 +++++++++++++++ - .../linux/x11/screen_capturer_x11.cc | 6 ++++++ - .../linux/x11/window_capturer_x11.cc | 4 ++++ - modules/desktop_capture/screen_capturer_darwin.mm | 7 +++++++ - .../desktop_capture/screen_capturer_fuchsia.cc | 3 +++ - modules/desktop_capture/screen_capturer_linux.cc | 4 ++++ - modules/desktop_capture/screen_capturer_null.cc | 4 ++++ - modules/desktop_capture/screen_capturer_win.cc | 6 ++++++ - modules/desktop_capture/window_capturer_linux.cc | 4 ++++ - modules/desktop_capture/window_capturer_mac.mm | 2 ++ - modules/desktop_capture/window_capturer_null.cc | 3 +++ - modules/desktop_capture/window_capturer_win.cc | 7 +++++++ - 12 files changed, 65 insertions(+) - -diff --git a/modules/desktop_capture/desktop_capturer.cc b/modules/desktop_capture/desktop_capturer.cc -index ae9aba26ee..bf63f73178 100644 ---- a/modules/desktop_capture/desktop_capturer.cc -+++ b/modules/desktop_capture/desktop_capturer.cc -@@ -21,6 +21,7 @@ - #include "modules/desktop_capture/desktop_capturer_differ_wrapper.h" - #include "modules/desktop_capture/desktop_geometry.h" - #include "modules/desktop_capture/shared_memory.h" -+#include "rtc_base/logging.h" - #include "system_wrappers/include/metrics.h" - - #if defined(WEBRTC_WIN) -@@ -81,18 +82,26 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateWindowCapturer( - #if defined(RTC_ENABLE_WIN_WGC) - if (options.allow_wgc_window_capturer() && - IsWgcSupported(CaptureType::kWindow)) { -+ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateWindowCapturer " -+ "creates DesktopCapturer of type WgcCapturerWin"; - return WgcCapturerWin::CreateRawWindowCapturer(options); - } - #endif // defined(RTC_ENABLE_WIN_WGC) - - #if defined(WEBRTC_WIN) - if (options.allow_cropping_window_capturer()) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateWindowCapturer " -+ "creates DesktopCapturer of type CroppingWindowCapturerWin"; - return CroppingWindowCapturer::CreateCapturer(options); - } - #endif // defined(WEBRTC_WIN) - - std::unique_ptr<DesktopCapturer> capturer = CreateRawWindowCapturer(options); - if (capturer && options.detect_updated_region()) { -+ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateWindowCapturer " -+ "creates DesktopCapturer of type " -+ "DesktopCapturerDifferWrapper over a base capturer"; - capturer.reset(new DesktopCapturerDifferWrapper(std::move(capturer))); - } - -@@ -105,12 +114,18 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateScreenCapturer( - #if defined(RTC_ENABLE_WIN_WGC) - if (options.allow_wgc_screen_capturer() && - IsWgcSupported(CaptureType::kScreen)) { -+ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateScreenCapturer " -+ "creates DesktopCapturer of type WgcCapturerWin"; - return WgcCapturerWin::CreateRawScreenCapturer(options); - } - #endif // defined(RTC_ENABLE_WIN_WGC) - - std::unique_ptr<DesktopCapturer> capturer = CreateRawScreenCapturer(options); - if (capturer && options.detect_updated_region()) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateScreenCapturer creates " -+ "DesktopCapturer of type DesktopCapturerDifferWrapper over a base " -+ "capturer"; - capturer.reset(new DesktopCapturerDifferWrapper(std::move(capturer))); - } - -diff --git a/modules/desktop_capture/linux/x11/screen_capturer_x11.cc b/modules/desktop_capture/linux/x11/screen_capturer_x11.cc -index 90dd797cb3..f10dcabc7e 100644 ---- a/modules/desktop_capture/linux/x11/screen_capturer_x11.cc -+++ b/modules/desktop_capture/linux/x11/screen_capturer_x11.cc -@@ -511,8 +511,14 @@ std::unique_ptr<DesktopCapturer> ScreenCapturerX11::CreateRawScreenCapturer( - if (!options.x_display()) - return nullptr; - -+ RTC_LOG(LS_INFO) -+ << "video capture: ScreenCapturerX11::CreateRawScreenCapturer creates " -+ "DesktopCapturer of type ScreenCapturerX11"; - std::unique_ptr<ScreenCapturerX11> capturer(new ScreenCapturerX11()); - if (!capturer->Init(options)) { -+ RTC_LOG(LS_INFO) -+ << "video capture: ScreenCapturerX11::CreateRawScreenCapturer " -+ "DesktopCapturer is null because it can not be initiated"; - return nullptr; - } - -diff --git a/modules/desktop_capture/linux/x11/window_capturer_x11.cc b/modules/desktop_capture/linux/x11/window_capturer_x11.cc -index 8e592ff2d9..9505205b76 100644 ---- a/modules/desktop_capture/linux/x11/window_capturer_x11.cc -+++ b/modules/desktop_capture/linux/x11/window_capturer_x11.cc -@@ -247,6 +247,10 @@ std::unique_ptr<DesktopCapturer> WindowCapturerX11::CreateRawWindowCapturer( - const DesktopCaptureOptions& options) { - if (!options.x_display()) - return nullptr; -+ -+ RTC_LOG(LS_INFO) -+ << "video capture: WindowCapturerX11::CreateRawWindowCapturer creates " -+ "DesktopCapturer of type WindowCapturerX11"; - return std::unique_ptr<DesktopCapturer>(new WindowCapturerX11(options)); - } - -diff --git a/modules/desktop_capture/screen_capturer_darwin.mm b/modules/desktop_capture/screen_capturer_darwin.mm -index 95a877c45d..3f14ddfe58 100644 ---- a/modules/desktop_capture/screen_capturer_darwin.mm -+++ b/modules/desktop_capture/screen_capturer_darwin.mm -@@ -12,6 +12,7 @@ - - #include "modules/desktop_capture/mac/screen_capturer_mac.h" - #include "modules/desktop_capture/mac/screen_capturer_sck.h" -+#include "rtc_base/logging.h" - - namespace webrtc { - -@@ -27,10 +28,16 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( - std::unique_ptr<DesktopCapturer> sck_capturer = - CreateScreenCapturerSck(options); - if (sck_capturer) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates " -+ "DesktopCapturer of type ScreenCapturerSck"; - return sck_capturer; - } - } - -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates " -+ "DesktopCapturer of type ScreenCapturerMac"; - auto capturer = - std::make_unique<ScreenCapturerMac>(options.configuration_monitor(), - options.detect_updated_region(), -diff --git a/modules/desktop_capture/screen_capturer_fuchsia.cc b/modules/desktop_capture/screen_capturer_fuchsia.cc -index c3f51ef0fc..2a6c5e753d 100644 ---- a/modules/desktop_capture/screen_capturer_fuchsia.cc -+++ b/modules/desktop_capture/screen_capturer_fuchsia.cc -@@ -56,6 +56,9 @@ size_t RoundUpToMultiple(size_t value, size_t multiple) { - - std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( - const DesktopCaptureOptions& options) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates " -+ "DesktopCapturer of type ScreenCapturerFuchsia"; - std::unique_ptr<ScreenCapturerFuchsia> capturer(new ScreenCapturerFuchsia()); - return capturer; - } -diff --git a/modules/desktop_capture/screen_capturer_linux.cc b/modules/desktop_capture/screen_capturer_linux.cc -index 94726750c5..f25e08fb59 100644 ---- a/modules/desktop_capture/screen_capturer_linux.cc -+++ b/modules/desktop_capture/screen_capturer_linux.cc -@@ -13,6 +13,7 @@ - #include "modules/desktop_capture/desktop_capture_options.h" - #include "modules/desktop_capture/desktop_capture_types.h" - #include "modules/desktop_capture/desktop_capturer.h" -+#include "rtc_base/logging.h" - - #if defined(WEBRTC_USE_PIPEWIRE) - #include "modules/desktop_capture/linux/wayland/base_capturer_pipewire.h" -@@ -29,6 +30,9 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( - const DesktopCaptureOptions& options) { - #if defined(WEBRTC_USE_PIPEWIRE) - if (options.allow_pipewire() && BaseCapturerPipeWire::IsSupported()) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates " -+ "DesktopCapturer of type BaseCapturerPipeWire"; - return std::make_unique<BaseCapturerPipeWire>(options, - CaptureType::kScreen); - } -diff --git a/modules/desktop_capture/screen_capturer_null.cc b/modules/desktop_capture/screen_capturer_null.cc -index aa6d4991a0..21b2f46c4d 100644 ---- a/modules/desktop_capture/screen_capturer_null.cc -+++ b/modules/desktop_capture/screen_capturer_null.cc -@@ -11,12 +11,16 @@ - #include <memory> - - #include "modules/desktop_capture/desktop_capturer.h" -+#include "rtc_base/logging.h" - - namespace webrtc { - - // static - std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( - const DesktopCaptureOptions& options) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates null " -+ "DesktopCapturer"; - return nullptr; - } - -diff --git a/modules/desktop_capture/screen_capturer_win.cc b/modules/desktop_capture/screen_capturer_win.cc -index a5f2052979..6620888f18 100644 ---- a/modules/desktop_capture/screen_capturer_win.cc -+++ b/modules/desktop_capture/screen_capturer_win.cc -@@ -19,6 +19,7 @@ - #include "modules/desktop_capture/win/dxgi_duplicator_controller.h" - #include "modules/desktop_capture/win/screen_capturer_win_directx.h" - #include "modules/desktop_capture/win/screen_capturer_win_gdi.h" -+#include "rtc_base/logging.h" - - namespace webrtc { - -@@ -26,6 +27,9 @@ namespace { - - std::unique_ptr<DesktopCapturer> CreateScreenCapturerWinDirectx( - const DesktopCaptureOptions& options) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawScreenCapturer creates " -+ "DesktopCapturer of type ScreenCapturerWinDirectx"; - std::unique_ptr<DesktopCapturer> capturer( - new ScreenCapturerWinDirectx(options)); - capturer.reset(new BlankDetectorDesktopCapturerWrapper( -@@ -39,6 +43,8 @@ std::unique_ptr<DesktopCapturer> CreateScreenCapturerWinDirectx( - std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( - const DesktopCaptureOptions& options) { - // Default capturer if no options are enabled is GDI. -+ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateRawScreenCapturer " -+ "creates DesktopCapturer of type ScreenCapturerWinGdi"; - std::unique_ptr<DesktopCapturer> capturer(new ScreenCapturerWinGdi(options)); - - // If DirectX is enabled use it as main capturer with GDI as fallback. -diff --git a/modules/desktop_capture/window_capturer_linux.cc b/modules/desktop_capture/window_capturer_linux.cc -index f621a63e72..87ea3d5721 100644 ---- a/modules/desktop_capture/window_capturer_linux.cc -+++ b/modules/desktop_capture/window_capturer_linux.cc -@@ -13,6 +13,7 @@ - #include "modules/desktop_capture/desktop_capture_options.h" - #include "modules/desktop_capture/desktop_capture_types.h" - #include "modules/desktop_capture/desktop_capturer.h" -+#include "rtc_base/logging.h" - - #if defined(WEBRTC_USE_PIPEWIRE) - #include "modules/desktop_capture/linux/wayland/base_capturer_pipewire.h" -@@ -29,6 +30,9 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( - const DesktopCaptureOptions& options) { - #if defined(WEBRTC_USE_PIPEWIRE) - if (options.allow_pipewire() && BaseCapturerPipeWire::IsSupported()) { -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawWindowCapturer creates " -+ "DesktopCapturer of type BaseCapturerPipeWire"; - return std::make_unique<BaseCapturerPipeWire>(options, - CaptureType::kWindow); - } -diff --git a/modules/desktop_capture/window_capturer_mac.mm b/modules/desktop_capture/window_capturer_mac.mm -index a1e6157b87..731090d3fb 100644 ---- a/modules/desktop_capture/window_capturer_mac.mm -+++ b/modules/desktop_capture/window_capturer_mac.mm -@@ -217,6 +217,8 @@ void WindowCapturerMac::CaptureFrame() { - // static - std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( - const DesktopCaptureOptions& options) { -+ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateRawWindowCapturer " -+ "creates DesktopCapturer of type WindowCapturerMac"; - return std::unique_ptr<DesktopCapturer>(new WindowCapturerMac( - options.full_screen_window_detector(), options.configuration_monitor())); - } -diff --git a/modules/desktop_capture/window_capturer_null.cc b/modules/desktop_capture/window_capturer_null.cc -index 2061dc5248..384e186d20 100644 ---- a/modules/desktop_capture/window_capturer_null.cc -+++ b/modules/desktop_capture/window_capturer_null.cc -@@ -12,6 +12,7 @@ - - #include "modules/desktop_capture/desktop_capturer.h" - #include "rtc_base/checks.h" -+#include "rtc_base/logging.h" - - namespace webrtc { - -@@ -65,6 +66,8 @@ void WindowCapturerNull::CaptureFrame() { - // static - std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( - const DesktopCaptureOptions& options) { -+ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateRawWindowCapturer " -+ "creates DesktopCapturer of type WindowCapturerNull"; - return std::unique_ptr<DesktopCapturer>(new WindowCapturerNull()); - } - -diff --git a/modules/desktop_capture/window_capturer_win.cc b/modules/desktop_capture/window_capturer_win.cc -index 115bc7d9b0..15ed7f5121 100644 ---- a/modules/desktop_capture/window_capturer_win.cc -+++ b/modules/desktop_capture/window_capturer_win.cc -@@ -15,6 +15,7 @@ - #include "modules/desktop_capture/desktop_capturer.h" - #include "modules/desktop_capture/rgba_color.h" - #include "modules/desktop_capture/win/window_capturer_win_gdi.h" -+#include "rtc_base/logging.h" - - #if defined(RTC_ENABLE_WIN_WGC) - #include "modules/desktop_capture/blank_detector_desktop_capturer_wrapper.h" -@@ -28,6 +29,8 @@ namespace webrtc { - // static - std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( - const DesktopCaptureOptions& options) { -+ RTC_LOG(LS_INFO) << "video capture: DesktopCapturer::CreateRawWindowCapturer " -+ "creates DesktopCapturer of type WindowCapturerWinGdi"; - std::unique_ptr<DesktopCapturer> capturer( - WindowCapturerWinGdi::CreateRawWindowCapturer(options)); - #if defined(RTC_ENABLE_WIN_WGC) -@@ -36,6 +39,10 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( - // BlankDectector capturer will send an error when it detects a failed - // GDI rendering, then Fallback capturer will try to capture it again with - // WGC. -+ RTC_LOG(LS_INFO) -+ << "video capture: DesktopCapturer::CreateRawWindowCapturer creates " -+ "DesktopCapturer of type FallbackDesktopCapturerWrapper which has a " -+ "fallback capturer of type WgcCapturerWin"; - capturer = std::make_unique<BlankDetectorDesktopCapturerWrapper>( - std::move(capturer), RgbaColor(0, 0, 0, 0), - /*check_per_capture*/ true);