Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3145)

Unified Diff: chrome/test/functional/media/ui_perf_test_utils.py

Issue 9666032: Cleanup deprecated PyAuto media tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update year. Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/functional/media/ui_perf_test_utils.py
diff --git a/chrome/test/functional/media/ui_perf_test_utils.py b/chrome/test/functional/media/ui_perf_test_utils.py
deleted file mode 100644
index c09c6bb5efbdae363326dd8974d1966d27bc85f5..0000000000000000000000000000000000000000
--- a/chrome/test/functional/media/ui_perf_test_utils.py
+++ /dev/null
@@ -1,336 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Module for performance testing using the psutil library.
-
-Ref: http://code.google.com/p/psutil/wiki/Documentation
-
-Most part of this module is from chrome/test/perf/startup_test.cc and
-chrome/test/ui/ui_perf_test.[h,cc] So, we try to preserve the original C++ code
-here in case when there is change in original C++ code, it is easy to update
-this.
-"""
-
-# Standard library imports.
-import logging
-import re
-import time
-
-# Third-party imports.
-import psutil
-
-
-class UIPerfTestUtils:
- """Static utility functions for performance testing."""
-
- @staticmethod
- def ConvertDataListToString(data_list):
- """Convert data array to string that can be used for results on BuildBot.
-
- Full accuracy of the results coming from the psutil library is not needed
- for Perf on BuildBot. For now, we show 5 digits here. This function goes
- through the elements in the data_list and does the conversion as well as
- adding a prefix and suffix.
-
- Args:
- data_list: data list contains measured data from perf test.
-
- Returns:
- a string that can be used for perf result shown on Buildbot.
- """
- output = '['
- for data in data_list:
- output += ('%.5f' % data) + ', '
- # Remove the last ', '.
- if output.endswith(', '):
- output = output[:-2]
- output += ']'
- return output
-
- @staticmethod
- def GetResultStringForPerfBot(measurement, modifier, trace, values, units):
- """Get a result string in a format that can be displayed on the PerfBot.
-
- The following are acceptable (it can be shown in PerfBot) format:
- <*>RESULT <graph_name>: <trace_name>= <value> <units>
- <*>RESULT <graph_name>: <trace_name>= {<mean>, <std deviation>} <units>
- <*>RESULT <graph_name>: <trace_name>= [<value>,value,value,...,] <units>
-
- Args:
- measurement: measurement string (such as a parameter list).
- modifier: modifier string (such as a file name).
- trace: trace string used for PerfBot graph name (such as 't' or 't_ref').
- values: list of values that displayed as "[value1,value2....]".
- units: units of values such as "sec" or "msec".
-
- Returns:
- An output string that contains all information, or the empty string if
- there is no information available.
- """
- if not values:
- return ''
- output_string = '%sRESULT %s%s: %s= %s %s' % (
- '', measurement, modifier, trace,
- UIPerfTestUtils.ConvertDataListToString(values), units)
- return output_string
-
- @staticmethod
- def FindProcesses(process_name):
- """Find processes for a given process name.
-
- Args:
- process_name: a process name string to find.
-
- Returns:
- a list of psutil process instances that are associated with the given
- process name.
- """
- target_process_list = []
- for pid in psutil.get_pid_list():
- try:
- p = psutil.Process(pid)
- # Exact match does not work
- if process_name in p.name:
- target_process_list.append(p)
- except psutil.NoSuchProcess:
- # Do nothing since the process is already terminated
- pass
- return target_process_list
-
- @staticmethod
- def GetResourceInfo(process, start_time):
- """Get resource information coming from psutil.
-
- This calls corresponding functions in psutil and parses the results.
-
- TODO(imasaki@chromium.org): Modify this function so that it's not
- hard-coded to return 7 pieces of information. Instead, you have the
- caller somehow indicate the number and types of information it needs.
- Then the function finds and returns the requested info.
-
- Args:
- start_time: the time when the program starts (used for recording
- measured_time).
- process: psutil's Process instance.
-
- Returns:
- a process info tuple: measured_time, cpu_time in percent,
- user cpu time, system cpu time, resident memory size,
- virtual memory size, and memory usage. None is returned if the
- resource info cannot be identified.
- """
- try:
- measured_time = time.time()
- cpu_percent = process.get_cpu_percent(interval=1.0)
- memory_percent = process.get_memory_percent()
- m1 = re.search(r'cputimes\(user=(\S+),\s+system=(\S+)\)',
- str(process.get_cpu_times()))
- m2 = re.search(r'meminfo\(rss=(\S+),\s+vms=(\S+)\)',
- str(process.get_memory_info()))
-
- cputimes_user = float(m1.group(1))
- cputimes_system = float(m1.group(2))
-
- # Convert Bytes to MBytes.
- memory_rss = float(m2.group(1)) / 1000000
- memory_vms = float(m2.group(2)) / 1000000
-
- return (measured_time - start_time, cpu_percent, cputimes_user,
- cputimes_system, memory_rss, memory_vms, memory_percent)
-
- except psutil.NoSuchProcess:
- # Do nothing since the process is already terminated.
- # This may happen due to race condition.
- return None
-
- @staticmethod
- def IsChromeRendererProcess(process):
- """Check whether the given process is a Chrome Renderer process.
-
- Args:
- process: a psutil's Process instance.
-
- Returns:
- True if process is a Chrome renderer process. False otherwise.
- """
- for line in process.cmdline:
- if 'type=renderer' in line:
- return True
- return False
-
- @staticmethod
- def GetChromeRendererProcessInfo(start_time):
- """Get Chrome renderer process information by psutil.
-
- Returns:
- a renderer process info tuple: measured_time, cpu_time in
- percent, user cpu time, system cpu time, resident memory size, virtual
- memory size, and memory usage. Or returns an empty list if the Chrome
- renderer process is not found or more than one renderer process exists.
- In this case, an error message is written to the log.
- """
- chrome_process_list = UIPerfTestUtils.FindProcesses('chrome')
- chrome_process_info_list = []
- for p in chrome_process_list:
- if UIPerfTestUtils.IsChromeRendererProcess(p):
- # Return the first renderer process's resource info.
- resource_info = UIPerfTestUtils.GetResourceInfo(p, start_time)
- if resource_info is not None:
- chrome_process_info_list.append(resource_info)
- if not chrome_process_info_list:
- logging.error('Chrome renderer process does not exist')
- return []
- if len(chrome_process_info_list) > 1:
- logging.error('More than one Chrome renderer processes exists')
- return []
- return chrome_process_info_list[0]
-
- @staticmethod
- def _GetMaxDataLength(chrome_renderer_process_infos):
- """Get max data length of process render info.
-
- This method is necessary since reach run may have different data length.
- So, you have to get maximum to prevent data from missing.
-
- Args:
- measured_data_list : measured_data_list that
- contain a list of measured data (CPU and memory) at certain intervals
- over several runs. Each run contains several time data.
- info -> 0th run -> 0th time -> time stamp, CPU data and memory data
- -> 1th time -> time stamp, CPU data and memory data
- .....
- -> 1th run -> 0th time -> time stamp, CPU data and memory data
- each run may have different number of measurement.
-
- Returns:
- max data length among all runs.
- """
- maximum = len(chrome_renderer_process_infos[0])
- for info in chrome_renderer_process_infos:
- if maximum < len(info):
- maximum = len(info)
- return maximum
-
- @staticmethod
- def PrintMeasuredData(measured_data_list, measured_data_name_list,
- measured_data_unit_list, parameter_string, trace_list,
- remove_first_result=True, show_time_index=False,
- reference_build=False, display_filter=None):
- """Calculate statistics over all results and print them in the format that
- can be shown on BuildBot.
-
- Args:
- measured_data_list: measured_data_list that contains a list of measured
- data at certain intervals over several runs. Each run should contain
- the timestamp of the measured time as well.
- info -> 0th run -> 0th time -> list of measured data
- (defined in measured_data_name_list)
- -> 1st time -> list of measured data
- .....
- -> 1st run -> 0th time -> list of measured data
- each run may have different number of measurement.
- measured_data_name_list: a list of the names for an element of
- measured_data_list (such as 'measured-time','cpu'). The size of this
- list should be same as the size of measured_data_unit_list.
- measured_data_unit_list: a list of the names of the units for an element
- of measured_data_list. The size of this list should be same as the size
- of measured_data_name_list.
- parameter_string: a string that contains all parameters used.
- (currently not used).
- trace_list: a list of trace names used for legends in perf graph
- (for example, ['t','c']). Generally, a trace name is one letter.
- remove_first_result: a boolean for removing the first result
- (the first result contains browser startup time).
- show_time_index: a boolean for showing time index (such as '0' or '1' in
- 'procutil-0' or 'procutil-1') if it is true. Time index is necessary
- when the same kind of data is measured over a period of time.
- For example, 'procutil-0' is the first result and 'procutil-1' is the
- second result. If this is false, the results are aggregated into one
- result (such as 'procutil', which includes the results from
- 'procutil-0' and 'procutil-1').
- reference_build: a boolean for indicating this result is computed with
- reference build binaries. '_ref' is added in trace in the case of
- reference build.
- display_filter: a list of names that you want to display in the results.
- The names should be in |measured_data_name_list|.
- Returns:
- An output string that contains all information, or the empty string
- if there is no information to output.
- """
- output_string = ''
- for measured_data_index in range(len(measured_data_name_list)):
- if not display_filter or (display_filter and (
- measured_data_name_list[measured_data_index] in display_filter)):
- max_data_length = UIPerfTestUtils._GetMaxDataLength(
- measured_data_list)
- trace_name = trace_list[measured_data_index]
- if reference_build:
- trace_name += '_ref'
- if show_time_index:
- for time_index in range(max_data_length):
- psutil_data = []
- UIPerfTestUtils._AppendPsUtilData(psutil_data, measured_data_list,
- remove_first_result, time_index,
- measured_data_index)
- name = '%s-%s' % (measured_data_name_list[measured_data_index],
- str(time_index))
- output_string += UIPerfTestUtils._GenerateOutputString(
- name, output_string, trace_name, psutil_data,
- measured_data_unit_list[measured_data_index])
- else:
- psutil_data = []
- for time_index in range(max_data_length):
- UIPerfTestUtils._AppendPsUtilData(psutil_data, measured_data_list,
- remove_first_result, time_index,
- measured_data_index)
- name = measured_data_name_list[measured_data_index]
- output_string += UIPerfTestUtils._GenerateOutputString(
- name, output_string, trace_name, psutil_data,
- measured_data_unit_list[measured_data_index])
- return output_string
-
- @staticmethod
- def _AppendPsUtilData(psutil_data, measured_data_list,
- remove_first_result, time_index, measured_data_index):
- """Append data measured by psutil to a list.
-
- Args:
- psutil_data: a list of data measured by psutil.
- measured_data_list: current data measured by psutil, which will be
- appended to |psutil_data|.
- remove_first_result: a boolean indicating whether or not to remove
- the first result.
- time_index: a integer that shows time-wise index for measured data
- (For example, '0' or '1' in 'procutil-0' or 'procutil-1').
- measured_data_index: the loop index for |measured_data_list|.
- """
- for counter in range(len(measured_data_list)):
- if not remove_first_result or counter > 0:
- data_length_for_each = (len(measured_data_list[counter]))
- if (data_length_for_each > time_index):
- data = measured_data_list[counter][time_index][measured_data_index]
- psutil_data.append(data)
-
- @staticmethod
- def _GenerateOutputString(name, output_string, trace_name, psutil_data,
- measured_data_unit):
- """Generates the output string that will be used for perf result.
-
- Args:
- name: a string for the graph name.
- output_string: the whole string for displaying results.
- trace_name: the name for legend in the performance graph.
- psutil_data: the measured list of data measured by psutil.
- measured_data_unit: the measurement unit name.
-
- Returns:
- a string for performance results that are used for PerfBot if there
- is any result. Otherwise, returns an empty string.
- """
- output_string_line = UIPerfTestUtils.GetResultStringForPerfBot(
- '', name, trace_name, psutil_data, measured_data_unit)
- if output_string_line:
- return output_string_line + '\n'
- else:
- return ''

Powered by Google App Engine
This is Rietveld 408576698