RC: Eliminate SystemRC use from RenderProcessProbe.
Bug: 910288
Change-Id: I7bbabad6cd03c7f58f3fb32d376236c191caf2bf
Reviewed-on: https://chromium-review.googlesource.com/c/1479847
Reviewed-by: Chris Hamilton <chrisha@chromium.org>
Commit-Queue: Sigurður Ásgeirsson <siggi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#634254}
diff --git a/chrome/browser/performance_manager/performance_manager.cc b/chrome/browser/performance_manager/performance_manager.cc
index bb590d9d..6c077ef 100644
--- a/chrome/browser/performance_manager/performance_manager.cc
+++ b/chrome/browser/performance_manager/performance_manager.cc
@@ -13,6 +13,7 @@
#include "base/task/post_task.h"
#include "base/task/task_traits.h"
#include "build/build_config.h"
+#include "chrome/browser/performance_manager/graph/system_node_impl.h"
#include "chrome/browser/performance_manager/observers/metrics_collector.h"
#include "chrome/browser/performance_manager/observers/page_signal_generator_impl.h"
#include "chrome/browser/performance_manager/observers/working_set_trimmer_win.h"
@@ -68,6 +69,14 @@
instance->task_runner_->DeleteSoon(FROM_HERE, instance.release());
}
+void PerformanceManager::DistributeMeasurementBatch(
+ resource_coordinator::mojom::ProcessResourceMeasurementBatchPtr batch) {
+ task_runner_->PostTask(
+ FROM_HERE,
+ base::BindOnce(&PerformanceManager::DistributeMeasurementBatchImpl,
+ base::Unretained(this), std::move(batch)));
+}
+
void PerformanceManager::BindInterface(
const std::string& interface_name,
mojo::ScopedMessagePipeHandle message_pipe) {
@@ -129,6 +138,14 @@
service_manager::BindSourceInfo());
}
+void PerformanceManager::DistributeMeasurementBatchImpl(
+ resource_coordinator::mojom::ProcessResourceMeasurementBatchPtr batch) {
+ SystemNodeImpl* system_node = graph_.FindOrCreateSystemNode(nullptr);
+ DCHECK(system_node);
+
+ system_node->DistributeMeasurementBatch(std::move(batch));
+}
+
void PerformanceManager::BindWebUIGraphDump(
resource_coordinator::mojom::WebUIGraphDumpRequest request,
const service_manager::BindSourceInfo& source_info) {
diff --git a/chrome/browser/performance_manager/performance_manager.h b/chrome/browser/performance_manager/performance_manager.h
index 390e5ad..1b68984 100644
--- a/chrome/browser/performance_manager/performance_manager.h
+++ b/chrome/browser/performance_manager/performance_manager.h
@@ -15,6 +15,7 @@
#include "chrome/browser/performance_manager/graph/graph_introspector_impl.h"
#include "chrome/browser/performance_manager/performance_manager.h"
#include "chrome/browser/performance_manager/webui_graph_dump_impl.h"
+#include "services/resource_coordinator/public/mojom/coordination_unit.mojom.h"
#include "services/resource_coordinator/public/mojom/coordination_unit_provider.mojom.h"
#include "services/service_manager/public/cpp/bind_source_info.h"
#include "services/service_manager/public/cpp/binder_registry.h"
@@ -52,6 +53,13 @@
template <typename Interface>
void BindInterface(mojo::InterfaceRequest<Interface> request);
+ // Dispatches a measurement batch to the SystemNode on the performance
+ // sequence. This is a temporary method to support the RenderProcessProbe,
+ // which will soon go away as the performance measurement moves to the
+ // performance sequence.
+ void DistributeMeasurementBatch(
+ resource_coordinator::mojom::ProcessResourceMeasurementBatchPtr batch);
+
private:
using InterfaceRegistry = service_manager::BinderRegistryWithArgs<
const service_manager::BindSourceInfo&>;
@@ -65,6 +73,8 @@
void OnStartImpl(std::unique_ptr<service_manager::Connector> connector);
void BindInterfaceImpl(const std::string& interface_name,
mojo::ScopedMessagePipeHandle message_pipe);
+ void DistributeMeasurementBatchImpl(
+ resource_coordinator::mojom::ProcessResourceMeasurementBatchPtr batch);
void BindWebUIGraphDump(
resource_coordinator::mojom::WebUIGraphDumpRequest request,
diff --git a/chrome/browser/resource_coordinator/render_process_probe.cc b/chrome/browser/resource_coordinator/render_process_probe.cc
index 19e5c35c..b268363 100644
--- a/chrome/browser/resource_coordinator/render_process_probe.cc
+++ b/chrome/browser/resource_coordinator/render_process_probe.cc
@@ -10,7 +10,6 @@
#include "base/metrics/histogram_macros.h"
#include "base/task/post_task.h"
#include "build/build_config.h"
-#include "chrome/browser/performance_manager/performance_manager.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_process_host.h"
@@ -254,25 +253,14 @@
return info.process.Pid();
}
-performance_manager::SystemResourceCoordinator*
-RenderProcessProbeImpl::EnsureSystemResourceCoordinator() {
- if (!system_resource_coordinator_) {
- system_resource_coordinator_ =
- std::make_unique<performance_manager::SystemResourceCoordinator>(
- performance_manager::PerformanceManager::GetInstance());
- }
-
- return system_resource_coordinator_.get();
-}
-
void RenderProcessProbeImpl::DispatchMetricsOnUIThread(
mojom::ProcessResourceMeasurementBatchPtr batch) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- performance_manager::SystemResourceCoordinator* system_resource_coordinator =
- EnsureSystemResourceCoordinator();
+ performance_manager::PerformanceManager* performance_manager =
+ performance_manager::PerformanceManager::GetInstance();
- if (system_resource_coordinator && !batch->measurements.empty())
- system_resource_coordinator->DistributeMeasurementBatch(std::move(batch));
+ if (performance_manager && !batch->measurements.empty())
+ performance_manager->DistributeMeasurementBatch(std::move(batch));
}
} // namespace resource_coordinator
diff --git a/chrome/browser/resource_coordinator/render_process_probe.h b/chrome/browser/resource_coordinator/render_process_probe.h
index a0f6299..02679a70 100644
--- a/chrome/browser/resource_coordinator/render_process_probe.h
+++ b/chrome/browser/resource_coordinator/render_process_probe.h
@@ -14,7 +14,7 @@
#include "base/process/process.h"
#include "base/process/process_metrics.h"
#include "base/timer/timer.h"
-#include "chrome/browser/performance_manager/system_resource_coordinator.h"
+#include "chrome/browser/performance_manager/performance_manager.h"
#include "services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation.h"
namespace resource_coordinator {
@@ -94,9 +94,6 @@
virtual base::ProcessId GetProcessId(int host_id,
const RenderProcessInfo& info);
- performance_manager::SystemResourceCoordinator*
- EnsureSystemResourceCoordinator();
-
// Dispatch the collected metrics.
// Virtual for testing.
virtual void DispatchMetricsOnUIThread(
@@ -113,10 +110,6 @@
// True while a gathering cycle is underways on a background thread.
bool is_gathering_ = false;
- // Used to signal the end of a CPU measurement cycle to the RC.
- std::unique_ptr<performance_manager::SystemResourceCoordinator>
- system_resource_coordinator_;
-
DISALLOW_COPY_AND_ASSIGN(RenderProcessProbeImpl);
};