|  | # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  | from telemetry import multi_page_benchmark | 
|  |  | 
|  | MEMORY_HISTOGRAMS = [ | 
|  | {'name': 'V8.MemoryExternalFragmentationTotal', 'units': 'percent'}, | 
|  | {'name': 'V8.MemoryHeapSampleTotalCommitted', 'units': 'kb'}, | 
|  | {'name': 'V8.MemoryHeapSampleTotalUsed', 'units': 'kb'}] | 
|  |  | 
|  | class MemoryBenchmark(multi_page_benchmark.MultiPageBenchmark): | 
|  | def __init__(self): | 
|  | super(MemoryBenchmark, self).__init__('stress_memory') | 
|  |  | 
|  | def CustomizeBrowserOptions(self, options): | 
|  | options.AppendExtraBrowserArg('--dom-automation') | 
|  | # For a hard-coded set of Google pages (such as GMail), we produce custom | 
|  | # memory histograms (V8.Something_gmail) instead of the generic histograms | 
|  | # (V8.Something), if we detect that a renderer is only rendering this page | 
|  | # and no other pages. For this test, we need to disable histogram | 
|  | # customizing, so that we get the same generic histograms produced for all | 
|  | # pages. | 
|  | options.AppendExtraBrowserArg('--disable-histogram-customizer') | 
|  |  | 
|  | def CanRunForPage(self, page): | 
|  | return hasattr(page, 'stress_memory') | 
|  |  | 
|  | def MeasurePage(self, page, tab, results): | 
|  | for histogram in MEMORY_HISTOGRAMS: | 
|  | name = histogram['name'] | 
|  | data = tab.runtime.Evaluate( | 
|  | 'window.domAutomationController.getHistogram ? ' | 
|  | 'window.domAutomationController.getHistogram("%s") : ""' % name) | 
|  | if data: | 
|  | results.Add(name.replace('.', '_'), histogram['units'], data, | 
|  | data_type='histogram') |