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);
 };