Commit f7f59ab6 authored by Hidehiko Abe's avatar Hidehiko Abe Committed by Commit Bot

Migrate ArcService to BrowserContextKeyedService part 11.

This CL migrates ArcMetricsService.

BUG=672829
TEST=Ran try.

Change-Id: If61b381d0aac425117601b0f514aaebac431e9bc
Reviewed-on: https://chromium-review.googlesource.com/572471
Commit-Queue: Hidehiko Abe <hidehiko@chromium.org>
Reviewed-by: default avatarYusuke Sato (in China Mon-Thurs, may be offline) <yusukes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487011}
parent 48b141b4
...@@ -100,8 +100,6 @@ void ArcServiceLauncher::Initialize() { ...@@ -100,8 +100,6 @@ void ArcServiceLauncher::Initialize() {
base::MakeUnique<ArcImeService>(arc_bridge_service)); base::MakeUnique<ArcImeService>(arc_bridge_service));
arc_service_manager_->AddService( arc_service_manager_->AddService(
base::MakeUnique<ArcIntentHelperBridge>(arc_bridge_service)); base::MakeUnique<ArcIntentHelperBridge>(arc_bridge_service));
arc_service_manager_->AddService(
base::MakeUnique<ArcMetricsService>(arc_bridge_service));
arc_service_manager_->AddService( arc_service_manager_->AddService(
base::MakeUnique<ArcNetHostImpl>(arc_bridge_service)); base::MakeUnique<ArcNetHostImpl>(arc_bridge_service));
arc_service_manager_->AddService( arc_service_manager_->AddService(
...@@ -195,6 +193,7 @@ void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) { ...@@ -195,6 +193,7 @@ void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) {
ArcCrashCollectorBridge::GetForBrowserContext(profile); ArcCrashCollectorBridge::GetForBrowserContext(profile);
ArcEnterpriseReportingService::GetForBrowserContext(profile); ArcEnterpriseReportingService::GetForBrowserContext(profile);
ArcFileSystemMounter::GetForBrowserContext(profile); ArcFileSystemMounter::GetForBrowserContext(profile);
ArcMetricsService::GetForBrowserContext(profile);
arc_service_manager_->AddService(base::MakeUnique<ArcBootPhaseMonitorBridge>( arc_service_manager_->AddService(base::MakeUnique<ArcBootPhaseMonitorBridge>(
arc_service_manager_->arc_bridge_service(), arc_service_manager_->arc_bridge_service(),
......
...@@ -8,12 +8,14 @@ ...@@ -8,12 +8,14 @@
#include <utility> #include <utility>
#include "base/logging.h" #include "base/logging.h"
#include "base/memory/singleton.h"
#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/strings/string_util.h" #include "base/strings/string_util.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/session_manager_client.h" #include "chromeos/dbus/session_manager_client.h"
#include "components/arc/arc_bridge_service.h" #include "components/arc/arc_bridge_service.h"
#include "components/arc/arc_browser_context_keyed_service_factory_base.h"
namespace arc { namespace arc {
...@@ -44,21 +46,54 @@ std::string BootTypeToString(mojom::BootType boot_type) { ...@@ -44,21 +46,54 @@ std::string BootTypeToString(mojom::BootType boot_type) {
return ""; return "";
} }
// Singleton factory for ArcMetricsService.
class ArcMetricsServiceFactory
: public internal::ArcBrowserContextKeyedServiceFactoryBase<
ArcMetricsService,
ArcMetricsServiceFactory> {
public:
// Factory name used by ArcBrowserContextKeyedServiceFactoryBase.
static constexpr const char* kName = "ArcMetricsServiceFactory";
static ArcMetricsServiceFactory* GetInstance() {
return base::Singleton<ArcMetricsServiceFactory>::get();
}
private:
friend base::DefaultSingletonTraits<ArcMetricsServiceFactory>;
ArcMetricsServiceFactory() = default;
~ArcMetricsServiceFactory() override = default;
};
} // namespace } // namespace
ArcMetricsService::ArcMetricsService(ArcBridgeService* bridge_service) // static
: ArcService(bridge_service), ArcMetricsService* ArcMetricsService::GetForBrowserContext(
content::BrowserContext* context) {
return ArcMetricsServiceFactory::GetForBrowserContext(context);
}
ArcMetricsService::ArcMetricsService(content::BrowserContext* context,
ArcBridgeService* bridge_service)
: arc_bridge_service_(bridge_service),
binding_(this), binding_(this),
process_observer_(this), process_observer_(this),
weak_ptr_factory_(this) { weak_ptr_factory_(this) {
arc_bridge_service()->metrics()->AddObserver(this); arc_bridge_service_->metrics()->AddObserver(this);
arc_bridge_service()->process()->AddObserver(&process_observer_); arc_bridge_service_->process()->AddObserver(&process_observer_);
} }
ArcMetricsService::~ArcMetricsService() { ArcMetricsService::~ArcMetricsService() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
arc_bridge_service()->process()->RemoveObserver(&process_observer_);
arc_bridge_service()->metrics()->RemoveObserver(this); // TODO(hidehiko): Currently, the lifetime of ArcBridgeService and
// BrowserContextKeyedService is not nested.
// If ArcServiceManager::Get() returns nullptr, it is already destructed,
// so do not touch it.
if (ArcServiceManager::Get()) {
arc_bridge_service_->process()->RemoveObserver(&process_observer_);
arc_bridge_service_->metrics()->RemoveObserver(this);
}
} }
void ArcMetricsService::OnInstanceReady() { void ArcMetricsService::OnInstanceReady() {
...@@ -91,7 +126,7 @@ void ArcMetricsService::OnProcessInstanceClosed() { ...@@ -91,7 +126,7 @@ void ArcMetricsService::OnProcessInstanceClosed() {
void ArcMetricsService::RequestProcessList() { void ArcMetricsService::RequestProcessList() {
mojom::ProcessInstance* process_instance = ARC_GET_INSTANCE_FOR_METHOD( mojom::ProcessInstance* process_instance = ARC_GET_INSTANCE_FOR_METHOD(
arc_bridge_service()->process(), RequestProcessList); arc_bridge_service_->process(), RequestProcessList);
if (!process_instance) if (!process_instance)
return; return;
VLOG(2) << "RequestProcessList"; VLOG(2) << "RequestProcessList";
...@@ -134,7 +169,7 @@ void ArcMetricsService::OnArcStartTimeRetrieved( ...@@ -134,7 +169,7 @@ void ArcMetricsService::OnArcStartTimeRetrieved(
return; return;
} }
auto* instance = auto* instance =
ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service()->metrics(), Init); ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->metrics(), Init);
if (!instance) if (!instance)
return; return;
......
...@@ -11,23 +11,33 @@ ...@@ -11,23 +11,33 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/threading/thread_checker.h" #include "base/threading/thread_checker.h"
#include "base/timer/timer.h" #include "base/timer/timer.h"
#include "components/arc/arc_service.h"
#include "components/arc/common/metrics.mojom.h" #include "components/arc/common/metrics.mojom.h"
#include "components/arc/common/process.mojom.h" #include "components/arc/common/process.mojom.h"
#include "components/arc/instance_holder.h" #include "components/arc/instance_holder.h"
#include "components/keyed_service/core/keyed_service.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding.h"
namespace content {
class BrowserContext;
} // namespace content
namespace arc { namespace arc {
class ArcBridgeService; class ArcBridgeService;
// Collects information from other ArcServices and send UMA metrics. // Collects information from other ArcServices and send UMA metrics.
class ArcMetricsService class ArcMetricsService
: public ArcService, : public KeyedService,
public InstanceHolder<mojom::MetricsInstance>::Observer, public InstanceHolder<mojom::MetricsInstance>::Observer,
public mojom::MetricsHost { public mojom::MetricsHost {
public: public:
explicit ArcMetricsService(ArcBridgeService* bridge_service); // Returns singleton instance for the given BrowserContext,
// or nullptr if the browser |context| is not allowed to use ARC.
static ArcMetricsService* GetForBrowserContext(
content::BrowserContext* context);
ArcMetricsService(content::BrowserContext* context,
ArcBridgeService* bridge_service);
~ArcMetricsService() override; ~ArcMetricsService() override;
// InstanceHolder<mojom::MetricsInstance>::Observer overrides. // InstanceHolder<mojom::MetricsInstance>::Observer overrides.
...@@ -68,6 +78,8 @@ class ArcMetricsService ...@@ -68,6 +78,8 @@ class ArcMetricsService
THREAD_CHECKER(thread_checker_); THREAD_CHECKER(thread_checker_);
ArcBridgeService* const arc_bridge_service_; // Owned by ArcServiceManager.
mojo::Binding<mojom::MetricsHost> binding_; mojo::Binding<mojom::MetricsHost> binding_;
ProcessObserver process_observer_; ProcessObserver process_observer_;
......
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