| # 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 unittest |
| import matplotlib |
| import os |
| import pandas as pd |
| import shutil |
| import sys |
| import tempfile |
| |
| import utils_tests |
| import trappy |
| |
| sys.path.append(os.path.join(utils_tests.TESTS_DIRECTORY, "..", "trappy")) |
| |
| class BaseTestThermal(utils_tests.SetupDirectory): |
| def __init__(self, *args, **kwargs): |
| super(BaseTestThermal, self).__init__( |
| [("../doc/trace.txt", "trace.txt")], |
| *args, |
| **kwargs) |
| |
| class TestThermal(BaseTestThermal): |
| |
| def test_plot_temperature(self): |
| """Test ThermalGovernor.plot_temperature() |
| |
| Can't check that the graph is ok, so just see that the method |
| doesn't blow up |
| |
| """ |
| |
| th_data = trappy.FTrace().thermal |
| dfr = th_data.data_frame |
| ct_series = pd.Series([57, 57], index=(dfr.index[0], dfr.index[-1])) |
| |
| th_data.plot_temperature() |
| matplotlib.pyplot.close('all') |
| |
| th_data.plot_temperature(title="Antutu", control_temperature=ct_series) |
| matplotlib.pyplot.close('all') |
| |
| th_data.plot_temperature(title="Antutu", ylim=[0, 60]) |
| matplotlib.pyplot.close('all') |
| |
| _, ax = matplotlib.pyplot.subplots() |
| th_data.plot_temperature(ax=ax) |
| matplotlib.pyplot.close('all') |
| |
| def test_plot_temperature_hist(self): |
| """Test that plot_temperature_hist() doesn't bomb""" |
| |
| _, ax = matplotlib.pyplot.subplots() |
| trappy.FTrace().thermal.plot_temperature_hist(ax, "Foo") |
| matplotlib.pyplot.close('all') |
| |
| class TestThermalGovernor(BaseTestThermal): |
| def __init__(self, *args, **kwargs): |
| super(TestThermalGovernor, self).__init__(*args, **kwargs) |
| self.actor_order = ["GPU", "A15", "A7"] |
| |
| def test_get_dataframe(self): |
| dfr = trappy.FTrace().thermal_governor.data_frame |
| |
| self.assertTrue(len(dfr) > 0) |
| self.assertEquals(dfr["current_temperature"].iloc[0], 68775) |
| self.assertTrue("total_granted_power" in dfr.columns) |
| self.assertFalse("time" in dfr.columns) |
| |
| def test_plot_temperature(self): |
| """Test ThermalGovernor.plot_temperature() |
| |
| Can't check that the graph is ok, so just see that the method doesn't blow up""" |
| gov = trappy.FTrace().thermal_governor |
| |
| gov.plot_temperature() |
| gov.plot_temperature(legend_label="power allocator", ylim=(0, 72)) |
| matplotlib.pyplot.close('all') |
| |
| def test_plot_input_power(self): |
| """plot_input_power() doesn't bomb""" |
| gov = trappy.FTrace().thermal_governor |
| |
| gov.plot_input_power(self.actor_order) |
| matplotlib.pyplot.close('all') |
| |
| gov.plot_input_power(self.actor_order, title="Antutu") |
| matplotlib.pyplot.close('all') |
| |
| _, ax = matplotlib.pyplot.subplots() |
| gov.plot_input_power(self.actor_order, ax=ax) |
| matplotlib.pyplot.close('all') |
| |
| def test_plot_weighted_input_power(self): |
| """plot_weighted_input_power() doesn't bomb""" |
| |
| gov = trappy.FTrace().thermal_governor |
| weights = zip(self.actor_order, [1024, 256, 512]) |
| |
| _, ax = matplotlib.pyplot.subplots() |
| gov.plot_weighted_input_power(weights, ax=ax) |
| matplotlib.pyplot.close('all') |
| |
| def test_plot_output_power(self): |
| """Test plot_output_power() |
| |
| Can't check that the graph is ok, so just see that the method doesn't blow up""" |
| gov = trappy.FTrace().thermal_governor |
| |
| gov.plot_output_power(self.actor_order) |
| matplotlib.pyplot.close('all') |
| |
| gov.plot_output_power(self.actor_order, title="Antutu") |
| matplotlib.pyplot.close('all') |
| |
| _, ax = matplotlib.pyplot.subplots() |
| gov.plot_output_power(self.actor_order, title="Antutu", ax=ax) |
| matplotlib.pyplot.close('all') |
| |
| def test_plot_inout_power(self): |
| """Test plot_inout_power() |
| |
| Can't check that the graph is ok, so just see that the method doesn't blow up""" |
| trappy.FTrace().thermal_governor.plot_inout_power() |
| trappy.FTrace().thermal_governor.plot_inout_power(title="Antutu") |
| matplotlib.pyplot.close('all') |
| |
| class TestEmptyThermalGovernor(unittest.TestCase): |
| def setUp(self): |
| self.previous_dir = os.getcwd() |
| self.out_dir = tempfile.mkdtemp() |
| os.chdir(self.out_dir) |
| with open("trace.txt", "w") as fout: |
| fout.write("""version = 6 |
| cpus=8 |
| CPU:7 [204600 EVENTS DROPPED] |
| <...>-3979 [007] 217.975284: sched_stat_runtime: comm=Thread-103 pid=3979 runtime=5014167 [ns] vruntime=244334517704 [ns] |
| <...>-3979 [007] 217.975298: sched_task_load_contrib: comm=Thread-103 pid=3979 load_contrib=2500 |
| <...>-3979 [007] 217.975314: sched_task_runnable_ratio: comm=Thread-103 pid=3979 ratio=1023 |
| <...>-3979 [007] 217.975332: sched_rq_runnable_ratio: cpu=7 ratio=1023 |
| <...>-3979 [007] 217.975345: sched_rq_runnable_load: cpu=7 load=127 |
| <...>-3979 [007] 217.975366: softirq_raise: vec=7 [action=SCHED] |
| <...>-3979 [007] 217.975446: irq_handler_exit: irq=163 ret=handled |
| <...>-3979 [007] 217.975502: softirq_entry: vec=1 [action=TIMER] |
| <...>-3979 [007] 217.975523: softirq_exit: vec=1 [action=TIMER] |
| <...>-3979 [007] 217.975535: softirq_entry: vec=7 [action=SCHED] |
| <...>-3979 [007] 217.975559: sched_rq_runnable_ratio: cpu=7 ratio=1023 |
| <...>-3979 [007] 217.975571: sched_rq_runnable_load: cpu=7 load=127 |
| <...>-3979 [007] 217.975584: softirq_exit: vec=7 [action=SCHED] |
| <...>-3979 [007] 217.980139: irq_handler_entry: irq=163 name=mct_tick7 |
| <...>-3979 [007] 217.980216: softirq_raise: vec=1 [action=TIMER] |
| <...>-3979 [007] 217.980253: sched_stat_runtime: comm=Thread-103 pid=3979 runtime=4990542 [ns] vruntime=244336561007 [ns] |
| <...>-3979 [007] 217.980268: sched_task_load_contrib: comm=Thread-103 pid=3979 load_contrib=2500""") |
| |
| def tearDown(self): |
| os.chdir(self.previous_dir) |
| shutil.rmtree(self.out_dir) |
| |
| def test_empty_trace_txt(self): |
| dfr = trappy.FTrace(normalize_time=False).thermal_governor.data_frame |
| self.assertEquals(len(dfr), 0) |
| |
| def test_empty_plot_temperature(self): |
| """trace.thermal.plot_temperature() raises ValueError() on an empty |
| thermal trace""" |
| trace = trappy.FTrace() |
| self.assertRaises(ValueError, trace.thermal.plot_temperature) |