Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 # Copyright 2012 The Chromium Authors. All rights reserved. | |
|
Sami
2015/02/17 17:14:06
year += 3 :)
ulan
2015/02/18 10:35:56
Done.
| |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 import json | |
| 6 from telemetry.page import page_test | |
| 7 from telemetry.value import histogram | |
| 8 from telemetry.value import histogram_util | |
| 9 from telemetry.value import scalar | |
| 10 | |
| 11 _NAME = 'V8.DetachedContextAgeInGC' | |
| 12 _UNITS = 'garbage_collections' | |
| 13 _DISPLAY_NAME = 'V8_DetachedContextAgeInGC' | |
| 14 _TYPE = histogram_util.RENDERER_HISTOGRAM | |
| 15 _DESCRIPTION = 'Number of GCs needed to collect detached context' | |
| 16 | |
|
Sami
2015/02/17 17:14:06
nit: add an extra blank line here.
ulan
2015/02/18 10:35:56
Done.
| |
| 17 def _MaxDetachedContextAge(histogram_data): | |
| 18 if not 'buckets' in histogram_data: | |
| 19 return 0 | |
| 20 buckets = json.loads(histogram_data)['buckets'] | |
| 21 return max(map(lambda x: x['high'], buckets)) if buckets else 0 | |
|
Sami
2015/02/17 17:14:06
nit: max(x['high'] for x in buckets) works too.
ulan
2015/02/18 10:35:55
Done.
| |
| 22 | |
| 23 | |
| 24 class V8DetachedContextAgeInGC(page_test.PageTest): | |
|
Sami
2015/02/17 17:14:06
Could you please add a unit test for this too?
ulan
2015/02/18 10:35:56
Done.
| |
| 25 def __init__(self): | |
| 26 super(V8DetachedContextAgeInGC, self).__init__('RunPageInteractions') | |
| 27 self._data_start = None | |
| 28 | |
| 29 def CustomizeBrowserOptions(self, options): | |
| 30 options.AppendExtraBrowserArgs(['--enable-stats-collection-bindings']) | |
| 31 | |
| 32 def DidNavigateToPage(self, page, tab): | |
| 33 self._data_start = histogram_util.GetHistogram(_TYPE, _NAME, tab) | |
| 34 | |
| 35 def ValidateAndMeasurePage(self, page, tab, results): | |
| 36 # Trigger GC to get histogram data. | |
| 37 # Seven GCs should be enough to collect any detached context. | |
| 38 # If a detached context survives more GCs then there is a leak. | |
| 39 for _ in xrange(8): | |
| 40 tab.CollectGarbage() | |
| 41 data = histogram_util.GetHistogram(_TYPE, _NAME, tab) | |
| 42 delta = histogram_util.SubtractHistogram(data, self._data_start) | |
| 43 value = _MaxDetachedContextAge(delta) | |
| 44 results.AddValue(scalar.ScalarValue( | |
| 45 results.current_page, _DISPLAY_NAME, _UNITS, value, | |
| 46 description=_DESCRIPTION)) | |
| OLD | NEW |