blob: b6d9bccb61c7668f90ed98021f157124e361699d [file] [log] [blame]
# Copyright 2014 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.
import sys
from metrics import Metric
from telemetry.value import scalar
class IOMetric(Metric):
"""IO-related metrics, obtained via telemetry.core.Browser."""
@classmethod
def CustomizeBrowserOptions(cls, options):
# TODO(tonyg): This is the host platform, so not totally correct.
if sys.platform != 'darwin':
# TODO(playmobil): Get rid of this on all platforms crbug.com/361049.
options.AppendExtraBrowserArgs('--no-sandbox')
def Start(self, page, tab):
raise NotImplementedError()
def Stop(self, page, tab):
raise NotImplementedError()
def AddResults(self, tab, results):
# This metric currently only returns summary results, not per-page results.
raise NotImplementedError()
def AddSummaryResults(self, browser, results):
"""Add summary results to the results object."""
io_stats = browser.io_stats
if not io_stats['Browser']:
return
def AddSummariesForProcessType(process_type_io, process_type_trace):
"""For a given process type, add all relevant summary results.
Args:
process_type_io: Type of process (eg Browser or Renderer).
process_type_trace: String to be added to the trace name in the results.
"""
def AddSummaryForOperation(operation_name, trace_name_prefix, units,
description):
"""Adds summary results for an operation in a process.
Args:
operation_name: The name of the operation, e.g. 'ReadOperationCount'
trace_name_prefix: The prefix for the trace name.
"""
if operation_name in io_stats[process_type_io]:
value = io_stats[process_type_io][operation_name]
if units == 'kb':
value = value / 1024
results.AddSummaryValue(
scalar.ScalarValue(None, trace_name_prefix + process_type_trace,
units, value, important=False,
description=description))
AddSummaryForOperation('ReadOperationCount', 'read_operations_', 'count',
'Number of IO read operations.')
AddSummaryForOperation('WriteOperationCount', 'write_operations_',
'count', 'Number of IO write operations.')
AddSummaryForOperation('ReadTransferCount', 'read_bytes_', 'kb',
'Number of IO bytes read.')
AddSummaryForOperation('WriteTransferCount', 'write_bytes_', 'kb',
'Number of IO bytes written.')
AddSummariesForProcessType('Browser', 'browser')
AddSummariesForProcessType('Renderer', 'renderer')
AddSummariesForProcessType('Gpu', 'gpu')