| 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/base/iteration_helpers.html"> | 
|  | 9 <link rel="import" href="/tracing/base/range.html"> | 
| 8 <link rel="import" href="/tracing/core/test_utils.html"> | 10 <link rel="import" href="/tracing/core/test_utils.html"> | 
| 9 <link rel="import" href="/tracing/metrics/system_health/memory_metric.html"> | 11 <link rel="import" href="/tracing/metrics/system_health/memory_metric.html"> | 
| 10 <link rel="import" href="/tracing/model/container_memory_dump.html"> | 12 <link rel="import" href="/tracing/model/container_memory_dump.html"> | 
| 11 <link rel="import" href="/tracing/model/memory_dump_test_utils.html"> | 13 <link rel="import" href="/tracing/model/memory_dump_test_utils.html"> | 
| 12 <link rel="import" href="/tracing/model/vm_region.html"> | 14 <link rel="import" href="/tracing/model/vm_region.html"> | 
| 13 <link rel="import" href="/tracing/value/value.html"> | 15 <link rel="import" href="/tracing/value/value.html"> | 
| 14 <link rel="import" href="/tracing/value/value_set.html"> | 16 <link rel="import" href="/tracing/value/value_set.html"> | 
| 15 | 17 | 
| 16 <script> | 18 <script> | 
| 17 'use strict'; | 19 'use strict'; | 
| 18 | 20 | 
| 19 tr.b.unittest.testSuite(function() { | 21 tr.b.unittest.testSuite(function() { | 
| 20   var VMRegion = tr.model.VMRegion; | 22   var VMRegion = tr.model.VMRegion; | 
| 21   var VMRegionClassificationNode = tr.model.VMRegionClassificationNode; | 23   var VMRegionClassificationNode = tr.model.VMRegionClassificationNode; | 
| 22   var LIGHT = tr.model.ContainerMemoryDump.LevelOfDetail.LIGHT; | 24   var LIGHT = tr.model.ContainerMemoryDump.LevelOfDetail.LIGHT; | 
| 23   var DETAILED = tr.model.ContainerMemoryDump.LevelOfDetail.DETAILED; | 25   var DETAILED = tr.model.ContainerMemoryDump.LevelOfDetail.DETAILED; | 
| 24   var SIZE_DELTA = tr.model.MemoryDumpTestUtils.SIZE_DELTA; | 26   var SIZE_DELTA = tr.model.MemoryDumpTestUtils.SIZE_DELTA; | 
| 25   var addProcessMemoryDump = tr.model.MemoryDumpTestUtils.addProcessMemoryDump; | 27   var addProcessMemoryDump = tr.model.MemoryDumpTestUtils.addProcessMemoryDump; | 
| 26   var addGlobalMemoryDump = tr.model.MemoryDumpTestUtils.addGlobalMemoryDump; | 28   var addGlobalMemoryDump = tr.model.MemoryDumpTestUtils.addGlobalMemoryDump; | 
| 27   var newAllocatorDump = tr.model.MemoryDumpTestUtils.newAllocatorDump; | 29   var newAllocatorDump = tr.model.MemoryDumpTestUtils.newAllocatorDump; | 
| 28   var addChildDump = tr.model.MemoryDumpTestUtils.addChildDump; | 30   var addChildDump = tr.model.MemoryDumpTestUtils.addChildDump; | 
| 29   var addOwnershipLink = tr.model.MemoryDumpTestUtils.addOwnershipLink; | 31   var addOwnershipLink = tr.model.MemoryDumpTestUtils.addOwnershipLink; | 
| 30   var unitlessNumber_smallerIsBetter = | 32   var unitlessNumber_smallerIsBetter = | 
| 31       tr.v.Unit.byName.unitlessNumber_smallerIsBetter; | 33       tr.v.Unit.byName.unitlessNumber_smallerIsBetter; | 
| 32   var sizeInBytes_smallerIsBetter = | 34   var sizeInBytes_smallerIsBetter = | 
| 33       tr.v.Unit.byName.sizeInBytes_smallerIsBetter; | 35       tr.v.Unit.byName.sizeInBytes_smallerIsBetter; | 
| 34 | 36 | 
| 35   function memoryMetricTest(name, modelCallback, expectedNumerics) { | 37   function memoryMetricTest( | 
|  | 38       name, modelCallback, opt_options, expectedNumerics) { | 
| 36     test(name, function() { | 39     test(name, function() { | 
| 37       // Create a model and a fake value list. | 40       // Create a model and a fake value list. | 
| 38       var model = tr.c.TestUtils.newModel(modelCallback); | 41       var model = tr.c.TestUtils.newModel(modelCallback); | 
| 39       var valueNameToValues = {}; | 42       var valueNameToValues = {}; | 
| 40       var fakeValueList = { | 43       var fakeValueList = { | 
| 41         addValue: function(value) { | 44         addValue: function(value) { | 
| 42           var values = valueNameToValues[value.name]; | 45           var values = valueNameToValues[value.name]; | 
| 43           if (values === undefined) | 46           if (values === undefined) | 
| 44             valueNameToValues[value.name] = values = []; | 47             valueNameToValues[value.name] = values = []; | 
| 45           values.push(value); | 48           values.push(value); | 
| 46         } | 49         } | 
| 47       }; | 50       }; | 
| 48 | 51 | 
| 49       // Run the memory metric on the model. | 52       // Run the memory metric on the model. | 
| 50       tr.metrics.sh.memoryMetric(fakeValueList, model); | 53       tr.metrics.sh.memoryMetric(fakeValueList, model, opt_options); | 
| 51 | 54 | 
| 52       // Check that the names of the added values match expectations. | 55       // Check that the names of the added values match expectations. | 
| 53       var actualValueNames = Object.keys(valueNameToValues).sort(); | 56       var actualValueNames = Object.keys(valueNameToValues).sort(); | 
| 54       var expectedValueNames = Object.keys(expectedNumerics).sort(); | 57       var expectedValueNames = Object.keys(expectedNumerics).sort(); | 
| 55       assert.deepEqual(actualValueNames, expectedValueNames, { | 58       assert.deepEqual(actualValueNames, expectedValueNames, { | 
| 56         // Build the long error message lazily. | 59         // Build the long error message lazily. | 
| 57         toString: function() { | 60         toString: function() { | 
| 58           var errorMessageParts = []; | 61           var errorMessageParts = []; | 
| 59           function addValueNamesToError(type, valueNames, otherValueNames) { | 62           function addValueNamesToError(type, valueNames, otherValueNames) { | 
| 60             var otherValueNamesSet = new Set(otherValueNames); | 63             var otherValueNamesSet = new Set(otherValueNames); | 
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 151   } | 154   } | 
| 152 | 155 | 
| 153   function createWebViewProcess(model) { | 156   function createWebViewProcess(model) { | 
| 154     var process = createChromeBrowserProcess(model); | 157     var process = createChromeBrowserProcess(model); | 
| 155     process.getOrCreateThread(2).name = 'Chrome_InProcRendererThread'; | 158     process.getOrCreateThread(2).name = 'Chrome_InProcRendererThread'; | 
| 156     return process; | 159     return process; | 
| 157   } | 160   } | 
| 158 | 161 | 
| 159   memoryMetricTest('noDumps_noBrowser', function(model) { | 162   memoryMetricTest('noDumps_noBrowser', function(model) { | 
| 160     createProcessWithName(model, 'Non-browser'); | 163     createProcessWithName(model, 'Non-browser'); | 
| 161   }, { | 164   }, undefined /* opt_options */, { | 
| 162     /* no values */ | 165     /* no values */ | 
| 163   }); | 166   }); | 
| 164 | 167 | 
| 165   memoryMetricTest('noDumps_chrome', function(model) { | 168   memoryMetricTest('noDumps_chrome', function(model) { | 
| 166     createChromeBrowserProcess(model); | 169     createChromeBrowserProcess(model); | 
| 167   }, { | 170   }, undefined /* opt_options */, { | 
| 168     'memory:chrome:all_processes:dump_count:detailed': { | 171     'memory:chrome:all_processes:dump_count:detailed': { | 
| 169       value: 0, | 172       value: 0, | 
| 170       unit: unitlessNumber_smallerIsBetter, | 173       unit: unitlessNumber_smallerIsBetter, | 
| 171       description: 'total number of detailed memory dumps added by Chrome to ' + | 174       description: 'total number of detailed memory dumps added by Chrome to ' + | 
| 172           'the trace' | 175           'the trace' | 
| 173     }, | 176     }, | 
| 174     'memory:chrome:all_processes:dump_count:light': { | 177     'memory:chrome:all_processes:dump_count:light': { | 
| 175       value: 0, | 178       value: 0, | 
| 176       unit: unitlessNumber_smallerIsBetter, | 179       unit: unitlessNumber_smallerIsBetter, | 
| 177       description: 'total number of light memory dumps added by Chrome to ' + | 180       description: 'total number of light memory dumps added by Chrome to ' + | 
| 178           'the trace' | 181           'the trace' | 
| 179     }, | 182     }, | 
| 180     'memory:chrome:all_processes:dump_count': { | 183     'memory:chrome:all_processes:dump_count': { | 
| 181       value: 0, | 184       value: 0, | 
| 182       unit: unitlessNumber_smallerIsBetter, | 185       unit: unitlessNumber_smallerIsBetter, | 
| 183       description: 'total number of all memory dumps added by Chrome to the ' + | 186       description: 'total number of all memory dumps added by Chrome to the ' + | 
| 184           'trace' | 187           'trace' | 
| 185     } | 188     } | 
| 186   }); | 189   }); | 
| 187 | 190 | 
| 188   memoryMetricTest('noDumps_multipleBrowsers', function(model) { | 191   memoryMetricTest('noDumps_multipleBrowsers', function(model) { | 
| 189     createChromeBrowserProcess(model); | 192     createChromeBrowserProcess(model); | 
| 190     createWebViewProcess(model); | 193     createWebViewProcess(model); | 
| 191     createProcessWithName(model, 'Non-browser'); | 194     createProcessWithName(model, 'Non-browser'); | 
| 192     createChromeBrowserProcess(model); | 195     createChromeBrowserProcess(model); | 
| 193   }, { | 196   }, undefined /* opt_options */, { | 
| 194     'memory:chrome2:all_processes:dump_count:detailed': { | 197     'memory:chrome2:all_processes:dump_count:detailed': { | 
| 195       value: 0, | 198       value: 0, | 
| 196       unit: unitlessNumber_smallerIsBetter, | 199       unit: unitlessNumber_smallerIsBetter, | 
| 197       description: 'total number of detailed memory dumps added by Chrome(2) ' + | 200       description: 'total number of detailed memory dumps added by Chrome(2) ' + | 
| 198           'to the trace' | 201           'to the trace' | 
| 199     }, | 202     }, | 
| 200     'memory:chrome2:all_processes:dump_count:light': { | 203     'memory:chrome2:all_processes:dump_count:light': { | 
| 201       value: 0, | 204       value: 0, | 
| 202       unit: unitlessNumber_smallerIsBetter, | 205       unit: unitlessNumber_smallerIsBetter, | 
| 203       description: 'total number of light memory dumps added by Chrome(2) to ' + | 206       description: 'total number of light memory dumps added by Chrome(2) to ' + | 
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 241     }, | 244     }, | 
| 242     'memory:webview:all_processes:dump_count': { | 245     'memory:webview:all_processes:dump_count': { | 
| 243       value: 0, | 246       value: 0, | 
| 244       unit: unitlessNumber_smallerIsBetter, | 247       unit: unitlessNumber_smallerIsBetter, | 
| 245       description: 'total number of all memory dumps added by WebView to the ' + | 248       description: 'total number of all memory dumps added by WebView to the ' + | 
| 246           'trace' | 249           'trace' | 
| 247     } | 250     } | 
| 248   }); | 251   }); | 
| 249 | 252 | 
| 250   memoryMetricTest('dumpCountsOnly_unknownBrowser', function(model) { | 253   memoryMetricTest('dumpCountsOnly_unknownBrowser', function(model) { | 
| 251     addGlobalMemoryDump(model, 45, DETAILED); | 254     addGlobalMemoryDump(model, {ts: 45, levelOfDetail: DETAILED}); | 
| 252     addGlobalMemoryDump(model, 68, LIGHT); | 255     addGlobalMemoryDump(model, {ts: 68, levelOfDetail: LIGHT}); | 
| 253     addGlobalMemoryDump(model, 89, DETAILED); | 256     addGlobalMemoryDump(model, {ts: 89, levelOfDetail: DETAILED}); | 
| 254   }, { | 257   }, undefined /* opt_options */, { | 
| 255     'memory:unknown_browser:all_processes:dump_count:detailed': { | 258     'memory:unknown_browser:all_processes:dump_count:detailed': { | 
| 256       value: 2, | 259       value: 2, | 
| 257       unit: unitlessNumber_smallerIsBetter, | 260       unit: unitlessNumber_smallerIsBetter, | 
| 258       description: 'total number of detailed memory dumps added by an ' + | 261       description: 'total number of detailed memory dumps added by an ' + | 
| 259           'unknown browser to the trace' | 262           'unknown browser to the trace' | 
| 260     }, | 263     }, | 
| 261     'memory:unknown_browser:all_processes:dump_count:light': { | 264     'memory:unknown_browser:all_processes:dump_count:light': { | 
| 262       value: 1, | 265       value: 1, | 
| 263       unit: unitlessNumber_smallerIsBetter, | 266       unit: unitlessNumber_smallerIsBetter, | 
| 264       description: 'total number of light memory dumps added by an unknown ' + | 267       description: 'total number of light memory dumps added by an unknown ' + | 
| 265           'browser to the trace' | 268           'browser to the trace' | 
| 266     }, | 269     }, | 
| 267     'memory:unknown_browser:all_processes:dump_count': { | 270     'memory:unknown_browser:all_processes:dump_count': { | 
| 268       value: 3, | 271       value: 3, | 
| 269       unit: unitlessNumber_smallerIsBetter, | 272       unit: unitlessNumber_smallerIsBetter, | 
| 270       description: 'total number of all memory dumps added by an unknown ' + | 273       description: 'total number of all memory dumps added by an unknown ' + | 
| 271           'browser to the trace' | 274           'browser to the trace' | 
| 272     } | 275     } | 
| 273   }); | 276   }); | 
| 274 | 277 | 
| 275   memoryMetricTest('dumpCountsOnly_webview', function(model) { | 278   memoryMetricTest('dumpCountsOnly_webview', function(model) { | 
| 276     var p = createWebViewProcess(model); | 279     var p = createWebViewProcess(model); | 
| 277     addProcessMemoryDump(addGlobalMemoryDump(model, 45, LIGHT), p, 45); | 280     addProcessMemoryDump(addGlobalMemoryDump( | 
| 278     addProcessMemoryDump(addGlobalMemoryDump(model, 68, LIGHT), p, 68); | 281         model, {ts: 45, levelOfDetail: LIGHT}), p, {ts: 45}); | 
| 279   }, { | 282     addProcessMemoryDump(addGlobalMemoryDump( | 
|  | 283         model, {ts: 68, levelOfDetail: LIGHT}), p, {ts: 68}); | 
|  | 284   }, undefined /* opt_options */, { | 
| 280     'memory:webview:all_processes:dump_count:detailed': { | 285     'memory:webview:all_processes:dump_count:detailed': { | 
| 281       value: 0, | 286       value: 0, | 
| 282       unit: unitlessNumber_smallerIsBetter, | 287       unit: unitlessNumber_smallerIsBetter, | 
| 283       description: 'total number of detailed memory dumps added by WebView ' + | 288       description: 'total number of detailed memory dumps added by WebView ' + | 
| 284           'to the trace' | 289           'to the trace' | 
| 285     }, | 290     }, | 
| 286     'memory:webview:all_processes:dump_count:light': { | 291     'memory:webview:all_processes:dump_count:light': { | 
| 287       value: 2, | 292       value: 2, | 
| 288       unit: unitlessNumber_smallerIsBetter, | 293       unit: unitlessNumber_smallerIsBetter, | 
| 289       description: 'total number of light memory dumps added by WebView to ' + | 294       description: 'total number of light memory dumps added by WebView to ' + | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 308   }); | 313   }); | 
| 309 | 314 | 
| 310   memoryMetricTest('generalValues_chrome', function(model) { | 315   memoryMetricTest('generalValues_chrome', function(model) { | 
| 311     var pBrowser = createChromeBrowserProcess(model); | 316     var pBrowser = createChromeBrowserProcess(model); | 
| 312     var pRendererA = createProcessWithName(model, 'Renderer'); | 317     var pRendererA = createProcessWithName(model, 'Renderer'); | 
| 313     var pRendererB = createProcessWithName(model, 'Renderer'); | 318     var pRendererB = createProcessWithName(model, 'Renderer'); | 
| 314     var pPpapi = createProcessWithName(model, 'PPAPI Process'); | 319     var pPpapi = createProcessWithName(model, 'PPAPI Process'); | 
| 315     var pUnknown = createProcessWithName(model, undefined); | 320     var pUnknown = createProcessWithName(model, undefined); | 
| 316 | 321 | 
| 317     // Timestamp 1. | 322     // Timestamp 1. | 
| 318     var gmd1 = addGlobalMemoryDump(model, 20); | 323     var gmd1 = addGlobalMemoryDump(model, {ts: 20}); | 
| 319     var pmdBrowser1 = addProcessMemoryDump(gmd1, pBrowser, 19); | 324     var pmdBrowser1 = addProcessMemoryDump(gmd1, pBrowser, {ts: 19}); | 
| 320     pmdBrowser1.memoryAllocatorDumps = [ | 325     pmdBrowser1.memoryAllocatorDumps = [ | 
| 321       newAllocatorDump(pmdBrowser1, 'malloc', { | 326       newAllocatorDump(pmdBrowser1, 'malloc', {numerics: { | 
| 322         'size': 8, | 327         size: 8, | 
| 323         'allocated_objects_size': 4 | 328         allocated_objects_size: 4 | 
| 324       }) | 329       }}) | 
| 325     ]; | 330     ]; | 
| 326     var pmdRendererA1 = addProcessMemoryDump(gmd1, pRendererA, 20); | 331     var pmdRendererA1 = addProcessMemoryDump(gmd1, pRendererA, {ts: 20}); | 
| 327     pmdRendererA1.memoryAllocatorDumps = (function() { | 332     pmdRendererA1.memoryAllocatorDumps = (function() { | 
| 328       var mallocDump = | 333       var mallocDump = | 
| 329           newAllocatorDump(pmdRendererA1, 'malloc', { 'size': 16 }); | 334           newAllocatorDump(pmdRendererA1, 'malloc', {numerics: {size: 16}}); | 
| 330       var partitionAllocDump = | 335       var partitionAllocDump = | 
| 331           newAllocatorDump(pmdRendererA1, 'partition_alloc'); | 336           newAllocatorDump(pmdRendererA1, 'partition_alloc'); | 
| 332       addOwnershipLink( | 337       addOwnershipLink( | 
| 333           addChildDump(partitionAllocDump, 'allocated_objects', { 'size': 32 }), | 338           addChildDump(partitionAllocDump, 'allocated_objects', | 
| 334           addChildDump(partitionAllocDump, 'partitions', { 'size': 24 })); | 339               {numerics: {size: 32}}), | 
|  | 340           addChildDump(partitionAllocDump, 'partitions', | 
|  | 341               {numerics: {size: 24}})); | 
| 335       return [mallocDump, partitionAllocDump]; | 342       return [mallocDump, partitionAllocDump]; | 
| 336     })(); | 343     })(); | 
| 337     var pmdGpu1 = addProcessMemoryDump(gmd1, pPpapi, 21); | 344     var pmdGpu1 = addProcessMemoryDump(gmd1, pPpapi, {ts: 21}); | 
| 338     pmdGpu1.memoryAllocatorDumps = [ | 345     pmdGpu1.memoryAllocatorDumps = [ | 
| 339       newAllocatorDump(pmdGpu1, 'gpu', { | 346       newAllocatorDump(pmdGpu1, 'gpu', {numerics: { | 
| 340         'size': 30, | 347         size: 30, | 
| 341         'allocated_objects_size': 25 | 348         allocated_objects_size: 25 | 
| 342       }) | 349       }}) | 
| 343     ]; | 350     ]; | 
| 344 | 351 | 
| 345     // Timestamp 2. | 352     // Timestamp 2. | 
| 346     var gmd2 = addGlobalMemoryDump(model, 40); | 353     var gmd2 = addGlobalMemoryDump(model, {ts: 40}); | 
| 347     var pmdBrowser2 = addProcessMemoryDump(gmd2, pBrowser, 41); | 354     var pmdBrowser2 = addProcessMemoryDump(gmd2, pBrowser, {ts: 41}); | 
| 348     pmdBrowser2.memoryAllocatorDumps = (function() { | 355     pmdBrowser2.memoryAllocatorDumps = (function() { | 
| 349       var mallocDump = newAllocatorDump(pmdBrowser2, 'malloc', { 'size': 120 }); | 356       var mallocDump = newAllocatorDump(pmdBrowser2, 'malloc', | 
|  | 357           {numerics: {size: 120}}); | 
| 350       var tracingDump = | 358       var tracingDump = | 
| 351           newAllocatorDump(pmdBrowser2, 'tracing', { 'size': 40 }); | 359           newAllocatorDump(pmdBrowser2, 'tracing', {numerics: {size: 40}}); | 
| 352       return [mallocDump, tracingDump]; | 360       return [mallocDump, tracingDump]; | 
| 353     })(); | 361     })(); | 
| 354     var pmdRendererA2 = addProcessMemoryDump(gmd2, pRendererA, 39); | 362     var pmdRendererA2 = addProcessMemoryDump(gmd2, pRendererA, {ts: 39}); | 
| 355     pmdRendererA2.memoryAllocatorDumps = (function() { | 363     pmdRendererA2.memoryAllocatorDumps = (function() { | 
| 356       var partitionAllocDump = | 364       var partitionAllocDump = | 
| 357           newAllocatorDump(pmdRendererA2, 'partition_alloc'); | 365           newAllocatorDump(pmdRendererA2, 'partition_alloc'); | 
| 358       addOwnershipLink( | 366       addOwnershipLink( | 
| 359           addChildDump(partitionAllocDump, 'allocated_objects', | 367           addChildDump(partitionAllocDump, 'allocated_objects', | 
| 360               { 'size': 320 }), | 368               {numerics: {size: 320}}), | 
| 361           addChildDump(partitionAllocDump, 'partitions', { 'size': 240 })); | 369           addChildDump(partitionAllocDump, 'partitions', | 
| 362       var v8Dump = newAllocatorDump(pmdRendererA2, 'v8', { 'size': 650 }); | 370               {numerics: {size: 240}})); | 
|  | 371       var v8Dump = newAllocatorDump(pmdRendererA2, 'v8', | 
|  | 372           {numerics: {size: 650}}); | 
|  | 373       var isolateDumpA = addChildDump(v8Dump, 'isolate_A'); | 
|  | 374       addChildDump(isolateDumpA, 'malloc', {numerics: {size: 1 }}); | 
|  | 375       var isolateDumpB = addChildDump(v8Dump, 'isolate_B'); | 
|  | 376       addChildDump(isolateDumpB, 'malloc', {numerics: {size: 10 }}); | 
| 363       return [partitionAllocDump, v8Dump]; | 377       return [partitionAllocDump, v8Dump]; | 
| 364     })(); | 378     })(); | 
| 365     var pmdRendererB2 = addProcessMemoryDump(gmd2, pRendererB, 40); | 379     var pmdRendererB2 = addProcessMemoryDump(gmd2, pRendererB, {ts: 40}); | 
| 366     pmdRendererB2.memoryAllocatorDumps = [ | 380     pmdRendererB2.memoryAllocatorDumps = [ | 
| 367       newAllocatorDump(pmdRendererB2, 'v8', { | 381       newAllocatorDump(pmdRendererB2, 'v8', {numerics: { | 
| 368         'size': 970, | 382         size: 970, | 
| 369         'allocated_objects_size': 860 | 383         allocated_objects_size: 860 | 
| 370       }), | 384       }}), | 
| 371       newAllocatorDump(pmdRendererB2, 'malloc', { | 385       newAllocatorDump(pmdRendererB2, 'malloc', | 
| 372         'allocated_objects_size': 750 | 386           {numerics: {allocated_objects_size: 750}}) | 
| 373       }) |  | 
| 374     ]; | 387     ]; | 
| 375     var pmdUnknown = addProcessMemoryDump(gmd2, pUnknown, 42); | 388     var pmdUnknown = addProcessMemoryDump(gmd2, pUnknown, {ts: 42}); | 
| 376     pmdUnknown.memoryAllocatorDumps = [ | 389     pmdUnknown.memoryAllocatorDumps = [ | 
| 377       newAllocatorDump(pmdRendererB2, 'v8', { | 390       newAllocatorDump(pmdRendererB2, 'v8', {numerics: {size: 111}}) | 
| 378         'size': 111 |  | 
| 379       }) |  | 
| 380     ]; | 391     ]; | 
| 381 | 392 | 
| 382     // Timestamp 3. | 393     // Timestamp 3. | 
| 383     var gmd3 = addGlobalMemoryDump(model, 60); | 394     var gmd3 = addGlobalMemoryDump(model, {ts: 60}); | 
| 384     var pmdBrowser3 = addProcessMemoryDump(gmd3, pBrowser, 60); | 395     var pmdBrowser3 = addProcessMemoryDump(gmd3, pBrowser, {ts: 60}); | 
| 385     pmdBrowser3.memoryAllocatorDumps = [ | 396     pmdBrowser3.memoryAllocatorDumps = [ | 
| 386       newAllocatorDump(pmdBrowser3, 'malloc', { | 397       newAllocatorDump(pmdBrowser3, 'malloc', {numerics: { | 
| 387         'size': 8000, | 398         size: 8000, | 
| 388         'allocated_objects_size': 4000 | 399         allocated_objects_size: 4000 | 
| 389       }) | 400       }}) | 
| 390     ]; | 401     ]; | 
| 391     var pmdRendererB3 = addProcessMemoryDump(gmd3, pRendererB, 61); | 402     var pmdRendererB3 = addProcessMemoryDump(gmd3, pRendererB, {ts: 61}); | 
| 392     // Intentionally pmdRendererB3.memoryAllocatorDumps undefined. | 403     // Intentionally pmdRendererB3.memoryAllocatorDumps undefined. | 
| 393     var pmdGpu3 = addProcessMemoryDump(gmd3, pPpapi, 59); | 404     var pmdGpu3 = addProcessMemoryDump(gmd3, pPpapi, {ts: 59}); | 
| 394     pmdGpu3.memoryAllocatorDumps = [ | 405     pmdGpu3.memoryAllocatorDumps = [ | 
| 395       newAllocatorDump(pmdGpu3, 'gpu', { 'size': 300 }) | 406       newAllocatorDump(pmdGpu3, 'gpu', {numerics: {size: 300}}) | 
| 396     ]; | 407     ]; | 
| 397 | 408 | 
| 398     // Timestamp 4. | 409     // Timestamp 4. | 
| 399     var gmd4 = addGlobalMemoryDump(model, 80); | 410     var gmd4 = addGlobalMemoryDump(model, {ts: 80}); | 
| 400     var pmdBrowser4 = addProcessMemoryDump(gmd4, pBrowser, 81); | 411     var pmdBrowser4 = addProcessMemoryDump(gmd4, pBrowser, {ts: 81}); | 
| 401     pmdBrowser4.memoryAllocatorDumps = [ | 412     pmdBrowser4.memoryAllocatorDumps = [ | 
| 402       newAllocatorDump(pmdBrowser4, 'malloc', { 'size': 80000 }) | 413       newAllocatorDump(pmdBrowser4, 'malloc', {numerics: {size: 80000}}) | 
| 403     ]; | 414     ]; | 
| 404     var pmdRendererB4 = addProcessMemoryDump(gmd4, pRendererB, 79); | 415     var pmdRendererB4 = addProcessMemoryDump(gmd4, pRendererB, {ts: 79}); | 
| 405     pmdRendererB4.memoryAllocatorDumps = (function() { | 416     pmdRendererB4.memoryAllocatorDumps = (function() { | 
| 406       var v8Dump = newAllocatorDump(pmdRendererB4, 'v8', { 'size': 9e5 }); | 417       var v8Dump = newAllocatorDump(pmdRendererB4, 'v8', | 
|  | 418           {numerics: {size: 9e5}}); | 
| 407       var partitionAllocDump = newAllocatorDump(pmdRendererB4, | 419       var partitionAllocDump = newAllocatorDump(pmdRendererB4, | 
| 408           'partition_alloc', { 'size': 5e5 }); | 420           'partition_alloc', {numerics: {size: 5e5}}); | 
| 409       addOwnershipLink(partitionAllocDump, v8Dump); | 421       addOwnershipLink(partitionAllocDump, v8Dump); | 
| 410       return [v8Dump, partitionAllocDump]; | 422       return [v8Dump, partitionAllocDump]; | 
| 411     })(); | 423     })(); | 
| 412     var pmdGpu4 = addProcessMemoryDump(gmd4, pPpapi, 80); | 424     var pmdGpu4 = addProcessMemoryDump(gmd4, pPpapi, {ts: 80}); | 
| 413     pmdGpu4.memoryAllocatorDumps = [ | 425     pmdGpu4.memoryAllocatorDumps = [ | 
| 414       newAllocatorDump(pmdGpu4, 'gpu', { 'memtrack_pss': 666 /* ignored */ }) | 426       newAllocatorDump(pmdGpu4, 'gpu', | 
|  | 427           {numerics: {memtrack_pss: 666 /* ignored */}}) | 
| 415     ]; | 428     ]; | 
| 416   }, { | 429   }, undefined /* opt_options */, { | 
| 417     'memory:chrome:all_processes:dump_count:detailed': { | 430     'memory:chrome:all_processes:dump_count:detailed': { | 
| 418       value: 0, | 431       value: 0, | 
| 419       unit: unitlessNumber_smallerIsBetter, | 432       unit: unitlessNumber_smallerIsBetter, | 
| 420       description: 'total number of detailed memory dumps added by Chrome to ' + | 433       description: 'total number of detailed memory dumps added by Chrome to ' + | 
| 421           'the trace' | 434           'the trace' | 
| 422     }, | 435     }, | 
| 423     'memory:chrome:all_processes:dump_count:light': { | 436     'memory:chrome:all_processes:dump_count:light': { | 
| 424       value: 4, | 437       value: 4, | 
| 425       unit: unitlessNumber_smallerIsBetter, | 438       unit: unitlessNumber_smallerIsBetter, | 
| 426       description: 'total number of light memory dumps added by Chrome to ' + | 439       description: 'total number of light memory dumps added by Chrome to ' + | 
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 479           value: [32, 320, 0, 5e5], | 492           value: [32, 320, 0, 5e5], | 
| 480           unit: sizeInBytes_smallerIsBetter, | 493           unit: sizeInBytes_smallerIsBetter, | 
| 481           description: 'effective size of partition_alloc in all processes ' + | 494           description: 'effective size of partition_alloc in all processes ' + | 
| 482               'in Chrome' | 495               'in Chrome' | 
| 483         }, | 496         }, | 
| 484     'memory:chrome:all_processes:reported_by_chrome:tracing:effective_size': { | 497     'memory:chrome:all_processes:reported_by_chrome:tracing:effective_size': { | 
| 485       value: [0, 40, 0, 0], | 498       value: [0, 40, 0, 0], | 
| 486       unit: sizeInBytes_smallerIsBetter, | 499       unit: sizeInBytes_smallerIsBetter, | 
| 487       description: 'effective size of tracing in all processes in Chrome' | 500       description: 'effective size of tracing in all processes in Chrome' | 
| 488     }, | 501     }, | 
|  | 502     'memory:chrome:all_processes:reported_by_chrome:v8:allocated_by_malloc:effec
      tive_size': | 
|  | 503         { | 
|  | 504           value: [0, 1 + 10, 0, 0], | 
|  | 505           unit: sizeInBytes_smallerIsBetter, | 
|  | 506           description: 'effective size of objects allocated by malloc for v8 ' + | 
|  | 507               'in all processes in Chrome' | 
|  | 508         }, | 
| 489     'memory:chrome:all_processes:reported_by_chrome:v8:effective_size': { | 509     'memory:chrome:all_processes:reported_by_chrome:v8:effective_size': { | 
| 490       value: [0, 650 + 970 + 111, 0, 4e5], | 510       value: [0, 650 + 970 + 111, 0, 4e5], | 
| 491       unit: sizeInBytes_smallerIsBetter, | 511       unit: sizeInBytes_smallerIsBetter, | 
| 492       description: 'effective size of v8 in all processes in Chrome' | 512       description: 'effective size of v8 in all processes in Chrome' | 
| 493     }, | 513     }, | 
| 494     'memory:chrome:all_processes:reported_by_chrome:v8:allocated_objects_size': | 514     'memory:chrome:all_processes:reported_by_chrome:v8:allocated_objects_size': | 
| 495         { | 515         { | 
| 496           value: [0, 860, 0, 0], | 516           value: [0, 860, 0, 0], | 
| 497           unit: sizeInBytes_smallerIsBetter, | 517           unit: sizeInBytes_smallerIsBetter, | 
| 498           description: 'size of all objects allocated by v8 in all processes ' + | 518           description: 'size of all objects allocated by v8 in all processes ' + | 
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 593           description: 'size of all objects allocated by malloc in renderer ' + | 613           description: 'size of all objects allocated by malloc in renderer ' + | 
| 594               'processes in Chrome' | 614               'processes in Chrome' | 
| 595         }, | 615         }, | 
| 596     'memory:chrome:renderer_processes:reported_by_chrome:partition_alloc:effecti
      ve_size': | 616     'memory:chrome:renderer_processes:reported_by_chrome:partition_alloc:effecti
      ve_size': | 
| 597         { | 617         { | 
| 598           value: [32, 320, 0, 5e5], | 618           value: [32, 320, 0, 5e5], | 
| 599           unit: sizeInBytes_smallerIsBetter, | 619           unit: sizeInBytes_smallerIsBetter, | 
| 600           description: 'effective size of partition_alloc in renderer ' + | 620           description: 'effective size of partition_alloc in renderer ' + | 
| 601               'processes in Chrome' | 621               'processes in Chrome' | 
| 602         }, | 622         }, | 
|  | 623     'memory:chrome:renderer_processes:reported_by_chrome:v8:allocated_by_malloc:
      effective_size': | 
|  | 624         { | 
|  | 625           value: [0, 1 + 10, 0, 0], | 
|  | 626           unit: sizeInBytes_smallerIsBetter, | 
|  | 627           description: 'effective size of objects allocated by malloc for v8 ' + | 
|  | 628               'in renderer processes in Chrome' | 
|  | 629         }, | 
| 603     'memory:chrome:renderer_processes:reported_by_chrome:v8:effective_size': { | 630     'memory:chrome:renderer_processes:reported_by_chrome:v8:effective_size': { | 
| 604       value: [0, 650 + 970, 0, 4e5], | 631       value: [0, 650 + 970, 0, 4e5], | 
| 605       unit: sizeInBytes_smallerIsBetter, | 632       unit: sizeInBytes_smallerIsBetter, | 
| 606       description: 'effective size of v8 in renderer processes in Chrome' | 633       description: 'effective size of v8 in renderer processes in Chrome' | 
| 607     }, | 634     }, | 
| 608     'memory:chrome:renderer_processes:reported_by_chrome:v8:allocated_objects_si
      ze': | 635     'memory:chrome:renderer_processes:reported_by_chrome:v8:allocated_objects_si
      ze': | 
| 609         { | 636         { | 
| 610           value: [0, 860, 0, 0], | 637           value: [0, 860, 0, 0], | 
| 611           unit: sizeInBytes_smallerIsBetter, | 638           unit: sizeInBytes_smallerIsBetter, | 
| 612           description: 'size of all objects allocated by v8 in renderer ' + | 639           description: 'size of all objects allocated by v8 in renderer ' + | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 631   }); | 658   }); | 
| 632 | 659 | 
| 633   memoryMetricTest('detailedValues_unknownBrowser', function(model) { | 660   memoryMetricTest('detailedValues_unknownBrowser', function(model) { | 
| 634     var pBrowser = createProcessWithName(model, 'Browser'); | 661     var pBrowser = createProcessWithName(model, 'Browser'); | 
| 635     var pRendererA = createProcessWithName(model, 'Renderer'); | 662     var pRendererA = createProcessWithName(model, 'Renderer'); | 
| 636     var pRendererB = createProcessWithName(model, 'Renderer'); | 663     var pRendererB = createProcessWithName(model, 'Renderer'); | 
| 637     var pRendererC = createProcessWithName(model, 'Renderer'); | 664     var pRendererC = createProcessWithName(model, 'Renderer'); | 
| 638     var pGpu = createProcessWithName(model, 'GPU Process'); | 665     var pGpu = createProcessWithName(model, 'GPU Process'); | 
| 639 | 666 | 
| 640     // Timestamp 1. | 667     // Timestamp 1. | 
| 641     var gmd1 = addGlobalMemoryDump(model, 10, DETAILED); | 668     var gmd1 = addGlobalMemoryDump(model, {ts: 10, levelOfDetail: DETAILED}); | 
| 642     var pmdBrowser1 = addProcessMemoryDump(gmd1, pBrowser, 9); | 669     var pmdBrowser1 = addProcessMemoryDump(gmd1, pBrowser, {ts: 9}); | 
| 643     pmdBrowser1.vmRegions = VMRegionClassificationNode.fromRegions([ | 670     pmdBrowser1.vmRegions = VMRegionClassificationNode.fromRegions([ | 
| 644       new VMRegion(0xABCD, 128, 0, '/dev/ashmem/dalvik-non moving space', | 671       new VMRegion(0xABCD, 128, 0, '/dev/ashmem/dalvik-non moving space', | 
| 645           { 'privateDirtyResident': 8 }) | 672           {privateDirtyResident: 8}) | 
| 646     ]); | 673     ]); | 
| 647     var pmdRendererA1 = addProcessMemoryDump(gmd1, pRendererA, 10); | 674     var pmdRendererA1 = addProcessMemoryDump(gmd1, pRendererA, {ts: 10}); | 
| 648     pmdRendererA1.vmRegions = VMRegionClassificationNode.fromRegions([ | 675     pmdRendererA1.vmRegions = VMRegionClassificationNode.fromRegions([ | 
| 649       new VMRegion(0xEF01, 256, 0, '[anon:libc_malloc]', | 676       new VMRegion(0xEF01, 256, 0, '[anon:libc_malloc]', | 
| 650           { 'privateDirtyResident': 17 }) | 677           {privateDirtyResident: 17}) | 
| 651     ]); | 678     ]); | 
| 652     var pmdRendererB1 = addProcessMemoryDump(gmd1, pRendererB, 11); | 679     var pmdRendererB1 = addProcessMemoryDump(gmd1, pRendererB, {ts: 11}); | 
| 653     pmdRendererB1.vmRegions = VMRegionClassificationNode.fromRegions([ | 680     pmdRendererB1.vmRegions = VMRegionClassificationNode.fromRegions([ | 
| 654       new VMRegion(0x2345, 512, 0, '[heap]', | 681       new VMRegion(0x2345, 512, 0, '[heap]', | 
| 655           { 'proportionalResident': 67, 'privateDirtyResident': 34 }) | 682           {proportionalResident: 67, privateDirtyResident: 34}) | 
| 656     ]); | 683     ]); | 
| 657     pmdRendererB1.memoryAllocatorDumps = [ | 684     pmdRendererB1.memoryAllocatorDumps = [ | 
| 658       newAllocatorDump(pmdRendererA4, 'v8', { 'code_and_metadata_size': 16 }) | 685       newAllocatorDump(pmdRendererA4, 'v8', | 
|  | 686           {numerics: {code_and_metadata_size: 16}}) | 
| 659     ]; | 687     ]; | 
| 660     var pmdGpu1 = addProcessMemoryDump(gmd1, pGpu, 10); | 688     var pmdGpu1 = addProcessMemoryDump(gmd1, pGpu, {ts: 10}); | 
| 661     pmdGpu1.memoryAllocatorDumps = (function() { | 689     pmdGpu1.memoryAllocatorDumps = (function() { | 
| 662       var gpuDump = newAllocatorDump(pmdGpu1, 'gpu'); | 690       var gpuDump = newAllocatorDump(pmdGpu1, 'gpu'); | 
| 663       var memtrackDump = addChildDump(gpuDump, 'android_memtrack'); | 691       var memtrackDump = addChildDump(gpuDump, 'android_memtrack'); | 
| 664       addChildDump(memtrackDump, 'gl', { 'memtrack_pss': 100 }); | 692       addChildDump(memtrackDump, 'gl', {numerics: {memtrack_pss: 100}}); | 
| 665       addChildDump(memtrackDump, 'graphics', { 'memtrack_pss': 200 }); | 693       addChildDump(memtrackDump, 'graphics', {numerics: {memtrack_pss: 200}}); | 
| 666       return [gpuDump]; | 694       return [gpuDump]; | 
| 667     })(); | 695     })(); | 
| 668 | 696 | 
| 669     // Timestamp 2 (light global memory dump, so it should be skipped for | 697     // Timestamp 2 (light global memory dump, so it should be skipped for | 
| 670     // mmaps_* values). | 698     // mmaps_* values). | 
| 671     var gmd2 = addGlobalMemoryDump(model, 20, LIGHT); | 699     var gmd2 = addGlobalMemoryDump(model, {ts: 20, levelOfDetail: LIGHT}); | 
| 672     var pmdBrowser2 = addProcessMemoryDump(gmd2, pBrowser, 18); | 700     var pmdBrowser2 = addProcessMemoryDump(gmd2, pBrowser, {ts: 18}); | 
| 673     pmdBrowser2.vmRegions = VMRegionClassificationNode.fromRegions([ | 701     pmdBrowser2.vmRegions = VMRegionClassificationNode.fromRegions([ | 
| 674       new VMRegion(0x999, 999, 999, '/dev/ashmem/dalvik-main space', | 702       new VMRegion(0x999, 999, 999, '/dev/ashmem/dalvik-main space', | 
| 675           { 'proportionalResident': 999 }) | 703           {proportionalResident: 999}) | 
| 676     ]); | 704     ]); | 
| 677     var pmdRendererA2 = addProcessMemoryDump(gmd2, pRendererA, 19); | 705     var pmdRendererA2 = addProcessMemoryDump(gmd2, pRendererA, {ts: 19}); | 
| 678     pmdRendererA2.memoryAllocatorDumps = [ | 706     pmdRendererA2.memoryAllocatorDumps = [ | 
| 679       newAllocatorDump(pmdRendererA4, 'v8', { | 707       newAllocatorDump(pmdRendererA4, 'v8', | 
| 680         'bytecode_and_metadata_size': 678 | 708           {numerics: {bytecode_and_metadata_size: 678}}) | 
| 681       }) |  | 
| 682     ]; | 709     ]; | 
| 683     var pmdRendererB2 = addProcessMemoryDump(gmd2, pRendererB, 21); | 710     var pmdRendererB2 = addProcessMemoryDump(gmd2, pRendererB, {ts: 21}); | 
| 684     var pmdRendererC2 = addProcessMemoryDump(gmd2, pRendererC, 22); | 711     var pmdRendererC2 = addProcessMemoryDump(gmd2, pRendererC, {ts: 22}); | 
| 685     var pmdGpu2 = addProcessMemoryDump(gmd2, pGpu, 20); | 712     var pmdGpu2 = addProcessMemoryDump(gmd2, pGpu, {ts: 20}); | 
| 686     pmdGpu2.memoryAllocatorDumps = (function() { | 713     pmdGpu2.memoryAllocatorDumps = (function() { | 
| 687       var gpuDump = newAllocatorDump(pmdGpu2, 'gpu'); | 714       var gpuDump = newAllocatorDump(pmdGpu2, 'gpu'); | 
| 688       var memtrackDump = addChildDump(gpuDump, 'android_memtrack'); | 715       var memtrackDump = addChildDump(gpuDump, 'android_memtrack'); | 
| 689       addChildDump(memtrackDump, 'gl', { 'memtrack_pss': 12345 }); | 716       addChildDump(memtrackDump, 'gl', {numerics: {memtrack_pss: 12345}}); | 
| 690       return [gpuDump]; | 717       return [gpuDump]; | 
| 691     })(); | 718     })(); | 
| 692 | 719 | 
| 693     // Timestamp 3. | 720     // Timestamp 3. | 
| 694     var gmd3 = addGlobalMemoryDump(model, 30, DETAILED); | 721     var gmd3 = addGlobalMemoryDump(model, {ts: 30, levelOfDetail: DETAILED}); | 
| 695     var pmdBrowser3 = addProcessMemoryDump(gmd3, pBrowser, 30); | 722     var pmdBrowser3 = addProcessMemoryDump(gmd3, pBrowser, {ts: 30}); | 
| 696     pmdBrowser3.vmRegions = VMRegionClassificationNode.fromRegions([ | 723     pmdBrowser3.vmRegions = VMRegionClassificationNode.fromRegions([ | 
| 697       new VMRegion(0xABCD, 1024, 0, '/dev/ashmem/dalvik-non moving space', | 724       new VMRegion(0xABCD, 1024, 0, '/dev/ashmem/dalvik-non moving space', | 
| 698           { 'proportionalResident': 3, 'privateDirtyResident': 80 }) | 725           {proportionalResident: 3, privateDirtyResident: 80}) | 
| 699     ]); | 726     ]); | 
| 700     var pmdRendererA3 = addProcessMemoryDump(gmd3, pRendererA, 29); | 727     var pmdRendererA3 = addProcessMemoryDump(gmd3, pRendererA, {ts: 29}); | 
| 701     // Intentionally pmdRendererA3.vmRegions undefined. | 728     // Intentionally pmdRendererA3.vmRegions undefined. | 
| 702     var pmdRendererC3 = addProcessMemoryDump(gmd3, pRendererC, 31); | 729     var pmdRendererC3 = addProcessMemoryDump(gmd3, pRendererC, {ts: 31}); | 
| 703     pmdRendererC3.vmRegions = VMRegionClassificationNode.fromRegions([ | 730     pmdRendererC3.vmRegions = VMRegionClassificationNode.fromRegions([ | 
| 704       new VMRegion(0x2345, 2048, 0, '/no/matching/category', | 731       new VMRegion(0x2345, 2048, 0, '/no/matching/category', | 
| 705           { 'proportionalResident': 200 }), | 732           {proportionalResident: 200}), | 
| 706       new VMRegion(0x2345, 2048, 0, '/dev/ashmem', | 733       new VMRegion(0x2345, 2048, 0, '/dev/ashmem', {proportionalResident: 500}), | 
| 707           { 'proportionalResident': 500 }), |  | 
| 708     ]); | 734     ]); | 
| 709     var pmdGpu3 = addProcessMemoryDump(gmd3, pGpu, 30); | 735     var pmdGpu3 = addProcessMemoryDump(gmd3, pGpu, {ts: 30}); | 
| 710     pmdGpu3.memoryAllocatorDumps = (function() { | 736     pmdGpu3.memoryAllocatorDumps = (function() { | 
| 711       var gpuDump = newAllocatorDump(pmdGpu3, 'gpu', | 737       var gpuDump = newAllocatorDump(pmdGpu3, 'gpu', | 
| 712           { 'memtrack_pss': 6000 /* ignored */ }); | 738           {numerics: {memtrack_pss: 6000 /* ignored */}}); | 
| 713       var memtrackDump = addChildDump(gpuDump, 'android_memtrack', | 739       var memtrackDump = addChildDump(gpuDump, 'android_memtrack', | 
| 714           { 'memtrack_pss': 5000 /* ignored */ }); | 740           {numerics: {memtrack_pss: 5000 /* ignored */}}); | 
| 715       addChildDump(memtrackDump, 'gl', { 'memtrack_pss': 3000 }); | 741       addChildDump(memtrackDump, 'gl', {numerics: {memtrack_pss: 3000}}); | 
| 716       addChildDump(memtrackDump, 'graphics', { 'ignored': 2000 }); | 742       addChildDump(memtrackDump, 'graphics', {numerics: {ignored: 2000}}); | 
| 717       addChildDump(memtrackDump, 'gfx', { 'memtrack_pss': 1000 }); | 743       addChildDump(memtrackDump, 'gfx', {numerics: {memtrack_pss: 1000}}); | 
| 718       return [gpuDump]; | 744       return [gpuDump]; | 
| 719     })(); | 745     })(); | 
| 720     pmdGpu3.vmRegions = VMRegionClassificationNode.fromRegions([ | 746     pmdGpu3.vmRegions = VMRegionClassificationNode.fromRegions([ | 
| 721       new VMRegion(0xCDCD, 4096, 0, '/dev/ashmem/dalvik-zygote space', | 747       new VMRegion(0xCDCD, 4096, 0, '/dev/ashmem/dalvik-zygote space', | 
| 722           { 'proportionalResident': 150, 'privateDirtyResident': 90 }) | 748           {proportionalResident: 150, privateDirtyResident: 90}) | 
| 723     ]); | 749     ]); | 
| 724 | 750 | 
| 725     // Timestamp 4. | 751     // Timestamp 4. | 
| 726     var gmd4 = addGlobalMemoryDump(model, 40, DETAILED); | 752     var gmd4 = addGlobalMemoryDump(model, {ts: 40, levelOfDetail: DETAILED}); | 
| 727     var pmdBrowser4 = addProcessMemoryDump(gmd4, pBrowser, 40); | 753     var pmdBrowser4 = addProcessMemoryDump(gmd4, pBrowser, {ts: 40}); | 
| 728     var pmdRendererA4 = addProcessMemoryDump(gmd4, pRendererA, 40); | 754     var pmdRendererA4 = addProcessMemoryDump(gmd4, pRendererA, {ts: 40}); | 
| 729     pmdRendererA4.memoryAllocatorDumps = [ | 755     pmdRendererA4.memoryAllocatorDumps = [ | 
| 730       newAllocatorDump(pmdRendererA4, 'v8', { | 756       newAllocatorDump(pmdRendererA4, 'v8', {numerics: { | 
| 731         'code_and_metadata_size': 21, | 757         code_and_metadata_size: 21, | 
| 732         'bytecode_and_metadata_size': 35 | 758         bytecode_and_metadata_size: 35 | 
| 733       }) | 759       }}) | 
| 734     ]; | 760     ]; | 
| 735   }, { | 761   }, undefined /* opt_options */, { | 
| 736     'memory:unknown_browser:all_processes:dump_count:detailed': { | 762     'memory:unknown_browser:all_processes:dump_count:detailed': { | 
| 737       value: 3, | 763       value: 3, | 
| 738       unit: unitlessNumber_smallerIsBetter, | 764       unit: unitlessNumber_smallerIsBetter, | 
| 739       description: 'total number of detailed memory dumps added by an ' + | 765       description: 'total number of detailed memory dumps added by an ' + | 
| 740           'unknown browser to the trace' | 766           'unknown browser to the trace' | 
| 741     }, | 767     }, | 
| 742     'memory:unknown_browser:all_processes:dump_count:light': { | 768     'memory:unknown_browser:all_processes:dump_count:light': { | 
| 743       value: 1, | 769       value: 1, | 
| 744       unit: unitlessNumber_smallerIsBetter, | 770       unit: unitlessNumber_smallerIsBetter, | 
| 745       description: 'total number of light memory dumps added by an unknown ' + | 771       description: 'total number of light memory dumps added by an unknown ' + | 
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1134           unit: sizeInBytes_smallerIsBetter, | 1160           unit: sizeInBytes_smallerIsBetter, | 
| 1135           description: 'proportional resident size (PSS) of the native heap ' + | 1161           description: 'proportional resident size (PSS) of the native heap ' + | 
| 1136               'in renderer processes in an unknown browser' | 1162               'in renderer processes in an unknown browser' | 
| 1137         } | 1163         } | 
| 1138   }); | 1164   }); | 
| 1139 | 1165 | 
| 1140   memoryMetricTest('combined_chrome', function(model) { | 1166   memoryMetricTest('combined_chrome', function(model) { | 
| 1141     var pBrowser = createChromeBrowserProcess(model); | 1167     var pBrowser = createChromeBrowserProcess(model); | 
| 1142 | 1168 | 
| 1143     // Timestamp 1. | 1169     // Timestamp 1. | 
| 1144     var gmd1 = addGlobalMemoryDump(model, 10, DETAILED); | 1170     var gmd1 = addGlobalMemoryDump(model, {ts: 10, levelOfDetail: DETAILED}); | 
| 1145     var pmdBrowser1 = addProcessMemoryDump(gmd1, pBrowser, 10); | 1171     var pmdBrowser1 = addProcessMemoryDump(gmd1, pBrowser, {ts: 10}); | 
| 1146     pmdBrowser1.vmRegions = VMRegionClassificationNode.fromRegions([ | 1172     pmdBrowser1.vmRegions = VMRegionClassificationNode.fromRegions([ | 
| 1147       new VMRegion(0xABCD, 128, 0, '/dev/ashmem/dalvik-non moving space', | 1173       new VMRegion(0xABCD, 128, 0, '/dev/ashmem/dalvik-non moving space', | 
| 1148           { 'privateDirtyResident': 100 }) | 1174           {privateDirtyResident: 100}) | 
| 1149     ]); | 1175     ]); | 
| 1150 | 1176 | 
| 1151     // Timestamp 2 (light global memory dump, so it should be skipped for | 1177     // Timestamp 2 (light global memory dump, so it should be skipped for | 
| 1152     // mmaps_* values). | 1178     // mmaps_* values). | 
| 1153     var gmd2 = addGlobalMemoryDump(model, 20, LIGHT); | 1179     var gmd2 = addGlobalMemoryDump(model, {ts: 20, levelOfDetail: LIGHT}); | 
| 1154     var pmdBrowser2 = addProcessMemoryDump(gmd2, pBrowser, 20); | 1180     var pmdBrowser2 = addProcessMemoryDump(gmd2, pBrowser, {ts: 20}); | 
| 1155     pmdBrowser2.memoryAllocatorDumps = [ | 1181     pmdBrowser2.memoryAllocatorDumps = [ | 
| 1156       newAllocatorDump(pmdBrowser2, 'malloc', { size: 32 }) | 1182       newAllocatorDump(pmdBrowser2, 'malloc', {numerics: {size: 32}}) | 
| 1157     ]; | 1183     ]; | 
| 1158 | 1184 | 
| 1159     // Timestamp 3. | 1185     // Timestamp 3. | 
| 1160     var gmd3 = addGlobalMemoryDump(model, 30, DETAILED); | 1186     var gmd3 = addGlobalMemoryDump(model, {ts: 30, levelOfDetail: DETAILED}); | 
| 1161     var pmdBrowser3 = addProcessMemoryDump(gmd3, pBrowser, 30); | 1187     var pmdBrowser3 = addProcessMemoryDump(gmd3, pBrowser, {ts: 30}); | 
| 1162     pmdBrowser3.memoryAllocatorDumps = [ | 1188     pmdBrowser3.memoryAllocatorDumps = [ | 
| 1163       newAllocatorDump(pmdBrowser3, 'malloc', { size: 48 }) | 1189       newAllocatorDump(pmdBrowser3, 'malloc', {numerics: {size: 48}}) | 
| 1164     ]; | 1190     ]; | 
| 1165     pmdBrowser3.vmRegions = VMRegionClassificationNode.fromRegions([ | 1191     pmdBrowser3.vmRegions = VMRegionClassificationNode.fromRegions([ | 
| 1166       new VMRegion(0xABCD, 1024, 0, '/dev/ashmem/dalvik-non moving space', | 1192       new VMRegion(0xABCD, 1024, 0, '/dev/ashmem/dalvik-non moving space', | 
| 1167           { 'privateDirtyResident': 150 }) | 1193           {privateDirtyResident: 150}) | 
| 1168     ]); | 1194     ]); | 
| 1169   }, { | 1195   }, {} /* opt_options */, { | 
| 1170     'memory:chrome:all_processes:dump_count:detailed': { | 1196     'memory:chrome:all_processes:dump_count:detailed': { | 
| 1171       value: 2, | 1197       value: 2, | 
| 1172       unit: unitlessNumber_smallerIsBetter, | 1198       unit: unitlessNumber_smallerIsBetter, | 
| 1173       description: 'total number of detailed memory dumps added by Chrome to ' + | 1199       description: 'total number of detailed memory dumps added by Chrome to ' + | 
| 1174           'the trace' | 1200           'the trace' | 
| 1175     }, | 1201     }, | 
| 1176     'memory:chrome:all_processes:dump_count:light': { | 1202     'memory:chrome:all_processes:dump_count:light': { | 
| 1177       value: 1, | 1203       value: 1, | 
| 1178       unit: unitlessNumber_smallerIsBetter, | 1204       unit: unitlessNumber_smallerIsBetter, | 
| 1179       description: 'total number of light memory dumps added by Chrome to ' + | 1205       description: 'total number of light memory dumps added by Chrome to ' + | 
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1357   memoryMetricTest('combined_multipleBrowsers', function(model) { | 1383   memoryMetricTest('combined_multipleBrowsers', function(model) { | 
| 1358     var pWebView = createWebViewProcess(model); | 1384     var pWebView = createWebViewProcess(model); | 
| 1359     var pChrome1 = createChromeBrowserProcess(model); | 1385     var pChrome1 = createChromeBrowserProcess(model); | 
| 1360     var pRenderer1 = createProcessWithName(model, 'Renderer'); | 1386     var pRenderer1 = createProcessWithName(model, 'Renderer'); | 
| 1361     var pGpu1 = createProcessWithName(model, 'GPU Process'); | 1387     var pGpu1 = createProcessWithName(model, 'GPU Process'); | 
| 1362     var pUnknownBrowser = createProcessWithName(model, 'Browser'); | 1388     var pUnknownBrowser = createProcessWithName(model, 'Browser'); | 
| 1363     var pChrome2 = createChromeBrowserProcess(model); | 1389     var pChrome2 = createChromeBrowserProcess(model); | 
| 1364     var pRenderer2 = createProcessWithName(model, 'Renderer'); | 1390     var pRenderer2 = createProcessWithName(model, 'Renderer'); | 
| 1365 | 1391 | 
| 1366     // Timestamp 1 (WebView). | 1392     // Timestamp 1 (WebView). | 
| 1367     var gmd1 = addGlobalMemoryDump(model, 0, LIGHT); | 1393     var gmd1 = addGlobalMemoryDump(model, {ts: 0, levelOfDetail: LIGHT}); | 
| 1368     var pmdBrowser1 = addProcessMemoryDump(gmd1, pWebView, 0); | 1394     var pmdBrowser1 = addProcessMemoryDump(gmd1, pWebView, {ts: 0}); | 
| 1369     pmdBrowser1.memoryAllocatorDumps = [ | 1395     pmdBrowser1.memoryAllocatorDumps = [ | 
| 1370       newAllocatorDump(pmdBrowser1, 'malloc', { size: 2 }), | 1396       newAllocatorDump(pmdBrowser1, 'malloc', {numerics: {size: 2}}), | 
| 1371       newAllocatorDump(pmdBrowser1, 'v8', { size: 4 }) | 1397       newAllocatorDump(pmdBrowser1, 'v8', {numerics: {size: 4}}) | 
| 1372     ]; | 1398     ]; | 
| 1373 | 1399 | 
| 1374     // Timestamp 2 (Chrome 1 + Renderer + GPU Process). | 1400     // Timestamp 2 (Chrome 1 + Renderer + GPU Process). | 
| 1375     var gmd2 = addGlobalMemoryDump(model, 10, DETAILED); | 1401     var gmd2 = addGlobalMemoryDump(model, {ts: 10, levelOfDetail: DETAILED}); | 
| 1376     var pmdBrowser2 = addProcessMemoryDump(gmd2, pChrome1, 12); | 1402     var pmdBrowser2 = addProcessMemoryDump(gmd2, pChrome1, {ts: 12}); | 
| 1377     pmdBrowser2.vmRegions = VMRegionClassificationNode.fromRegions([ | 1403     pmdBrowser2.vmRegions = VMRegionClassificationNode.fromRegions([ | 
| 1378       new VMRegion(0xABCD, 9999, 0, '/dev/ashmem/dalvik-non moving space', | 1404       new VMRegion(0xABCD, 9999, 0, '/dev/ashmem/dalvik-non moving space', | 
| 1379           { 'privateDirtyResident': 8 }) | 1405           {privateDirtyResident: 8}) | 
| 1380     ]); | 1406     ]); | 
| 1381     var pmdGpu2 = addProcessMemoryDump(gmd2, pGpu1, 8); | 1407     var pmdGpu2 = addProcessMemoryDump(gmd2, pGpu1, {ts: 8}); | 
| 1382     pmdGpu2.vmRegions = VMRegionClassificationNode.fromRegions([ | 1408     pmdGpu2.vmRegions = VMRegionClassificationNode.fromRegions([ | 
| 1383       new VMRegion(0xABCD, 9999, 0, '/dev/ashmem/dalvik-non moving space', | 1409       new VMRegion(0xABCD, 9999, 0, '/dev/ashmem/dalvik-non moving space', | 
| 1384           { 'privateDirtyResident': 16 }) | 1410           {privateDirtyResident: 16}) | 
| 1385     ]); | 1411     ]); | 
| 1386     var pmdRenderer2 = addProcessMemoryDump(gmd2, pRenderer1, 8); | 1412     var pmdRenderer2 = addProcessMemoryDump(gmd2, pRenderer1, {ts: 8}); | 
| 1387     pmdRenderer2.memoryAllocatorDumps = [ | 1413     pmdRenderer2.memoryAllocatorDumps = [ | 
| 1388       newAllocatorDump(pmdBrowser2, 'malloc', { size: 32 }) | 1414       newAllocatorDump(pmdBrowser2, 'malloc', {numerics: {size: 32}}) | 
| 1389     ]; | 1415     ]; | 
| 1390 | 1416 | 
| 1391     // Timestamp 3 (Chrome 2). | 1417     // Timestamp 3 (Chrome 2). | 
| 1392     var gmd3 = addGlobalMemoryDump(model, 20, DETAILED); | 1418     var gmd3 = addGlobalMemoryDump(model, {ts: 20, levelOfDetail: DETAILED}); | 
| 1393     var pmdBrowser3 = addProcessMemoryDump(gmd3, pChrome2, 20); | 1419     var pmdBrowser3 = addProcessMemoryDump(gmd3, pChrome2, {ts: 20}); | 
| 1394     pmdBrowser3.memoryAllocatorDumps = [ | 1420     pmdBrowser3.memoryAllocatorDumps = [ | 
| 1395       newAllocatorDump(pmdBrowser3, 'malloc', { size: 64 }), | 1421       newAllocatorDump(pmdBrowser3, 'malloc', {numerics: {size: 64}}), | 
| 1396       newAllocatorDump(pmdBrowser3, 'sqlite', { size: 128 }), | 1422       newAllocatorDump(pmdBrowser3, 'sqlite', {numerics: {size: 128}}), | 
| 1397       newAllocatorDump(pmdBrowser3, 'discardable', { | 1423       newAllocatorDump(pmdBrowser3, 'discardable', {numerics: { | 
| 1398         size: 8388608, | 1424         size: 8388608, | 
| 1399         locked_size: 4194304 | 1425         locked_size: 4194304 | 
| 1400       }) | 1426       }}) | 
| 1401     ]; | 1427     ]; | 
| 1402     pmdBrowser3.vmRegions = VMRegionClassificationNode.fromRegions([ | 1428     pmdBrowser3.vmRegions = VMRegionClassificationNode.fromRegions([ | 
| 1403       new VMRegion(0xABCD, 99, 0, '/dev/ashmem/dalvik-non moving space', | 1429       new VMRegion(0xABCD, 99, 0, '/dev/ashmem/dalvik-non moving space', | 
| 1404           { 'privateDirtyResident': 256 }) | 1430           {privateDirtyResident: 256}) | 
| 1405     ]); | 1431     ]); | 
| 1406 | 1432 | 
| 1407     // Timestamp 4 (Chrome 2 + Renderer). | 1433     // Timestamp 4 (Chrome 2 + Renderer). | 
| 1408     var gmd4 = addGlobalMemoryDump(model, 30, LIGHT); | 1434     var gmd4 = addGlobalMemoryDump(model, {ts: 30, levelOfDetail: LIGHT}); | 
| 1409     var pmdBrowser4 = addProcessMemoryDump(gmd4, pChrome2, 28); | 1435     var pmdBrowser4 = addProcessMemoryDump(gmd4, pChrome2, {ts: 28}); | 
| 1410     pmdBrowser4.memoryAllocatorDumps = [ | 1436     pmdBrowser4.memoryAllocatorDumps = [ | 
| 1411       newAllocatorDump(pmdBrowser4, 'malloc', { size: 512 }), | 1437       newAllocatorDump(pmdBrowser4, 'malloc', {numerics: {size: 512}}), | 
| 1412       newAllocatorDump(pmdBrowser3, 'discardable', { size: 16777216 }) | 1438       newAllocatorDump(pmdBrowser3, 'discardable', {numerics: {size: 16777216}}) | 
| 1413     ]; | 1439     ]; | 
| 1414     var pmdRenderer4 = addProcessMemoryDump(gmd4, pRenderer2, 32); | 1440     var pmdRenderer4 = addProcessMemoryDump(gmd4, pRenderer2, {ts: 32}); | 
| 1415     pmdRenderer4.memoryAllocatorDumps = [ | 1441     pmdRenderer4.memoryAllocatorDumps = [ | 
| 1416       newAllocatorDump(pmdRenderer4, 'malloc', { size: 1024 }), | 1442       newAllocatorDump(pmdRenderer4, 'malloc', {numerics: {size: 1024}}), | 
| 1417       newAllocatorDump(pmdRenderer4, 'v8', { size: 2048 }) | 1443       newAllocatorDump(pmdRenderer4, 'v8', {numerics: {size: 2048}}) | 
| 1418     ]; | 1444     ]; | 
| 1419 | 1445 | 
| 1420     // Timestamp 5 (Unknown browser). | 1446     // Timestamp 5 (Unknown browser). | 
| 1421     var gmd5 = addGlobalMemoryDump(model, 40, LIGHT); | 1447     var gmd5 = addGlobalMemoryDump(model, {ts: 40, levelOfDetail: LIGHT}); | 
| 1422     var pmdBrowser5 = addProcessMemoryDump(gmd5, pUnknownBrowser, 40); | 1448     var pmdBrowser5 = addProcessMemoryDump(gmd5, pUnknownBrowser, {ts: 40}); | 
| 1423     pmdBrowser5.memoryAllocatorDumps = [ | 1449     pmdBrowser5.memoryAllocatorDumps = [ | 
| 1424       newAllocatorDump(pmdBrowser5, 'malloc', { size: 4096 }), | 1450       newAllocatorDump(pmdBrowser5, 'malloc', {numerics: {size: 4096}}), | 
| 1425       newAllocatorDump(pmdBrowser5, 'sqlite', { size: 8192 }), | 1451       newAllocatorDump(pmdBrowser5, 'sqlite', {numerics: {size: 8192}}), | 
| 1426     ]; | 1452     ]; | 
| 1427 | 1453 | 
| 1428     // Timestamp 6 (WebView). | 1454     // Timestamp 6 (WebView). | 
| 1429     var gmd6 = addGlobalMemoryDump(model, 50, DETAILED); | 1455     var gmd6 = addGlobalMemoryDump(model, {ts: 50, levelOfDetail: DETAILED}); | 
| 1430     var pmdBrowser6 = addProcessMemoryDump(gmd6, pWebView, 50); | 1456     var pmdBrowser6 = addProcessMemoryDump(gmd6, pWebView, {ts: 50}); | 
| 1431     pmdBrowser6.memoryAllocatorDumps = [ | 1457     pmdBrowser6.memoryAllocatorDumps = (function() { | 
| 1432       newAllocatorDump(pmdBrowser6, 'malloc', { size: 16384 }), | 1458       var mallocDump = newAllocatorDump(pmdBrowser6, 'malloc', | 
| 1433       newAllocatorDump(pmdBrowser6, 'v8', { | 1459           {numerics: {size: 16384}}); | 
| 1434         'allocated_objects_size': 32768, | 1460       var v8Dump = newAllocatorDump(pmdBrowser6, 'v8', {numerics: { | 
| 1435         'code_and_metadata_size': 33554432, | 1461         allocated_objects_size: 32768, | 
| 1436         'size': 67108864 | 1462         code_and_metadata_size: 33554432, | 
| 1437       }) | 1463         size: 67108864 | 
| 1438     ]; | 1464       }}); | 
|  | 1465       var isolateDump = addChildDump(v8Dump, 'isolate'); | 
|  | 1466       addChildDump(isolateDump, 'malloc', {numerics: {size: 1 }}); | 
|  | 1467       return [mallocDump, v8Dump]; | 
|  | 1468     })(); | 
| 1439     pmdBrowser6.vmRegions = VMRegionClassificationNode.fromRegions([ | 1469     pmdBrowser6.vmRegions = VMRegionClassificationNode.fromRegions([ | 
| 1440       new VMRegion(0xABCD, 99999, 0, '/dev/ashmem/dalvik-non moving space', | 1470       new VMRegion(0xABCD, 99999, 0, '/dev/ashmem/dalvik-non moving space', | 
| 1441           { 'privateDirtyResident': 65536 }) | 1471           {privateDirtyResident: 65536}) | 
| 1442     ]); | 1472     ]); | 
| 1443 | 1473 | 
| 1444     // Timestamp 7 (Chrome 1 + GPU Process). | 1474     // Timestamp 7 (Chrome 1 + GPU Process). | 
| 1445     var gmd7 = addGlobalMemoryDump(model, 60, DETAILED); | 1475     var gmd7 = addGlobalMemoryDump(model, {ts: 60, levelOfDetail: DETAILED}); | 
| 1446     var pmdBrowser7 = addProcessMemoryDump(gmd7, pChrome1, 63); | 1476     var pmdBrowser7 = addProcessMemoryDump(gmd7, pChrome1, {ts: 63}); | 
| 1447     pmdBrowser7.memoryAllocatorDumps = [ | 1477     pmdBrowser7.memoryAllocatorDumps = [ | 
| 1448       newAllocatorDump(pmdBrowser4, 'malloc', { size: 131072 }), | 1478       newAllocatorDump(pmdBrowser4, 'malloc', {numerics: {size: 131072}}), | 
| 1449       newAllocatorDump(pmdBrowser4, 'sqlite', { size: 262144 }) | 1479       newAllocatorDump(pmdBrowser4, 'sqlite', {numerics: {size: 262144}}) | 
| 1450     ]; | 1480     ]; | 
| 1451     pmdBrowser7.vmRegions = VMRegionClassificationNode.fromRegions([ | 1481     pmdBrowser7.vmRegions = VMRegionClassificationNode.fromRegions([ | 
| 1452       new VMRegion(0xABCD, 999999, 0, '/dev/ashmem/dalvik-non moving space', | 1482       new VMRegion(0xABCD, 999999, 0, '/dev/ashmem/dalvik-non moving space', | 
| 1453           { 'privateDirtyResident': 524288 }) | 1483           {privateDirtyResident: 524288}) | 
| 1454     ]); | 1484     ]); | 
| 1455     var pmdGpu7 = addProcessMemoryDump(gmd7, pGpu1, 57); | 1485     var pmdGpu7 = addProcessMemoryDump(gmd7, pGpu1, {ts: 57}); | 
| 1456     pmdGpu7.memoryAllocatorDumps = (function() { | 1486     pmdGpu7.memoryAllocatorDumps = (function() { | 
| 1457       var gpuDump = newAllocatorDump(pmdGpu7, 'gpu', { 'size': 1048576 }); | 1487       var gpuDump = newAllocatorDump(pmdGpu7, 'gpu', | 
|  | 1488           {numerics: {size: 1048576}}); | 
| 1458       var memtrackDump = addChildDump(gpuDump, 'android_memtrack'); | 1489       var memtrackDump = addChildDump(gpuDump, 'android_memtrack'); | 
| 1459       addChildDump(memtrackDump, 'gl', { 'memtrack_pss': 2097152 }); | 1490       addChildDump(memtrackDump, 'gl', {numerics: {memtrack_pss: 2097152}}); | 
| 1460       return [gpuDump]; | 1491       return [gpuDump]; | 
| 1461     })(); | 1492     })(); | 
| 1462   }, { | 1493   }, undefined /* opt_options */, { | 
| 1463     // WebView (GMD1, GMD6). | 1494     // WebView (GMD1, GMD6). | 
| 1464     'memory:webview:all_processes:dump_count:detailed': { | 1495     'memory:webview:all_processes:dump_count:detailed': { | 
| 1465       value: 1, | 1496       value: 1, | 
| 1466       unit: unitlessNumber_smallerIsBetter, | 1497       unit: unitlessNumber_smallerIsBetter, | 
| 1467       description: 'total number of detailed memory dumps added by WebView ' + | 1498       description: 'total number of detailed memory dumps added by WebView ' + | 
| 1468           'to the trace' | 1499           'to the trace' | 
| 1469     }, | 1500     }, | 
| 1470     'memory:webview:all_processes:dump_count:light': { | 1501     'memory:webview:all_processes:dump_count:light': { | 
| 1471       value: 1, | 1502       value: 1, | 
| 1472       unit: unitlessNumber_smallerIsBetter, | 1503       unit: unitlessNumber_smallerIsBetter, | 
| (...skipping 27 matching lines...) Expand all  Loading... | 
| 1500       value: [0, 32768], | 1531       value: [0, 32768], | 
| 1501       unit: sizeInBytes_smallerIsBetter, | 1532       unit: sizeInBytes_smallerIsBetter, | 
| 1502       description: 'total size of all allocated objects reported by Chrome ' + | 1533       description: 'total size of all allocated objects reported by Chrome ' + | 
| 1503           'for all processes in WebView' | 1534           'for all processes in WebView' | 
| 1504     }, | 1535     }, | 
| 1505     'memory:webview:all_processes:reported_by_chrome:malloc:effective_size': { | 1536     'memory:webview:all_processes:reported_by_chrome:malloc:effective_size': { | 
| 1506       value: [2, 16384], | 1537       value: [2, 16384], | 
| 1507       unit: sizeInBytes_smallerIsBetter, | 1538       unit: sizeInBytes_smallerIsBetter, | 
| 1508       description: 'effective size of malloc in all processes in WebView' | 1539       description: 'effective size of malloc in all processes in WebView' | 
| 1509     }, | 1540     }, | 
|  | 1541     'memory:webview:all_processes:reported_by_chrome:v8:allocated_by_malloc:effe
      ctive_size': | 
|  | 1542         { | 
|  | 1543           value: [0, 1], | 
|  | 1544           unit: sizeInBytes_smallerIsBetter, | 
|  | 1545           description: 'effective size of objects allocated by malloc for v8 ' + | 
|  | 1546               'in all processes in WebView' | 
|  | 1547         }, | 
| 1510     'memory:webview:all_processes:reported_by_chrome:v8:effective_size': { | 1548     'memory:webview:all_processes:reported_by_chrome:v8:effective_size': { | 
| 1511       value: [4, 67108864], | 1549       value: [4, 67108864], | 
| 1512       unit: sizeInBytes_smallerIsBetter, | 1550       unit: sizeInBytes_smallerIsBetter, | 
| 1513       description: 'effective size of v8 in all processes in WebView' | 1551       description: 'effective size of v8 in all processes in WebView' | 
| 1514     }, | 1552     }, | 
| 1515     'memory:webview:all_processes:reported_by_chrome:v8:code_and_metadata_size': | 1553     'memory:webview:all_processes:reported_by_chrome:v8:code_and_metadata_size': | 
| 1516         { | 1554         { | 
| 1517           value: [33554432], | 1555           value: [33554432], | 
| 1518           unit: sizeInBytes_smallerIsBetter, | 1556           unit: sizeInBytes_smallerIsBetter, | 
| 1519           description: 'size of v8 code and metadata in all processes in ' + | 1557           description: 'size of v8 code and metadata in all processes in ' + | 
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1617           value: [33554432], | 1655           value: [33554432], | 
| 1618           unit: sizeInBytes_smallerIsBetter, | 1656           unit: sizeInBytes_smallerIsBetter, | 
| 1619           description: 'total size of code and metadata reported by Chrome ' + | 1657           description: 'total size of code and metadata reported by Chrome ' + | 
| 1620               'for the browser process in WebView' | 1658               'for the browser process in WebView' | 
| 1621         }, | 1659         }, | 
| 1622     'memory:webview:browser_process:reported_by_chrome:malloc:effective_size': { | 1660     'memory:webview:browser_process:reported_by_chrome:malloc:effective_size': { | 
| 1623       value: [2, 16384], | 1661       value: [2, 16384], | 
| 1624       unit: sizeInBytes_smallerIsBetter, | 1662       unit: sizeInBytes_smallerIsBetter, | 
| 1625       description: 'effective size of malloc in the browser process in WebView' | 1663       description: 'effective size of malloc in the browser process in WebView' | 
| 1626     }, | 1664     }, | 
|  | 1665     'memory:webview:browser_process:reported_by_chrome:v8:allocated_by_malloc:ef
      fective_size': | 
|  | 1666         { | 
|  | 1667           value: [0, 1], | 
|  | 1668           unit: sizeInBytes_smallerIsBetter, | 
|  | 1669           description: 'effective size of objects allocated by malloc for v8 ' + | 
|  | 1670               'in the browser process in WebView' | 
|  | 1671         }, | 
| 1627     'memory:webview:browser_process:reported_by_chrome:v8:effective_size': { | 1672     'memory:webview:browser_process:reported_by_chrome:v8:effective_size': { | 
| 1628       value: [4, 67108864], | 1673       value: [4, 67108864], | 
| 1629       unit: sizeInBytes_smallerIsBetter, | 1674       unit: sizeInBytes_smallerIsBetter, | 
| 1630       description: 'effective size of v8 in the browser process in WebView' | 1675       description: 'effective size of v8 in the browser process in WebView' | 
| 1631     }, | 1676     }, | 
| 1632     'memory:webview:browser_process:reported_by_chrome:v8:allocated_objects_size
      ': | 1677     'memory:webview:browser_process:reported_by_chrome:v8:allocated_objects_size
      ': | 
| 1633         { | 1678         { | 
| 1634           value: [0, 32768], | 1679           value: [0, 32768], | 
| 1635           unit: sizeInBytes_smallerIsBetter, | 1680           unit: sizeInBytes_smallerIsBetter, | 
| 1636           description: 'size of all objects allocated by v8 in the browser ' + | 1681           description: 'size of all objects allocated by v8 in the browser ' + | 
| (...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2447         }, | 2492         }, | 
| 2448     'memory:unknown_browser:browser_process:reported_by_chrome:sqlite:effective_
      size': | 2493     'memory:unknown_browser:browser_process:reported_by_chrome:sqlite:effective_
      size': | 
| 2449         { | 2494         { | 
| 2450           value: [8192], | 2495           value: [8192], | 
| 2451           unit: sizeInBytes_smallerIsBetter, | 2496           unit: sizeInBytes_smallerIsBetter, | 
| 2452           description: 'effective size of sqlite in the browser process in ' + | 2497           description: 'effective size of sqlite in the browser process in ' + | 
| 2453               'an unknown browser' | 2498               'an unknown browser' | 
| 2454         } | 2499         } | 
| 2455   }); | 2500   }); | 
| 2456 | 2501 | 
|  | 2502   memoryMetricTest('rangeOfInterest', function(model) { | 
|  | 2503     var pChrome = createChromeBrowserProcess(model); | 
|  | 2504     var pWebView = createWebViewProcess(model); | 
|  | 2505 | 
|  | 2506     // Chrome: only the LIGHT dumps should be kept. | 
|  | 2507     addProcessMemoryDump(addGlobalMemoryDump( | 
|  | 2508         model, {ts: 5, duration: 4, levelOfDetail: DETAILED}), pChrome); | 
|  | 2509     addProcessMemoryDump(addGlobalMemoryDump( | 
|  | 2510         model, {ts: 10, duration: 2, levelOfDetail: LIGHT}), pChrome); | 
|  | 2511     addProcessMemoryDump(addGlobalMemoryDump( | 
|  | 2512         model, {ts: 13, duration: 3, levelOfDetail: LIGHT}), pChrome); | 
|  | 2513     addProcessMemoryDump(addGlobalMemoryDump( | 
|  | 2514         model, {ts: 20, duration: 1, levelOfDetail: LIGHT}), pChrome); | 
|  | 2515     addProcessMemoryDump(addGlobalMemoryDump( | 
|  | 2516         model, {ts: 22, duration: 5, levelOfDetail: DETAILED}), pChrome); | 
|  | 2517 | 
|  | 2518     // WebView: only the DETAILED dumps should be kept. | 
|  | 2519     addProcessMemoryDump(addGlobalMemoryDump( | 
|  | 2520         model, {ts: 4, duration: 1, levelOfDetail: LIGHT}), pWebView); | 
|  | 2521     addProcessMemoryDump(addGlobalMemoryDump( | 
|  | 2522         model, {ts: 5, duration: 5, levelOfDetail: DETAILED}), pWebView); | 
|  | 2523     addProcessMemoryDump(addGlobalMemoryDump( | 
|  | 2524         model, {ts: 10, duration: 0, levelOfDetail: DETAILED}), pWebView); | 
|  | 2525     addProcessMemoryDump(addGlobalMemoryDump( | 
|  | 2526         model, {ts: 11, duration: 7, levelOfDetail: DETAILED}), pWebView); | 
|  | 2527     addProcessMemoryDump(addGlobalMemoryDump( | 
|  | 2528         model, {ts: 19, duration: 2, levelOfDetail: DETAILED}), pWebView); | 
|  | 2529     addProcessMemoryDump(addGlobalMemoryDump( | 
|  | 2530         model, {ts: 21, duration: 5, levelOfDetail: LIGHT}), pWebView); | 
|  | 2531 | 
|  | 2532     // Unknown browser: only the LIGHT dump should be kept. | 
|  | 2533     addGlobalMemoryDump(model, {ts: 5, duration: 3, levelOfDetail: DETAILED}); | 
|  | 2534     addGlobalMemoryDump(model, {ts: 9, duration: 12, levelOfDetail: LIGHT}); | 
|  | 2535     addGlobalMemoryDump(model, {ts: 22, duration: 3, levelOfDetail: DETAILED}); | 
|  | 2536   }, {  /* opt_options */ | 
|  | 2537     rangeOfInterest: tr.b.Range.fromExplicitRange(10, 20) | 
|  | 2538   }, { | 
|  | 2539     'memory:chrome:all_processes:dump_count': { | 
|  | 2540       value: 3, | 
|  | 2541       unit: unitlessNumber_smallerIsBetter, | 
|  | 2542       description: 'total number of all memory dumps added by Chrome to the ' + | 
|  | 2543           'trace' | 
|  | 2544     }, | 
|  | 2545     'memory:chrome:all_processes:dump_count:detailed': { | 
|  | 2546       value: 0, | 
|  | 2547       unit: unitlessNumber_smallerIsBetter, | 
|  | 2548       description: 'total number of detailed memory dumps added by Chrome to ' + | 
|  | 2549           'the trace' | 
|  | 2550     }, | 
|  | 2551     'memory:chrome:all_processes:dump_count:light': { | 
|  | 2552       value: 3, | 
|  | 2553       unit: unitlessNumber_smallerIsBetter, | 
|  | 2554       description: 'total number of light memory dumps added by Chrome to ' + | 
|  | 2555           'the trace' | 
|  | 2556     }, | 
|  | 2557     'memory:chrome:all_processes:process_count': { | 
|  | 2558       value: [1, 1, 1], | 
|  | 2559       unit: unitlessNumber_smallerIsBetter, | 
|  | 2560       description: 'total number of all processes in Chrome' | 
|  | 2561     }, | 
|  | 2562     'memory:chrome:browser_process:process_count': { | 
|  | 2563       value: [1, 1, 1], | 
|  | 2564       unit: unitlessNumber_smallerIsBetter, | 
|  | 2565       description: 'total number of browser processes in Chrome' | 
|  | 2566     }, | 
|  | 2567 | 
|  | 2568     'memory:webview:all_processes:dump_count': { | 
|  | 2569       value: 4, | 
|  | 2570       unit: unitlessNumber_smallerIsBetter, | 
|  | 2571       description: 'total number of all memory dumps added by WebView to the ' + | 
|  | 2572           'trace' | 
|  | 2573     }, | 
|  | 2574     'memory:webview:all_processes:dump_count:detailed': { | 
|  | 2575       value: 4, | 
|  | 2576       unit: unitlessNumber_smallerIsBetter, | 
|  | 2577       description: 'total number of detailed memory dumps added by WebView ' + | 
|  | 2578           'to the trace' | 
|  | 2579     }, | 
|  | 2580     'memory:webview:all_processes:dump_count:light': { | 
|  | 2581       value: 0, | 
|  | 2582       unit: unitlessNumber_smallerIsBetter, | 
|  | 2583       description: 'total number of light memory dumps added by WebView to ' + | 
|  | 2584           'the trace' | 
|  | 2585     }, | 
|  | 2586     'memory:webview:all_processes:process_count': { | 
|  | 2587       value: [1, 1, 1, 1], | 
|  | 2588       unit: unitlessNumber_smallerIsBetter, | 
|  | 2589       description: 'total number of all processes in WebView' | 
|  | 2590     }, | 
|  | 2591     'memory:webview:all_processes:reported_by_os:private_dirty_size': { | 
|  | 2592       value: [0, 0, 0, 0], | 
|  | 2593       unit: sizeInBytes_smallerIsBetter, | 
|  | 2594       description: 'total private dirty size reported by the OS for all ' + | 
|  | 2595           'processes in WebView' | 
|  | 2596     }, | 
|  | 2597     'memory:webview:all_processes:reported_by_os:proportional_resident_size': { | 
|  | 2598       value: [0, 0, 0, 0], | 
|  | 2599       unit: sizeInBytes_smallerIsBetter, | 
|  | 2600       description: 'total proportional resident size (PSS) reported by the ' + | 
|  | 2601           'OS for all processes in WebView' | 
|  | 2602     }, | 
|  | 2603     'memory:webview:all_processes:reported_by_os:system_memory:ashmem:private_di
      rty_size': | 
|  | 2604         { | 
|  | 2605           value: [0, 0, 0, 0], | 
|  | 2606           unit: sizeInBytes_smallerIsBetter, | 
|  | 2607           description: 'private dirty size of ashmem in all processes in ' + | 
|  | 2608               'WebView' | 
|  | 2609         }, | 
|  | 2610     'memory:webview:all_processes:reported_by_os:system_memory:ashmem:proportion
      al_resident_size': | 
|  | 2611         { | 
|  | 2612           value: [0, 0, 0, 0], | 
|  | 2613           unit: sizeInBytes_smallerIsBetter, | 
|  | 2614           description: 'proportional resident size (PSS) of ashmem in all ' + | 
|  | 2615               'processes in WebView' | 
|  | 2616         }, | 
|  | 2617     'memory:webview:all_processes:reported_by_os:system_memory:java_heap:private
      _dirty_size': | 
|  | 2618         { | 
|  | 2619           value: [0, 0, 0, 0], | 
|  | 2620           unit: sizeInBytes_smallerIsBetter, | 
|  | 2621           description: 'private dirty size of the Java heap in all processes ' + | 
|  | 2622               'in WebView' | 
|  | 2623         }, | 
|  | 2624     'memory:webview:all_processes:reported_by_os:system_memory:java_heap:proport
      ional_resident_size': | 
|  | 2625         { | 
|  | 2626           value: [0, 0, 0, 0], | 
|  | 2627           unit: sizeInBytes_smallerIsBetter, | 
|  | 2628           description: 'proportional resident size (PSS) of the Java heap in ' + | 
|  | 2629               'all processes in WebView' | 
|  | 2630         }, | 
|  | 2631     'memory:webview:all_processes:reported_by_os:system_memory:native_heap:priva
      te_dirty_size': | 
|  | 2632         { | 
|  | 2633           value: [0, 0, 0, 0], | 
|  | 2634           unit: sizeInBytes_smallerIsBetter, | 
|  | 2635           description: 'private dirty size of the native heap in all ' + | 
|  | 2636               'processes in WebView' | 
|  | 2637         }, | 
|  | 2638     'memory:webview:all_processes:reported_by_os:system_memory:native_heap:propo
      rtional_resident_size': | 
|  | 2639         { | 
|  | 2640           value: [0, 0, 0, 0], | 
|  | 2641           unit: sizeInBytes_smallerIsBetter, | 
|  | 2642           description: 'proportional resident size (PSS) of the native heap ' + | 
|  | 2643               'in all processes in WebView' | 
|  | 2644         }, | 
|  | 2645     'memory:webview:all_processes:reported_by_os:system_memory:private_dirty_siz
      e': | 
|  | 2646         { | 
|  | 2647           value: [0, 0, 0, 0], | 
|  | 2648           unit: sizeInBytes_smallerIsBetter, | 
|  | 2649           description: 'total private dirty size of system memory (RAM) used ' + | 
|  | 2650               'by all processes in WebView' | 
|  | 2651         }, | 
|  | 2652     'memory:webview:all_processes:reported_by_os:system_memory:proportional_resi
      dent_size': | 
|  | 2653         { | 
|  | 2654           value: [0, 0, 0, 0], | 
|  | 2655           unit: sizeInBytes_smallerIsBetter, | 
|  | 2656           description: 'total proportional resident size (PSS) of system ' + | 
|  | 2657               'memory (RAM) used by all processes in WebView' | 
|  | 2658         }, | 
|  | 2659     'memory:webview:browser_process:process_count': { | 
|  | 2660       value: [1, 1, 1, 1], | 
|  | 2661       unit: unitlessNumber_smallerIsBetter, | 
|  | 2662       description: 'total number of browser processes in WebView' | 
|  | 2663     }, | 
|  | 2664     'memory:webview:browser_process:reported_by_os:private_dirty_size': { | 
|  | 2665       value: [0, 0, 0, 0], | 
|  | 2666       unit: sizeInBytes_smallerIsBetter, | 
|  | 2667       description: 'total private dirty size reported by the OS for the ' + | 
|  | 2668           'browser process in WebView' | 
|  | 2669     }, | 
|  | 2670     'memory:webview:browser_process:reported_by_os:proportional_resident_size': | 
|  | 2671         { | 
|  | 2672           value: [0, 0, 0, 0], | 
|  | 2673           unit: sizeInBytes_smallerIsBetter, | 
|  | 2674           description: 'total proportional resident size (PSS) reported by ' + | 
|  | 2675               'the OS for the browser process in WebView' | 
|  | 2676         }, | 
|  | 2677     'memory:webview:browser_process:reported_by_os:system_memory:ashmem:private_
      dirty_size': | 
|  | 2678         { | 
|  | 2679           value: [0, 0, 0, 0], | 
|  | 2680           unit: sizeInBytes_smallerIsBetter, | 
|  | 2681           description: 'private dirty size of ashmem in the browser process ' + | 
|  | 2682               'in WebView' | 
|  | 2683         }, | 
|  | 2684     'memory:webview:browser_process:reported_by_os:system_memory:ashmem:proporti
      onal_resident_size': | 
|  | 2685         { | 
|  | 2686           value: [0, 0, 0, 0], | 
|  | 2687           unit: sizeInBytes_smallerIsBetter, | 
|  | 2688           description: 'proportional resident size (PSS) of ashmem in the ' + | 
|  | 2689               'browser process in WebView' | 
|  | 2690         }, | 
|  | 2691     'memory:webview:browser_process:reported_by_os:system_memory:java_heap:priva
      te_dirty_size': | 
|  | 2692         { | 
|  | 2693           value: [0, 0, 0, 0], | 
|  | 2694           unit: sizeInBytes_smallerIsBetter, | 
|  | 2695           description: 'private dirty size of the Java heap in the browser ' + | 
|  | 2696               'process in WebView' | 
|  | 2697         }, | 
|  | 2698     'memory:webview:browser_process:reported_by_os:system_memory:java_heap:propo
      rtional_resident_size': | 
|  | 2699         { | 
|  | 2700           value: [0, 0, 0, 0], | 
|  | 2701           unit: sizeInBytes_smallerIsBetter, | 
|  | 2702           description: 'proportional resident size (PSS) of the Java heap in ' + | 
|  | 2703               'the browser process in WebView' | 
|  | 2704         }, | 
|  | 2705     'memory:webview:browser_process:reported_by_os:system_memory:native_heap:pri
      vate_dirty_size': | 
|  | 2706         { | 
|  | 2707           value: [0, 0, 0, 0], | 
|  | 2708           unit: sizeInBytes_smallerIsBetter, | 
|  | 2709           description: 'private dirty size of the native heap in the browser ' + | 
|  | 2710               'process in WebView' | 
|  | 2711         }, | 
|  | 2712     'memory:webview:browser_process:reported_by_os:system_memory:native_heap:pro
      portional_resident_size': | 
|  | 2713         { | 
|  | 2714           value: [0, 0, 0, 0], | 
|  | 2715           unit: sizeInBytes_smallerIsBetter, | 
|  | 2716           description: 'proportional resident size (PSS) of the native heap ' + | 
|  | 2717               'in the browser process in WebView' | 
|  | 2718         }, | 
|  | 2719     'memory:webview:browser_process:reported_by_os:system_memory:private_dirty_s
      ize': | 
|  | 2720         { | 
|  | 2721           value: [0, 0, 0, 0], | 
|  | 2722           unit: sizeInBytes_smallerIsBetter, | 
|  | 2723           description: 'total private dirty size of system memory (RAM) used ' + | 
|  | 2724               'by the browser process in WebView' | 
|  | 2725         }, | 
|  | 2726     'memory:webview:browser_process:reported_by_os:system_memory:proportional_re
      sident_size': | 
|  | 2727         { | 
|  | 2728           value: [0, 0, 0, 0], | 
|  | 2729           unit: sizeInBytes_smallerIsBetter, | 
|  | 2730           description: 'total proportional resident size (PSS) of system ' + | 
|  | 2731               'memory (RAM) used by the browser process in WebView' | 
|  | 2732         }, | 
|  | 2733 | 
|  | 2734     'memory:unknown_browser:all_processes:dump_count': { | 
|  | 2735       value: 1, | 
|  | 2736       unit: unitlessNumber_smallerIsBetter, | 
|  | 2737       description: 'total number of all memory dumps added by an unknown ' + | 
|  | 2738           'browser to the trace' | 
|  | 2739     }, | 
|  | 2740     'memory:unknown_browser:all_processes:dump_count:detailed': { | 
|  | 2741       value: 0, | 
|  | 2742       unit: unitlessNumber_smallerIsBetter, | 
|  | 2743       description: 'total number of detailed memory dumps added by an ' + | 
|  | 2744           'unknown browser to the trace' | 
|  | 2745     }, | 
|  | 2746     'memory:unknown_browser:all_processes:dump_count:light': { | 
|  | 2747       value: 1, | 
|  | 2748       unit: unitlessNumber_smallerIsBetter, | 
|  | 2749       description: 'total number of light memory dumps added by an unknown ' + | 
|  | 2750           'browser to the trace' | 
|  | 2751     } | 
|  | 2752   }); | 
|  | 2753 | 
| 2457   test('dumpIdBrowserClashThrows', function() { | 2754   test('dumpIdBrowserClashThrows', function() { | 
| 2458     var model = tr.c.TestUtils.newModel(function(model) { | 2755     var model = tr.c.TestUtils.newModel(function(model) { | 
| 2459       var pWebView = createWebViewProcess(model); | 2756       var pWebView = createWebViewProcess(model); | 
| 2460       var pChrome = createChromeBrowserProcess(model); | 2757       var pChrome = createChromeBrowserProcess(model); | 
| 2461 | 2758 | 
| 2462       var gmd = addGlobalMemoryDump(model, 10); | 2759       var gmd = addGlobalMemoryDump(model, {ts: 10}); | 
| 2463       addProcessMemoryDump(gmd, pWebView, 9); | 2760       addProcessMemoryDump(gmd, pWebView, {ts: 9}); | 
| 2464       addProcessMemoryDump(gmd, pChrome, 11); | 2761       addProcessMemoryDump(gmd, pChrome, {ts: 11}); | 
| 2465     }); | 2762     }); | 
| 2466     var values = new tr.v.ValueSet(); | 2763     var values = new tr.v.ValueSet(); | 
| 2467 | 2764 | 
| 2468     assert.throws(function() { | 2765     assert.throws(function() { | 
| 2469       tr.metrics.sh.memoryMetric(values, model); | 2766       tr.metrics.sh.memoryMetric(values, model); | 
| 2470     }, 'Memory dump ID clash across multiple browsers with PIDs: 1 and 2'); | 2767     }, 'Memory dump ID clash across multiple browsers with PIDs: 1 and 2'); | 
| 2471   }); | 2768   }); | 
| 2472 }); | 2769 }); | 
| 2473 </script> | 2770 </script> | 
| OLD | NEW | 
|---|