Brendan Jackman | e81fdcb | 2017-01-04 17:10:29 +0000 | [diff] [blame] | 1 | # Copyright 2015-2017 ARM Limited |
Javi Merino | 08f3c34 | 2015-12-21 17:20:12 +0000 | [diff] [blame] | 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 | import pandas as pd |
| 17 | import trappy |
| 18 | import unittest |
| 19 | |
| 20 | class TestBareTrace(unittest.TestCase): |
| 21 | def __init__(self, *args, **kwargs): |
| 22 | super(TestBareTrace, self).__init__(*args, **kwargs) |
| 23 | dfr0 = pd.DataFrame({"l1_misses": [24, 535, 41], |
| 24 | "l2_misses": [155, 11, 200], |
| 25 | "cpu": [ 0, 1, 0]}, |
| 26 | index=pd.Series([1.020, 1.342, 1.451], name="Time")) |
| 27 | |
| 28 | dfr1 = pd.DataFrame({"load": [ 35, 16, 21, 28], |
| 29 | "util": [279, 831, 554, 843]}, |
| 30 | index=pd.Series([1.279, 1.718, 2.243, 2.465], name="Time")) |
| 31 | |
| 32 | self.dfr = [dfr0, dfr1] |
| 33 | |
| 34 | def test_bare_trace_accepts_name(self): |
| 35 | """The BareTrace() accepts a name parameter""" |
| 36 | |
| 37 | trace = trappy.BareTrace(name="foo") |
| 38 | |
| 39 | self.assertEquals(trace.name, "foo") |
| 40 | |
| 41 | def test_bare_trace_can_add_parsed_event(self): |
| 42 | """The BareTrace() class can add parsed events to its collection of trace events""" |
| 43 | trace = trappy.BareTrace() |
| 44 | trace.add_parsed_event("pmu_counters", self.dfr[0]) |
| 45 | |
| 46 | self.assertEquals(len(trace.pmu_counters.data_frame), 3) |
| 47 | self.assertEquals(trace.pmu_counters.data_frame["l1_misses"].iloc[0], 24) |
| 48 | |
| 49 | trace.add_parsed_event("pivoted_counters", self.dfr[0], pivot="cpu") |
| 50 | self.assertEquals(trace.pivoted_counters.pivot, "cpu") |
| 51 | |
| 52 | def test_bare_trace_get_duration(self): |
| 53 | """BareTrace.get_duration() works for a simple case""" |
| 54 | |
| 55 | trace = trappy.BareTrace() |
| 56 | trace.add_parsed_event("pmu_counter", self.dfr[0]) |
| 57 | trace.add_parsed_event("load_event", self.dfr[1]) |
| 58 | |
Valentin Schneider | 211eeb5 | 2017-09-18 11:49:11 +0100 | [diff] [blame] | 59 | self.assertEquals(trace.get_duration(), self.dfr[1].index[-1] - self.dfr[0].index[0]) |
Javi Merino | 08f3c34 | 2015-12-21 17:20:12 +0000 | [diff] [blame] | 60 | |
| 61 | def test_bare_trace_get_duration_normalized(self): |
| 62 | """BareTrace.get_duration() works if the trace has been normalized""" |
| 63 | |
| 64 | trace = trappy.BareTrace() |
| 65 | trace.add_parsed_event("pmu_counter", self.dfr[0].copy()) |
| 66 | trace.add_parsed_event("load_event", self.dfr[1].copy()) |
| 67 | |
| 68 | basetime = self.dfr[0].index[0] |
Chris Redpath | b01c848 | 2017-06-17 17:19:55 +0100 | [diff] [blame] | 69 | trace._normalize_time(basetime) |
Javi Merino | 08f3c34 | 2015-12-21 17:20:12 +0000 | [diff] [blame] | 70 | |
| 71 | expected_duration = self.dfr[1].index[-1] - basetime |
| 72 | self.assertEquals(trace.get_duration(), expected_duration) |
| 73 | |
| 74 | def test_bare_trace_normalize_time_accepts_basetime(self): |
| 75 | """BareTrace().normalize_time() accepts an arbitrary basetime""" |
| 76 | |
| 77 | trace = trappy.BareTrace() |
| 78 | trace.add_parsed_event("pmu_counter", self.dfr[0].copy()) |
| 79 | |
| 80 | prev_first_time = trace.pmu_counter.data_frame.index[0] |
| 81 | basetime = 3 |
| 82 | |
Chris Redpath | b01c848 | 2017-06-17 17:19:55 +0100 | [diff] [blame] | 83 | trace._normalize_time(basetime) |
Javi Merino | 08f3c34 | 2015-12-21 17:20:12 +0000 | [diff] [blame] | 84 | |
| 85 | self.assertEquals(trace.basetime, basetime) |
| 86 | |
| 87 | exp_first_time = prev_first_time - basetime |
| 88 | self.assertEquals(round(trace.pmu_counter.data_frame.index[0] - exp_first_time, 7), 0) |