Chromium Code Reviews| Index: tools/perf/measurements/oilpan_gc_times.py |
| diff --git a/tools/perf/measurements/oilpan_gc_times.py b/tools/perf/measurements/oilpan_gc_times.py |
| index 99c499b9be715caa2c58be16072c0437b03438b0..d4e6337e070c57ab63f8e8380625c8f0c0b2cbc7 100644 |
| --- a/tools/perf/measurements/oilpan_gc_times.py |
| +++ b/tools/perf/measurements/oilpan_gc_times.py |
| @@ -4,54 +4,63 @@ |
| import os |
| +from measurements import smoothness_controller |
| +from measurements import timeline_controller |
| +from telemetry import benchmark |
| from telemetry.core.platform import tracing_category_filter |
| from telemetry.core.platform import tracing_options |
| from telemetry.page.actions import action_runner |
| from telemetry.page import page_test |
| +from telemetry.results import results_options |
| from telemetry.timeline.model import TimelineModel |
| from telemetry.util import statistics |
| from telemetry.value import list_of_scalar_values |
| from telemetry.value import scalar |
| from telemetry.value import trace |
| -from measurements import smoothness_controller |
| -from measurements import timeline_controller |
| - |
| _CR_RENDERER_MAIN = 'CrRendererMain' |
| _RUN_SMOOTH_ACTIONS = 'RunSmoothAllActions' |
| -_NAMES_TO_DUMP = ['oilpan_precise_mark', |
| - 'oilpan_precise_lazy_sweep', |
| - 'oilpan_precise_complete_sweep', |
| - 'oilpan_conservative_mark', |
| - 'oilpan_conservative_lazy_sweep', |
| - 'oilpan_conservative_complete_sweep', |
| - 'oilpan_coalesce'] |
| - |
| -def _GetGcType(args): |
| +_GC_REASONS = ['precise', 'conservative', 'idle', 'forced'] |
| +_GC_WORKS = ['mark', 'lazy_sweep', 'complete_sweep'] |
|
Sami
2015/04/02 17:21:29
nit: would _GC_STAGES be a more descriptive name h
peria
2015/04/03 02:51:11
It sounds good!
|
| + |
| + |
| +def _GetGcReason(args): |
| # Old style |
| if 'precise' in args: |
| if args['forced']: |
| - return None |
| + return 'forced' |
| return 'precise' if args['precise'] else 'conservative' |
| - if args['gcReason'] == 'ForcedGCForTesting': |
| - return None |
| if args['gcReason'] == 'ConservativeGC': |
| return 'conservative' |
| if args['gcReason'] == 'PreciseGC': |
| return 'precise' |
| + if args['gcReason'] == 'ForcedGCForTesting': |
| + return 'forced' |
| + if args['gcReason'] == 'IdleGC': |
| + return 'idle' |
| return None # Unknown |
| def _AddTracingResults(events, results): |
| + def DumpMetric(page, name, values, unit, results): |
| + if values[name]: |
| + results.AddValue(list_of_scalar_values.ListOfScalarValues( |
| + page, name, unit, values[name])) |
| + results.AddValue(scalar.ScalarValue( |
| + page, name + '_max', unit, max(values[name]))) |
| + results.AddValue(scalar.ScalarValue( |
| + page, name + '_total', unit, sum(values[name]))) |
| + |
| # Prepare |
| - values = {} |
| - for name in _NAMES_TO_DUMP: |
| - values[name] = [] |
| + values = {'oilpan_coalesce': []} |
| + for reason in _GC_REASONS: |
| + for work in _GC_WORKS: |
| + values['oilpan_%s_%s' % (reason, work)] = [] |
| # Parse in time line |
| - gc_type = None |
| + reason = None |
| mark_time = 0 |
| lazy_sweep_time = 0 |
| complete_sweep_time = 0 |
| @@ -61,12 +70,12 @@ def _AddTracingResults(events, results): |
| values['oilpan_coalesce'].append(duration) |
| continue |
| if event.name == 'Heap::collectGarbage': |
| - if not gc_type is None: |
| - values['oilpan_%s_mark' % gc_type].append(mark_time) |
| - values['oilpan_%s_lazy_sweep' % gc_type].append(lazy_sweep_time) |
| - values['oilpan_%s_complete_sweep' % gc_type].append(complete_sweep_time) |
| + if reason is not None: |
| + values['oilpan_%s_mark' % reason].append(mark_time) |
| + values['oilpan_%s_lazy_sweep' % reason].append(lazy_sweep_time) |
| + values['oilpan_%s_complete_sweep' % reason].append(complete_sweep_time) |
| - gc_type = _GetGcType(event.args) |
| + reason = _GetGcReason(event.args) |
| mark_time = duration |
| lazy_sweep_time = 0 |
| complete_sweep_time = 0 |
| @@ -78,37 +87,35 @@ def _AddTracingResults(events, results): |
| complete_sweep_time += duration |
| continue |
| - if not gc_type is None: |
| - values['oilpan_%s_mark' % gc_type].append(mark_time) |
| - values['oilpan_%s_lazy_sweep' % gc_type].append(lazy_sweep_time) |
| - values['oilpan_%s_complete_sweep' % gc_type].append(complete_sweep_time) |
| + if reason is not None: |
| + values['oilpan_%s_mark' % reason].append(mark_time) |
| + values['oilpan_%s_lazy_sweep' % reason].append(lazy_sweep_time) |
| + values['oilpan_%s_complete_sweep' % reason].append(complete_sweep_time) |
| - # Dump |
| page = results.current_page |
| unit = 'ms' |
| - for name in _NAMES_TO_DUMP: |
| - if values[name]: |
| - results.AddValue(list_of_scalar_values.ListOfScalarValues( |
| - page, name, unit, values[name])) |
| - results.AddValue(scalar.ScalarValue( |
| - page, name + '_max', unit, max(values[name]))) |
| - results.AddValue(scalar.ScalarValue( |
| - page, name + '_total', unit, sum(values[name]))) |
| - # Summarize marking time |
| - total_mark_time = 0 |
| - for gc_type in ['precise', 'conservative']: |
| - total_mark_time += sum(values['oilpan_%s_mark' % gc_type]) |
| - results.AddValue( |
| - scalar.ScalarValue(page, 'oilpan_mark', unit, total_mark_time)) |
| + # Dump each metric |
| + DumpMetric(page, 'oilpan_coalesce', values, unit, results) |
| + for reason in _GC_REASONS: |
| + for work in _GC_WORKS: |
| + DumpMetric(page, 'oilpan_%s_%s' % (reason, work), values, unit, results) |
| + |
| + # Summarize each work |
| + for work in _GC_WORKS: |
| + total_time = 0 |
| + for reason in _GC_REASONS: |
| + total_time += sum(values['oilpan_%s_%s' % (reason, work)]) |
| + results.AddValue( |
| + scalar.ScalarValue(page, 'oilpan_%s' % work, unit, total_time)) |
| # Summarize sweeping time |
| total_sweep_time = 0 |
| - for do_type in ['lazy_sweep', 'complete_sweep']: |
| + for work in ['lazy_sweep', 'complete_sweep']: |
| sweep_time = 0 |
| - for gc_type in ['precise', 'conservative']: |
| - sweep_time += sum(values['oilpan_%s_%s' % (gc_type, do_type)]) |
| - key = 'oilpan_%s' % do_type |
| + for reason in _GC_REASONS: |
| + sweep_time += sum(values['oilpan_%s_%s' % (reason, work)]) |
| + key = 'oilpan_%s' % work |
| results.AddValue(scalar.ScalarValue(page, key, unit, sweep_time)) |
| total_sweep_time += sweep_time |
| results.AddValue( |
| @@ -121,8 +128,8 @@ def _AddTracingResults(events, results): |
| class _OilpanGCTimesBase(page_test.PageTest): |
| - def __init__(self): |
| - super(_OilpanGCTimesBase, self).__init__() |
| + def __init__(self, action_name=''): |
| + super(_OilpanGCTimesBase, self).__init__(action_name) |
| self._timeline_model = None |
| def WillNavigateToPage(self, page, tab): |