Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Unified Diff: components/arc/metrics/arc_metrics_service.cc

Issue 2133503002: arc: Revamp the ArcBridgeService interface (Closed) Base URL: https://chromium.googlesource.com/a/chromium/src.git@master
Patch Set: More rebasing Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/arc/metrics/arc_metrics_service.h ('k') | components/arc/net/arc_net_host_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/arc/metrics/arc_metrics_service.cc
diff --git a/components/arc/metrics/arc_metrics_service.cc b/components/arc/metrics/arc_metrics_service.cc
index 5ce5aa101ae122fde893bef49e0a3be45daae846..9aca98bd08402b742530c24ac060b086e6783d04 100644
--- a/components/arc/metrics/arc_metrics_service.cc
+++ b/components/arc/metrics/arc_metrics_service.cc
@@ -4,6 +4,8 @@
#include "components/arc/metrics/arc_metrics_service.h"
+#include <string>
+
#include "base/logging.h"
#include "base/metrics/histogram_macros.h"
#include "base/strings/string_util.h"
@@ -17,19 +19,24 @@ const char kArcProcessNamePrefix[] = "org.chromium.arc.";
const char kGmsProcessNamePrefix[] = "com.google.android.gms";
const char kBootProgressEnableScreen[] = "boot_progress_enable_screen";
-} // namespace
+} // namespace
namespace arc {
ArcMetricsService::ArcMetricsService(ArcBridgeService* bridge_service)
- : ArcService(bridge_service), binding_(this), weak_ptr_factory_(this) {
- arc_bridge_service()->AddObserver(this);
+ : ArcService(bridge_service),
+ binding_(this),
+ process_observer_(this),
+ weak_ptr_factory_(this) {
+ arc_bridge_service()->metrics()->AddObserver(this);
+ arc_bridge_service()->process()->AddObserver(&process_observer_);
oom_kills_monitor_.Start();
}
ArcMetricsService::~ArcMetricsService() {
DCHECK(CalledOnValidThread());
- arc_bridge_service()->RemoveObserver(this);
+ arc_bridge_service()->process()->RemoveObserver(&process_observer_);
+ arc_bridge_service()->metrics()->RemoveObserver(this);
}
bool ArcMetricsService::CalledOnValidThread() {
@@ -37,7 +44,7 @@ bool ArcMetricsService::CalledOnValidThread() {
return thread_checker_.CalledOnValidThread();
}
-void ArcMetricsService::OnMetricsInstanceReady() {
+void ArcMetricsService::OnInstanceReady() {
VLOG(2) << "Start metrics service.";
// Retrieve ARC start time from session manager.
chromeos::SessionManagerClient* session_manager_client =
@@ -47,7 +54,7 @@ void ArcMetricsService::OnMetricsInstanceReady() {
weak_ptr_factory_.GetWeakPtr()));
}
-void ArcMetricsService::OnMetricsInstanceClosed() {
+void ArcMetricsService::OnInstanceClosed() {
VLOG(2) << "Close metrics service.";
DCHECK(CalledOnValidThread());
if (binding_.is_bound())
@@ -56,11 +63,9 @@ void ArcMetricsService::OnMetricsInstanceClosed() {
void ArcMetricsService::OnProcessInstanceReady() {
VLOG(2) << "Start updating process list.";
- timer_.Start(
- FROM_HERE,
- base::TimeDelta::FromMinutes(kRequestProcessListPeriodInMinutes),
- this,
- &ArcMetricsService::RequestProcessList);
+ timer_.Start(FROM_HERE,
+ base::TimeDelta::FromMinutes(kRequestProcessListPeriodInMinutes),
+ this, &ArcMetricsService::RequestProcessList);
}
void ArcMetricsService::OnProcessInstanceClosed() {
@@ -70,16 +75,15 @@ void ArcMetricsService::OnProcessInstanceClosed() {
void ArcMetricsService::RequestProcessList() {
mojom::ProcessInstance* process_instance =
- arc_bridge_service()->process_instance();
+ arc_bridge_service()->process()->instance();
if (!process_instance) {
LOG(ERROR) << "No process instance found before RequestProcessList";
return;
}
VLOG(2) << "RequestProcessList";
- process_instance->RequestProcessList(
- base::Bind(&ArcMetricsService::ParseProcessList,
- weak_ptr_factory_.GetWeakPtr()));
+ process_instance->RequestProcessList(base::Bind(
+ &ArcMetricsService::ParseProcessList, weak_ptr_factory_.GetWeakPtr()));
}
void ArcMetricsService::ParseProcessList(
@@ -109,12 +113,17 @@ void ArcMetricsService::ParseProcessList(
}
void ArcMetricsService::OnArcStartTimeRetrieved(
- bool success, base::TimeTicks arc_start_time) {
+ bool success,
+ base::TimeTicks arc_start_time) {
DCHECK(CalledOnValidThread());
if (!success) {
LOG(ERROR) << "Failed to retrieve ARC start timeticks.";
return;
}
+ if (!arc_bridge_service()->metrics()->instance()) {
+ LOG(ERROR) << "ARC metrics instance went away while retrieving start time.";
+ return;
+ }
// The binding of host interface is deferred until the ARC start time is
// retrieved here because it prevents race condition of the ARC start
@@ -122,7 +131,7 @@ void ArcMetricsService::OnArcStartTimeRetrieved(
if (!binding_.is_bound()) {
mojom::MetricsHostPtr host_ptr;
binding_.Bind(mojo::GetProxy(&host_ptr));
- arc_bridge_service()->metrics_instance()->Init(std::move(host_ptr));
+ arc_bridge_service()->metrics()->instance()->Init(std::move(host_ptr));
}
arc_start_time_ = arc_start_time;
VLOG(2) << "ARC start @" << arc_start_time_;
@@ -134,27 +143,36 @@ void ArcMetricsService::ReportBootProgress(
int64_t arc_start_time_in_ms =
(arc_start_time_ - base::TimeTicks()).InMilliseconds();
for (const auto& event : events) {
- VLOG(2) << "Report boot progress event:"
- << event->event << "@" << event->uptimeMillis;
+ VLOG(2) << "Report boot progress event:" << event->event << "@"
+ << event->uptimeMillis;
std::string title = "Arc." + event->event.get();
base::TimeDelta elapsed_time = base::TimeDelta::FromMilliseconds(
event->uptimeMillis - arc_start_time_in_ms);
// Note: This leaks memory, which is expected behavior.
- base::HistogramBase* histogram =
- base::Histogram::FactoryTimeGet(
- title,
- base::TimeDelta::FromMilliseconds(1),
- base::TimeDelta::FromSeconds(30),
- 50,
- base::HistogramBase::kUmaTargetedHistogramFlag);
+ base::HistogramBase* histogram = base::Histogram::FactoryTimeGet(
+ title, base::TimeDelta::FromMilliseconds(1),
+ base::TimeDelta::FromSeconds(30), 50,
+ base::HistogramBase::kUmaTargetedHistogramFlag);
histogram->AddTime(elapsed_time);
if (event->event.get().compare(kBootProgressEnableScreen) == 0)
- UMA_HISTOGRAM_CUSTOM_TIMES("Arc.AndroidBootTime",
- elapsed_time,
+ UMA_HISTOGRAM_CUSTOM_TIMES("Arc.AndroidBootTime", elapsed_time,
base::TimeDelta::FromMilliseconds(1),
- base::TimeDelta::FromSeconds(30),
- 50);
+ base::TimeDelta::FromSeconds(30), 50);
}
}
+ArcMetricsService::ProcessObserver::ProcessObserver(
+ ArcMetricsService* arc_metrics_service)
+ : arc_metrics_service_(arc_metrics_service) {}
+
+ArcMetricsService::ProcessObserver::~ProcessObserver() = default;
+
+void ArcMetricsService::ProcessObserver::OnInstanceReady() {
+ arc_metrics_service_->OnProcessInstanceReady();
+}
+
+void ArcMetricsService::ProcessObserver::OnInstanceClosed() {
+ arc_metrics_service_->OnProcessInstanceClosed();
+}
+
} // namespace arc
« no previous file with comments | « components/arc/metrics/arc_metrics_service.h ('k') | components/arc/net/arc_net_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698