| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <!-- | 2 <!-- |
| 3 Copyright 2016 The Chromium Authors. All rights reserved. | 3 Copyright 2016 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/tracing_metric.html"> | 10 <link rel="import" href="/tracing/metrics/tracing_metric.html"> |
| 11 <link rel="import" href="/tracing/model/memory_dump_test_utils.html"> | 11 <link rel="import" href="/tracing/model/memory_dump_test_utils.html"> |
| 12 <link rel="import" href="/tracing/value/value_set.html"> | 12 <link rel="import" href="/tracing/value/histogram_set.html"> |
| 13 | 13 |
| 14 <script> | 14 <script> |
| 15 'use strict'; | 15 'use strict'; |
| 16 | 16 |
| 17 tr.b.unittest.testSuite(function() { | 17 tr.b.unittest.testSuite(function() { |
| 18 | 18 |
| 19 function makeModel(events, opt_track) { | 19 function makeModel(events, opt_track) { |
| 20 return tr.c.TestUtils.newModelWithEvents([events], { | 20 return tr.c.TestUtils.newModelWithEvents([events], { |
| 21 trackDetailedModelStats: opt_track | 21 trackDetailedModelStats: opt_track |
| 22 }); | 22 }); |
| 23 } | 23 } |
| 24 | 24 |
| 25 function getEventStringSize(events, indices) { | 25 function getEventStringSize(events, indices) { |
| 26 return indices.reduce(function(sum, index) { | 26 return indices.reduce(function(sum, index) { |
| 27 return sum + JSON.stringify(events[index]).length; | 27 return sum + JSON.stringify(events[index]).length; |
| 28 }, 0); | 28 }, 0); |
| 29 } | 29 } |
| 30 | 30 |
| 31 function checkDurationValue(allValues, metricName, expected) { | 31 function checkDurationValue(allValues, metricName, expected) { |
| 32 var value = tr.b.getOnlyElement(allValues.getValuesNamed(metricName)); | 32 var value = tr.b.getOnlyElement(allValues.getValuesNamed(metricName)); |
| 33 assert.closeTo(1000 * value.average, expected, 0.1); | 33 assert.closeTo(1000 * value.average, expected, 0.1); |
| 34 } | 34 } |
| 35 | 35 |
| 36 test('hasEventSizesInBytes', function() { | 36 test('hasEventSizesInBytes', function() { |
| 37 var allValues = new tr.v.ValueSet(); | 37 var allValues = new tr.v.HistogramSet(); |
| 38 var events = [ | 38 var events = [ |
| 39 {name: 'a', args: {}, pid: 52, ts: 524, cat: 'foo', tid: 53, ph: 'B'}, | 39 {name: 'a', args: {}, pid: 52, ts: 524, cat: 'foo', tid: 53, ph: 'B'}, |
| 40 {name: 'a', args: {}, pid: 52, ts: 560, cat: 'foo', tid: 53, ph: 'B'} | 40 {name: 'a', args: {}, pid: 52, ts: 560, cat: 'foo', tid: 53, ph: 'B'} |
| 41 ]; | 41 ]; |
| 42 | 42 |
| 43 var model = makeModel(JSON.stringify(events), false); | 43 var model = makeModel(JSON.stringify(events), false); |
| 44 assert.isFalse(model.importOptions.trackDetailedModelStats); | 44 assert.isFalse(model.importOptions.trackDetailedModelStats); |
| 45 assert.throws(function() { | 45 assert.throws(function() { |
| 46 tr.metrics.tracingMetric(allValues, model); | 46 tr.metrics.tracingMetric(allValues, model); |
| 47 }, 'Please enable ImportOptions.trackDetailedModelStats.'); | 47 }, 'Please enable ImportOptions.trackDetailedModelStats.'); |
| 48 | 48 |
| 49 model = makeModel(JSON.stringify(events), true); | 49 model = makeModel(JSON.stringify(events), true); |
| 50 assert.isTrue(model.importOptions.trackDetailedModelStats); | 50 assert.isTrue(model.importOptions.trackDetailedModelStats); |
| 51 tr.metrics.tracingMetric(allValues, model); | 51 tr.metrics.tracingMetric(allValues, model); |
| 52 }); | 52 }); |
| 53 | 53 |
| 54 test('totalTraceSize', function() { | 54 test('totalTraceSize', function() { |
| 55 var allValues = new tr.v.ValueSet(); | 55 var allValues = new tr.v.HistogramSet(); |
| 56 var events = [ | 56 var events = [ |
| 57 {name: 'a', args: {}, pid: 52, ts: 524, cat: 'foo', tid: 53, ph: 'B'}, | 57 {name: 'a', args: {}, pid: 52, ts: 524, cat: 'foo', tid: 53, ph: 'B'}, |
| 58 {name: 'a', args: {}, pid: 52, ts: 560, cat: 'foo', tid: 53, ph: 'B'} | 58 {name: 'a', args: {}, pid: 52, ts: 560, cat: 'foo', tid: 53, ph: 'B'} |
| 59 ]; | 59 ]; |
| 60 var model = makeModel(JSON.stringify(events), true); | 60 var model = makeModel(JSON.stringify(events), true); |
| 61 tr.metrics.tracingMetric(allValues, model); | 61 tr.metrics.tracingMetric(allValues, model); |
| 62 | 62 |
| 63 var eventStringSize = getEventStringSize(events, [0, 1]); | 63 var eventStringSize = getEventStringSize(events, [0, 1]); |
| 64 var value = tr.b.getOnlyElement(allValues.getValuesNamed( | 64 var value = tr.b.getOnlyElement(allValues.getValuesNamed( |
| 65 'Total trace size in bytes')); | 65 'Total trace size in bytes')); |
| 66 assert.strictEqual(value.average, eventStringSize); | 66 assert.strictEqual(value.average, eventStringSize); |
| 67 }); | 67 }); |
| 68 | 68 |
| 69 test('maxValuePerSec', function() { | 69 test('maxValuePerSec', function() { |
| 70 var ONE_SEC_IN_US = 1000000; | 70 var ONE_SEC_IN_US = 1000000; |
| 71 var events = [ | 71 var events = [ |
| 72 {name: 'a', pid: 52, ts: 1, cat: 'foo', ph: 'B'}, | 72 {name: 'a', pid: 52, ts: 1, cat: 'foo', ph: 'B'}, |
| 73 {name: 'a', pid: 52, ts: ONE_SEC_IN_US + 1, cat: 'foo', ph: 'B'}, | 73 {name: 'a', pid: 52, ts: ONE_SEC_IN_US + 1, cat: 'foo', ph: 'B'}, |
| 74 {name: 'a', pid: 52, ts: 2 * ONE_SEC_IN_US + 1, cat: 'foo', ph: 'B'}, | 74 {name: 'a', pid: 52, ts: 2 * ONE_SEC_IN_US + 1, cat: 'foo', ph: 'B'}, |
| 75 {name: 'a', pid: 52, ts: 2 * ONE_SEC_IN_US + 3, cat: 'foo', ph: 'B'}, | 75 {name: 'a', pid: 52, ts: 2 * ONE_SEC_IN_US + 3, cat: 'foo', ph: 'B'}, |
| 76 {name: 'a', pid: 52, ts: ONE_SEC_IN_US + 2, cat: 'foo', ph: 'B'}, | 76 {name: 'a', pid: 52, ts: ONE_SEC_IN_US + 2, cat: 'foo', ph: 'B'}, |
| 77 {name: 'a', pid: 52, ts: 2 * ONE_SEC_IN_US + 2, cat: 'foo', ph: 'B'} | 77 {name: 'a', pid: 52, ts: 2 * ONE_SEC_IN_US + 2, cat: 'foo', ph: 'B'} |
| 78 ]; | 78 ]; |
| 79 var model = makeModel(JSON.stringify(events), true); | 79 var model = makeModel(JSON.stringify(events), true); |
| 80 var allValues = new tr.v.ValueSet(); | 80 var allValues = new tr.v.HistogramSet(); |
| 81 tr.metrics.tracingMetric(allValues, model); | 81 tr.metrics.tracingMetric(allValues, model); |
| 82 | 82 |
| 83 var maxEventCountPerSec = 3; | 83 var maxEventCountPerSec = 3; |
| 84 var value = tr.b.getOnlyElement(allValues.getValuesNamed( | 84 var value = tr.b.getOnlyElement(allValues.getValuesNamed( |
| 85 'Max number of events per second')); | 85 'Max number of events per second')); |
| 86 assert.strictEqual(value.average, maxEventCountPerSec); | 86 assert.strictEqual(value.average, maxEventCountPerSec); |
| 87 | 87 |
| 88 var maxEventBytesPerSec = getEventStringSize(events, [2, 3, 5]); | 88 var maxEventBytesPerSec = getEventStringSize(events, [2, 3, 5]); |
| 89 value = tr.b.getOnlyElement(allValues.getValuesNamed( | 89 value = tr.b.getOnlyElement(allValues.getValuesNamed( |
| 90 'Max event size in bytes per second')); | 90 'Max event size in bytes per second')); |
| 91 assert.strictEqual(value.average, maxEventBytesPerSec); | 91 assert.strictEqual(value.average, maxEventBytesPerSec); |
| 92 }); | 92 }); |
| 93 | 93 |
| 94 test('diagnostics', function() { | 94 test('diagnostics', function() { |
| 95 var allValues = new tr.v.ValueSet(); | 95 var allValues = new tr.v.HistogramSet(); |
| 96 var events = [ | 96 var events = [ |
| 97 {name: 'a', args: {}, pid: 52, ts: 524, cat: 'foo', tid: 53, ph: 'B'}, | 97 {name: 'a', args: {}, pid: 52, ts: 524, cat: 'foo', tid: 53, ph: 'B'}, |
| 98 {name: 'a', args: {}, pid: 52, ts: 535, cat: 'foo', tid: 53, ph: 'B'}, | 98 {name: 'a', args: {}, pid: 52, ts: 535, cat: 'foo', tid: 53, ph: 'B'}, |
| 99 {name: 'bb', args: {}, pid: 52, ts: 546, cat: 'bar', tid: 53, ph: 'E'}, | 99 {name: 'bb', args: {}, pid: 52, ts: 546, cat: 'bar', tid: 53, ph: 'E'}, |
| 100 {name: 'a', args: {}, pid: 52, ts: 560, cat: 'foo', tid: 53, ph: 'B'}, | 100 {name: 'a', args: {}, pid: 52, ts: 560, cat: 'foo', tid: 53, ph: 'B'}, |
| 101 {name: 'bb', args: {}, pid: 52, ts: 578, cat: 'bar', tid: 53, ph: 'E'} | 101 {name: 'bb', args: {}, pid: 52, ts: 578, cat: 'bar', tid: 53, ph: 'E'} |
| 102 ]; | 102 ]; |
| 103 var model = makeModel(JSON.stringify(events), true); | 103 var model = makeModel(JSON.stringify(events), true); |
| 104 tr.metrics.tracingMetric(allValues, model); | 104 tr.metrics.tracingMetric(allValues, model); |
| 105 | 105 |
| 106 for (var value of allValues) { | 106 for (var value of allValues) { |
| 107 var d = value.diagnostics.get('category_with_max_event_size').value; | 107 var d = value.diagnostics.get('category_with_max_event_size').value; |
| 108 assert.strictEqual(d.name, 'foo'); | 108 assert.strictEqual(d.name, 'foo'); |
| 109 assert.strictEqual(d.size_in_bytes, getEventStringSize( | 109 assert.strictEqual(d.size_in_bytes, getEventStringSize( |
| 110 events, [0, 1, 3])); | 110 events, [0, 1, 3])); |
| 111 } | 111 } |
| 112 }); | 112 }); |
| 113 | 113 |
| 114 test('testMemoryInfraTracingMetrics', function() { | 114 test('testMemoryInfraTracingMetrics', function() { |
| 115 var MEMORY_INFRA_TRACING_CATEGORY = | 115 var MEMORY_INFRA_TRACING_CATEGORY = |
| 116 tr.metrics.MEMORY_INFRA_TRACING_CATEGORY; | 116 tr.metrics.MEMORY_INFRA_TRACING_CATEGORY; |
| 117 var allValues = new tr.v.ValueSet(); | 117 var allValues = new tr.v.HistogramSet(); |
| 118 var events = [ | 118 var events = [ |
| 119 {name: 'OnMemoryDump', pid: 1, ts: 510, tid: 1, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {'dump_provider.name': 'mdp1'}, dur: 4}, // @suppress l
ongLineCheck | 119 {name: 'OnMemoryDump', pid: 1, ts: 510, tid: 1, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {'dump_provider.name': 'mdp1'}, dur: 4}, // @suppress l
ongLineCheck |
| 120 {name: 'OnMemoryDump', pid: 1, ts: 520, tid: 7, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {'dump_provider.name': 'mdp2'}, dur: 15}, // @suppress
longLineCheck | 120 {name: 'OnMemoryDump', pid: 1, ts: 520, tid: 7, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {'dump_provider.name': 'mdp2'}, dur: 15}, // @suppress
longLineCheck |
| 121 {name: 'OnMemoryDump', pid: 1, ts: 530, tid: 7, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {'dump_provider.name': 'mdp3'}, dur: 5}, // @suppress l
ongLineCheck | 121 {name: 'OnMemoryDump', pid: 1, ts: 530, tid: 7, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {'dump_provider.name': 'mdp3'}, dur: 5}, // @suppress l
ongLineCheck |
| 122 {name: 'OnMemoryDump', pid: 2, ts: 510, tid: 2, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {'dump_provider.name': 'mdp1'}, dur: 9}, // @suppress l
ongLineCheck | 122 {name: 'OnMemoryDump', pid: 2, ts: 510, tid: 2, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {'dump_provider.name': 'mdp1'}, dur: 9}, // @suppress l
ongLineCheck |
| 123 {name: 'OnMemoryDump', pid: 2, ts: 520, tid: 8, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {'dump_provider.name': 'mdp2'}, dur: 17}, // @suppress
longLineCheck | 123 {name: 'OnMemoryDump', pid: 2, ts: 520, tid: 8, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {'dump_provider.name': 'mdp2'}, dur: 17}, // @suppress
longLineCheck |
| 124 {name: 'OnMemoryDump', pid: 2, ts: 530, tid: 8, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {'dump_provider.name': 'mdp3'}, dur: 7}, // @suppress l
ongLineCheck | 124 {name: 'OnMemoryDump', pid: 2, ts: 530, tid: 8, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {'dump_provider.name': 'mdp3'}, dur: 7}, // @suppress l
ongLineCheck |
| 125 {name: 'OnMemoryDump', pid: 2, ts: 540, tid: 3, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {'dump_provider.name': 'mdp4'}, dur: 8}, // @suppress l
ongLineCheck | 125 {name: 'OnMemoryDump', pid: 2, ts: 540, tid: 3, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {'dump_provider.name': 'mdp4'}, dur: 8}, // @suppress l
ongLineCheck |
| 126 {name: 'ProcessDumps', pid: 1, ts: 550, tid: 1, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {guid: 4}, dur: 8}, // @suppress longLineCheck | 126 {name: 'ProcessDumps', pid: 1, ts: 550, tid: 1, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {guid: 4}, dur: 8}, // @suppress longLineCheck |
| 127 {name: 'ProcessDumps', pid: 2, ts: 540, tid: 2, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {guid: 4}, dur: 18}, // @suppress longLineCheck | 127 {name: 'ProcessDumps', pid: 2, ts: 540, tid: 2, ph: 'X', cat: MEMORY_INFRA
_TRACING_CATEGORY, args: {guid: 4}, dur: 18}, // @suppress longLineCheck |
| (...skipping 29 matching lines...) Expand all Loading... |
| 157 checkDurationValue(allValues, | 157 checkDurationValue(allValues, |
| 158 'Average CPU overhead on non-memory-infra threads per memory-infra ' + | 158 'Average CPU overhead on non-memory-infra threads per memory-infra ' + |
| 159 'dump', | 159 'dump', |
| 160 47); | 160 47); |
| 161 checkDurationValue(allValues, | 161 checkDurationValue(allValues, |
| 162 'Average CPU overhead on all threads per memory-infra dump', 91); | 162 'Average CPU overhead on all threads per memory-infra dump', 91); |
| 163 }); | 163 }); |
| 164 | 164 |
| 165 }); | 165 }); |
| 166 </script> | 166 </script> |
| OLD | NEW |