Commit 60345b63 authored by Ehsan Chiniforooshan's avatar Ehsan Chiniforooshan Committed by Commit Bot

move memory_infra and tracing to the GRC service

memory_instrumentation::Coordinator is exposed by the browser service
right now, which was a temporary solution before the
resource_coordinator service was created. This CL moves it to the
resource_coordinator service.

Also, this CL exposes the tracing service, too. Later it will be used
instead of the tracing controller that lives in the browser.

Moving memory instrumentation and tracing to the resource_coordinator
service will let the service manager to register all "service"
processes to report memory usage and trace data. This is not possible
if memory instrumentation and tracing live in content_browser since it
will be a layering violation to have a dependency from
//services/service_manager to content.

BUG=687020,640235,733165

Change-Id: I7ea9e61430f4406fd115abd747b35a806a392469
Reviewed-on: https://chromium-review.googlesource.com/628658Reviewed-by: default avatarKen Buchanan <kenrb@chromium.org>
Reviewed-by: default avatarJohn Abd-El-Malek <jam@chromium.org>
Reviewed-by: default avataroysteine <oysteine@chromium.org>
Reviewed-by: default avatarSteven Holte <holte@chromium.org>
Commit-Queue: Ehsan Chiniforooshan <chiniforooshan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#501668}
parent 0da66759
...@@ -142,7 +142,7 @@ void ProcessMemoryMetricsEmitter::FetchAndEmitProcessMemoryMetrics() { ...@@ -142,7 +142,7 @@ void ProcessMemoryMetricsEmitter::FetchAndEmitProcessMemoryMetrics() {
service_manager::Connector* connector = service_manager::Connector* connector =
content::ServiceManagerConnection::GetForProcess()->GetConnector(); content::ServiceManagerConnection::GetForProcess()->GetConnector();
connector->BindInterface(content::mojom::kBrowserServiceName, connector->BindInterface(resource_coordinator::mojom::kServiceName,
mojo::MakeRequest(&coordinator_)); mojo::MakeRequest(&coordinator_));
// The callback keeps this object alive until the callback is invoked.. // The callback keeps this object alive until the callback is invoked..
......
...@@ -115,8 +115,9 @@ ...@@ -115,8 +115,9 @@
#include "net/socket/client_socket_factory.h" #include "net/socket/client_socket_factory.h"
#include "net/ssl/ssl_config_service.h" #include "net/ssl/ssl_config_service.h"
#include "ppapi/features/features.h" #include "ppapi/features/features.h"
#include "services/resource_coordinator/memory_instrumentation/coordinator_impl.h"
#include "services/resource_coordinator/public/cpp/memory_instrumentation/client_process_impl.h" #include "services/resource_coordinator/public/cpp/memory_instrumentation/client_process_impl.h"
#include "services/resource_coordinator/public/interfaces/memory_instrumentation/memory_instrumentation.mojom.h"
#include "services/resource_coordinator/public/interfaces/service_constants.mojom.h"
#include "services/service_manager/runner/common/client_util.h" #include "services/service_manager/runner/common/client_util.h"
#include "skia/ext/event_tracer_impl.h" #include "skia/ext/event_tracer_impl.h"
#include "skia/ext/skia_memory_dump_provider.h" #include "skia/ext/skia_memory_dump_provider.h"
...@@ -1430,19 +1431,12 @@ int BrowserMainLoop::BrowserThreadsStarted() { ...@@ -1430,19 +1431,12 @@ int BrowserMainLoop::BrowserThreadsStarted() {
// so this cannot happen any earlier than now. // so this cannot happen any earlier than now.
InitializeMojo(); InitializeMojo();
// Create the memory instrumentation service. It will initialize the memory
// dump manager, too. It makes sense that BrowserMainLoop owns the service;
// this way, the service is alive for the lifetime of Mojo. Mojo is shutdown
// in BrowserMainLoop::ShutdownThreadsAndCleanupIO.
service_manager::Connector* connector =
content::ServiceManagerConnection::GetForProcess()->GetConnector();
memory_instrumentation_coordinator_ =
base::MakeUnique<memory_instrumentation::CoordinatorImpl>(connector);
// Registers the browser process as a memory-instrumentation client, so // Registers the browser process as a memory-instrumentation client, so
// that data for the browser process will be available in memory dumps. // that data for the browser process will be available in memory dumps.
service_manager::Connector* connector =
content::ServiceManagerConnection::GetForProcess()->GetConnector();
memory_instrumentation::ClientProcessImpl::Config config( memory_instrumentation::ClientProcessImpl::Config config(
connector, mojom::kBrowserServiceName, connector, resource_coordinator::mojom::kServiceName,
memory_instrumentation::mojom::ProcessType::BROWSER); memory_instrumentation::mojom::ProcessType::BROWSER);
memory_instrumentation::ClientProcessImpl::CreateInstance(config); memory_instrumentation::ClientProcessImpl::CreateInstance(config);
......
...@@ -58,10 +58,6 @@ class DeviceMonitorMac; ...@@ -58,10 +58,6 @@ class DeviceMonitorMac;
#endif #endif
} // namespace media } // namespace media
namespace memory_instrumentation {
class CoordinatorImpl;
} // memory_instrumentation
namespace midi { namespace midi {
class MidiService; class MidiService;
} // namespace midi } // namespace midi
...@@ -356,8 +352,6 @@ class CONTENT_EXPORT BrowserMainLoop { ...@@ -356,8 +352,6 @@ class CONTENT_EXPORT BrowserMainLoop {
std::unique_ptr<discardable_memory::DiscardableSharedMemoryManager> std::unique_ptr<discardable_memory::DiscardableSharedMemoryManager>
discardable_shared_memory_manager_; discardable_shared_memory_manager_;
scoped_refptr<SaveFileManager> save_file_manager_; scoped_refptr<SaveFileManager> save_file_manager_;
std::unique_ptr<memory_instrumentation::CoordinatorImpl>
memory_instrumentation_coordinator_;
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
std::unique_ptr<viz::HostFrameSinkManager> host_frame_sink_manager_; std::unique_ptr<viz::HostFrameSinkManager> host_frame_sink_manager_;
// This is owned here so that SurfaceManager will be accessible in process // This is owned here so that SurfaceManager will be accessible in process
......
...@@ -17,27 +17,17 @@ ...@@ -17,27 +17,17 @@
#include "content/public/common/service_manager_connection.h" #include "content/public/common/service_manager_connection.h"
#include "device/geolocation/geolocation_config.h" #include "device/geolocation/geolocation_config.h"
#include "mojo/public/cpp/bindings/interface_request.h" #include "mojo/public/cpp/bindings/interface_request.h"
#include "services/resource_coordinator/memory_instrumentation/coordinator_impl.h"
#include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/cpp/binder_registry.h"
namespace content { namespace content {
namespace { namespace {
void BindMemoryCoordinatorRequest(
memory_instrumentation::mojom::CoordinatorRequest request,
const service_manager::BindSourceInfo& source_info) {
auto* coordinator = memory_instrumentation::CoordinatorImpl::GetInstance();
if (coordinator)
coordinator->BindCoordinatorRequest(std::move(request), source_info);
}
class ConnectionFilterImpl : public ConnectionFilter { class ConnectionFilterImpl : public ConnectionFilter {
public: public:
ConnectionFilterImpl() ConnectionFilterImpl()
: main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()) { : main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
RegisterMainThreadInterface(base::Bind(&device::GeolocationConfig::Create)); RegisterMainThreadInterface(base::Bind(&device::GeolocationConfig::Create));
RegisterMainThreadInterface(base::Bind(&BindMemoryCoordinatorRequest));
auto* browser_main_loop = BrowserMainLoop::GetInstance(); auto* browser_main_loop = BrowserMainLoop::GetInstance();
if (browser_main_loop) { if (browser_main_loop) {
......
...@@ -72,6 +72,7 @@ ...@@ -72,6 +72,7 @@
#include "services/device/public/cpp/power_monitor/power_monitor_broadcast_source.h" #include "services/device/public/cpp/power_monitor/power_monitor_broadcast_source.h"
#include "services/resource_coordinator/public/cpp/memory_instrumentation/client_process_impl.h" #include "services/resource_coordinator/public/cpp/memory_instrumentation/client_process_impl.h"
#include "services/resource_coordinator/public/interfaces/memory_instrumentation/memory_instrumentation.mojom.h" #include "services/resource_coordinator/public/interfaces/memory_instrumentation/memory_instrumentation.mojom.h"
#include "services/resource_coordinator/public/interfaces/service_constants.mojom.h"
#include "services/service_manager/public/cpp/connector.h" #include "services/service_manager/public/cpp/connector.h"
#include "services/service_manager/public/cpp/interface_provider.h" #include "services/service_manager/public/cpp/interface_provider.h"
#include "services/service_manager/runner/common/client_util.h" #include "services/service_manager/runner/common/client_util.h"
...@@ -525,7 +526,8 @@ void ChildThreadImpl::Init(const Options& options) { ...@@ -525,7 +526,8 @@ void ChildThreadImpl::Init(const Options& options) {
process_type = memory_instrumentation::mojom::ProcessType::PLUGIN; process_type = memory_instrumentation::mojom::ProcessType::PLUGIN;
memory_instrumentation::ClientProcessImpl::Config config( memory_instrumentation::ClientProcessImpl::Config config(
GetConnector(), mojom::kBrowserServiceName, process_type); GetConnector(), resource_coordinator::mojom::kServiceName,
process_type);
memory_instrumentation::ClientProcessImpl::CreateInstance(config); memory_instrumentation::ClientProcessImpl::CreateInstance(config);
} }
} }
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
] ]
}, },
"requires": { "requires": {
"*": [ "app" ],
"content_browser": [], "content_browser": [],
"service_manager": [ "service_manager": [
"service_manager:all_users", "service_manager:all_users",
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
] ]
}, },
"requires": { "requires": {
"content_browser": [ "memory_instrumentation", "renderer" ] "content_browser": [ "renderer" ]
} }
} }
}, },
......
...@@ -49,6 +49,7 @@ source_set("lib") { ...@@ -49,6 +49,7 @@ source_set("lib") {
"//mojo/public/cpp/bindings", "//mojo/public/cpp/bindings",
"//services/metrics/public/cpp:ukm_builders", "//services/metrics/public/cpp:ukm_builders",
"//services/resource_coordinator/public/cpp:resource_coordinator_cpp", "//services/resource_coordinator/public/cpp:resource_coordinator_cpp",
"//services/resource_coordinator/tracing:lib",
"//services/service_manager/public/cpp/standalone_service:standalone_service", "//services/service_manager/public/cpp/standalone_service:standalone_service",
] ]
} }
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/process/process_handle.h" #include "base/process/process_handle.h"
#include "services/resource_coordinator/coordination_unit/coordination_unit_impl.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_impl.h"
#include "services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h" #include "services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h"
#include "services/service_manager/public/cpp/bind_source_info.h"
namespace resource_coordinator { namespace resource_coordinator {
...@@ -48,7 +49,8 @@ void CoordinationUnitIntrospectorImpl::GetProcessToURLMap( ...@@ -48,7 +49,8 @@ void CoordinationUnitIntrospectorImpl::GetProcessToURLMap(
} }
void CoordinationUnitIntrospectorImpl::BindToInterface( void CoordinationUnitIntrospectorImpl::BindToInterface(
resource_coordinator::mojom::CoordinationUnitIntrospectorRequest request) { resource_coordinator::mojom::CoordinationUnitIntrospectorRequest request,
const service_manager::BindSourceInfo& source_info) {
bindings_.AddBinding(this, std::move(request)); bindings_.AddBinding(this, std::move(request));
} }
......
...@@ -9,6 +9,10 @@ ...@@ -9,6 +9,10 @@
#include "services/resource_coordinator/public/interfaces/coordination_unit_introspector.mojom.h" #include "services/resource_coordinator/public/interfaces/coordination_unit_introspector.mojom.h"
#include "services/service_manager/public/cpp/bind_source_info.h" #include "services/service_manager/public/cpp/bind_source_info.h"
namespace service_manager {
struct BindSourceInfo;
} // namespace service_manager
namespace resource_coordinator { namespace resource_coordinator {
class CoordinationUnitIntrospectorImpl class CoordinationUnitIntrospectorImpl
...@@ -18,7 +22,8 @@ class CoordinationUnitIntrospectorImpl ...@@ -18,7 +22,8 @@ class CoordinationUnitIntrospectorImpl
~CoordinationUnitIntrospectorImpl() override; ~CoordinationUnitIntrospectorImpl() override;
void BindToInterface( void BindToInterface(
resource_coordinator::mojom::CoordinationUnitIntrospectorRequest request); resource_coordinator::mojom::CoordinationUnitIntrospectorRequest request,
const service_manager::BindSourceInfo& source_info);
// Overridden from mojom::CoordinationUnitIntrospector: // Overridden from mojom::CoordinationUnitIntrospector:
void GetProcessToURLMap(const GetProcessToURLMapCallback& callback) override; void GetProcessToURLMap(const GetProcessToURLMapCallback& callback) override;
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "services/resource_coordinator/coordination_unit/coordination_unit_impl.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_impl.h"
#include "services/resource_coordinator/coordination_unit/coordination_unit_provider_impl.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_provider_impl.h"
#include "services/resource_coordinator/public/cpp/coordination_unit_types.h" #include "services/resource_coordinator/public/cpp/coordination_unit_types.h"
#include "services/service_manager/public/cpp/bind_source_info.h"
#include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/cpp/binder_registry.h"
namespace ukm { namespace ukm {
...@@ -33,7 +34,8 @@ CoordinationUnitManager::~CoordinationUnitManager() { ...@@ -33,7 +34,8 @@ CoordinationUnitManager::~CoordinationUnitManager() {
} }
void CoordinationUnitManager::OnStart( void CoordinationUnitManager::OnStart(
service_manager::BinderRegistry* registry, service_manager::BinderRegistryWithArgs<
const service_manager::BindSourceInfo&>* registry,
service_manager::ServiceContextRefFactory* service_ref_factory) { service_manager::ServiceContextRefFactory* service_ref_factory) {
provider_ = provider_ =
base::MakeUnique<CoordinationUnitProviderImpl>(service_ref_factory, this); base::MakeUnique<CoordinationUnitProviderImpl>(service_ref_factory, this);
......
...@@ -13,9 +13,11 @@ ...@@ -13,9 +13,11 @@
#include "base/macros.h" #include "base/macros.h"
#include "services/metrics/public/cpp/mojo_ukm_recorder.h" #include "services/metrics/public/cpp/mojo_ukm_recorder.h"
#include "services/metrics/public/cpp/ukm_recorder.h" #include "services/metrics/public/cpp/ukm_recorder.h"
#include "services/service_manager/public/cpp/binder_registry.h"
namespace service_manager { namespace service_manager {
template <typename... BinderArgs>
class BinderRegistryWithArgs;
struct BindSourceInfo;
class ServiceContextRefFactory; class ServiceContextRefFactory;
} // service_manager } // service_manager
...@@ -39,7 +41,8 @@ class CoordinationUnitManager { ...@@ -39,7 +41,8 @@ class CoordinationUnitManager {
} }
ukm::MojoUkmRecorder* ukm_recorder() const { return ukm_recorder_; } ukm::MojoUkmRecorder* ukm_recorder() const { return ukm_recorder_; }
void OnStart(service_manager::BinderRegistry* registry, void OnStart(service_manager::BinderRegistryWithArgs<
const service_manager::BindSourceInfo&>* registry,
service_manager::ServiceContextRefFactory* service_ref_factory); service_manager::ServiceContextRefFactory* service_ref_factory);
void RegisterObserver( void RegisterObserver(
std::unique_ptr<CoordinationUnitGraphObserver> observer); std::unique_ptr<CoordinationUnitGraphObserver> observer);
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "services/resource_coordinator/coordination_unit/coordination_unit_graph_observer.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_graph_observer.h"
#include "services/resource_coordinator/coordination_unit/coordination_unit_impl.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_impl.h"
#include "services/service_manager/public/cpp/bind_source_info.h"
#include "services/service_manager/public/cpp/service_context_ref.h" #include "services/service_manager/public/cpp/service_context_ref.h"
namespace resource_coordinator { namespace resource_coordinator {
...@@ -49,7 +50,8 @@ void CoordinationUnitProviderImpl::CreateCoordinationUnit( ...@@ -49,7 +50,8 @@ void CoordinationUnitProviderImpl::CreateCoordinationUnit(
} }
void CoordinationUnitProviderImpl::Bind( void CoordinationUnitProviderImpl::Bind(
resource_coordinator::mojom::CoordinationUnitProviderRequest request) { resource_coordinator::mojom::CoordinationUnitProviderRequest request,
const service_manager::BindSourceInfo& source_info) {
bindings_.AddBinding(this, std::move(request)); bindings_.AddBinding(this, std::move(request));
} }
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "services/resource_coordinator/public/interfaces/coordination_unit_provider.mojom.h" #include "services/resource_coordinator/public/interfaces/coordination_unit_provider.mojom.h"
namespace service_manager { namespace service_manager {
struct BindSourceInfo;
class ServiceContextRefFactory; class ServiceContextRefFactory;
class ServiceContextRef; class ServiceContextRef;
} // service_manager } // service_manager
...@@ -28,7 +29,8 @@ class CoordinationUnitProviderImpl : public mojom::CoordinationUnitProvider { ...@@ -28,7 +29,8 @@ class CoordinationUnitProviderImpl : public mojom::CoordinationUnitProvider {
~CoordinationUnitProviderImpl() override; ~CoordinationUnitProviderImpl() override;
void Bind( void Bind(
resource_coordinator::mojom::CoordinationUnitProviderRequest request); resource_coordinator::mojom::CoordinationUnitProviderRequest request,
const service_manager::BindSourceInfo& source_info);
void OnConnectionError(CoordinationUnitImpl* coordination_unit); void OnConnectionError(CoordinationUnitImpl* coordination_unit);
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "services/resource_coordinator/coordination_unit/coordination_unit_impl.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_impl.h"
#include "services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h" #include "services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h"
#include "services/resource_coordinator/coordination_unit/web_contents_coordination_unit_impl.h" #include "services/resource_coordinator/coordination_unit/web_contents_coordination_unit_impl.h"
#include "services/service_manager/public/cpp/bind_source_info.h"
namespace resource_coordinator { namespace resource_coordinator {
...@@ -63,7 +64,8 @@ void TabSignalGeneratorImpl::OnWebContentsPropertyChanged( ...@@ -63,7 +64,8 @@ void TabSignalGeneratorImpl::OnWebContentsPropertyChanged(
} }
void TabSignalGeneratorImpl::BindToInterface( void TabSignalGeneratorImpl::BindToInterface(
resource_coordinator::mojom::TabSignalGeneratorRequest request) { resource_coordinator::mojom::TabSignalGeneratorRequest request,
const service_manager::BindSourceInfo& source_info) {
bindings_.AddBinding(this, std::move(request)); bindings_.AddBinding(this, std::move(request));
} }
......
...@@ -11,6 +11,10 @@ ...@@ -11,6 +11,10 @@
#include "services/resource_coordinator/coordination_unit/coordination_unit_graph_observer.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_graph_observer.h"
#include "services/resource_coordinator/public/interfaces/tab_signal.mojom.h" #include "services/resource_coordinator/public/interfaces/tab_signal.mojom.h"
namespace service_manager {
struct BindSourceInfo;
} // namespace service_manager
namespace resource_coordinator { namespace resource_coordinator {
class CoordinationUnitImpl; class CoordinationUnitImpl;
...@@ -41,7 +45,8 @@ class TabSignalGeneratorImpl : public CoordinationUnitGraphObserver, ...@@ -41,7 +45,8 @@ class TabSignalGeneratorImpl : public CoordinationUnitGraphObserver,
int64_t value) override; int64_t value) override;
void BindToInterface( void BindToInterface(
resource_coordinator::mojom::TabSignalGeneratorRequest request); resource_coordinator::mojom::TabSignalGeneratorRequest request,
const service_manager::BindSourceInfo& source_info);
private: private:
mojo::BindingSet<mojom::TabSignalGenerator> bindings_; mojo::BindingSet<mojom::TabSignalGenerator> bindings_;
......
...@@ -4,16 +4,24 @@ ...@@ -4,16 +4,24 @@
"interface_provider_specs": { "interface_provider_specs": {
"service_manager:connector": { "service_manager:connector": {
"provides": { "provides": {
"app": [
"memory_instrumentation::mojom::Coordinator",
"tracing::mojom::AgentRegistry"
],
"coordination_unit_introspector": [ "coordination_unit_introspector": [
"resource_coordinator::mojom::CoordinationUnitIntrospector" "resource_coordinator::mojom::CoordinationUnitIntrospector"
], ],
"coordination_unit": [ "resource_coordinator::mojom::CoordinationUnitProvider" ], "coordination_unit": [ "resource_coordinator::mojom::CoordinationUnitProvider" ],
"service_callbacks": [ "resource_coordinator::mojom::ServiceCallbacks" ], "service_callbacks": [ "resource_coordinator::mojom::ServiceCallbacks" ],
"tab_signal": [ "resource_coordinator::mojom::TabSignalGenerator" ], "tab_signal": [ "resource_coordinator::mojom::TabSignalGenerator" ],
"tracing": [ "tracing::mojom::Coordinator" ],
"tests": [ "*" ] "tests": [ "*" ]
}, },
"requires": { "requires": {
"service_manager": [ "service_manager:all_users" ] "service_manager": [
"service_manager:all_users",
"service_manager:service_manager"
]
} }
} }
} }
......
...@@ -103,12 +103,7 @@ CoordinatorImpl::~CoordinatorImpl() { ...@@ -103,12 +103,7 @@ CoordinatorImpl::~CoordinatorImpl() {
base::ProcessId CoordinatorImpl::GetProcessIdForClientIdentity( base::ProcessId CoordinatorImpl::GetProcessIdForClientIdentity(
service_manager::Identity identity) const { service_manager::Identity identity) const {
// TODO(primiano): the browser process registers bypassing mojo and ends up DCHECK(identity.IsValid());
// with an invalid identity. Fix that (crbug.com/733165) and remove the
// special case in the else branch below.
if (!identity.IsValid()) {
return base::GetCurrentProcId();
}
return process_map_->GetProcessId(identity); return process_map_->GetProcessId(identity);
} }
......
...@@ -20,8 +20,10 @@ ...@@ -20,8 +20,10 @@
#include "services/resource_coordinator/public/cpp/memory_instrumentation/coordinator.h" #include "services/resource_coordinator/public/cpp/memory_instrumentation/coordinator.h"
#include "services/resource_coordinator/public/cpp/memory_instrumentation/tracing_observer.h" #include "services/resource_coordinator/public/cpp/memory_instrumentation/tracing_observer.h"
#include "services/resource_coordinator/public/interfaces/memory_instrumentation/memory_instrumentation.mojom.h" #include "services/resource_coordinator/public/interfaces/memory_instrumentation/memory_instrumentation.mojom.h"
#include "services/service_manager/public/cpp/identity.h"
namespace service_manager { namespace service_manager {
struct BindSourceInfo;
class Connector; class Connector;
} }
......
...@@ -9,7 +9,10 @@ ...@@ -9,7 +9,10 @@
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "services/resource_coordinator/coordination_unit/metrics_collector.h" #include "services/resource_coordinator/coordination_unit/metrics_collector.h"
#include "services/resource_coordinator/coordination_unit/tab_signal_generator_impl.h" #include "services/resource_coordinator/coordination_unit/tab_signal_generator_impl.h"
#include "services/resource_coordinator/memory_instrumentation/coordinator_impl.h"
#include "services/resource_coordinator/service_callbacks_impl.h" #include "services/resource_coordinator/service_callbacks_impl.h"
#include "services/resource_coordinator/tracing/agent_registry.h"
#include "services/resource_coordinator/tracing/coordinator.h"
#include "services/service_manager/public/cpp/service_context.h" #include "services/service_manager/public/cpp/service_context.h"
namespace resource_coordinator { namespace resource_coordinator {
...@@ -53,13 +56,36 @@ void ResourceCoordinatorService::OnStart() { ...@@ -53,13 +56,36 @@ void ResourceCoordinatorService::OnStart() {
base::MakeUnique<MetricsCollector>()); base::MakeUnique<MetricsCollector>());
coordination_unit_manager_.OnStart(&registry_, ref_factory_.get()); coordination_unit_manager_.OnStart(&registry_, ref_factory_.get());
// TODO(chiniforooshan): The abstract class Coordinator in the
// public/cpp/memory_instrumentation directory should not be needed anymore.
// We should be able to delete that and rename
// memory_instrumentation::CoordinatorImpl to
// memory_instrumentation::Coordinator.
memory_instrumentation_coordinator_ =
base::MakeUnique<memory_instrumentation::CoordinatorImpl>(
context()->connector());
registry_.AddInterface(base::BindRepeating(
&memory_instrumentation::CoordinatorImpl::BindCoordinatorRequest,
base::Unretained(memory_instrumentation_coordinator_.get())));
tracing_agent_registry_ = base::MakeUnique<tracing::AgentRegistry>();
registry_.AddInterface(
base::BindRepeating(&tracing::AgentRegistry::BindAgentRegistryRequest,
base::Unretained(tracing_agent_registry_.get())));
tracing_coordinator_ = base::MakeUnique<tracing::Coordinator>();
registry_.AddInterface(
base::BindRepeating(&tracing::Coordinator::BindCoordinatorRequest,
base::Unretained(tracing_coordinator_.get())));
} }
void ResourceCoordinatorService::OnBindInterface( void ResourceCoordinatorService::OnBindInterface(
const service_manager::BindSourceInfo& source_info, const service_manager::BindSourceInfo& source_info,
const std::string& interface_name, const std::string& interface_name,
mojo::ScopedMessagePipeHandle interface_pipe) { mojo::ScopedMessagePipeHandle interface_pipe) {
registry_.BindInterface(interface_name, std::move(interface_pipe)); registry_.BindInterface(interface_name, std::move(interface_pipe),
source_info);
} }
void ResourceCoordinatorService::SetUkmRecorder( void ResourceCoordinatorService::SetUkmRecorder(
......
...@@ -14,6 +14,9 @@ ...@@ -14,6 +14,9 @@
#include "services/metrics/public/cpp/mojo_ukm_recorder.h" #include "services/metrics/public/cpp/mojo_ukm_recorder.h"
#include "services/resource_coordinator/coordination_unit/coordination_unit_introspector_impl.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_introspector_impl.h"
#include "services/resource_coordinator/coordination_unit/coordination_unit_manager.h" #include "services/resource_coordinator/coordination_unit/coordination_unit_manager.h"
#include "services/resource_coordinator/memory_instrumentation/coordinator_impl.h"
#include "services/resource_coordinator/tracing/agent_registry.h"
#include "services/resource_coordinator/tracing/coordinator.h"
#include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/cpp/binder_registry.h"
#include "services/service_manager/public/cpp/service.h" #include "services/service_manager/public/cpp/service.h"
#include "services/service_manager/public/cpp/service_context_ref.h" #include "services/service_manager/public/cpp/service_context_ref.h"
...@@ -37,7 +40,6 @@ class ResourceCoordinatorService : public service_manager::Service { ...@@ -37,7 +40,6 @@ class ResourceCoordinatorService : public service_manager::Service {
void SetUkmRecorder(std::unique_ptr<ukm::MojoUkmRecorder> ukm_recorder); void SetUkmRecorder(std::unique_ptr<ukm::MojoUkmRecorder> ukm_recorder);
service_manager::BinderRegistry& registry() { return registry_; }
service_manager::ServiceContextRefFactory* ref_factory() { service_manager::ServiceContextRefFactory* ref_factory() {
return ref_factory_.get(); return ref_factory_.get();
} }
...@@ -47,11 +49,17 @@ class ResourceCoordinatorService : public service_manager::Service { ...@@ -47,11 +49,17 @@ class ResourceCoordinatorService : public service_manager::Service {
} }
private: private:
service_manager::BinderRegistry registry_; service_manager::BinderRegistryWithArgs<
const service_manager::BindSourceInfo&>
registry_;
std::unique_ptr<service_manager::ServiceContextRefFactory> ref_factory_; std::unique_ptr<service_manager::ServiceContextRefFactory> ref_factory_;
CoordinationUnitManager coordination_unit_manager_; CoordinationUnitManager coordination_unit_manager_;
CoordinationUnitIntrospectorImpl introspector_; CoordinationUnitIntrospectorImpl introspector_;
std::unique_ptr<ukm::MojoUkmRecorder> ukm_recorder_; std::unique_ptr<ukm::MojoUkmRecorder> ukm_recorder_;
std::unique_ptr<memory_instrumentation::CoordinatorImpl>
memory_instrumentation_coordinator_;
std::unique_ptr<tracing::AgentRegistry> tracing_agent_registry_;
std::unique_ptr<tracing::Coordinator> tracing_coordinator_;
// WeakPtrFactory members should always come last so WeakPtrs are destructed // WeakPtrFactory members should always come last so WeakPtrs are destructed
// before other members. // before other members.
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "services/metrics/public/cpp/mojo_ukm_recorder.h" #include "services/metrics/public/cpp/mojo_ukm_recorder.h"
#include "services/resource_coordinator/resource_coordinator_service.h" #include "services/resource_coordinator/resource_coordinator_service.h"
#include "services/service_manager/public/cpp/bind_source_info.h"
#include "services/service_manager/public/cpp/service_context_ref.h" #include "services/service_manager/public/cpp/service_context_ref.h"
namespace resource_coordinator { namespace resource_coordinator {
...@@ -27,7 +28,8 @@ ServiceCallbacksImpl::~ServiceCallbacksImpl() = default; ...@@ -27,7 +28,8 @@ ServiceCallbacksImpl::~ServiceCallbacksImpl() = default;
void ServiceCallbacksImpl::Create( void ServiceCallbacksImpl::Create(
service_manager::ServiceContextRefFactory* service_ref_factory, service_manager::ServiceContextRefFactory* service_ref_factory,
ResourceCoordinatorService* resource_coordinator_service, ResourceCoordinatorService* resource_coordinator_service,
resource_coordinator::mojom::ServiceCallbacksRequest request) { resource_coordinator::mojom::ServiceCallbacksRequest request,
const service_manager::BindSourceInfo& source_info) {
mojo::MakeStrongBinding( mojo::MakeStrongBinding(
base::MakeUnique<ServiceCallbacksImpl>(service_ref_factory, base::MakeUnique<ServiceCallbacksImpl>(service_ref_factory,
resource_coordinator_service), resource_coordinator_service),
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "services/resource_coordinator/public/interfaces/service_callbacks.mojom.h" #include "services/resource_coordinator/public/interfaces/service_callbacks.mojom.h"
namespace service_manager { namespace service_manager {
struct BindSourceInfo;
class ServiceContextRefFactory; class ServiceContextRefFactory;
class ServiceContextRef; class ServiceContextRef;
} // namespace service_manager } // namespace service_manager
...@@ -31,7 +32,8 @@ class ServiceCallbacksImpl : public mojom::ServiceCallbacks { ...@@ -31,7 +32,8 @@ class ServiceCallbacksImpl : public mojom::ServiceCallbacks {
static void Create( static void Create(
service_manager::ServiceContextRefFactory* service_ref_factory, service_manager::ServiceContextRefFactory* service_ref_factory,
ResourceCoordinatorService* resource_coordinator_service, ResourceCoordinatorService* resource_coordinator_service,
resource_coordinator::mojom::ServiceCallbacksRequest request); resource_coordinator::mojom::ServiceCallbacksRequest request,
const service_manager::BindSourceInfo& source_info);
void IsUkmRecorderInterfaceInitialized( void IsUkmRecorderInterfaceInitialized(
const IsUkmRecorderInterfaceInitializedCallback& callback) override; const IsUkmRecorderInterfaceInitializedCallback& callback) override;
......
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