blob: f1547c30547bc7f1db664ec6843a8fadf579a4c5 [file] [log] [blame]
Brendan Jackmane81fdcb2017-01-04 17:10:29 +00001# Copyright 2015-2017 ARM Limited
Javi Merino08f3c342015-12-21 17:20:12 +00002#
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
16import pandas as pd
17import trappy
18import unittest
19
20class 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 Schneider211eeb52017-09-18 11:49:11 +010059 self.assertEquals(trace.get_duration(), self.dfr[1].index[-1] - self.dfr[0].index[0])
Javi Merino08f3c342015-12-21 17:20:12 +000060
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 Redpathb01c8482017-06-17 17:19:55 +010069 trace._normalize_time(basetime)
Javi Merino08f3c342015-12-21 17:20:12 +000070
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 Redpathb01c8482017-06-17 17:19:55 +010083 trace._normalize_time(basetime)
Javi Merino08f3c342015-12-21 17:20:12 +000084
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)