12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# found in the LICENSE file. 43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 53240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochfrom metrics import memory 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)from telemetry.page import page_measurement 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass Memory(page_measurement.PageMeasurement): 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def __init__(self): 109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch super(Memory, self).__init__('stress_memory') 113240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch self._memory_metric = None 123240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 133240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch def DidStartBrowser(self, browser): 143240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch self._memory_metric = memory.MemoryMetric(browser) 153240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def DidNavigateToPage(self, page, tab): 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self._memory_metric.Start(page, tab) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def CustomizeBrowserOptions(self, options): 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) memory.MemoryMetric.CustomizeBrowserOptions(options) 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) # Since this is a memory benchmark, we want to sample memory histograms at 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) # a high frequency. 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) options.AppendExtraBrowserArgs('--memory-metrics') 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def CanRunForPage(self, page): 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return hasattr(page, 'stress_memory') 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def MeasurePage(self, page, tab, results): 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self._memory_metric.Stop(page, tab) 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self._memory_metric.AddResults(tab, results) 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if tab.browser.is_profiler_active('tcmalloc-heap'): 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) # The tcmalloc_heap_profiler dumps files at regular 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) # intervals (~20 secs). 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) # This is a minor optimization to ensure it'll dump the last file when 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) # the test completes. 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) tab.ExecuteJavaScript(""" 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (chrome && chrome.memoryBenchmarking) { 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) chrome.memoryBenchmarking.heapProfilerDump('renderer', 'final'); 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) chrome.memoryBenchmarking.heapProfilerDump('browser', 'final'); 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) """) 433240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) def DidRunTest(self, browser, results): 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self._memory_metric.AddSummaryResults(results) 46