| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import unittest | 5 import unittest |
| 6 | 6 |
| 7 from metrics import timeline | 7 from metrics import timeline |
| 8 from telemetry.core.timeline import bounds | 8 from telemetry.core.timeline import bounds |
| 9 from telemetry.core.timeline import model as model_module | 9 from telemetry.core.timeline import model as model_module |
| 10 from telemetry.page import page as page_module | 10 from telemetry.page import page as page_module |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 def AssertHasPageSpecificScalarValue(self, name, units, expected_value): | 28 def AssertHasPageSpecificScalarValue(self, name, units, expected_value): |
| 29 value = self.GetPageSpecificValueNamed(name) | 29 value = self.GetPageSpecificValueNamed(name) |
| 30 self.test.assertEquals(units, value.units) | 30 self.test.assertEquals(units, value.units) |
| 31 self.test.assertTrue(isinstance(value, scalar.ScalarValue)) | 31 self.test.assertTrue(isinstance(value, scalar.ScalarValue)) |
| 32 self.test.assertEquals(expected_value, value.value) | 32 self.test.assertEquals(expected_value, value.value) |
| 33 | 33 |
| 34 def __str__(self): | 34 def __str__(self): |
| 35 return '\n'.join([repr(x) for x in self.all_page_specific_values]) | 35 return '\n'.join([repr(x) for x in self.all_page_specific_values]) |
| 36 | 36 |
| 37 class LoadTimesTimelineMetric(unittest.TestCase): | 37 class LoadTimesTimelineMetric(unittest.TestCase): |
| 38 def GetResultsForModel(self, metric, model): | 38 def GetResults(self, metric): |
| 39 metric.model = model | |
| 40 results = TestPageMeasurementResults(self) | 39 results = TestPageMeasurementResults(self) |
| 41 tab = None | 40 tab = None |
| 42 metric.AddResults(tab, results) | 41 metric.AddResults(tab, results) |
| 43 return results | 42 return results |
| 44 | 43 |
| 45 def testSanitizing(self): | 44 def testSanitizing(self): |
| 46 model = model_module.TimelineModel() | 45 model = model_module.TimelineModel() |
| 47 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2) | 46 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2) |
| 48 renderer_main.name = 'CrRendererMain' | 47 renderer_main.name = 'CrRendererMain' |
| 49 | 48 |
| 50 # [ X ] | 49 # [ X ] |
| 51 # [ Y ] | 50 # [ Y ] |
| 52 renderer_main.BeginSlice('cat1', 'x.y', 10, 0) | 51 renderer_main.BeginSlice('cat1', 'x.y', 10, 0) |
| 53 renderer_main.EndSlice(20, 20) | 52 renderer_main.EndSlice(20, 20) |
| 54 model.FinalizeImport() | 53 model.FinalizeImport() |
| 55 | 54 |
| 56 metric = timeline.LoadTimesTimelineMetric() | 55 metric = timeline.LoadTimesTimelineMetric(model, renderer_main.parent) |
| 57 metric.renderer_process = renderer_main.parent | 56 results = self.GetResults(metric) |
| 58 results = self.GetResultsForModel(metric, model) | |
| 59 results.AssertHasPageSpecificScalarValue( | 57 results.AssertHasPageSpecificScalarValue( |
| 60 'CrRendererMain|x_y', 'ms', 10) | 58 'CrRendererMain|x_y', 'ms', 10) |
| 61 results.AssertHasPageSpecificScalarValue( | 59 results.AssertHasPageSpecificScalarValue( |
| 62 'CrRendererMain|x_y_max', 'ms', 10) | 60 'CrRendererMain|x_y_max', 'ms', 10) |
| 63 results.AssertHasPageSpecificScalarValue( | 61 results.AssertHasPageSpecificScalarValue( |
| 64 'CrRendererMain|x_y_avg', 'ms', 10) | 62 'CrRendererMain|x_y_avg', 'ms', 10) |
| 65 | 63 |
| 66 def testCounterSanitizing(self): | 64 def testCounterSanitizing(self): |
| 67 model = model_module.TimelineModel() | 65 model = model_module.TimelineModel() |
| 68 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2) | 66 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2) |
| 69 renderer_main.name = 'CrRendererMain' | 67 renderer_main.name = 'CrRendererMain' |
| 70 | 68 |
| 71 x_counter = renderer_main.parent.GetOrCreateCounter('cat', 'x.y') | 69 x_counter = renderer_main.parent.GetOrCreateCounter('cat', 'x.y') |
| 72 x_counter.samples += [1, 2] | 70 x_counter.samples += [1, 2] |
| 73 x_counter.series_names += ['a'] | 71 x_counter.series_names += ['a'] |
| 74 x_counter.timestamps += [0, 1] | 72 x_counter.timestamps += [0, 1] |
| 75 model.FinalizeImport() | 73 model.FinalizeImport() |
| 76 | 74 |
| 77 metric = timeline.LoadTimesTimelineMetric() | 75 metric = timeline.LoadTimesTimelineMetric(model, renderer_main.parent) |
| 78 metric.renderer_process = renderer_main.parent | 76 results = self.GetResults(metric) |
| 79 results = self.GetResultsForModel(metric, model) | |
| 80 results.AssertHasPageSpecificScalarValue( | 77 results.AssertHasPageSpecificScalarValue( |
| 81 'cat_x_y', 'count', 3) | 78 'cat_x_y', 'count', 3) |
| 82 results.AssertHasPageSpecificScalarValue( | 79 results.AssertHasPageSpecificScalarValue( |
| 83 'cat_x_y_avg', 'count', 1.5) | 80 'cat_x_y_avg', 'count', 1.5) |
| 84 | 81 |
| 85 | 82 |
| 86 class ThreadTimesTimelineMetricUnittest(unittest.TestCase): | 83 class ThreadTimesTimelineMetricUnittest(unittest.TestCase): |
| 87 def GetResultsForModel(self, metric, model): | 84 def GetResults(self, metric): |
| 88 metric.model = model | |
| 89 results = TestPageMeasurementResults(self) | 85 results = TestPageMeasurementResults(self) |
| 90 tab = None | 86 tab = None |
| 91 metric.AddResults(tab, results) | 87 metric.AddResults(tab, results) |
| 92 return results | 88 return results |
| 93 | 89 |
| 94 def GetActionRange(self, start, end): | 90 def GetActionRange(self, start, end): |
| 95 action_range = bounds.Bounds() | 91 action_range = bounds.Bounds() |
| 96 action_range.AddValue(start) | 92 action_range.AddValue(start) |
| 97 action_range.AddValue(end) | 93 action_range.AddValue(end) |
| 98 return action_range | 94 return action_range |
| 99 | 95 |
| 100 def testResults(self): | 96 def testResults(self): |
| 101 model = model_module.TimelineModel() | 97 model = model_module.TimelineModel() |
| 102 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2) | 98 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2) |
| 103 renderer_main.name = 'CrRendererMain' | 99 renderer_main.name = 'CrRendererMain' |
| 104 | 100 |
| 105 metric = timeline.ThreadTimesTimelineMetric() | 101 metric = timeline.ThreadTimesTimelineMetric(model, renderer_main.parent, |
| 106 metric._action_ranges = [self.GetActionRange(1, 2)] | 102 [self.GetActionRange(1, 2)]) |
| 107 metric.details_to_report = timeline.ReportMainThreadOnly | 103 metric.details_to_report = timeline.ReportMainThreadOnly |
| 108 results = self.GetResultsForModel(metric, model) | 104 results = self.GetResults(metric) |
| 109 | 105 |
| 110 # Test that all result thread categories exist | 106 # Test that all result thread categories exist |
| 111 for name in timeline.TimelineThreadCategories.values(): | 107 for name in timeline.TimelineThreadCategories.values(): |
| 112 results.GetPageSpecificValueNamed(timeline.ThreadCpuTimeResultName(name)) | 108 results.GetPageSpecificValueNamed(timeline.ThreadCpuTimeResultName(name)) |
| 113 | 109 |
| 114 def testBasic(self): | 110 def testBasic(self): |
| 115 model = model_module.TimelineModel() | 111 model = model_module.TimelineModel() |
| 116 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2) | 112 renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2) |
| 117 renderer_main.name = 'CrRendererMain' | 113 renderer_main.name = 'CrRendererMain' |
| 118 | 114 |
| 119 # Create two frame swaps (Results times should be divided by two) | 115 # Create two frame swaps (Results times should be divided by two) |
| 120 cc_main = model.GetOrCreateProcess(1).GetOrCreateThread(3) | 116 cc_main = model.GetOrCreateProcess(1).GetOrCreateThread(3) |
| 121 cc_main.name = 'Compositor' | 117 cc_main.name = 'Compositor' |
| 122 cc_main.BeginSlice('cc_cat', timeline.FrameTraceName, 10, 10) | 118 cc_main.BeginSlice('cc_cat', timeline.FrameTraceName, 10, 10) |
| 123 cc_main.EndSlice(11, 11) | 119 cc_main.EndSlice(11, 11) |
| 124 cc_main.BeginSlice('cc_cat', timeline.FrameTraceName, 12, 12) | 120 cc_main.BeginSlice('cc_cat', timeline.FrameTraceName, 12, 12) |
| 125 cc_main.EndSlice(13, 13) | 121 cc_main.EndSlice(13, 13) |
| 126 | 122 |
| 127 # [ X ] [ Z ] | 123 # [ X ] [ Z ] |
| 128 # [ Y ] | 124 # [ Y ] |
| 129 renderer_main.BeginSlice('cat1', 'X', 10, 0) | 125 renderer_main.BeginSlice('cat1', 'X', 10, 0) |
| 130 renderer_main.BeginSlice('cat2', 'Y', 15, 5) | 126 renderer_main.BeginSlice('cat2', 'Y', 15, 5) |
| 131 renderer_main.EndSlice(16, 5.5) | 127 renderer_main.EndSlice(16, 5.5) |
| 132 renderer_main.EndSlice(30, 19.5) | 128 renderer_main.EndSlice(30, 19.5) |
| 133 renderer_main.BeginSlice('cat1', 'Z', 31, 20) | 129 renderer_main.BeginSlice('cat1', 'Z', 31, 20) |
| 134 renderer_main.BeginSlice('cat1', 'Z', 33, 21) | 130 renderer_main.BeginSlice('cat1', 'Z', 33, 21) |
| 135 model.FinalizeImport() | 131 model.FinalizeImport() |
| 136 | 132 |
| 137 # Exclude 'Z' using an action-range. | 133 # Exclude 'Z' using an action-range. |
| 138 metric = timeline.ThreadTimesTimelineMetric() | 134 metric = timeline.ThreadTimesTimelineMetric( |
| 139 metric._action_ranges = [self.GetActionRange(10, 30)] | 135 model, renderer_main.parent, action_ranges=[self.GetActionRange(10, 30)]) |
| 140 metric.details_to_report = timeline.ReportMainThreadOnly | 136 metric.details_to_report = timeline.ReportMainThreadOnly |
| 141 results = self.GetResultsForModel(metric, model) | 137 results = self.GetResults(metric) |
| 142 | 138 |
| 143 # Test a couple specific results. | 139 # Test a couple specific results. |
| 144 assert_results = { | 140 assert_results = { |
| 145 timeline.ThreadCpuTimeResultName('renderer_main') : 9.75, | 141 timeline.ThreadCpuTimeResultName('renderer_main') : 9.75, |
| 146 timeline.ThreadDetailResultName('renderer_main','cat1') : 9.5, | 142 timeline.ThreadDetailResultName('renderer_main','cat1') : 9.5, |
| 147 timeline.ThreadDetailResultName('renderer_main','cat2') : 0.5, | 143 timeline.ThreadDetailResultName('renderer_main','cat2') : 0.5, |
| 148 timeline.ThreadDetailResultName('renderer_main','idle') : 0 | 144 timeline.ThreadDetailResultName('renderer_main','idle') : 0 |
| 149 } | 145 } |
| 150 for name, value in assert_results.iteritems(): | 146 for name, value in assert_results.iteritems(): |
| 151 results.AssertHasPageSpecificScalarValue(name, 'ms', value) | 147 results.AssertHasPageSpecificScalarValue(name, 'ms', value) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 165 # [Overhead] | 161 # [Overhead] |
| 166 overhead_category = timeline.OverheadTraceCategory | 162 overhead_category = timeline.OverheadTraceCategory |
| 167 overhead_name = timeline.OverheadTraceName | 163 overhead_name = timeline.OverheadTraceName |
| 168 renderer_main.BeginSlice('cat1', 'X', 10, 0) | 164 renderer_main.BeginSlice('cat1', 'X', 10, 0) |
| 169 renderer_main.BeginSlice(overhead_category, overhead_name, 15, 5) | 165 renderer_main.BeginSlice(overhead_category, overhead_name, 15, 5) |
| 170 renderer_main.EndSlice(16, 6) | 166 renderer_main.EndSlice(16, 6) |
| 171 renderer_main.EndSlice(30, 10) | 167 renderer_main.EndSlice(30, 10) |
| 172 model.FinalizeImport() | 168 model.FinalizeImport() |
| 173 | 169 |
| 174 # Include everything in an action-range. | 170 # Include everything in an action-range. |
| 175 metric = timeline.ThreadTimesTimelineMetric() | 171 metric = timeline.ThreadTimesTimelineMetric( |
| 176 metric._action_ranges = [self.GetActionRange(10, 30)] | 172 model, renderer_main.parent, action_ranges=[self.GetActionRange(10, 30)]) |
| 177 metric.details_to_report = timeline.ReportMainThreadOnly | 173 metric.details_to_report = timeline.ReportMainThreadOnly |
| 178 results = self.GetResultsForModel(metric, model) | 174 results = self.GetResults(metric) |
| 179 | 175 |
| 180 # Test a couple specific results. | 176 # Test a couple specific results. |
| 181 assert_results = { | 177 assert_results = { |
| 182 timeline.ThreadCpuTimeResultName('renderer_main') : 9.0, | 178 timeline.ThreadCpuTimeResultName('renderer_main') : 9.0, |
| 183 } | 179 } |
| 184 for name, value in assert_results.iteritems(): | 180 for name, value in assert_results.iteritems(): |
| 185 results.AssertHasPageSpecificScalarValue(name, 'ms', value) | 181 results.AssertHasPageSpecificScalarValue(name, 'ms', value) |
| OLD | NEW |