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