diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2018-01-22 15:38:54 +0100 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2018-01-22 15:38:54 +0100 | 
| commit | 9771ea33a14ebd90e6878963e4f0e99be09b4aca (patch) | |
| tree | 3d0fcd9d50d8e3980bca01457ec065f945d48300 /lib | |
| parent | c6c4ca2b01ab9067d0e5fbb09cc30cb3065dd39e (diff) | |
Do not rely on self.setup (prepare for multi-measurement support)
Diffstat (limited to 'lib')
| -rwxr-xr-x | lib/dfatool.py | 19 | 
1 files changed, 10 insertions, 9 deletions
| diff --git a/lib/dfatool.py b/lib/dfatool.py index 85ba7c9..6c3f322 100755 --- a/lib/dfatool.py +++ b/lib/dfatool.py @@ -101,6 +101,7 @@ def _preprocess_measurement(measurement):      processed_data = {          'info' : measurement['info'], +        'setup' : measurement['setup'],          'triggers' : len(trigidx),          'first_trig' : trigidx[0] * 10,          'calibration' : caldata, @@ -115,24 +116,25 @@ class AEMRAnalyzer:          self.filename = filename          self.version = 0 -    def _state_is_too_short(self, online, offline, next_transition): +    def _state_is_too_short(self, online, offline, state_duration, next_transition):          # We cannot control when an interrupt causes a state to be left          if next_transition['plan']['level'] == 'epilogue':              return False          # Note: state_duration is stored as ms, not us -        return offline['us'] < self.setup['state_duration'] * 500 +        return offline['us'] < state_duration * 500 -    def _state_is_too_long(self, online, offline, prev_transition): +    def _state_is_too_long(self, online, offline, state_duration, prev_transition):          # If the previous state was left by an interrupt, we may have some          # waiting time left over. So it's okay if the current state is longer          # than expected.          if prev_transition['plan']['level'] == 'epilogue':              return False          # state_duration is stored as ms, not us -        return offline['us'] > self.setup['state_duration'] * 1500 +        return offline['us'] > state_duration * 1500      def _measurement_is_valid(self, processed_data): +        state_duration = processed_data['setup']['state_duration']          # Check trigger count          if self.sched_trigger_count != processed_data['triggers']:              processed_data['error'] = 'got {got:d} trigger edges, expected {exp:d}'.format( @@ -164,14 +166,14 @@ class AEMRAnalyzer:              if online_trace_part['isa'] == 'state' and online_trace_part['name'] != 'UNINITIALIZED':                  online_prev_transition = self.traces[online_run_idx]['trace'][online_trace_part_idx-1]                  online_next_transition = self.traces[online_run_idx]['trace'][online_trace_part_idx+1] -                if self._state_is_too_short(online_trace_part, offline_trace_part, online_next_transition): +                if self._state_is_too_short(online_trace_part, offline_trace_part, state_duration, online_next_transition):                      processed_data['error'] = 'Offline #{off_idx:d} (online {on_name:s} @ {on_idx:d}/{on_sub:d}) is too short (duration = {dur:d} us)'.format(                          off_idx = offline_idx, on_idx = online_run_idx,                          on_sub = online_trace_part_idx,                          on_name = online_trace_part['name'],                          dur = offline_trace_part['us'])                      return False -                if self._state_is_too_long(online_trace_part, offline_trace_part, online_prev_transition): +                if self._state_is_too_long(online_trace_part, offline_trace_part, state_duration, online_prev_transition):                      processed_data['error'] = 'Offline #{off_idx:d} (online {on_name:s} @ {on_idx:d}/{on_sub:d}) is too long (duration = {dur:d} us)'.format(                          off_idx = offline_idx, on_idx = online_run_idx,                          on_sub = online_trace_part_idx, @@ -203,15 +205,14 @@ class AEMRAnalyzer:      # be analyzed.      def preprocess_0(self):          with tarfile.open(self.filename) as tf: -            self.setup = json.load(tf.extractfile('setup.json')) +            setup = json.load(tf.extractfile('setup.json'))              self.traces = json.load(tf.extractfile('src/apps/DriverEval/DriverLog.json')) -            print(self.setup)              mim_files = []              for member in tf.getmembers():                  _, extension = os.path.splitext(member.name)                  if extension == '.mim':                      mim_files.append({ -                        'setup' : self.setup, +                        'setup' : setup,                          'info' : member,                          'content' : tf.extractfile(member).read()                      }) | 
