| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <!-- | 2 <!-- |
| 3 Copyright 2017 The Chromium Authors. All rights reserved. | 3 Copyright 2017 The Chromium Authors. All rights reserved. |
| 4 Use of this source code is governed by a BSD-style license that can be | 4 Use of this source code is governed by a BSD-style license that can be |
| 5 found in the LICENSE file. | 5 found in the LICENSE file. |
| 6 --> | 6 --> |
| 7 | 7 |
| 8 <link rel="import" href="/tracing/core/test_utils.html"> | 8 <link rel="import" href="/tracing/core/test_utils.html"> |
| 9 <link rel="import" href="/tracing/metrics/system_health/estimated_input_latency_
metric.html"> | 9 <link rel="import" href="/tracing/metrics/system_health/estimated_input_latency_
metric.html"> |
| 10 <link rel="import" href="/tracing/value/histogram_set.html"> | 10 <link rel="import" href="/tracing/value/histogram_set.html"> |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 }); | 29 }); |
| 30 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ | 30 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 31 cat: 'loading', | 31 cat: 'loading', |
| 32 title: 'firstMeaningfulPaintCandidate', | 32 title: 'firstMeaningfulPaintCandidate', |
| 33 start: timestamp, | 33 start: timestamp, |
| 34 duration: 0.0, | 34 duration: 0.0, |
| 35 args: {frame: '0xdeadbeef'} | 35 args: {frame: '0xdeadbeef'} |
| 36 })); | 36 })); |
| 37 } | 37 } |
| 38 | 38 |
| 39 test('estimatedInputLatency', function() { | 39 test('expectedQueueingTime', function() { |
| 40 let model = tr.c.TestUtils.newModel((model) => { | 40 let model = tr.c.TestUtils.newModel((model) => { |
| 41 let rendererProcess = model.getOrCreateProcess(1984); | 41 let rendererProcess = model.getOrCreateProcess(1984); |
| 42 let mainThread = rendererProcess.getOrCreateThread(2); | 42 let mainThread = rendererProcess.getOrCreateThread(2); |
| 43 mainThread.name = 'CrRendererMain'; | 43 mainThread.name = 'CrRendererMain'; |
| 44 addInteractiveTimestamp(rendererProcess, mainThread, 200); | 44 addInteractiveTimestamp(rendererProcess, mainThread, 200); |
| 45 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ | 45 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 46 cat: 'toplevel', | 46 cat: 'toplevel', |
| 47 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', | 47 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', |
| 48 start: 0, | 48 start: 0, |
| 49 duration: 100, | 49 duration: 100, |
| 50 })); | 50 })); |
| 51 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ | 51 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 52 cat: 'toplevel', | 52 cat: 'toplevel', |
| 53 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', | 53 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', |
| 54 start: 3000, | 54 start: 3000, |
| 55 duration: 10, | 55 duration: 10, |
| 56 })); | 56 })); |
| 57 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ | 57 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 58 cat: 'toplevel', | 58 cat: 'toplevel', |
| 59 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', | 59 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', |
| 60 start: 9000, | 60 start: 9000, |
| 61 duration: 10, | 61 duration: 10, |
| 62 })); | 62 })); |
| 63 }); | 63 }); |
| 64 let values = new tr.v.HistogramSet(); | 64 let values = new tr.v.HistogramSet(); |
| 65 tr.metrics.sh.estimatedInputLatency(values, model); | 65 tr.metrics.sh.expectedQueueingTimeMetric(values, model); |
| 66 let interactiveEQT = values.getHistogramNamed( | 66 let interactiveEQT = values.getHistogramNamed( |
| 67 'interactive:500ms_window:renderer_eqt'); | 67 'interactive:500ms_window:renderer_eqt'); |
| 68 assert.equal(0.1, interactiveEQT.average); | 68 assert.equal(0.1, interactiveEQT.average); |
| 69 let totalEQT = values.getHistogramNamed( | 69 let totalEQT = values.getHistogramNamed( |
| 70 'total:500ms_window:renderer_eqt'); | 70 'total:500ms_window:renderer_eqt'); |
| 71 assert.equal(10, totalEQT.average); | 71 assert.equal(10, totalEQT.average); |
| 72 }); | 72 }); |
| 73 | 73 |
| 74 test('estimatedInputLatency_noInteractive', function() { | 74 test('expectedQueueingTime_noInteractive', function() { |
| 75 let model = tr.c.TestUtils.newModel((model) => { | 75 let model = tr.c.TestUtils.newModel((model) => { |
| 76 let rendererProcess = model.getOrCreateProcess(1984); | 76 let rendererProcess = model.getOrCreateProcess(1984); |
| 77 let mainThread = rendererProcess.getOrCreateThread(2); | 77 let mainThread = rendererProcess.getOrCreateThread(2); |
| 78 mainThread.name = 'CrRendererMain'; | 78 mainThread.name = 'CrRendererMain'; |
| 79 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ | 79 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 80 cat: 'toplevel', | 80 cat: 'toplevel', |
| 81 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', | 81 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', |
| 82 start: 0, | 82 start: 0, |
| 83 duration: 100, | 83 duration: 100, |
| 84 })); | 84 })); |
| 85 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ | 85 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 86 cat: 'toplevel', | 86 cat: 'toplevel', |
| 87 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', | 87 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', |
| 88 start: 3000, | 88 start: 3000, |
| 89 duration: 10, | 89 duration: 10, |
| 90 })); | 90 })); |
| 91 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ | 91 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 92 cat: 'toplevel', | 92 cat: 'toplevel', |
| 93 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', | 93 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', |
| 94 start: 9000, | 94 start: 9000, |
| 95 duration: 10, | 95 duration: 10, |
| 96 })); | 96 })); |
| 97 }); | 97 }); |
| 98 let values = new tr.v.HistogramSet(); | 98 let values = new tr.v.HistogramSet(); |
| 99 tr.metrics.sh.estimatedInputLatency(values, model); | 99 tr.metrics.sh.expectedQueueingTimeMetric(values, model); |
| 100 let interactiveEQT = values.getHistogramNamed( | 100 let interactiveEQT = values.getHistogramNamed( |
| 101 'interactive:500ms_window:renderer_eqt'); | 101 'interactive:500ms_window:renderer_eqt'); |
| 102 assert.equal(0, interactiveEQT.numValues); | 102 assert.equal(0, interactiveEQT.numValues); |
| 103 }); | 103 }); |
| 104 | 104 |
| 105 test('estimatedInputLatency_multipleInteractive', function() { | 105 test('expectedQueueingTime_multipleInteractive', function() { |
| 106 let model = tr.c.TestUtils.newModel((model) => { | 106 let model = tr.c.TestUtils.newModel((model) => { |
| 107 let rendererProcess = model.getOrCreateProcess(1984); | 107 let rendererProcess = model.getOrCreateProcess(1984); |
| 108 let mainThread = rendererProcess.getOrCreateThread(2); | 108 let mainThread = rendererProcess.getOrCreateThread(2); |
| 109 mainThread.name = 'CrRendererMain'; | 109 mainThread.name = 'CrRendererMain'; |
| 110 addInteractiveTimestamp(rendererProcess, mainThread, 200); | 110 addInteractiveTimestamp(rendererProcess, mainThread, 200); |
| 111 addInteractiveTimestamp(rendererProcess, mainThread, 400); | 111 addInteractiveTimestamp(rendererProcess, mainThread, 400); |
| 112 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ | 112 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 113 cat: 'toplevel', | 113 cat: 'toplevel', |
| 114 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', | 114 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', |
| 115 start: 0, | 115 start: 0, |
| 116 duration: 100, | 116 duration: 100, |
| 117 })); | 117 })); |
| 118 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ | 118 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 119 cat: 'toplevel', | 119 cat: 'toplevel', |
| 120 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', | 120 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', |
| 121 start: 3000, | 121 start: 3000, |
| 122 duration: 10, | 122 duration: 10, |
| 123 })); | 123 })); |
| 124 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ | 124 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 125 cat: 'toplevel', | 125 cat: 'toplevel', |
| 126 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', | 126 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', |
| 127 start: 9000, | 127 start: 9000, |
| 128 duration: 10, | 128 duration: 10, |
| 129 })); | 129 })); |
| 130 }); | 130 }); |
| 131 let values = new tr.v.HistogramSet(); | 131 let values = new tr.v.HistogramSet(); |
| 132 tr.metrics.sh.estimatedInputLatency(values, model); | 132 tr.metrics.sh.expectedQueueingTimeMetric(values, model); |
| 133 let interactiveEQT = values.getHistogramNamed( | 133 let interactiveEQT = values.getHistogramNamed( |
| 134 'interactive:500ms_window:renderer_eqt'); | 134 'interactive:500ms_window:renderer_eqt'); |
| 135 // TODO(ulan): Support multiple interactive time windows when | 135 // TODO(ulan): Support multiple interactive time windows when |
| 136 // https://crbug.com/692112 is fixed. | 136 // https://crbug.com/692112 is fixed. |
| 137 assert.equal(0, interactiveEQT.numValues); | 137 assert.equal(0, interactiveEQT.numValues); |
| 138 }); | 138 }); |
| 139 | 139 |
| 140 test('estimatedInputLatency_multipleRenderersAggregates', function() { | 140 test('expectedQueueingTime_multipleRenderersAggregates', function() { |
| 141 let model = tr.c.TestUtils.newModel(function(model) { | 141 let model = tr.c.TestUtils.newModel(function(model) { |
| 142 let rendererProcess = model.getOrCreateProcess(1984); | 142 let rendererProcess = model.getOrCreateProcess(1984); |
| 143 let mainThread = rendererProcess.getOrCreateThread(2); | 143 let mainThread = rendererProcess.getOrCreateThread(2); |
| 144 mainThread.name = 'CrRendererMain'; | 144 mainThread.name = 'CrRendererMain'; |
| 145 addInteractiveTimestamp(rendererProcess, mainThread, 200); | 145 addInteractiveTimestamp(rendererProcess, mainThread, 200); |
| 146 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ | 146 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 147 cat: 'toplevel', | 147 cat: 'toplevel', |
| 148 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', | 148 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', |
| 149 start: 0, | 149 start: 0, |
| 150 duration: 100, | 150 duration: 100, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 166 mainThread2.name = 'CrRendererMain'; | 166 mainThread2.name = 'CrRendererMain'; |
| 167 addInteractiveTimestamp(rendererProcess2, mainThread2, 200); | 167 addInteractiveTimestamp(rendererProcess2, mainThread2, 200); |
| 168 mainThread2.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ | 168 mainThread2.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 169 cat: 'toplevel', | 169 cat: 'toplevel', |
| 170 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', | 170 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', |
| 171 start: 9000, | 171 start: 9000, |
| 172 duration: 0, | 172 duration: 0, |
| 173 })); | 173 })); |
| 174 }); | 174 }); |
| 175 let values = new tr.v.HistogramSet(); | 175 let values = new tr.v.HistogramSet(); |
| 176 tr.metrics.sh.estimatedInputLatency(values, model); | 176 tr.metrics.sh.expectedQueueingTimeMetric(values, model); |
| 177 let eqt = values.getHistogramNamed( | 177 let eqt = values.getHistogramNamed( |
| 178 'interactive:500ms_window:renderer_eqt'); | 178 'interactive:500ms_window:renderer_eqt'); |
| 179 assert.equal(0.05, eqt.average); | 179 assert.equal(0.05, eqt.average); |
| 180 }); | 180 }); |
| 181 |
| 182 test('contributionToExpectedQueueingTime', function() { |
| 183 let model = tr.c.TestUtils.newModel((model) => { |
| 184 let rendererProcess = model.getOrCreateProcess(1984); |
| 185 let mainThread = rendererProcess.getOrCreateThread(2); |
| 186 mainThread.name = 'CrRendererMain'; |
| 187 addInteractiveTimestamp(rendererProcess, mainThread, 200); |
| 188 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 189 cat: 'toplevel', |
| 190 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', |
| 191 start: 0, |
| 192 duration: 100, |
| 193 })); |
| 194 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 195 cat: 'v8', |
| 196 title: 'V8.GCFinalizeMC', |
| 197 start: 50, |
| 198 duration: 50, |
| 199 })); |
| 200 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 201 cat: 'toplevel', |
| 202 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', |
| 203 start: 3000, |
| 204 duration: 10, |
| 205 })); |
| 206 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 207 cat: 'v8', |
| 208 title: 'V8.GCFinalizeMC', |
| 209 start: 3000, |
| 210 duration: 5, |
| 211 })); |
| 212 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 213 cat: 'toplevel', |
| 214 title: 'TaskQueueManager::ProcessTaskFromWorkQueue', |
| 215 start: 9000, |
| 216 duration: 10, |
| 217 })); |
| 218 mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({ |
| 219 cat: 'v8', |
| 220 title: 'V8.GCFinalizeMC', |
| 221 start: 9000, |
| 222 duration: 5, |
| 223 })); |
| 224 mainThread.sliceGroup.createSubSlices(); |
| 225 }); |
| 226 let values = new tr.v.HistogramSet(); |
| 227 tr.metrics.sh.contributionToExpectedQueueingTime( |
| 228 (event => event.title === 'V8.GCFinalizeMC'), 'v8:gc', |
| 229 values, model); |
| 230 let interactiveEQT = values.getHistogramNamed( |
| 231 'interactive:500ms_window:renderer_eqt:v8:gc'); |
| 232 assert.equal(0.025, interactiveEQT.average); |
| 233 let totalEQT = values.getHistogramNamed( |
| 234 'total:500ms_window:renderer_eqt:v8:gc'); |
| 235 assert.equal(2.5, totalEQT.average); |
| 236 }); |
| 181 }); | 237 }); |
| 182 </script> | 238 </script> |
| OLD | NEW |