# 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 os import re import matplotlib, tempfile import trappy from test_thermal import BaseTestThermal class TestTrappy(BaseTestThermal): def __init__(self, *args, **kwargs): super(TestTrappy, self).__init__(*args, **kwargs) self.map_label = {"00000000,00000039": "A53", "00000000,00000006": "A57"} self.actor_order = ["GPU", "A57", "A53"] def test_summary_plots(self): """Test summary_plots() Can't check that the graphs are ok, so just see that the method doesn't blow up""" trappy.summary_plots(self.actor_order, self.map_label) matplotlib.pyplot.close('all') trappy.summary_plots(self.actor_order, self.map_label, width=14, title="Foo") matplotlib.pyplot.close('all') def test_summary_plots_bad_parameters(self): """When summary_plots() receives bad parameters, it offers an understandable error""" self.assertRaises(TypeError, trappy.summary_plots, (self.map_label, self.actor_order)) try: trappy.summary_plots(self.map_label, self.actor_order) self.fail() except TypeError as exception: pass self.assertTrue("actor_order" in str(exception)) try: trappy.summary_plots(self.actor_order, self.actor_order) self.fail() except TypeError as exception: pass self.assertTrue("map_label" in str(exception)) def test_summary_other_dir(self): """Test summary_plots() with another directory""" other_random_dir = tempfile.mkdtemp() os.chdir(other_random_dir) trappy.summary_plots(self.actor_order, self.map_label, path=self.out_dir) matplotlib.pyplot.close('all') # Sanity check that the test actually ran from another directory self.assertEquals(os.getcwd(), other_random_dir) def test_summary_plots_only_power_allocator_trace(self): """Test that summary_plots() work if there is only power allocator trace""" # Strip out "thermal_temperature" from the trace trace_out = "" with open("trace.txt") as fin: for line in fin: if not re.search("thermal_temperature:", line): trace_out += line with open("trace.txt", "w") as fout: fout.write(trace_out) trappy.summary_plots(self.actor_order, self.map_label) matplotlib.pyplot.close('all') def test_summary_plots_no_gpu(self): """summary_plots() works if there is no GPU trace""" # Strip out devfreq traces trace_out = "" with open("trace.txt") as fin: for line in fin: if ("thermal_power_devfreq_get_power:" not in line) and \ ("thermal_power_devfreq_limit:" not in line): trace_out += line with open("trace.txt", "w") as fout: fout.write(trace_out) trappy.summary_plots(self.actor_order, self.map_label) matplotlib.pyplot.close('all') def test_summary_plots_one_actor(self): """summary_plots() works if there is only one actor""" # Strip out devfreq and little traces trace_out = "" with open("trace.txt") as fin: for line in fin: if ("thermal_power_devfreq_get_power:" not in line) and \ ("thermal_power_devfreq_limit:" not in line) and \ ("thermal_power_cpu_get_power: cpus=00000000,00000039" not in line) and \ ("thermal_power_cpu_limit: cpus=00000000,00000039" not in line): trace_out += line with open("trace.txt", "w") as fout: fout.write(trace_out) map_label = {"00000000,00000006": "A57"} trappy.summary_plots(self.actor_order, map_label) matplotlib.pyplot.close('all') def test_compare_runs(self): """Basic compare_runs() functionality""" trappy.compare_runs(self.actor_order, self.map_label, runs=[("new", "."), ("old", self.out_dir)]) matplotlib.pyplot.close('all')