1
0
mirror of https://github.com/ARM-software/devlib.git synced 2025-03-13 13:27:51 +00:00

instrument/frames: Add GfxInfoFramesInstrument

Added an instrument that exposes the GfxinfoFramesCollector via the
standard instrument APIs.
This commit is contained in:
Sergei Trofimov 2017-06-06 14:26:50 +01:00
parent 195085e28d
commit 4adefecb55
2 changed files with 54 additions and 0 deletions

View File

@ -13,6 +13,7 @@ from devlib.instrument import Instrument, InstrumentChannel, Measurement, Measur
from devlib.instrument import MEASUREMENT_TYPES, INSTANTANEOUS, CONTINUOUS
from devlib.instrument.daq import DaqInstrument
from devlib.instrument.energy_probe import EnergyProbeInstrument
from devlib.instrument.frames import GfxInfoFramesInstrument
from devlib.instrument.hwmon import HwmonInstrument
from devlib.instrument.monsoon import MonsoonInstrument
from devlib.instrument.netstats import NetstatsInstrument

View File

@ -0,0 +1,53 @@
from devlib.instrument import (Instrument, CONTINUOUS,
MeasurementsCsv, MeasurementType)
from devlib.utils.rendering import (GfxinfoFrameCollector,
read_gfxinfo_columns)
class GfxInfoFramesInstrument(Instrument):
mode = CONTINUOUS
def __init__(self, target, package, period=2, keep_raw=True):
super(GfxInfoFramesInstrument, self).__init__(target)
self.package = package
self.period = period
self.keep_raw = keep_raw
self.collector = None
self.header = None
self._need_reset = True
self._init_channels()
def reset(self, sites=None, kinds=None, channels=None):
super(GfxInfoFramesInstrument, self).reset(sites, kinds, channels)
self.collector = GfxinfoFrameCollector(self.target, self.period,
self.package, self.header)
self._need_reset = False
def start(self):
if self._need_reset:
self.reset()
self.collector.start()
def stop(self):
self.collector.stop()
self._need_reset = True
def get_data(self, outfile):
raw_outfile = None
if self.keep_raw:
raw_outfile = outfile + '.raw'
self.collector.process_frames(raw_outfile)
active_sites = [chan.label for chan in self.active_channels]
self.collector.write_frames(outfile, columns=active_sites)
return MeasurementsCsv(outfile, self.active_channels)
def _init_channels(self):
columns = read_gfxinfo_columns(self.target)
for entry in columns:
if entry == 'Flags':
self.add_channel('Flags', MeasurementType('flags', 'flags'))
else:
self.add_channel(entry, 'time_us')
self.header = [chan.label for chan in self.channels.values()]