From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44417) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a706t-0003KA-16 for qemu-devel@nongnu.org; Thu, 10 Dec 2015 07:14:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a706o-0003rD-Aw for qemu-devel@nongnu.org; Thu, 10 Dec 2015 07:14:10 -0500 Received: from e06smtp08.uk.ibm.com ([195.75.94.104]:56626) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a706o-0003qf-0S for qemu-devel@nongnu.org; Thu, 10 Dec 2015 07:14:06 -0500 Received: from localhost by e06smtp08.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 10 Dec 2015 12:14:04 -0000 Received: from b06cxnps4074.portsmouth.uk.ibm.com (d06relay11.portsmouth.uk.ibm.com [9.149.109.196]) by d06dlp02.portsmouth.uk.ibm.com (Postfix) with ESMTP id E5CF4219004D for ; Thu, 10 Dec 2015 12:13:52 +0000 (GMT) Received: from d06av06.portsmouth.uk.ibm.com (d06av06.portsmouth.uk.ibm.com [9.149.37.217]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id tBACE0pf23527672 for ; Thu, 10 Dec 2015 12:14:00 GMT Received: from d06av06.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av06.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id tBACDxdk025595 for ; Thu, 10 Dec 2015 05:14:00 -0700 From: Janosch Frank Date: Thu, 10 Dec 2015 13:13:03 +0100 Message-Id: <1449749584-23214-34-git-send-email-frankja@linux.vnet.ibm.com> In-Reply-To: <1449749584-23214-1-git-send-email-frankja@linux.vnet.ibm.com> References: <1449749584-23214-1-git-send-email-frankja@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH 33/34] scripts/kvm/kvm_stat: Fixup filtering List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: cornelia.huck@de.ibm.com, frankja@linux.vnet.ibm.com When filtering, the group leader event should not be disabled, as all other events under it will also be disabled. Also we should make sure that values from disabled fields will not be displayed. This also filters the fields from the log and batch output for better readability. Also the drilldown update now directly checks for the stats' field filter and (un)sets drilldown accordingly. --- scripts/kvm/kvm_stat | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat index 616ecb4..556e5ca 100755 --- a/scripts/kvm/kvm_stat +++ b/scripts/kvm/kvm_stat @@ -450,6 +450,9 @@ class TracepointProvider(object): group.add_event(event_data) self.group_leaders.append(group) + def available_fields(self): + return self.get_available_fields() + @property def fields(self): return self._fields @@ -458,23 +461,30 @@ class TracepointProvider(object): def fields(self, fields): self._fields = fields for group in self.group_leaders: - for event in group.events: + for index, event in enumerate(group.events): if event.name in fields: event.reset() event.enable() else: - event.disable() + # Do not disable the group leader. + # It would disable all of its events. + if index != 0: + event.disable() def read(self): ret = defaultdict(int) for group in self.group_leaders: for name, val in group.read().iteritems(): - ret[name] += val + if name in self._fields: + ret[name] += val return ret class DebugfsProvider(object): def __init__(self): - self._fields = walkdir(PATH_DEBUGFS)[2] + self._fields = self.get_available_fields() + + def get_available_fields(self): + return walkdir(PATH_DEBUGFS)[2] @property def fields(self): @@ -506,7 +516,8 @@ class Stats(object): # also clear the cache of old values. self.values = {} for provider in self.providers: - provider_fields = [key for key in provider.fields if wanted(key)] + provider_fields = [key for key in provider.get_available_fields() + if wanted(key)] provider.fields = provider_fields @property @@ -540,15 +551,14 @@ class Tui(object): self.drilldown = False curses.use_default_colors() curses.noecho() - self.fields_filter = self.stats.fields_filter self.update_drilldown() def update_drilldown(self): - if not self.fields_filter: - if self.drilldown: - self.stats.fields_filter = None - else: - self.stats.fields_filter = r'^[^\(]*$' + if not self.stats.fields_filter: + self.stats.fields_filter = r'^[^\(]*$' + + elif self.stats.fields_filter == r'^[^\(]*$': + self.stats.fields_filter = None def refresh(self, sleeptime): self.screen.erase() -- 2.3.0