From 96e361d4b051a4efc006a142c25889d5bfb122b2 Mon Sep 17 00:00:00 2001 From: Kajetan Puchalski Date: Wed, 23 Aug 2023 17:01:53 +0100 Subject: [PATCH] instruments/trace_cmd: Support setting trace-cmd mode The doc comment for the instrument mentions the option to select the trace_cmd_mode ('start' or 'record'). As far as I can tell this was never implemented. This commit adds the support for passing trace_cmd_mode to the FtraceCollector in devlib. While at it, it also does some slight cleanup aronud the instrument, e.g. in the teardown() implementation which should be folded inside the collector instead of reimplemented here. Signed-off-by: Kajetan Puchalski --- wa/instruments/trace_cmd.py | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/wa/instruments/trace_cmd.py b/wa/instruments/trace_cmd.py index 35a37712..6ffb390a 100644 --- a/wa/instruments/trace_cmd.py +++ b/wa/instruments/trace_cmd.py @@ -28,13 +28,7 @@ from wa.utils.types import list_of_strings from wa.utils.misc import which -OUTPUT_TRACE_FILE = 'trace.dat' -OUTPUT_TEXT_FILE = '{}.txt'.format(os.path.splitext(OUTPUT_TRACE_FILE)[0]) -TIMEOUT = 180 - - class TraceCmdInstrument(Instrument): - name = 'trace-cmd' description = """ trace-cmd is an instrument which interacts with ftrace Linux kernel internal @@ -70,9 +64,7 @@ class TraceCmdInstrument(Instrument): on collecting a lot of trace over long periods of time, the buffer size will not be enough and you will only get trace for the last portion of your run. To deal with this you can set the ``trace_mode`` setting to - ``'record'`` (the default is ``'start'``):: - - trace_cmd_mode = 'record' + ``'record'`` (the default is ``'start'``). This will cause trace-cmd to trace into file(s) on disk, rather than the buffer, and so the limit for the max size of the trace is set by the @@ -162,6 +154,11 @@ class TraceCmdInstrument(Instrument): installed on the host (the one in your distribution's repos may be too old). """), + Parameter('trace_cmd_mode', kind=str, default='start', allowed_values=['start', 'record'], + description=""" + The mode that trace-cmd will be started in. + For more details, consult the trace-cmd documentation. + """) ] def __init__(self, target, **kwargs): @@ -183,6 +180,7 @@ class TraceCmdInstrument(Instrument): no_install=self.no_install, strict=False, report_on_target=False, + trace_cmd_mode=self.trace_cmd_mode, ) if self.report and self.report_on_target: collector_params['autoreport'] = True @@ -226,11 +224,12 @@ class TraceCmdInstrument(Instrument): context.add_artifact('trace-cmd-txt', textfile, 'export') def teardown(self, context): - path = self.target.path.join(self.target.working_directory, OUTPUT_TRACE_FILE) - self.target.remove(path) - if self.report_on_target: - path = self.target.path.join(self.target.working_directory, OUTPUT_TEXT_FILE) - self.target.remove(path) + if self.collector: + self.collector.teardown() + + def finalize(self, context): + if self.collector: + self.collector.finalize() def validate(self): if self.report and not self.report_on_target and not which('trace-cmd'):