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

Unified Diff: services/resource_coordinator/coordination_unit/tab_cpu_usage_observer.h

Issue 2925123002: NOCOMMIT PROTOTYPE [GRC] Tab CPU Usage Observer (Closed)
Patch Set: Rebase Created 3 years, 6 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
Index: services/resource_coordinator/coordination_unit/tab_cpu_usage_observer.h
diff --git a/services/resource_coordinator/coordination_unit/tab_cpu_usage_observer.h b/services/resource_coordinator/coordination_unit/tab_cpu_usage_observer.h
new file mode 100644
index 0000000000000000000000000000000000000000..787033a437b8b99f5b9320123ab0ebf491e13252
--- /dev/null
+++ b/services/resource_coordinator/coordination_unit/tab_cpu_usage_observer.h
@@ -0,0 +1,97 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SERVICES_RESOURCE_COORDINATOR_COORDINATION_UNIT_TAB_CPU_USAGE_OBSERVER_H_
+#define SERVICES_RESOURCE_COORDINATOR_COORDINATION_UNIT_TAB_CPU_USAGE_OBSERVER_H_
+
+#include <memory>
+#include <string>
+#include <unordered_map>
+
+#include "base/macros.h"
+#include "services/resource_coordinator/coordination_unit/coordination_unit_graph_observer.h"
+
+namespace resource_coordinator {
+
+class CoordinationUnitImpl;
+class TabCPUUsageObserver;
+
+class TabObserver {
+ public:
+ TabObserver();
+ ~TabObserver();
+
+ static const unsigned int kMaxCPUUsageMeasurementTicks;
+
+ bool IsObserving();
+ void AttributeCPUUsage(double cpu_usage);
+ void SetTabCPUUsageObserver(TabCPUUsageObserver* tab_cpu_usage_observer) {
+ tab_cpu_usage_observer_ = tab_cpu_usage_observer;
+ }
+
+ void TabURLChanged(const CoordinationUnitImpl* tab_coordination_unit,
+ mojom::PropertyType tab_url_property);
+
+ private:
+ unsigned int cpu_measurement_ticks_;
+ TabCPUUsageObserver* tab_cpu_usage_observer_;
+ std::string url_;
+
+ DISALLOW_COPY_AND_ASSIGN(TabObserver);
+};
+
+class ProcessObserver {
+ public:
+ ProcessObserver();
+ ~ProcessObserver();
+
+ void NewCPUUsageMeasurement(const CoordinationUnitImpl* coordination_unit,
+ mojom::PropertyType process_cpu_usage);
+ void RecalculateAttributableTabs(
+ const CoordinationUnitImpl* coordination_unit,
+ const CoordinationUnitImpl* frame_coordination_unit);
+ void SetTabCPUUsageObserver(TabCPUUsageObserver* tab_cpu_usage_observer) {
+ tab_cpu_usage_observer_ = tab_cpu_usage_observer;
+ }
+
+ private:
+ std::unordered_map<CoordinationUnitID, TabObserver*> attributable_tabs_;
+ TabCPUUsageObserver* tab_cpu_usage_observer_;
+
+ DISALLOW_COPY_AND_ASSIGN(ProcessObserver);
+};
+
+class TabCPUUsageObserver : public CoordinationUnitGraphObserver {
+ public:
+ TabCPUUsageObserver();
+ ~TabCPUUsageObserver() override;
+
+ std::unordered_map<CoordinationUnitID, ProcessObserver>& process_observers() {
+ return process_observers_;
+ }
+ std::unordered_map<CoordinationUnitID, TabObserver>& tab_observers() {
+ return tab_observers_;
+ }
+
+ void CoordinationUnitCreated(
+ CoordinationUnitImpl* coordination_unit) override;
+
+ void ProcessCoordinationUnitCreated(
+ CoordinationUnitImpl* process_coordination_unit);
+ void TabCoordinationUnitCreated(CoordinationUnitImpl* tab_coordination_unit);
+
+ void RemoveProcessObserver(
+ const CoordinationUnitImpl* process_coordination_unit);
+ void RemoveTabObserver(const CoordinationUnitImpl* tab_coordination_unit);
+
+ private:
+ std::unordered_map<CoordinationUnitID, ProcessObserver> process_observers_;
+ std::unordered_map<CoordinationUnitID, TabObserver> tab_observers_;
+
+ DISALLOW_COPY_AND_ASSIGN(TabCPUUsageObserver);
+};
+
+} // namespace resource_coordinator
+
+#endif // SERVICES_RESOURCE_COORDINATOR_COORDINATION_UNIT_TAB_CPU_USAGE_OBSERVER_H_

Powered by Google App Engine
This is Rietveld 408576698