blob: c99f2f364931e91144c8b1b02b1226423172e441 [file] [log] [blame]
# Copyright 2015-2017 ARM Limited
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import trappy.ftrace
def compare_runs(actor_order, map_label, runs, **kwords):
"""A side by side comparison of multiple runs
Plots include temperature, utilization, frequencies, PID
controller and power.
:param actor_order: An array showing the order in which the actors
were registered. The array values are the labels that
will be used in the input and output power plots.
For Example:
::
["GPU", "A15", "A7"]
:param map_label: A dict that matches cpumasks (as found in the
trace) with their proper name. This "proper name" will be used as
a label for the load and allfreqs plots. It's recommended that
the names of the cpus matches those in actor_order.
For Example:
::
{"0000000f": "A7", "000000f0": "A15"}
:param runs: An array of tuples consisting of a name and the path to
the directory where the trace.dat is.
For example:
::
[("experiment1", "wa_output/antutu_antutu_1"),
("known good", "good/antutu_antutu_1")]
:param tz_id: thermal zone id as it appears in the id field of the
thermal_temperature trace event
:type actor_order: list
:type map_label: dict
:type runs: list
:type tz_id: int
"""
import trappy.plot_utils
import trappy.wa
if not isinstance(actor_order, list):
raise TypeError("actor_order has to be an array")
if not isinstance(map_label, dict):
raise TypeError("map_label has to be a dict")
if "width" not in kwords:
kwords["width"] = 20
if "height" not in kwords:
kwords["height"] = 5
run_data = []
for name, path in runs:
run_data.append(trappy.FTrace(name=name, path=path, scope="thermal"))
trappy.wa.SysfsExtractor(path).pretty_print_in_ipython()
trappy.plot_utils.plot_temperature(run_data, **kwords)
if "tz_id" in kwords:
del kwords["tz_id"]
try:
trappy.plot_utils.plot_load(run_data, map_label, **kwords)
except IndexError:
raise ValueError("No power allocator traces found. Was IPA active (temp above switch on temperature) and FTrace configured to collect all thermal events?")
trappy.plot_utils.plot_allfreqs(run_data, map_label, **kwords)
trappy.plot_utils.plot_controller(run_data, **kwords)
trappy.plot_utils.plot_input_power(run_data, actor_order, **kwords)
trappy.plot_utils.plot_output_power(run_data, actor_order, **kwords)
trappy.plot_utils.plot_freq_hists(run_data, map_label)
trappy.plot_utils.plot_temperature_hist(run_data)
def summary_plots(actor_order, map_label, **kwords):
"""A summary of plots for a given run
.. warning::
This is a wrapper around compare_runs(). Use that instead.
"""
path = kwords.pop("path", ".")
title = kwords.pop("title", "")
return compare_runs(actor_order, map_label, [(title, path)], **kwords)