mirror of
https://github.com/ARM-software/devlib.git
synced 2025-01-31 10:10:46 +00:00
module: gem5stats: enhance match() with regex support
The current implementation of match() in the gem5stats module returns records matching exactly the specified keys. This commit changes this behaviour by matching keys over regular expressions, hence resulting in a much more powerful match() implementation.
This commit is contained in:
parent
66a50a2f49
commit
64c865de59
@ -12,6 +12,7 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
import re
|
||||||
import sys
|
import sys
|
||||||
import logging
|
import logging
|
||||||
import os.path
|
import os.path
|
||||||
@ -139,6 +140,10 @@ class Gem5StatsModule(Module):
|
|||||||
self.logger.warning('Trying to match records in statistics file'
|
self.logger.warning('Trying to match records in statistics file'
|
||||||
' while ROI {} is running'.format(label))
|
' while ROI {} is running'.format(label))
|
||||||
|
|
||||||
|
# Construct one large regex that concatenates all keys because
|
||||||
|
# matching one large expression is more efficient than several smaller
|
||||||
|
all_keys_re = re.compile('|'.join(keys))
|
||||||
|
|
||||||
def roi_active(roi_label, dump):
|
def roi_active(roi_label, dump):
|
||||||
roi = self.rois[roi_label]
|
roi = self.rois[roi_label]
|
||||||
return (roi.field in dump) and (int(dump[roi.field]) == 1)
|
return (roi.field in dump) and (int(dump[roi.field]) == 1)
|
||||||
@ -148,8 +153,8 @@ class Gem5StatsModule(Module):
|
|||||||
for dump in iter_statistics_dump(stats_file):
|
for dump in iter_statistics_dump(stats_file):
|
||||||
active_rois = [l for l in rois_labels if roi_active(l, dump)]
|
active_rois = [l for l in rois_labels if roi_active(l, dump)]
|
||||||
if active_rois:
|
if active_rois:
|
||||||
record = {k: dump[k] for k in keys}
|
rec = {k: dump[k] for k in dump if all_keys_re.search(k)}
|
||||||
yield (record, active_rois)
|
yield (rec, active_rois)
|
||||||
|
|
||||||
def next_dump_no(self):
|
def next_dump_no(self):
|
||||||
'''
|
'''
|
||||||
|
Loading…
x
Reference in New Issue
Block a user