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

Unified Diff: tools/perf/measurements/decorators.py

Issue 230163004: Using decorator for power monitoring. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 | « no previous file | tools/perf/measurements/page_cycler.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/perf/measurements/decorators.py
diff --git a/tools/perf/measurements/decorators.py b/tools/perf/measurements/decorators.py
new file mode 100644
index 0000000000000000000000000000000000000000..d878eb37e02b6f69c064148e6005c0f0767a555a
--- /dev/null
+++ b/tools/perf/measurements/decorators.py
@@ -0,0 +1,54 @@
+# Copyright 2014 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.
+
+from metrics import power
+
+
+def Power(original_class):
+ """Decorator for adding power measurement to a measurement.
+
+ Example usage (always returns the same Foo instance):
+ @Power
+ class PageCycler(page_measurement.PageMeasurement):
+
+ Power measurement will then be added to this page measurement. Two separates
+ measurement will be done, one for page loading, and the other one for the
+ interaction with the page.
+ """
+
+ original__init__ = original_class.__init__
+ def new__init__(self, *args, **kws):
+ original__init__(self, *args, **kws)
+ self._load_power_metric = power.PowerMetric()
+ self._page_power_metric = power.PowerMetric()
+ original_class.__init__ = new__init__
+
+ originalCustomizeBrowserOptions = original_class.CustomizeBrowserOptions
+ def newCustomizeBrowserOptions(self, options):
+ originalCustomizeBrowserOptions(self, options)
+ power.PowerMetric.CustomizeBrowserOptions(options)
+ original_class.CustomizeBrowserOptions = newCustomizeBrowserOptions
+
+ originalWillNavigateToPage = original_class.WillNavigateToPage
+ def newWillNavigateToPage(self, page, tab):
+ originalWillNavigateToPage(self, page, tab)
+ self._load_power_metric.Start(page, tab)
+ original_class.WillNavigateToPage = newWillNavigateToPage
+
+ originalDidNavigateToPage = original_class.DidNavigateToPage
+ def newDidNavigateToPage(self, page, tab):
+ self._load_power_metric.Stop(page, tab)
+ originalDidNavigateToPage(self, page, tab)
+ self._page_power_metric.Start(page, tab)
+ original_class.DidNavigateToPage = newDidNavigateToPage
+
+ originalMeasurePage = original_class.MeasurePage
+ def newMeasurePage(self, page, tab, results):
+ self._page_power_metric.Stop(page, tab)
+ originalMeasurePage(self, page, tab, results)
+ self._load_power_metric.AddResults(tab, results, 'load_')
+ self._page_power_metric.AddResults(tab, results)
+ original_class.MeasurePage = newMeasurePage
+
+ return original_class
« no previous file with comments | « no previous file | tools/perf/measurements/page_cycler.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698