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 17import os 18import re 19import matplotlib, tempfile 20 21import trappy 22from test_thermal import BaseTestThermal 23 24class TestTrappy(BaseTestThermal): 25 def __init__(self, *args, **kwargs): 26 super(TestTrappy, self).__init__(*args, **kwargs) 27 self.map_label = {"00000000,00000039": "A53", "00000000,00000006": "A57"} 28 self.actor_order = ["GPU", "A57", "A53"] 29 30 def test_summary_plots(self): 31 """Test summary_plots() 32 33 Can't check that the graphs are ok, so just see that the method doesn't blow up""" 34 35 trappy.summary_plots(self.actor_order, self.map_label) 36 matplotlib.pyplot.close('all') 37 38 trappy.summary_plots(self.actor_order, self.map_label, width=14, 39 title="Foo") 40 matplotlib.pyplot.close('all') 41 42 def test_summary_plots_bad_parameters(self): 43 """When summary_plots() receives bad parameters, it offers an understandable error""" 44 45 self.assertRaises(TypeError, trappy.summary_plots, 46 (self.map_label, self.actor_order)) 47 48 try: 49 trappy.summary_plots(self.map_label, self.actor_order) 50 self.fail() 51 except TypeError as exception: 52 pass 53 54 self.assertTrue("actor_order" in str(exception)) 55 56 try: 57 trappy.summary_plots(self.actor_order, self.actor_order) 58 self.fail() 59 except TypeError as exception: 60 pass 61 62 self.assertTrue("map_label" in str(exception)) 63 64 def test_summary_other_dir(self): 65 """Test summary_plots() with another directory""" 66 67 other_random_dir = tempfile.mkdtemp() 68 os.chdir(other_random_dir) 69 70 trappy.summary_plots(self.actor_order, self.map_label, path=self.out_dir) 71 matplotlib.pyplot.close('all') 72 73 # Sanity check that the test actually ran from another directory 74 self.assertEquals(os.getcwd(), other_random_dir) 75 76 def test_summary_plots_only_power_allocator_trace(self): 77 """Test that summary_plots() work if there is only power allocator 78 trace""" 79 80 # Strip out "thermal_temperature" from the trace 81 trace_out = "" 82 with open("trace.txt") as fin: 83 for line in fin: 84 if not re.search("thermal_temperature:", line): 85 trace_out += line 86 87 with open("trace.txt", "w") as fout: 88 fout.write(trace_out) 89 90 trappy.summary_plots(self.actor_order, self.map_label) 91 matplotlib.pyplot.close('all') 92 93 def test_summary_plots_no_gpu(self): 94 """summary_plots() works if there is no GPU trace""" 95 96 # Strip out devfreq traces 97 trace_out = "" 98 with open("trace.txt") as fin: 99 for line in fin: 100 if ("thermal_power_devfreq_get_power:" not in line) and \ 101 ("thermal_power_devfreq_limit:" not in line): 102 trace_out += line 103 104 with open("trace.txt", "w") as fout: 105 fout.write(trace_out) 106 107 trappy.summary_plots(self.actor_order, self.map_label) 108 matplotlib.pyplot.close('all') 109 110 def test_summary_plots_one_actor(self): 111 """summary_plots() works if there is only one actor""" 112 113 # Strip out devfreq and little traces 114 trace_out = "" 115 with open("trace.txt") as fin: 116 for line in fin: 117 if ("thermal_power_devfreq_get_power:" not in line) and \ 118 ("thermal_power_devfreq_limit:" not in line) and \ 119 ("thermal_power_cpu_get_power: cpus=00000000,00000039" not in line) and \ 120 ("thermal_power_cpu_limit: cpus=00000000,00000039" not in line): 121 trace_out += line 122 123 with open("trace.txt", "w") as fout: 124 fout.write(trace_out) 125 126 map_label = {"00000000,00000006": "A57"} 127 trappy.summary_plots(self.actor_order, map_label) 128 matplotlib.pyplot.close('all') 129 130 def test_compare_runs(self): 131 """Basic compare_runs() functionality""" 132 133 trappy.compare_runs(self.actor_order, self.map_label, 134 runs=[("new", "."), ("old", self.out_dir)]) 135 matplotlib.pyplot.close('all') 136