diff mbox

[5/8] tools/kvm_stat: cache compiled regular expression

Message ID 20180205130004.29691-6-raspl@linux.vnet.ibm.com (mailing list archive)
State New, archived
Headers show

Commit Message

Stefan Raspl Feb. 5, 2018, 1 p.m. UTC
From: Stefan Raspl <stefan.raspl@de.ibm.com>

Should save us a couple of cycles.

Signed-off-by: Stefan Raspl <raspl@linux.vnet.ibm.com>
---
 tools/kvm/kvm_stat/kvm_stat | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)
diff mbox

Patch

diff --git a/tools/kvm/kvm_stat/kvm_stat b/tools/kvm/kvm_stat/kvm_stat
index 185a642288c3..8bdbd14c5bb6 100755
--- a/tools/kvm/kvm_stat/kvm_stat
+++ b/tools/kvm/kvm_stat/kvm_stat
@@ -480,7 +480,7 @@  class Provider(object):
         """Indicate whether field is valid according to fields_filter."""
         if not fields_filter:
             return True
-        return re.match(fields_filter, field) is not None
+        return fields_filter.match(field) is not None
 
     @staticmethod
     def walkdir(path):
@@ -811,9 +811,10 @@  class Stats(object):
 
     """
     def __init__(self, options):
-        self.providers = self.__get_providers(options)
         self._pid_filter = options.pid
         self._fields_filter = options.fields
+        self._fields_filter_comp = re.compile(options.fields)
+        self.providers = self.__get_providers(options)
         self.values = {}
 
     def __get_providers(self, options):
@@ -821,10 +822,12 @@  class Stats(object):
         providers = []
 
         if options.debugfs:
-            providers.append(DebugfsProvider(options.pid, options.fields,
+            providers.append(DebugfsProvider(self._pid_filter,
+                                             self._fields_filter_comp,
                                              options.dbgfs_include_past))
         if options.tracepoints or not providers:
-            providers.append(TracepointProvider(options.pid, options.fields))
+            providers.append(TracepointProvider(self._pid_filter,
+                                                self._fields_filter_comp))
 
         return providers
 
@@ -834,7 +837,7 @@  class Stats(object):
         # also clear the cache of old values.
         self.values = {}
         for provider in self.providers:
-            provider.update_fields(self._fields_filter)
+            provider.update_fields(self._fields_filter_comp)
 
     def reset(self):
         self.values = {}
@@ -849,6 +852,7 @@  class Stats(object):
     def fields_filter(self, fields_filter):
         if fields_filter != self._fields_filter:
             self._fields_filter = fields_filter
+            self._fields_filter_comp = re.compile(fields_filter)
             self.__update_provider_filters()
 
     @property
@@ -1040,7 +1044,7 @@  class Tui(object):
             self.stats.fields_filter = DEFAULT_REGEX
 
         elif self.stats.fields_filter == DEFAULT_REGEX:
-            self.stats.fields_filter = None
+            self.stats.fields_filter = ''
 
     def __update_pid(self, pid):
         """Propagates pid selection to stats object."""
@@ -1548,7 +1552,7 @@  def main():
     stats = Stats(options)
 
     if options.fields == 'help':
-        stats.fields_filter = None
+        stats.fields_filter = ''
         event_list = []
         for key in stats.get().keys():
             event_list.append(key.split('(', 1)[0])