diff --git a/lisa/env.py b/lisa/env.py index a6964224dd72154287cac2ec545abe6583c3689f..611c4b836c03733cfb6e724443bc711b59fff0ae 100644 --- a/lisa/env.py +++ b/lisa/env.py @@ -184,7 +184,6 @@ class TestEnv(Loggable, HideExekallID): logger.info('User-defined platform information:\n%s', self.plat_info) - self.ftrace = None self._installed_tools = set() self.target = self._init_target(self.target_conf, self._res_dir) @@ -502,10 +501,10 @@ class TestEnv(Loggable, HideExekallID): self._installed_tools.update(tools) - def configure_ftrace(self, events=None, functions=None, - buffsize=FTRACE_BUFSIZE_DEFAULT): + def get_ftrace_collector(self, events=None, functions=None, + buffsize=FTRACE_BUFSIZE_DEFAULT): """ - Setup the environment's :class:`devlib.trace.FtraceCollector` + Get a configured FtraceCollector :param events: The events to trace :type events: list(str) @@ -517,6 +516,8 @@ class TestEnv(Loggable, HideExekallID): :type buffsize: int :raises RuntimeError: If no event nor function is to be traced + + :returns: devlib.trace.FtraceCollector """ logger = self.get_logger() @@ -547,7 +548,7 @@ class TestEnv(Loggable, HideExekallID): if 'trace-cmd' not in self._installed_tools: self.install_tools(['trace-cmd']) - self.ftrace = devlib.FtraceCollector( + ftrace = devlib.FtraceCollector( self.target, events = events, functions = functions, @@ -565,6 +566,8 @@ class TestEnv(Loggable, HideExekallID): for function in functions: logger.info(' %s', function) + return ftrace + @contextlib.contextmanager def freeze_userspace(self): """ @@ -595,17 +598,33 @@ class TestEnv(Loggable, HideExekallID): self.target.cgroups.freeze(thaw=True) @contextlib.contextmanager - def record_ftrace(self, output_file): + def collect_ftrace(self, output_file, events=None, functions=None, + buffsize=FTRACE_BUFSIZE_DEFAULT): """ - Context manager that lets you record an Ftrace trace + Context manager that lets you collect an Ftrace trace :param output_file: Filepath for the trace to be created :type output_file: str + + :param events: The events to trace + :type events: list(str) + + :param functions: the kernel functions to trace + :type functions: list(str) + + :param buffsize: The size of the Ftrace buffer + :type buffsize: int + + :raises RuntimeError: If no event nor function is to be traced """ - self.ftrace.start() - yield - self.ftrace.stop() - self.ftrace.get_trace(output_file) + ftrace = self.get_ftrace_collector(events, functions, buffsize) + + ftrace.start() + + yield ftrace + + ftrace.stop() + ftrace.get_trace(output_file) @contextlib.contextmanager def disable_idle_states(self): diff --git a/lisa/tests/kernel/test_bundle.py b/lisa/tests/kernel/test_bundle.py index c8271c07d7ab308d0a487fa443cdf7b27deae1cc..18d732b0993903dbae6213d45d2c6c319e4b2df0 100644 --- a/lisa/tests/kernel/test_bundle.py +++ b/lisa/tests/kernel/test_bundle.py @@ -329,7 +329,7 @@ class RTATestBundle(TestBundle, abc.ABC): } """ The FTrace configuration used to record a trace while the synthetic workload - is being run. Items are arguments to :meth:`lisa.env.TestEnv.configure_ftrace`. + is being run. Items are arguments to :meth:`lisa.env.TestEnv.collect_ftrace`. """ TASK_PERIOD_MS = 16 @@ -374,9 +374,8 @@ class RTATestBundle(TestBundle, abc.ABC): profile, res_dir=res_dir) trace_path = os.path.join(res_dir, "trace.dat") - te.configure_ftrace(**cls.ftrace_conf) - with te.record_ftrace(trace_path), te.freeze_userspace(): + with te.collect_ftrace(trace_path, **cls.ftrace_conf), te.freeze_userspace(): wload.run() @classmethod