Home | History | Annotate | Download | only in trappy
      1 #    Copyright 2015-2017 ARM Limited
      2 #
      3 # Licensed under the Apache License, Version 2.0 (the "License");
      4 # you may not use this file except in compliance with the License.
      5 # You may obtain a copy of the License at
      6 #
      7 #     http://www.apache.org/licenses/LICENSE-2.0
      8 #
      9 # Unless required by applicable law or agreed to in writing, software
     10 # distributed under the License is distributed on an "AS IS" BASIS,
     11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 # See the License for the specific language governing permissions and
     13 # limitations under the License.
     14 #
     15 
     16 
     17 import trappy.ftrace
     18 
     19 def compare_runs(actor_order, map_label, runs, **kwords):
     20     """A side by side comparison of multiple runs
     21 
     22     Plots include temperature, utilization, frequencies, PID
     23     controller and power.
     24 
     25     :param actor_order: An array showing the order in which the actors
     26         were registered.  The array values are the labels that
     27         will be used in the input and output power plots.
     28 
     29         For Example:
     30         ::
     31 
     32             ["GPU", "A15", "A7"]
     33 
     34     :param map_label: A dict that matches cpumasks (as found in the
     35         trace) with their proper name.  This "proper name" will be used as
     36         a label for the load and allfreqs plots.  It's recommended that
     37         the names of the cpus matches those in actor_order.
     38 
     39         For Example:
     40         ::
     41 
     42             {"0000000f": "A7", "000000f0": "A15"}
     43 
     44     :param runs: An array of tuples consisting of a name and the path to
     45         the directory where the trace.dat is.
     46 
     47         For example:
     48         ::
     49 
     50             [("experiment1", "wa_output/antutu_antutu_1"),
     51              ("known good", "good/antutu_antutu_1")]
     52 
     53     :param tz_id: thermal zone id as it appears in the id field of the
     54             thermal_temperature trace event
     55 
     56     :type actor_order: list
     57     :type map_label: dict
     58     :type runs: list
     59     :type tz_id: int
     60 
     61     """
     62     import trappy.plot_utils
     63     import trappy.wa
     64 
     65     if not isinstance(actor_order, list):
     66         raise TypeError("actor_order has to be an array")
     67 
     68     if not isinstance(map_label, dict):
     69         raise TypeError("map_label has to be a dict")
     70 
     71     if "width" not in kwords:
     72         kwords["width"] = 20
     73     if "height" not in kwords:
     74         kwords["height"] = 5
     75 
     76     run_data = []
     77     for name, path in runs:
     78         run_data.append(trappy.FTrace(name=name, path=path, scope="thermal"))
     79         trappy.wa.SysfsExtractor(path).pretty_print_in_ipython()
     80 
     81     trappy.plot_utils.plot_temperature(run_data, **kwords)
     82     if "tz_id" in kwords:
     83         del kwords["tz_id"]
     84 
     85     try:
     86         trappy.plot_utils.plot_load(run_data, map_label, **kwords)
     87     except IndexError:
     88         raise ValueError("No power allocator traces found.  Was IPA active (temp above switch on temperature) and FTrace configured to collect all thermal events?")
     89     trappy.plot_utils.plot_allfreqs(run_data, map_label, **kwords)
     90     trappy.plot_utils.plot_controller(run_data, **kwords)
     91     trappy.plot_utils.plot_input_power(run_data, actor_order, **kwords)
     92     trappy.plot_utils.plot_output_power(run_data, actor_order, **kwords)
     93     trappy.plot_utils.plot_freq_hists(run_data, map_label)
     94     trappy.plot_utils.plot_temperature_hist(run_data)
     95 
     96 def summary_plots(actor_order, map_label, **kwords):
     97     """A summary of plots for a given run
     98 
     99     .. warning::
    100 
    101         This is a wrapper around compare_runs().  Use that instead.
    102     """
    103 
    104     path = kwords.pop("path", ".")
    105     title = kwords.pop("title", "")
    106 
    107     return compare_runs(actor_order, map_label, [(title, path)], **kwords)
    108