Commit 579f9f5a authored by Antonio Gomes's avatar Antonio Gomes Committed by Commit Bot

Lazy initialize PeerConnectionTracker

This CL changes the ownership of PeerConnectionTracker, as a preparation
to Onion souping it.

Reason: when in Blink, there is not a class corresponding to RenderThreadImpl.

BUG=787254
R=guidou@chromium.org, haraken@chromium.org

Change-Id: Ieff1e622d0226547632a1616c3e6c088961d91fa
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1845802Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Antonio Gomes <tonikitoo@igalia.com>
Cr-Commit-Position: refs/heads/master@{#707339}
parent ad80ebd2
...@@ -13,12 +13,12 @@ ...@@ -13,12 +13,12 @@
#include <vector> #include <vector>
#include "base/bind.h" #include "base/bind.h"
#include "base/lazy_instance.h"
#include "base/numerics/safe_conversions.h" #include "base/numerics/safe_conversions.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "base/threading/thread_task_runner_handle.h" #include "base/threading/thread_task_runner_handle.h"
#include "base/values.h" #include "base/values.h"
#include "content/child/child_thread_impl.h"
#include "content/common/media/peer_connection_tracker_messages.h" #include "content/common/media/peer_connection_tracker_messages.h"
#include "content/renderer/media/webrtc/rtc_peer_connection_handler.h" #include "content/renderer/media/webrtc/rtc_peer_connection_handler.h"
#include "content/renderer/render_thread_impl.h" #include "content/renderer/render_thread_impl.h"
...@@ -604,6 +604,24 @@ class InternalStandardStatsObserver : public webrtc::RTCStatsCollectorCallback { ...@@ -604,6 +604,24 @@ class InternalStandardStatsObserver : public webrtc::RTCStatsCollectorCallback {
const scoped_refptr<base::SingleThreadTaskRunner> main_thread_; const scoped_refptr<base::SingleThreadTaskRunner> main_thread_;
}; };
struct PeerConnectionTrackerLazyInstanceTraits
: public base::internal::DestructorAtExitLazyInstanceTraits<
PeerConnectionTracker> {
static PeerConnectionTracker* New(void* instance) {
return new (instance) PeerConnectionTracker(
RenderThreadImpl::current()->main_thread_runner());
}
};
base::LazyInstance<PeerConnectionTracker,
PeerConnectionTrackerLazyInstanceTraits>
g_peer_connection_tracker = LAZY_INSTANCE_INITIALIZER;
// static
PeerConnectionTracker* PeerConnectionTracker::GetInstance() {
return &g_peer_connection_tracker.Get();
}
PeerConnectionTracker::PeerConnectionTracker( PeerConnectionTracker::PeerConnectionTracker(
scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner) scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner)
: next_local_id_(1), : next_local_id_(1),
......
...@@ -45,6 +45,8 @@ class CONTENT_EXPORT PeerConnectionTracker ...@@ -45,6 +45,8 @@ class CONTENT_EXPORT PeerConnectionTracker
: public RenderThreadObserver, : public RenderThreadObserver,
public base::SupportsWeakPtr<PeerConnectionTracker> { public base::SupportsWeakPtr<PeerConnectionTracker> {
public: public:
static PeerConnectionTracker* GetInstance();
explicit PeerConnectionTracker( explicit PeerConnectionTracker(
scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner); scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner);
PeerConnectionTracker( PeerConnectionTracker(
......
...@@ -1015,8 +1015,9 @@ bool RTCPeerConnectionHandler::Initialize( ...@@ -1015,8 +1015,9 @@ bool RTCPeerConnectionHandler::Initialize(
CHECK(!initialize_called_); CHECK(!initialize_called_);
initialize_called_ = true; initialize_called_ = true;
peer_connection_tracker_ = // TODO(crbug.com/787254): Evaluate the need for passing weak ptr since
RenderThreadImpl::current()->peer_connection_tracker()->AsWeakPtr(); // PeerConnectionTracker is now leaky with base::LazyInstance.
peer_connection_tracker_ = PeerConnectionTracker::GetInstance()->AsWeakPtr();
configuration_ = server_configuration; configuration_ = server_configuration;
......
...@@ -753,9 +753,7 @@ void RenderThreadImpl::Init() { ...@@ -753,9 +753,7 @@ void RenderThreadImpl::Init() {
browser_plugin_manager_.reset(new BrowserPluginManager()); browser_plugin_manager_.reset(new BrowserPluginManager());
AddObserver(browser_plugin_manager_.get()); AddObserver(browser_plugin_manager_.get());
peer_connection_tracker_.reset( AddObserver(PeerConnectionTracker::GetInstance());
new PeerConnectionTracker(main_thread_runner()));
AddObserver(peer_connection_tracker_.get());
unfreezable_message_filter_ = new UnfreezableMessageFilter(this); unfreezable_message_filter_ = new UnfreezableMessageFilter(this);
AddFilter(unfreezable_message_filter_.get()); AddFilter(unfreezable_message_filter_.get());
......
...@@ -103,7 +103,6 @@ class BrowserPluginManager; ...@@ -103,7 +103,6 @@ class BrowserPluginManager;
class CategorizedWorkerPool; class CategorizedWorkerPool;
class GpuVideoAcceleratorFactoriesImpl; class GpuVideoAcceleratorFactoriesImpl;
class LowMemoryModeController; class LowMemoryModeController;
class PeerConnectionTracker;
class RenderThreadObserver; class RenderThreadObserver;
class RendererBlinkPlatformImpl; class RendererBlinkPlatformImpl;
class ResourceDispatcher; class ResourceDispatcher;
...@@ -291,10 +290,6 @@ class CONTENT_EXPORT RenderThreadImpl ...@@ -291,10 +290,6 @@ class CONTENT_EXPORT RenderThreadImpl
return browser_plugin_manager_.get(); return browser_plugin_manager_.get();
} }
PeerConnectionTracker* peer_connection_tracker() {
return peer_connection_tracker_.get();
}
blink::WebVideoCaptureImplManager* video_capture_impl_manager() const { blink::WebVideoCaptureImplManager* video_capture_impl_manager() const {
return vc_manager_.get(); return vc_manager_.get();
} }
...@@ -553,10 +548,6 @@ class CONTENT_EXPORT RenderThreadImpl ...@@ -553,10 +548,6 @@ class CONTENT_EXPORT RenderThreadImpl
std::unique_ptr<BrowserPluginManager> browser_plugin_manager_; std::unique_ptr<BrowserPluginManager> browser_plugin_manager_;
// This is used to communicate to the browser process the status
// of all the peer connections created in the renderer.
std::unique_ptr<PeerConnectionTracker> peer_connection_tracker_;
// Filter out unfreezable messages and pass it to unfreezable task runners. // Filter out unfreezable messages and pass it to unfreezable task runners.
scoped_refptr<UnfreezableMessageFilter> unfreezable_message_filter_; scoped_refptr<UnfreezableMessageFilter> unfreezable_message_filter_;
......
...@@ -699,8 +699,7 @@ base::Optional<int> RendererBlinkPlatformImpl::GetAgcStartupMinimumVolume() { ...@@ -699,8 +699,7 @@ base::Optional<int> RendererBlinkPlatformImpl::GetAgcStartupMinimumVolume() {
void RendererBlinkPlatformImpl::TrackGetUserMedia( void RendererBlinkPlatformImpl::TrackGetUserMedia(
const blink::WebUserMediaRequest& web_request) { const blink::WebUserMediaRequest& web_request) {
RenderThreadImpl::current()->peer_connection_tracker()->TrackGetUserMedia( PeerConnectionTracker::GetInstance()->TrackGetUserMedia(web_request);
web_request);
} }
bool RendererBlinkPlatformImpl::IsWebRtcHWH264DecodingEnabled( bool RendererBlinkPlatformImpl::IsWebRtcHWH264DecodingEnabled(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment