From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefan Raspl Subject: [PATCH 3/6] tools/kvm_stat: cache compiled regular expression Date: Wed, 14 Feb 2018 22:45:50 +0100 Message-ID: <20180214214553.96753-4-raspl@linux.vnet.ibm.com> References: <20180214214553.96753-1-raspl@linux.vnet.ibm.com> Cc: pbonzini@redhat.com, rkrcmar@redhat.com, frankja@linux.vnet.ibm.com To: kvm@vger.kernel.org Return-path: Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:50690 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1031419AbeBNVqD (ORCPT ); Wed, 14 Feb 2018 16:46:03 -0500 Received: from pps.filterd (m0098414.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w1ELiDiF093793 for ; Wed, 14 Feb 2018 16:46:02 -0500 Received: from e06smtp14.uk.ibm.com (e06smtp14.uk.ibm.com [195.75.94.110]) by mx0b-001b2d01.pphosted.com with ESMTP id 2g4u9u4eaj-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 14 Feb 2018 16:46:02 -0500 Received: from localhost by e06smtp14.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 14 Feb 2018 21:46:00 -0000 In-Reply-To: <20180214214553.96753-1-raspl@linux.vnet.ibm.com> Sender: kvm-owner@vger.kernel.org List-ID: From: Stefan Raspl Should save us a couple of cycles. Signed-off-by: Stefan Raspl --- 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