[PATCH 3/6] tools/kvm_stat: cache compiled regular expression

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Stefan Raspl <stefan.raspl@xxxxxxxxxx>

Should save us a couple of cycles.

Signed-off-by: Stefan Raspl <raspl@xxxxxxxxxxxxxxxxxx>
---
 tools/kvm/kvm_stat/kvm_stat | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/tools/kvm/kvm_stat/kvm_stat b/tools/kvm/kvm_stat/kvm_stat
index d7c80ac0374d..9f7e21cd5d19 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])
-- 
2.13.5




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux