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/extras/importer/trace_event_importer.html"> | 9 <link rel="import" href="/tracing/extras/importer/trace_event_importer.html"> |
10 <link rel="import" href="/tracing/metrics/webrtc/webrtc_rendering_metric.html"> | 10 <link rel="import" href="/tracing/metrics/webrtc/webrtc_rendering_metric.html"> |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 test('driftTime', function() { | 164 test('driftTime', function() { |
165 // These numbers don't mean anything. We just want to make sure we can | 165 // These numbers don't mean anything. We just want to make sure we can |
166 // recover them after running the metric. | 166 // recover them after running the metric. |
167 let fakeDriftTimes = [16700, 17640, 15000, 24470, 16700, 14399, 17675]; | 167 let fakeDriftTimes = [16700, 17640, 15000, 24470, 16700, 14399, 17675]; |
168 let fakeEvents = eventsFromDriftTimes(fakeDriftTimes); | 168 let fakeEvents = eventsFromDriftTimes(fakeDriftTimes); |
169 let histograms = runWebrtcRenderingMetric(fakeEvents); | 169 let histograms = runWebrtcRenderingMetric(fakeEvents); |
170 | 170 |
171 // We don't have access to the values stored in the histogram, so we check | 171 // We don't have access to the values stored in the histogram, so we check |
172 // for equality in the summary statistics. | 172 // for equality in the summary statistics. |
173 let hist = histograms.getHistogramNamed('WebRTCRendering_drift_time'); | 173 let hist = histograms.getHistogramNamed('WebRTCRendering_drift_time'); |
174 assert.strictEqual(hist.sum, tr.b.Statistics.sum(fakeDriftTimes)); | 174 assert.strictEqual(hist.sum, tr.b.math.Statistics.sum(fakeDriftTimes)); |
175 assert.strictEqual(hist.numValues, fakeDriftTimes.length); | 175 assert.strictEqual(hist.numValues, fakeDriftTimes.length); |
176 assert.strictEqual(hist.running.min, tr.b.Statistics.min(fakeDriftTimes)); | 176 assert.strictEqual(hist.running.min, |
177 assert.strictEqual(hist.running.max, tr.b.Statistics.max(fakeDriftTimes)); | 177 tr.b.math.Statistics.min(fakeDriftTimes)); |
| 178 assert.strictEqual(hist.running.max, |
| 179 tr.b.math.Statistics.max(fakeDriftTimes)); |
178 assert.closeTo(hist.standardDeviation, | 180 assert.closeTo(hist.standardDeviation, |
179 tr.b.Statistics.stddev(fakeDriftTimes), 1e-2); | 181 tr.b.math.Statistics.stddev(fakeDriftTimes), 1e-2); |
180 }); | 182 }); |
181 | 183 |
182 test('framesBadlyOutOfSyncPerfect', function() { | 184 test('framesBadlyOutOfSyncPerfect', function() { |
183 // None of these will exceed the threshold for badly out of sync events, | 185 // None of these will exceed the threshold for badly out of sync events, |
184 // which is about 33 333. | 186 // which is about 33 333. |
185 let normDriftTimes = [-16700, 17640, 15000, -17640, -15000, 16700]; | 187 let normDriftTimes = [-16700, 17640, 15000, -17640, -15000, 16700]; |
186 assert.strictEqual(tr.b.Statistics.sum(normDriftTimes), 0); | 188 assert.strictEqual(tr.b.math.Statistics.sum(normDriftTimes), 0); |
187 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); | 189 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); |
188 let histograms = runWebrtcRenderingMetric(fakeEvents); | 190 let histograms = runWebrtcRenderingMetric(fakeEvents); |
189 | 191 |
190 let hist = | 192 let hist = |
191 histograms.getHistogramNamed('WebRTCRendering_frames_badly_out_of_sync'); | 193 histograms.getHistogramNamed('WebRTCRendering_frames_badly_out_of_sync'); |
192 assert.strictEqual(hist.numValues, 1); | 194 assert.strictEqual(hist.numValues, 1); |
193 assert.strictEqual(hist.running.mean, 0); | 195 assert.strictEqual(hist.running.mean, 0); |
194 }); | 196 }); |
195 | 197 |
196 test('framesBadylOutOfSync', function() { | 198 test('framesBadylOutOfSync', function() { |
197 // Only 34 000 will exceed the threshold for badly out of sync events, | 199 // Only 34 000 will exceed the threshold for badly out of sync events, |
198 // which is about 33 333. | 200 // which is about 33 333. |
199 let normDriftTimes = [-34000, 10000, 10000, 10000, 4000]; | 201 let normDriftTimes = [-34000, 10000, 10000, 10000, 4000]; |
200 assert.strictEqual(tr.b.Statistics.sum(normDriftTimes), 0); | 202 assert.strictEqual(tr.b.math.Statistics.sum(normDriftTimes), 0); |
201 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); | 203 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); |
202 let histograms = runWebrtcRenderingMetric(fakeEvents); | 204 let histograms = runWebrtcRenderingMetric(fakeEvents); |
203 | 205 |
204 let hist = | 206 let hist = |
205 histograms.getHistogramNamed('WebRTCRendering_frames_badly_out_of_sync'); | 207 histograms.getHistogramNamed('WebRTCRendering_frames_badly_out_of_sync'); |
206 assert.strictEqual(hist.numValues, 1); | 208 assert.strictEqual(hist.numValues, 1); |
207 assert.strictEqual(hist.running.mean, 1); | 209 assert.strictEqual(hist.running.mean, 1); |
208 }); | 210 }); |
209 | 211 |
210 test('framesOutOfSyncPerfect', function() { | 212 test('framesOutOfSyncPerfect', function() { |
211 // None of these will exceed the threshold for badly out of sync, which is | 213 // None of these will exceed the threshold for badly out of sync, which is |
212 // about 16 667. | 214 // about 16 667. |
213 let normDriftTimes = [-16600, 15640, 15000, -15640, -15000, 16600]; | 215 let normDriftTimes = [-16600, 15640, 15000, -15640, -15000, 16600]; |
214 assert.strictEqual(tr.b.Statistics.sum(normDriftTimes), 0); | 216 assert.strictEqual(tr.b.math.Statistics.sum(normDriftTimes), 0); |
215 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); | 217 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); |
216 let histograms = runWebrtcRenderingMetric(fakeEvents); | 218 let histograms = runWebrtcRenderingMetric(fakeEvents); |
217 | 219 |
218 let hist = | 220 let hist = |
219 histograms.getHistogramNamed('WebRTCRendering_frames_out_of_sync'); | 221 histograms.getHistogramNamed('WebRTCRendering_frames_out_of_sync'); |
220 assert.strictEqual(hist.numValues, 1); | 222 assert.strictEqual(hist.numValues, 1); |
221 assert.strictEqual(hist.running.mean, 0); | 223 assert.strictEqual(hist.running.mean, 0); |
222 }); | 224 }); |
223 | 225 |
224 test('framesOutOfSync', function() { | 226 test('framesOutOfSync', function() { |
225 // Only 17000 will exceed the threshold for badly out of sync, which is | 227 // Only 17000 will exceed the threshold for badly out of sync, which is |
226 // about 16 667. | 228 // about 16 667. |
227 let normDriftTimes = [-17000, 5000, 5000, 5000, 2000]; | 229 let normDriftTimes = [-17000, 5000, 5000, 5000, 2000]; |
228 assert.strictEqual(tr.b.Statistics.sum(normDriftTimes), 0); | 230 assert.strictEqual(tr.b.math.Statistics.sum(normDriftTimes), 0); |
229 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); | 231 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); |
230 let histograms = runWebrtcRenderingMetric(fakeEvents); | 232 let histograms = runWebrtcRenderingMetric(fakeEvents); |
231 | 233 |
232 let hist = | 234 let hist = |
233 histograms.getHistogramNamed('WebRTCRendering_frames_out_of_sync'); | 235 histograms.getHistogramNamed('WebRTCRendering_frames_out_of_sync'); |
234 assert.strictEqual(hist.numValues, 1); | 236 assert.strictEqual(hist.numValues, 1); |
235 assert.strictEqual(hist.running.mean, 1); | 237 assert.strictEqual(hist.running.mean, 1); |
236 }); | 238 }); |
237 | 239 |
238 test('percentBadlyOutOfSyncPerfect', function() { | 240 test('percentBadlyOutOfSyncPerfect', function() { |
239 // None of these will exceed the threshold for badly out of sync events, | 241 // None of these will exceed the threshold for badly out of sync events, |
240 // which is about 33 333. | 242 // which is about 33 333. |
241 let normDriftTimes = [-16700, 17640, 15000, -17640, -15000, 16700]; | 243 let normDriftTimes = [-16700, 17640, 15000, -17640, -15000, 16700]; |
242 assert.strictEqual(tr.b.Statistics.sum(normDriftTimes), 0); | 244 assert.strictEqual(tr.b.math.Statistics.sum(normDriftTimes), 0); |
243 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); | 245 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); |
244 let histograms = runWebrtcRenderingMetric(fakeEvents); | 246 let histograms = runWebrtcRenderingMetric(fakeEvents); |
245 | 247 |
246 let hist = | 248 let hist = |
247 histograms.getHistogramNamed('WebRTCRendering_percent_badly_out_of_sync'); | 249 histograms.getHistogramNamed('WebRTCRendering_percent_badly_out_of_sync'); |
248 assert.strictEqual(hist.numValues, 1); | 250 assert.strictEqual(hist.numValues, 1); |
249 assert.strictEqual(hist.running.mean, 0); | 251 assert.strictEqual(hist.running.mean, 0); |
250 }); | 252 }); |
251 | 253 |
252 test('percentBadylOutOfSync', function() { | 254 test('percentBadylOutOfSync', function() { |
253 // Only 34 000 will exceed the threshold for badly out of sync events, | 255 // Only 34 000 will exceed the threshold for badly out of sync events, |
254 // which is about 33 333. | 256 // which is about 33 333. |
255 let normDriftTimes = [-34000, 10000, 10000, 10000, 4000]; | 257 let normDriftTimes = [-34000, 10000, 10000, 10000, 4000]; |
256 assert.strictEqual(tr.b.Statistics.sum(normDriftTimes), 0); | 258 assert.strictEqual(tr.b.math.Statistics.sum(normDriftTimes), 0); |
257 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); | 259 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); |
258 let histograms = runWebrtcRenderingMetric(fakeEvents); | 260 let histograms = runWebrtcRenderingMetric(fakeEvents); |
259 | 261 |
260 let hist = | 262 let hist = |
261 histograms.getHistogramNamed('WebRTCRendering_percent_badly_out_of_sync'); | 263 histograms.getHistogramNamed('WebRTCRendering_percent_badly_out_of_sync'); |
262 assert.strictEqual(hist.numValues, 1); | 264 assert.strictEqual(hist.numValues, 1); |
263 assert.strictEqual(hist.running.mean, .2); | 265 assert.strictEqual(hist.running.mean, .2); |
264 }); | 266 }); |
265 | 267 |
266 test('percentOutOfSyncPerfect', function() { | 268 test('percentOutOfSyncPerfect', function() { |
267 // None of these will exceed the threshold for badly out of sync, which is | 269 // None of these will exceed the threshold for badly out of sync, which is |
268 // about 16 667. | 270 // about 16 667. |
269 let normDriftTimes = [-16600, 15640, 15000, -15640, -15000, 16600]; | 271 let normDriftTimes = [-16600, 15640, 15000, -15640, -15000, 16600]; |
270 assert.strictEqual(tr.b.Statistics.sum(normDriftTimes), 0); | 272 assert.strictEqual(tr.b.math.Statistics.sum(normDriftTimes), 0); |
271 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); | 273 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); |
272 let histograms = runWebrtcRenderingMetric(fakeEvents); | 274 let histograms = runWebrtcRenderingMetric(fakeEvents); |
273 | 275 |
274 let hist = | 276 let hist = |
275 histograms.getHistogramNamed('WebRTCRendering_percent_out_of_sync'); | 277 histograms.getHistogramNamed('WebRTCRendering_percent_out_of_sync'); |
276 assert.strictEqual(hist.numValues, 1); | 278 assert.strictEqual(hist.numValues, 1); |
277 assert.strictEqual(hist.running.mean, 0); | 279 assert.strictEqual(hist.running.mean, 0); |
278 }); | 280 }); |
279 | 281 |
280 test('percentOutOfSync', function() { | 282 test('percentOutOfSync', function() { |
281 // Only 17000 will exceed the threshold for badly out of sync, which is | 283 // Only 17000 will exceed the threshold for badly out of sync, which is |
282 // about 16 667. | 284 // about 16 667. |
283 let normDriftTimes = [-17000, 5000, 5000, 5000, 2000]; | 285 let normDriftTimes = [-17000, 5000, 5000, 5000, 2000]; |
284 assert.strictEqual(tr.b.Statistics.sum(normDriftTimes), 0); | 286 assert.strictEqual(tr.b.math.Statistics.sum(normDriftTimes), 0); |
285 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); | 287 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); |
286 let histograms = runWebrtcRenderingMetric(fakeEvents); | 288 let histograms = runWebrtcRenderingMetric(fakeEvents); |
287 | 289 |
288 let hist = | 290 let hist = |
289 histograms.getHistogramNamed('WebRTCRendering_percent_out_of_sync'); | 291 histograms.getHistogramNamed('WebRTCRendering_percent_out_of_sync'); |
290 assert.strictEqual(hist.numValues, 1); | 292 assert.strictEqual(hist.numValues, 1); |
291 assert.strictEqual(hist.running.mean, .2); | 293 assert.strictEqual(hist.running.mean, .2); |
292 }); | 294 }); |
293 | 295 |
294 test('smoothnessScorePerfect', function() { | 296 test('smoothnessScorePerfect', function() { |
295 // None of these will exceed the threshold for badly out of sync, which is | 297 // None of these will exceed the threshold for badly out of sync, which is |
296 // about 16 667, so the smoothnessScore wil be perfect. | 298 // about 16 667, so the smoothnessScore wil be perfect. |
297 let normDriftTimes = [-16600, 15640, 15000, -15640, -15000, 16600]; | 299 let normDriftTimes = [-16600, 15640, 15000, -15640, -15000, 16600]; |
298 assert.strictEqual(tr.b.Statistics.sum(normDriftTimes), 0); | 300 assert.strictEqual(tr.b.math.Statistics.sum(normDriftTimes), 0); |
299 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); | 301 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); |
300 let histograms = runWebrtcRenderingMetric(fakeEvents); | 302 let histograms = runWebrtcRenderingMetric(fakeEvents); |
301 | 303 |
302 let hist = histograms.getHistogramNamed('WebRTCRendering_smoothness_score'); | 304 let hist = histograms.getHistogramNamed('WebRTCRendering_smoothness_score'); |
303 assert.strictEqual(hist.numValues, 1); | 305 assert.strictEqual(hist.numValues, 1); |
304 assert.strictEqual(hist.running.mean, 1); | 306 assert.strictEqual(hist.running.mean, 1); |
305 }); | 307 }); |
306 | 308 |
307 test('smoothnessScore', function() { | 309 test('smoothnessScore', function() { |
308 // One will exceed the threshold for frames badly out of sync (33 333) and | 310 // One will exceed the threshold for frames badly out of sync (33 333) and |
309 // another two the threshold for frames out of sync (16 667). So the | 311 // another two the threshold for frames out of sync (16 667). So the |
310 // smoothness score is | 312 // smoothness score is |
311 // 1 - (frames out of sync + 3 * frames badly out of sync) / n | 313 // 1 - (frames out of sync + 3 * frames badly out of sync) / n |
312 // = 1 - (2 + 3) / 5 = 0 | 314 // = 1 - (2 + 3) / 5 = 0 |
313 let normDriftTimes = [-17000, 34000, -17000, -10000, 10000]; | 315 let normDriftTimes = [-17000, 34000, -17000, -10000, 10000]; |
314 assert.strictEqual(tr.b.Statistics.sum(normDriftTimes), 0); | 316 assert.strictEqual(tr.b.math.Statistics.sum(normDriftTimes), 0); |
315 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); | 317 let fakeEvents = eventsFromNormDriftTimes(normDriftTimes); |
316 let histograms = runWebrtcRenderingMetric(fakeEvents); | 318 let histograms = runWebrtcRenderingMetric(fakeEvents); |
317 | 319 |
318 let hist = histograms.getHistogramNamed('WebRTCRendering_smoothness_score'); | 320 let hist = histograms.getHistogramNamed('WebRTCRendering_smoothness_score'); |
319 assert.strictEqual(hist.numValues, 1); | 321 assert.strictEqual(hist.numValues, 1); |
320 assert.strictEqual(hist.running.mean, 0); | 322 assert.strictEqual(hist.running.mean, 0); |
321 }); | 323 }); |
322 | 324 |
323 test('fpsPerfect', function() { | 325 test('fpsPerfect', function() { |
324 // Every frame is displayed once. This is a perfect FPS of 60. | 326 // Every frame is displayed once. This is a perfect FPS of 60. |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 let fakePairs = [[1, 0]]; | 430 let fakePairs = [[1, 0]]; |
429 for (let i = 0; i < errors.length; ++i) { | 431 for (let i = 0; i < errors.length; ++i) { |
430 // Each frame's Ideal Render Instant is close to VSYNC_DURATION_US after | 432 // Each frame's Ideal Render Instant is close to VSYNC_DURATION_US after |
431 // the previous one, but with a known delay. | 433 // the previous one, but with a known delay. |
432 fakePairs.push([fakePairs[i][0] + VSYNC_DURATION_US + errors[i], 0]); | 434 fakePairs.push([fakePairs[i][0] + VSYNC_DURATION_US + errors[i], 0]); |
433 } | 435 } |
434 | 436 |
435 // The rendering length error is then the sum of the errors, normalized by | 437 // The rendering length error is then the sum of the errors, normalized by |
436 // the span between the first and the last Ideal Render Instants. | 438 // the span between the first and the last Ideal Render Instants. |
437 let idealRenderSpan = fakePairs[fakePairs.length - 1][0] - fakePairs[0][0]; | 439 let idealRenderSpan = fakePairs[fakePairs.length - 1][0] - fakePairs[0][0]; |
438 let expectedRenderingLengthError = tr.b.Statistics.sum(errors) / | 440 let expectedRenderingLengthError = tr.b.math.Statistics.sum(errors) / |
439 idealRenderSpan; | 441 idealRenderSpan; |
440 | 442 |
441 let fakeEvents = fakePairs.map(eventFromPair); | 443 let fakeEvents = fakePairs.map(eventFromPair); |
442 let histograms = runWebrtcRenderingMetric(fakeEvents); | 444 let histograms = runWebrtcRenderingMetric(fakeEvents); |
443 | 445 |
444 let hist = | 446 let hist = |
445 histograms.getHistogramNamed('WebRTCRendering_rendering_length_error'); | 447 histograms.getHistogramNamed('WebRTCRendering_rendering_length_error'); |
446 assert.strictEqual(hist.numValues, 1); | 448 assert.strictEqual(hist.numValues, 1); |
447 assert.closeTo(hist.running.mean, expectedRenderingLengthError, 1e-3); | 449 assert.closeTo(hist.running.mean, expectedRenderingLengthError, 1e-3); |
448 }); | 450 }); |
449 }); | 451 }); |
450 </script> | 452 </script> |
OLD | NEW |