1e81fdcb135d0325e3bc22fae0583555d20aae280Brendan Jackman#    Copyright 2015-2017 ARM Limited
2fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh#
3aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino# Licensed under the Apache License, Version 2.0 (the "License");
4aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino# you may not use this file except in compliance with the License.
5aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino# You may obtain a copy of the License at
6aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino#
7aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino#     http://www.apache.org/licenses/LICENSE-2.0
8aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino#
9aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino# Unless required by applicable law or agreed to in writing, software
10aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino# distributed under the License is distributed on an "AS IS" BASIS,
11aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino# See the License for the specific language governing permissions and
13aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino# limitations under the License.
14aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino#
15aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino
16fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh
17fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singhimport unittest
18fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singhimport matplotlib
19fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singhfrom test_sched import BaseTestSched
20435457c8af9d69383ba45e0bd7da022d967a8deaJavi Merinofrom trappy.base import Base
21435457c8af9d69383ba45e0bd7da022d967a8deaJavi Merinoimport trappy
22fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh
23fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh
24fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singhclass DynamicEvent(Base):
25fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh
26fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh    """Test the ability to register
27435457c8af9d69383ba45e0bd7da022d967a8deaJavi Merino       specific classes to trappy"""
28fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh
29fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh    unique_word = "dynamic_test_key"
30fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh    name = "dynamic_event"
31fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh
32fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh
33fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singhclass TestDynamicEvents(BaseTestSched):
34fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh
35fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh    def __init__(self, *args, **kwargs):
36fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh        super(TestDynamicEvents, self).__init__(*args, **kwargs)
37fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh
38fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh    def test_dynamic_data_frame(self):
39fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh        """
40fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh           Test if the dynamic events are populated
41fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh           in the data frame
42fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh        """
43a5db2d84050d18299f20c227b5f82895584a3c79Javi Merino        parse_class = trappy.register_dynamic_ftrace("DynamicEvent", "dynamic_test_key")
44c26a323210533d4ed3a8b4e62c33744236e3bedaJavi Merino        t = trappy.FTrace(name="first")
45c26a323210533d4ed3a8b4e62c33744236e3bedaJavi Merino        self.assertTrue(len(t.dynamic_event.data_frame) == 1)
46fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh
47a5db2d84050d18299f20c227b5f82895584a3c79Javi Merino        trappy.unregister_dynamic_ftrace(parse_class)
48a5db2d84050d18299f20c227b5f82895584a3c79Javi Merino
49fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh    def test_dynamic_class_attr(self):
50fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh        """
51fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh           Test the attibutes of the dynamically
52fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh           generated class
53fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh        """
54fecb2676b883265a98e37deff1e4764337647c16Javi Merino        cls = trappy.register_dynamic_ftrace("DynamicEvent", "dynamic_test_key",
558aab693fd15b09cabfdac03d0e186332ad405fdaKapileshwar Singh              pivot="test_pivot")
56fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh        self.assertEquals(cls.__name__, "DynamicEvent")
57fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh        self.assertEquals(cls.name, "dynamic_event")
58fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh        self.assertEquals(cls.unique_word, "dynamic_test_key")
598aab693fd15b09cabfdac03d0e186332ad405fdaKapileshwar Singh        self.assertEquals(cls.pivot, "test_pivot")
60fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh
61a5db2d84050d18299f20c227b5f82895584a3c79Javi Merino        trappy.unregister_dynamic_ftrace(cls)
62a5db2d84050d18299f20c227b5f82895584a3c79Javi Merino
63fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh    def test_dynamic_event_plot(self):
64fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh        """Test if plotter can accept a dynamic class
65fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh            for a template argument"""
66fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh
67fecb2676b883265a98e37deff1e4764337647c16Javi Merino        cls = trappy.register_dynamic_ftrace("DynamicEvent", "dynamic_test_key")
68c26a323210533d4ed3a8b4e62c33744236e3bedaJavi Merino        t = trappy.FTrace(name="first")
69c26a323210533d4ed3a8b4e62c33744236e3bedaJavi Merino        l = trappy.LinePlot(t, cls, column="load")
70a204044b4a86c0dceb2cbe3c2e88645281739a6dKapileshwar Singh        l.view(test=True)
71fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh
72a5db2d84050d18299f20c227b5f82895584a3c79Javi Merino        trappy.unregister_dynamic_ftrace(cls)
73a5db2d84050d18299f20c227b5f82895584a3c79Javi Merino
74fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh    def test_dynamic_event_scope(self):
75fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh	"""Test the case when an "all" scope class is
76fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh	registered. it should appear in both thermal and sched
77c26a323210533d4ed3a8b4e62c33744236e3bedaJavi Merino	ftrace class definitions when scoped ftrace objects are created
78fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh	"""
79fecb2676b883265a98e37deff1e4764337647c16Javi Merino        cls = trappy.register_dynamic_ftrace("DynamicEvent", "dynamic_test_key")
80c26a323210533d4ed3a8b4e62c33744236e3bedaJavi Merino        t1 = trappy.FTrace(name="first")
81c26a323210533d4ed3a8b4e62c33744236e3bedaJavi Merino	self.assertTrue(t1.class_definitions.has_key(cls.name))
82fb8fa1aab48d9731010f1d46a2c426582b1bd0a8Kapileshwar Singh
83a5db2d84050d18299f20c227b5f82895584a3c79Javi Merino        trappy.unregister_dynamic_ftrace(cls)
84a5db2d84050d18299f20c227b5f82895584a3c79Javi Merino
85fecb2676b883265a98e37deff1e4764337647c16Javi Merino    def test_register_ftrace_parser(self):
86fecb2676b883265a98e37deff1e4764337647c16Javi Merino        trappy.register_ftrace_parser(DynamicEvent)
87c26a323210533d4ed3a8b4e62c33744236e3bedaJavi Merino        t = trappy.FTrace(name="first")
88c26a323210533d4ed3a8b4e62c33744236e3bedaJavi Merino        self.assertTrue(len(t.dynamic_event.data_frame) == 1)
891b4aa0c623eae94c05385dfd533dedd1d202abf8Javi Merino
90a5db2d84050d18299f20c227b5f82895584a3c79Javi Merino        trappy.unregister_ftrace_parser(DynamicEvent)
91a5db2d84050d18299f20c227b5f82895584a3c79Javi Merino
921b4aa0c623eae94c05385dfd533dedd1d202abf8Javi Merino    def test_no_none_pivot(self):
93fecb2676b883265a98e37deff1e4764337647c16Javi Merino        """register_dynamic_ftrace() with default value for pivot doesn't create a class with a pivot=None"""
94fecb2676b883265a98e37deff1e4764337647c16Javi Merino        cls = trappy.register_dynamic_ftrace("MyEvent", "my_dyn_test_key")
951b4aa0c623eae94c05385dfd533dedd1d202abf8Javi Merino        self.assertFalse(hasattr(cls, "pivot"))
96b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino
97a5db2d84050d18299f20c227b5f82895584a3c79Javi Merino        trappy.unregister_dynamic_ftrace(cls)
98a5db2d84050d18299f20c227b5f82895584a3c79Javi Merino
99b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino    def test_unregister_dynamic_ftrace(self):
100b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        """Test that dynamic events can be unregistered"""
101b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        dyn_event = trappy.register_dynamic_ftrace("DynamicEvent",
102b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino                                                   "dynamic_test_key")
103b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        trace = trappy.FTrace(name="first")
104b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        self.assertTrue(len(trace.dynamic_event.data_frame) == 1)
105b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino
106b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        trappy.unregister_dynamic_ftrace(dyn_event)
107b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        trace = trappy.FTrace(name="first")
108b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino
109b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        self.assertFalse(hasattr(trace, "dynamic_event"))
110b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino
111b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        dyn_event = trappy.register_dynamic_ftrace("DynamicEvent",
112b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino                                                   "dynamic_test_key",
113b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino                                                   scope="sched")
114b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        trace = trappy.FTrace(name="first")
115b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        self.assertTrue(len(trace.dynamic_event.data_frame) == 1)
116b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino
117b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        trappy.unregister_dynamic_ftrace(dyn_event)
118b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        trace = trappy.FTrace(name="first")
119b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino
120b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        self.assertFalse(hasattr(trace, "dynamic_event"))
121b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino
122b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino    def test_unregister_ftrace_parser(self):
123b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        """unregister_ftrace_parser() works"""
124b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        trappy.register_ftrace_parser(DynamicEvent)
125b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        trappy.unregister_ftrace_parser(DynamicEvent)
126b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        trace = trappy.FTrace()
127b280b4fd175789648650f66ed5fb3b4f42fb3de2Javi Merino        self.assertFalse(hasattr(trace, "dynamic_event"))
128