From patchwork Thu Mar 19 14:10:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 11447277 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 882796CA for ; Thu, 19 Mar 2020 14:10:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5BA642070A for ; Thu, 19 Mar 2020 14:10:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="l0f4sUuF" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727763AbgCSOK5 (ORCPT ); Thu, 19 Mar 2020 10:10:57 -0400 Received: from mail-lf1-f67.google.com ([209.85.167.67]:40360 "EHLO mail-lf1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727732AbgCSOK5 (ORCPT ); Thu, 19 Mar 2020 10:10:57 -0400 Received: by mail-lf1-f67.google.com with SMTP id j17so1742805lfe.7 for ; Thu, 19 Mar 2020 07:10:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=H3MPEHHYof7ZrvtG0+umwwT4+AgM2wjLWG9PGuFbOzQ=; b=l0f4sUuF4smhxxA4IR/s7k9R1uF5TLP8qPPzi5oZDbpE7VkXnN19mdNtLvgz1sZxaz rTmOl05UwTCpuoabx2hxKGqF/EMu06jM91m6FtFF0pSa+Jgo/60qQRi8Xl3jP2U9Frib 9l33Q2s4JMMqxBxcQQvliSV9yi+JBaVh/JhjbLtoFdQAjEL/0x3M/EcnghyjcJ5aT2g4 VEXOu6wtkXQsircM6spQLk2jgg3WpeEwL0Sn3T1PlfRdJ5MGugzZZc5DqgNzFkrS59f0 pnikUGel0KTkBZGdb3ZnipwjbhXcmGW4x5exByYm8x0YZOrzBjSNRCNi8p6apb8Xuhmt CP+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=H3MPEHHYof7ZrvtG0+umwwT4+AgM2wjLWG9PGuFbOzQ=; b=kdYkR7FVpu6Z7+UpPGEKqQlqhJVuhPfM2PIbaZMZ5lJEU/YJbuKKSxkQeXSo3LCF5d BEaHwyafd039asoluf2h22EPYBd6SdjHRzh1r6rSt6rDhLKnmGO6hGgjXi1tvcMnE3yd MViA2WEkMZo2WSEEzpoGt5kdhCrkMdJX14RT1iz+JoTtFXndixNGcykMGynWGLbFZ+YJ rDUzxCSkMs9T3tNvORama5TI7jtnMDC8V8Os5SzHzUkQbH5OLEe9iTUgj0GGkqEvCrFA BT8N/w8YfchMEu4p4wtl4Zkb0VENoLTc+dJCeJ32uSfQ6YZaLUZHI3vvqlZoscCipq5I 9zdA== X-Gm-Message-State: ANhLgQ0a2URVibrK0D8iNpdYf+oHaPJoNtSVECjEH/HSMUlqnUb9CEoJ cP8o441ulBhMI/nGJdDV90Q= X-Google-Smtp-Source: ADFU+vtmXOCWO5hEvqsKccznHN+1fM8To1yjewqsv3RJHwCeCR9VNl9Gyy6HVDZ5betsSGrTf5uJRg== X-Received: by 2002:a05:6512:49e:: with SMTP id v30mr2259481lfq.158.1584627055007; Thu, 19 Mar 2020 07:10:55 -0700 (PDT) Received: from localhost.localdomain ([84.40.93.223]) by smtp.gmail.com with ESMTPSA id u14sm1817605ljj.54.2020.03.19.07.10.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Mar 2020 07:10:54 -0700 (PDT) From: "Yordan Karadzhov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org, "Yordan Karadzhov (VMware)" Subject: [PATCH 1/5] kernel-shark: Add method for checking if a given ID filter is set Date: Thu, 19 Mar 2020 16:10:27 +0200 Message-Id: <20200319141031.3774-2-y.karadz@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200319141031.3774-1-y.karadz@gmail.com> References: <20200319141031.3774-1-y.karadz@gmail.com> MIME-Version: 1.0 Sender: linux-trace-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org The method is already defined and used as a static function in libkshark.c and libkshark-configio.c (basically having two identical copies). Now we are making this method part of the API. We will later use this method in the GUI (following patch). Signed-off-by: Yordan Karadzhov (VMware) --- kernel-shark/src/libkshark-configio.c | 17 ++++++----------- kernel-shark/src/libkshark.c | 21 ++++++++++++++------- kernel-shark/src/libkshark.h | 2 ++ 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/kernel-shark/src/libkshark-configio.c b/kernel-shark/src/libkshark-configio.c index 5d7323f..f01a39b 100644 --- a/kernel-shark/src/libkshark-configio.c +++ b/kernel-shark/src/libkshark-configio.c @@ -1306,11 +1306,6 @@ bool kshark_import_user_mask(struct kshark_context *kshark_ctx, } } -static bool filter_is_set(struct tracecmd_filter_id *filter) -{ - return filter && filter->count; -} - /** * @brief Record the current configuration of "show task" and "hide task" * filters into a Json document. @@ -1335,13 +1330,13 @@ bool kshark_export_all_event_filters(struct kshark_context *kshark_ctx, return false; /* Save a filter only if it contains Id values. */ - if (filter_is_set(kshark_ctx->show_event_filter)) + if (kshark_this_filter_is_set(kshark_ctx->show_event_filter)) ret &= kshark_export_event_filter(kshark_ctx->pevent, kshark_ctx->show_event_filter, KS_SHOW_EVENT_FILTER_NAME, *conf); - if (filter_is_set(kshark_ctx->hide_event_filter)) + if (kshark_this_filter_is_set(kshark_ctx->hide_event_filter)) ret &= kshark_export_event_filter(kshark_ctx->pevent, kshark_ctx->hide_event_filter, KS_HIDE_EVENT_FILTER_NAME, @@ -1374,12 +1369,12 @@ bool kshark_export_all_task_filters(struct kshark_context *kshark_ctx, return false; /* Save a filter only if it contains Id values. */ - if (filter_is_set(kshark_ctx->show_task_filter)) + if (kshark_this_filter_is_set(kshark_ctx->show_task_filter)) ret &= kshark_export_filter_array(kshark_ctx->show_task_filter, KS_SHOW_TASK_FILTER_NAME, *conf); - if (filter_is_set(kshark_ctx->hide_task_filter)) + if (kshark_this_filter_is_set(kshark_ctx->hide_task_filter)) ret &= kshark_export_filter_array(kshark_ctx->hide_task_filter, KS_HIDE_TASK_FILTER_NAME, *conf); @@ -1412,12 +1407,12 @@ bool kshark_export_all_cpu_filters(struct kshark_context *kshark_ctx, return false; /* Save a filter only if it contains Id values. */ - if (filter_is_set(kshark_ctx->show_task_filter)) + if (kshark_this_filter_is_set(kshark_ctx->show_task_filter)) ret &= kshark_export_filter_array(kshark_ctx->show_cpu_filter, KS_SHOW_CPU_FILTER_NAME, *conf); - if (filter_is_set(kshark_ctx->hide_task_filter)) + if (kshark_this_filter_is_set(kshark_ctx->hide_task_filter)) ret &= kshark_export_filter_array(kshark_ctx->hide_cpu_filter, KS_HIDE_CPU_FILTER_NAME, *conf); diff --git a/kernel-shark/src/libkshark.c b/kernel-shark/src/libkshark.c index a361578..0905359 100644 --- a/kernel-shark/src/libkshark.c +++ b/kernel-shark/src/libkshark.c @@ -445,7 +445,14 @@ void kshark_filter_clear(struct kshark_context *kshark_ctx, int filter_id) tracecmd_filter_id_clear(filter); } -static bool filter_is_set(struct tracecmd_filter_id *filter) +/** + * @brief Check if a given Id filter is set. + * + * @param filter: Input location for the Id filster. + * + * @returns True if the Id filter is set, otherwise False. + */ +bool kshark_this_filter_is_set(struct tracecmd_filter_id *filter) { return filter && filter->count; } @@ -459,12 +466,12 @@ static bool filter_is_set(struct tracecmd_filter_id *filter) */ bool kshark_filter_is_set(struct kshark_context *kshark_ctx) { - return filter_is_set(kshark_ctx->show_task_filter) || - filter_is_set(kshark_ctx->hide_task_filter) || - filter_is_set(kshark_ctx->show_cpu_filter) || - filter_is_set(kshark_ctx->hide_cpu_filter) || - filter_is_set(kshark_ctx->show_event_filter) || - filter_is_set(kshark_ctx->hide_event_filter); + return kshark_this_filter_is_set(kshark_ctx->show_task_filter) || +- kshark_this_filter_is_set(kshark_ctx->hide_task_filter) || +- kshark_this_filter_is_set(kshark_ctx->show_cpu_filter) || +- kshark_this_filter_is_set(kshark_ctx->hide_cpu_filter) || +- kshark_this_filter_is_set(kshark_ctx->show_event_filter) || +- kshark_this_filter_is_set(kshark_ctx->hide_event_filter); } static inline void unset_event_filter_flag(struct kshark_context *kshark_ctx, diff --git a/kernel-shark/src/libkshark.h b/kernel-shark/src/libkshark.h index e795ed4..0d6c50d 100644 --- a/kernel-shark/src/libkshark.h +++ b/kernel-shark/src/libkshark.h @@ -261,6 +261,8 @@ void kshark_filter_add_id(struct kshark_context *kshark_ctx, void kshark_filter_clear(struct kshark_context *kshark_ctx, int filter_id); +bool kshark_this_filter_is_set(struct tracecmd_filter_id *filter); + bool kshark_filter_is_set(struct kshark_context *kshark_ctx); void kshark_filter_entries(struct kshark_context *kshark_ctx, From patchwork Thu Mar 19 14:10:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 11447289 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CD4F71668 for ; Thu, 19 Mar 2020 14:12:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id ABB5E2166E for ; Thu, 19 Mar 2020 14:12:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gWVgQfSv" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727763AbgCSOMp (ORCPT ); Thu, 19 Mar 2020 10:12:45 -0400 Received: from mail-lj1-f196.google.com ([209.85.208.196]:36537 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727782AbgCSOK6 (ORCPT ); Thu, 19 Mar 2020 10:10:58 -0400 Received: by mail-lj1-f196.google.com with SMTP id g12so2661494ljj.3 for ; Thu, 19 Mar 2020 07:10:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2Nv98FMZeYOyy4jWPQ3hjKcfqW2wE9ocQVzMSiGDpvQ=; b=gWVgQfSvhOXpD+LZV+ydqMrEwfzBEV2wUVDjjIla1mz9tB+B1FCXrQh4EndgV7Ewi2 jGTEQkzLX6iEGqLA0x7JW/xqx69GT34nTDXNf/tJqFdncZlr5Zi768r2m0BBd+uJ6/Ph Yp4BdstcJJiOK9gKXy41UL8lx/uiT+2rhIZE9GCzHtkqe0dj/ulzrh7XxOdOCQkX3EhO IWPcvPaYI++QpFf/x+gVlG5OY1N2AbS8pmPyW48CuwegnXZHA2OaxaKvnuQ3mP6zGbd+ okCoO6Fl98DyM5+wK+67uwIYwt/BeUrUH+N6n/NGYgn79WydqYaKH4vNeAjD+IJR5ycn n+NA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2Nv98FMZeYOyy4jWPQ3hjKcfqW2wE9ocQVzMSiGDpvQ=; b=FfsKIng0GfGYwt3M5TLLyG0YstIVWdH4ldiLywFbw3nQV+6qcKJwbqBB4nncidfNRV pCvVY5G7mSo3J/Lv5iKTewJPaROxIdVy7pDTCcmktskAAx6Snrvnkx9clrjST4IwLf5Y JjcXExvIrV3/Kpo3cLzsIApiuZIJ5EobYyqHp2zitUSgyLb7/XOR4ZAIVlEBup0QGhsY aKON360a5SbN6Yk7XvCm8NqFcThJZN0b7lExETc94NJeCrS+XMMeJC/HGYUva+B1Pqcc egKTNOMTjtuqKjmZpXgDmV+oWUGRP2s503k/x52D1T+wIH9vRO3LaP+XSvVeRSgM06LO gB7Q== X-Gm-Message-State: ANhLgQ27MSbecyGH9ptl7AVVS+ih1KnkAa0HXtMcwDfU0HZ2r4Bp8C6m mGl32CWnXzpWy7tCX39+w+w= X-Google-Smtp-Source: ADFU+vvXJWUx3vd8c5mGfupKGFEOHA9e15u6U1qY3Fxp7/mqdG2gA+azVlKjH+gbqP236J8HR1f/YA== X-Received: by 2002:a05:651c:233:: with SMTP id z19mr2161827ljn.176.1584627057532; Thu, 19 Mar 2020 07:10:57 -0700 (PDT) Received: from localhost.localdomain ([84.40.93.223]) by smtp.gmail.com with ESMTPSA id u14sm1817605ljj.54.2020.03.19.07.10.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Mar 2020 07:10:57 -0700 (PDT) From: "Yordan Karadzhov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org, "Yordan Karadzhov (VMware)" Subject: [PATCH 2/5] kernel-shark: Fix bug in bool kshark_export_all_cpu_filters() Date: Thu, 19 Mar 2020 16:10:28 +0200 Message-Id: <20200319141031.3774-3-y.karadz@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200319141031.3774-1-y.karadz@gmail.com> References: <20200319141031.3774-1-y.karadz@gmail.com> MIME-Version: 1.0 Sender: linux-trace-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org It makes no sense to check if a Task filter is set, before exporting a CPU filter. This is most probably a copy/paste bug. Signed-off-by: Yordan Karadzhov (VMware) --- kernel-shark/src/libkshark-configio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel-shark/src/libkshark-configio.c b/kernel-shark/src/libkshark-configio.c index f01a39b..cb7ca54 100644 --- a/kernel-shark/src/libkshark-configio.c +++ b/kernel-shark/src/libkshark-configio.c @@ -1407,12 +1407,12 @@ bool kshark_export_all_cpu_filters(struct kshark_context *kshark_ctx, return false; /* Save a filter only if it contains Id values. */ - if (kshark_this_filter_is_set(kshark_ctx->show_task_filter)) + if (kshark_this_filter_is_set(kshark_ctx->show_cpu_filter)) ret &= kshark_export_filter_array(kshark_ctx->show_cpu_filter, KS_SHOW_CPU_FILTER_NAME, *conf); - if (kshark_this_filter_is_set(kshark_ctx->hide_task_filter)) + if (kshark_this_filter_is_set(kshark_ctx->hide_cpu_filter)) ret &= kshark_export_filter_array(kshark_ctx->hide_cpu_filter, KS_HIDE_CPU_FILTER_NAME, *conf); From patchwork Thu Mar 19 14:10:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 11447285 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CD1106CA for ; Thu, 19 Mar 2020 14:12:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id AC12821473 for ; Thu, 19 Mar 2020 14:12:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PbM4FBtz" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727842AbgCSOMc (ORCPT ); Thu, 19 Mar 2020 10:12:32 -0400 Received: from mail-lj1-f172.google.com ([209.85.208.172]:41113 "EHLO mail-lj1-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727836AbgCSOLD (ORCPT ); Thu, 19 Mar 2020 10:11:03 -0400 Received: by mail-lj1-f172.google.com with SMTP id o10so2630773ljc.8 for ; Thu, 19 Mar 2020 07:11:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hDCxMwSzWRHaK0sSIDqXTIKN/ZygkiDBI31F0c49wEI=; b=PbM4FBtzPVTcrzGxqPGAjOUor5IX4faPm90qTDuNBSHLmI2pqPW06ebayifmFBsmyM a3Qp6BAFCEEwoVhKiCAw1qd4RmRfkruS53Mnd1KKQharrsx9ry/Oe3OpLdj2GNOPi8zA y7ig1JkvIof6A8gEfLTyMT1KNJ8GSErl12wE4h/tunX9T5ej0Uj71ErWGTZjn9xsarPw TqE4cq1QGwB8cyQNXw1Mf0zpX/hna9z51ac2JJgZGHMS/s4iiZJC/KcJTBEwCPqJ40i/ eTQrbd8HqmHU60b0ktIrxzjjWcZ4GKZO0T/GBhJSuCJWpsfi8CGYOqgEN/U2FHNiwBZ1 BTxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hDCxMwSzWRHaK0sSIDqXTIKN/ZygkiDBI31F0c49wEI=; b=S7w5wjJZqDTLasVj4Wwl1lA7uAobrdz7Cw5VGRyB/7t1s1ZFvuPDZm1ctpqwSfH6fE k3JFHUNgPb6DiGI729mhA7GcITvBLjs6PULlIc060aYd/xVa/bLr8fskqdoYXop9ZqGY LRe0cyYIey51MkbYSc+0tHSRx9uxZC/PDX+z/Ihxj5Dc66J3C2A7bVR4MJgkjaWRxf8y ZDwVlsjMyBbVFWGo27ObITSAPy60D7taVAeURO0a2YvJFUUg/CPRyAniHUz4DTU0yAE8 96FzOmFTCbHjJM9nXNBT3KikxkqU3K1K8oRe0pS3PPFynFt1HdtgA0MANOTPNtmvh8OU HTnA== X-Gm-Message-State: ANhLgQ2xXRP2yajMndO3BeY20oZPY7A1vV9Rm54hyZ0eyQ7064dTHuxx qrN1/WFw42xS3ADLRoY7Vi4= X-Google-Smtp-Source: ADFU+vsfNUOJV8CFnXTAYhuv6ZGlxeeehQDg4ECZguGNW6ZVep+GClHz1WGP7tf5g7BTXeU/FJONfQ== X-Received: by 2002:a2e:3608:: with SMTP id d8mr2351298lja.189.1584627059431; Thu, 19 Mar 2020 07:10:59 -0700 (PDT) Received: from localhost.localdomain ([84.40.93.223]) by smtp.gmail.com with ESMTPSA id u14sm1817605ljj.54.2020.03.19.07.10.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Mar 2020 07:10:58 -0700 (PDT) From: "Yordan Karadzhov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org, "Yordan Karadzhov (VMware)" Subject: [PATCH 3/5] kernel-shark: Add two helper methods to KsUtils Date: Thu, 19 Mar 2020 16:10:29 +0200 Message-Id: <20200319141031.3774-4-y.karadz@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200319141031.3774-1-y.karadz@gmail.com> References: <20200319141031.3774-1-y.karadz@gmail.com> MIME-Version: 1.0 Sender: linux-trace-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org The methods can be used to easily retrieve a QVector containing all CPU or Event IDs. We will later use these method in the GUI (following patch). Signed-off-by: Yordan Karadzhov (VMware) --- kernel-shark/src/KsCaptureDialog.cpp | 6 ++--- kernel-shark/src/KsUtils.cpp | 38 ++++++++++++++++++++++++++++ kernel-shark/src/KsUtils.hpp | 4 +++ 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/kernel-shark/src/KsCaptureDialog.cpp b/kernel-shark/src/KsCaptureDialog.cpp index 69b9944..d6f8014 100644 --- a/kernel-shark/src/KsCaptureDialog.cpp +++ b/kernel-shark/src/KsCaptureDialog.cpp @@ -230,7 +230,7 @@ void KsCaptureControl::_importSettings() kshark_config_doc *conf, *jevents, *temp; QVector v(nEvts, false); tracecmd_filter_id *eventHash; - tep_event **events; + QVector eventIds; QString fileName; auto lamImportError = [this] () { @@ -238,7 +238,7 @@ void KsCaptureControl::_importSettings() }; /** Get all available events. */ - events = tep_list_events(_localTEP, TEP_EVENT_SORT_SYSTEM); + eventIds = KsUtils::getEventIdList(TEP_EVENT_SORT_SYSTEM); /* Get the configuration document. */ fileName = KsUtils::getFile(this, "Import from Filter", @@ -277,7 +277,7 @@ void KsCaptureControl::_importSettings() } for (int i = 0; i < nEvts; ++i) { - if (tracecmd_filter_id_find(eventHash, events[i]->id)) + if (tracecmd_filter_id_find(eventHash, eventIds[i])) v[i] = true; } diff --git a/kernel-shark/src/KsUtils.cpp b/kernel-shark/src/KsUtils.cpp index e99509f..77d0c7c 100644 --- a/kernel-shark/src/KsUtils.cpp +++ b/kernel-shark/src/KsUtils.cpp @@ -15,6 +15,22 @@ namespace KsUtils { +/** @brief Get a sorted vector of CPU Ids. */ +QVector getCPUList() +{ + kshark_context *kshark_ctx(nullptr); + int nCPUs; + + if (!kshark_instance(&kshark_ctx)) + return {}; + + nCPUs = tep_get_cpus(kshark_ctx->pevent); + QVector allCPUs = QVector(nCPUs); + std::iota(allCPUs.begin(), allCPUs.end(), 0); + + return allCPUs; +} + /** @brief Get a sorted vector of Task's Pids. */ QVector getPidList() { @@ -37,6 +53,28 @@ QVector getPidList() return pids; } +/** + * @brief Get a sorted vector of Event Ids. + */ +QVector getEventIdList(tep_event_sort_type sortType) +{ + kshark_context *kshark_ctx(nullptr); + tep_event **events; + int nEvts; + + if (!kshark_instance(&kshark_ctx)) + return {}; + + nEvts = tep_get_events_count(kshark_ctx->pevent); + events = tep_list_events(kshark_ctx->pevent, sortType); + + QVector allEvts(nEvts); + for (int i = 0; i < nEvts; ++i) + allEvts[i] = events[i]->id; + + return allEvts; +} + /** @brief Get a sorted vector of Id values of a filter. */ QVector getFilterIds(tracecmd_filter_id *filter) { diff --git a/kernel-shark/src/KsUtils.hpp b/kernel-shark/src/KsUtils.hpp index db1bf5e..f44139b 100644 --- a/kernel-shark/src/KsUtils.hpp +++ b/kernel-shark/src/KsUtils.hpp @@ -82,8 +82,12 @@ std::chrono::high_resolution_clock::now() - t0).count() namespace KsUtils { +QVector getCPUList(); + QVector getPidList(); +QVector getEventIdList(tep_event_sort_type sortType=TEP_EVENT_SORT_ID); + QVector getFilterIds(tracecmd_filter_id *filter); /** @brief Geat the list of plugins. */ From patchwork Thu Mar 19 14:10:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 11447287 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 139101668 for ; Thu, 19 Mar 2020 14:12:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E799B21473 for ; Thu, 19 Mar 2020 14:12:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ULja2hzQ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727328AbgCSOMb (ORCPT ); Thu, 19 Mar 2020 10:12:31 -0400 Received: from mail-lj1-f182.google.com ([209.85.208.182]:41127 "EHLO mail-lj1-f182.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727842AbgCSOLD (ORCPT ); Thu, 19 Mar 2020 10:11:03 -0400 Received: by mail-lj1-f182.google.com with SMTP id o10so2630902ljc.8 for ; Thu, 19 Mar 2020 07:11:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=B8GB/zARppi5VQsVLUke38/sanKYcAT6PYGrz43u9SU=; b=ULja2hzQOH80iwA+POZV6VhJF17ckWTJjikP7BO6pfm6mZNOWoLlaMQqMoL2jufBY/ 6cRoWEIchWMIIout0Za2oJpMdMC/nEWNGMjGU5cAeLh1ZVC2EvMR106yu4ZT9dgFXRH+ H20gcc/Hw1lEst5pW7yINS/qp6scju3a4JLJqA4uFXF3lvPqo16AwK+V/utGpyaRpH3b +pesERuw/dsj32EBAegOs647BhaMcBDFM3khjSNNHBMY6KvUxc9KhZn5rftCF6isuw27 BOy7i2SbKhjJ+ERMxSr4ES0ff1yNe0LoLznZZOIc3dtRcEBuVWBcY9oNQ6jWqZsH6sWn MXWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=B8GB/zARppi5VQsVLUke38/sanKYcAT6PYGrz43u9SU=; b=pE5pTqnhbQF6rOwWJkhwXhpINjQVoY8kN6dtduPM5OK423jeMmwbLLLtoUV62vzXLL j8kXSxIR68Rt0g39MdT7KuAfe+t/o9sUEPxlR8GJYInaOUqNoEjNm1+hsZzZJxq9Usho M864UgJb6oNBCQw/gti53THSgcgM2J4OE3xX6Yjrmv36qkAC8ngQouE1HrA7WAjzhLV4 HH7wt8/OznFgQa9EPEPtyvAXZ9wYAs2u4GOCyVGIUnn9h9pkISZtpgykBOchxwIFoR9J jagok6NpYF9YcHaLMmntuN8JlgbokpSSjBzXqhi1DIrWaqECgn4LHu6q2IQFKPz5vcyz oTQA== X-Gm-Message-State: ANhLgQ2yqVu7yJCIAj3MvdQlZcKOyb5p+WBJI7/LyeYLjjnl2zxbw+4P 03Ol8iMaLIrsD0VsOnorv00= X-Google-Smtp-Source: ADFU+vt4hYmFpWStJ9GT3wG1IP/9AcUVlfeupa29+QYlbCuieGXC9eOxiEbg6lyTgMPLTOAQwgIFJw== X-Received: by 2002:a2e:858c:: with SMTP id b12mr2353613lji.160.1584627061358; Thu, 19 Mar 2020 07:11:01 -0700 (PDT) Received: from localhost.localdomain ([84.40.93.223]) by smtp.gmail.com with ESMTPSA id u14sm1817605ljj.54.2020.03.19.07.11.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Mar 2020 07:11:00 -0700 (PDT) From: "Yordan Karadzhov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org, "Yordan Karadzhov (VMware)" Subject: [PATCH 4/5] kernel-shark: Remove unused methods from KsMainWindow class Date: Thu, 19 Mar 2020 16:10:30 +0200 Message-Id: <20200319141031.3774-5-y.karadz@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200319141031.3774-1-y.karadz@gmail.com> References: <20200319141031.3774-1-y.karadz@gmail.com> MIME-Version: 1.0 Sender: linux-trace-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org We used to have menu actions for applying negative ID filters (do not show) for PIDs and CPU IDs. At some point we decided to remove all menu actions for negative filters in order to avoid users being confused by the possible unexpected behavior in the case when both positive (show only) and negative filters are set. However we kept the corresponding private methods, just in case we want to restore the menu actions in the future. We can now finally remove those methods, because in the following patch the logic will be optimized to automatically decide whether is more efficient to use positive or negative filter. Signed-off-by: Yordan Karadzhov (VMware) --- kernel-shark/src/KsMainWindow.cpp | 69 ------------------------------- kernel-shark/src/KsMainWindow.hpp | 4 -- 2 files changed, 73 deletions(-) diff --git a/kernel-shark/src/KsMainWindow.cpp b/kernel-shark/src/KsMainWindow.cpp index a5a399c..9b5fc2d 100644 --- a/kernel-shark/src/KsMainWindow.cpp +++ b/kernel-shark/src/KsMainWindow.cpp @@ -669,41 +669,6 @@ void KsMainWindow::_showTasks() dialog->show(); } -void KsMainWindow::_hideTasks() -{ - kshark_context *kshark_ctx(nullptr); - KsCheckBoxWidget *tasks_cbd; - KsCheckBoxDialog *dialog; - - if (!kshark_instance(&kshark_ctx)) - return; - - tasks_cbd = new KsTasksCheckBoxWidget(_data.tep(), false, this); - dialog = new KsCheckBoxDialog(tasks_cbd, this); - - if (!kshark_ctx->hide_task_filter || - !kshark_ctx->hide_task_filter->count) { - tasks_cbd->setDefault(false); - } else { - QVector pids = KsUtils::getPidList(); - int nPids = pids.count(); - QVector v(nPids, false); - - for (int i = 0; i < nPids; ++i) { - if (tracecmd_filter_id_find(kshark_ctx->hide_task_filter, - pids[i])) - v[i] = true; - } - - tasks_cbd->set(v); - } - - connect(dialog, &KsCheckBoxDialog::apply, - &_data, &KsDataStore::applyNegTaskFilter); - - dialog->show(); -} - void KsMainWindow::_showCPUs() { kshark_context *kshark_ctx(nullptr); @@ -737,40 +702,6 @@ void KsMainWindow::_showCPUs() dialog->show(); } -void KsMainWindow::_hideCPUs() -{ - kshark_context *kshark_ctx(nullptr); - KsCheckBoxWidget *cpu_cbd; - KsCheckBoxDialog *dialog; - - if (!kshark_instance(&kshark_ctx)) - return; - - cpu_cbd = new KsCPUCheckBoxWidget(_data.tep(), this); - dialog = new KsCheckBoxDialog(cpu_cbd, this); - - if (!kshark_ctx->hide_cpu_filter || - !kshark_ctx->hide_cpu_filter->count) { - cpu_cbd->setDefault(false); - } else { - int nCPUs = tep_get_cpus(_data.tep()); - QVector v(nCPUs, false); - - for (int i = 0; i < nCPUs; ++i) { - if (tracecmd_filter_id_find(kshark_ctx->hide_cpu_filter, - i)) - v[i] = true; - } - - cpu_cbd->set(v); - } - - connect(dialog, &KsCheckBoxDialog::apply, - &_data, &KsDataStore::applyNegCPUFilter); - - dialog->show(); -} - void KsMainWindow::_advancedFiltering() { KsAdvFilteringDialog *dialog; diff --git a/kernel-shark/src/KsMainWindow.hpp b/kernel-shark/src/KsMainWindow.hpp index eef4f96..59030e4 100644 --- a/kernel-shark/src/KsMainWindow.hpp +++ b/kernel-shark/src/KsMainWindow.hpp @@ -181,12 +181,8 @@ private: void _showTasks(); - void _hideTasks(); - void _showCPUs(); - void _hideCPUs(); - void _advancedFiltering(); void _clearFilters(); From patchwork Thu Mar 19 14:10:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 11447283 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B03D86CA for ; Thu, 19 Mar 2020 14:12:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7BC9D21473 for ; Thu, 19 Mar 2020 14:12:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="qXwVTLjZ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727892AbgCSOMY (ORCPT ); Thu, 19 Mar 2020 10:12:24 -0400 Received: from mail-lj1-f174.google.com ([209.85.208.174]:41125 "EHLO mail-lj1-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727878AbgCSOLF (ORCPT ); Thu, 19 Mar 2020 10:11:05 -0400 Received: by mail-lj1-f174.google.com with SMTP id o10so2631059ljc.8 for ; Thu, 19 Mar 2020 07:11:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2CbjbeuWo/wPUOUT85q7xxSgJOd1G/6xrr8d+xRiVHU=; b=qXwVTLjZM3gmukYre2AowplXOUgoGtBomyieN8+5N553ugcM/Q3sgZRRBKIloFKrRB GC5PMkYEqdJhAOHC1x+Vr0iqM4ATQYd/bf28v3dXL8FwYfuyUnNwZgi2olulr166RzgC CONh7qDd8ZnqODiqedZya65E3alwQvuqqjrDzIklBBcYoYIju0OdQ8pmm9G/J/zuFaGV 7Ju07y7dtAw4ZS3Nc0AZzvCRUclY7iyci9vep0UdJOiLGrcTN1nm9fgHmgeRgMIWKhkL d7xnSugZ3cPY9d0gTeSGTiA0sL289kL78Mog3sOytlvO5EMKKfGMFuFnaGK1qC4ZFfWC l9tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2CbjbeuWo/wPUOUT85q7xxSgJOd1G/6xrr8d+xRiVHU=; b=JTmgAMoSUVOu1X5B6TsQSyAMFt0IZ++9rU+2Vk5ZR7Zx+G/on5MLcYKScWIqKUdAwy RXRkxdyfN/vdfwdvUBfNvI0BoutLA2/4u1gjAKWdWMOklbiaMxc6+1CvjRUMFeAJYYXg yC8Hq056chu0vZbSZtP6Lr/v/fuI2/TBjrWtg5vcQZBQFKyJKXqMR0FBvG6Y4C7IhMWD IFu9D/YHlH3baPl1JkYuXDgkcIFJmO7pWBxOOeBiKIZGDTJVpEFFRGerDuyme2G4axe9 6FFzfqmNarI5aNoB/iUTT4vzDZshS7Stf1XWh2LmOyYLj+Qkq+o+hr9BiyOBpiXHplRr iSEQ== X-Gm-Message-State: ANhLgQ0hkxSukkKrPDzlrqpZuo7kW7zpCEuZlKTJMFqjSr/RvDnKLvQp gYP8WoexzvF5i0WqVB6+tu1QLpQ3 X-Google-Smtp-Source: ADFU+vv4MKeQ9q2OniJ3FMGhthOo7XWTXYByydDyNK/Z7NaY8RlTwy/sNaBbD2fdXCJz43ZtgwmPlw== X-Received: by 2002:a05:651c:234:: with SMTP id z20mr2226457ljn.187.1584627063308; Thu, 19 Mar 2020 07:11:03 -0700 (PDT) Received: from localhost.localdomain ([84.40.93.223]) by smtp.gmail.com with ESMTPSA id u14sm1817605ljj.54.2020.03.19.07.11.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Mar 2020 07:11:02 -0700 (PDT) From: "Yordan Karadzhov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org, "Yordan Karadzhov (VMware)" Subject: [PATCH 5/5] kernel-shark: Optimize the logic of the filtering menus Date: Thu, 19 Mar 2020 16:10:31 +0200 Message-Id: <20200319141031.3774-6-y.karadz@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200319141031.3774-1-y.karadz@gmail.com> References: <20200319141031.3774-1-y.karadz@gmail.com> MIME-Version: 1.0 Sender: linux-trace-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org The logic of the menus is optimized to automatically decide whether is more efficient to use positive (show only) or negative (do not show) ID filter. Note that there is no difference between using positive or negative filters in terms of performance, because the IDs of each filter are stored in a hash table, hence the checks are made in constant time. The motivation is just to keep the configuration of the filters as simple as possible, in particular when we want this configuration to be saved and later restored from the Session. The patch also fixes the problem of negative filters set from the Quick Context menu not being shown in the main filtering menus. Signed-off-by: Yordan Karadzhov (VMware) --- kernel-shark/src/KsMainWindow.cpp | 184 +++++++++++++++++++++++------- kernel-shark/src/KsMainWindow.hpp | 12 ++ 2 files changed, 156 insertions(+), 40 deletions(-) diff --git a/kernel-shark/src/KsMainWindow.cpp b/kernel-shark/src/KsMainWindow.cpp index 9b5fc2d..aed28a8 100644 --- a/kernel-shark/src/KsMainWindow.cpp +++ b/kernel-shark/src/KsMainWindow.cpp @@ -594,114 +594,218 @@ void KsMainWindow::_graphFilterSync(int state) _data.update(); } +QVector KsMainWindow::_getFilterCbStatus(tracecmd_filter_id *showFilter, + tracecmd_filter_id *hideFilter, + QVector ids) +{ + QVector v; + + if (!kshark_this_filter_is_set(showFilter) && + !kshark_this_filter_is_set(hideFilter)) { + return v; + } else { + int n = ids.count(); + bool show, hide; + + if (kshark_this_filter_is_set(showFilter)) { + /* + * The "show only" filter is set. The default status + * of all CheckBoxes will be "unchecked". + */ + v = QVector(n, false); + for (int i = 0; i < n; ++i) { + show = !!tracecmd_filter_id_find(showFilter, + ids[i]); + + hide = !!tracecmd_filter_id_find(hideFilter, + ids[i]); + + if (show && !hide) { + /* + * Both "show" and "hide" define this + * Id as visible. Set the status of + * its CheckBoxes to "checked". + */ + v[i] = true; + } + } + } else { // Only hide filter is set. + v = QVector(n, true); + for (int i = 0; i < n; ++i) { + hide = !!tracecmd_filter_id_find(hideFilter, + ids[i]); + + if (hide) + v[i] = false; + } + } + } + + return v; +} + +QVector KsMainWindow::_revertFilterIds(QVector all, QVector vec) +{ + QVector diff; + + /* + * The Ids may not be sorted, becausein in the widgets the items are + * shown sorted by name. Get those Ids sorted first. + */ + std::sort(vec.begin(), vec.end()); + + /* + * The IDs of the "do not show" filter are given by the difference + * between "all Ids" and the "show only" filter. + */ + std::set_difference(all.begin(), all.end(), + vec.begin(), vec.end(), + std::inserter(diff, diff.begin())); + + return diff; +} + void KsMainWindow::_showEvents() { kshark_context *kshark_ctx(nullptr); KsCheckBoxWidget *events_cb; KsCheckBoxDialog *dialog; + QVector v; if (!kshark_instance(&kshark_ctx)) return; events_cb = new KsEventsCheckBoxWidget(_data.tep(), this); dialog = new KsCheckBoxDialog(events_cb, this); + v = _getFilterCbStatus(kshark_ctx->show_event_filter, + kshark_ctx->hide_event_filter, + KsUtils::getEventIdList(TEP_EVENT_SORT_SYSTEM)); - if (!kshark_ctx->show_event_filter || - !kshark_ctx->show_event_filter->count) { + if (v.count() == 0) { events_cb->setDefault(true); } else { /* - * The event filter contains IDs. Make this visible in the - * CheckBox Widget. + * Some of the event filters contains IDs. Make this visible + * in the CheckBox Widget. */ - tep_event **events = - tep_list_events(_data.tep(), TEP_EVENT_SORT_SYSTEM); - int nEvts = tep_get_events_count(_data.tep()); - QVector v(nEvts, false); - - for (int i = 0; i < nEvts; ++i) { - if (tracecmd_filter_id_find(kshark_ctx->show_event_filter, - events[i]->id)) - v[i] = true; - } - events_cb->set(v); } connect(dialog, &KsCheckBoxDialog::apply, - &_data, &KsDataStore::applyPosEventFilter); + this, &KsMainWindow::_applyEventFilter); dialog->show(); } +void KsMainWindow::_applyEventFilter(QVector showEvents) +{ + QVector allEvents = KsUtils::getEventIdList(); + + if (showEvents.count() < allEvents.count() / 2) { + _data.applyPosEventFilter(showEvents); + } else { + /* + * It is more efficiant to apply negative (do not show) filter. + */ + QVector diff = _revertFilterIds(allEvents, showEvents); + _data.applyNegEventFilter(diff); + } +} + void KsMainWindow::_showTasks() { kshark_context *kshark_ctx(nullptr); KsCheckBoxWidget *tasks_cbd; KsCheckBoxDialog *dialog; + QVector v; if (!kshark_instance(&kshark_ctx)) return; tasks_cbd = new KsTasksCheckBoxWidget(_data.tep(), true, this); dialog = new KsCheckBoxDialog(tasks_cbd, this); + v = _getFilterCbStatus(kshark_ctx->show_task_filter, + kshark_ctx->hide_task_filter, + KsUtils::getPidList()); - if (!kshark_ctx->show_task_filter || - !kshark_ctx->show_task_filter->count) { + if (v.count() == 0) { tasks_cbd->setDefault(true); } else { - QVector pids = KsUtils::getPidList(); - int nPids = pids.count(); - QVector v(nPids, false); - - for (int i = 0; i < nPids; ++i) { - if (tracecmd_filter_id_find(kshark_ctx->show_task_filter, - pids[i])) - v[i] = true; - } - + /* + * Some of the task filters contains PIDs. Make this visible + * in the CheckBox Widget. + */ tasks_cbd->set(v); } connect(dialog, &KsCheckBoxDialog::apply, - &_data, &KsDataStore::applyPosTaskFilter); + this, &KsMainWindow::_applyTaskFilter); dialog->show(); } +void KsMainWindow::_applyTaskFilter(QVector showPids) +{ + QVector allPids = KsUtils::getPidList(); + + if (showPids.count() < allPids.count() / 2) { + _data.applyPosTaskFilter(showPids); + } else { + /* + * It is more efficiant to apply negative (do not show) filter. + */ + QVector diff = _revertFilterIds(allPids, showPids); + _data.applyNegTaskFilter(diff); + } +} + void KsMainWindow::_showCPUs() { kshark_context *kshark_ctx(nullptr); KsCheckBoxWidget *cpu_cbd; KsCheckBoxDialog *dialog; + QVector v; if (!kshark_instance(&kshark_ctx)) return; cpu_cbd = new KsCPUCheckBoxWidget(_data.tep(), this); dialog = new KsCheckBoxDialog(cpu_cbd, this); + v = _getFilterCbStatus(kshark_ctx->show_cpu_filter, + kshark_ctx->hide_cpu_filter, + KsUtils::getCPUList()); - if (!kshark_ctx->show_cpu_filter || - !kshark_ctx->show_cpu_filter->count) { + if (v.count() == 0) { cpu_cbd->setDefault(true); } else { - int nCPUs = tep_get_cpus(_data.tep()); - QVector v(nCPUs, false); - - for (int i = 0; i < nCPUs; ++i) { - if (tracecmd_filter_id_find(kshark_ctx->show_cpu_filter, i)) - v[i] = true; - } - + /* + * Some of the CPU filters contains IDs. Make this visible + * in the CheckBox Widget. + */ cpu_cbd->set(v); } connect(dialog, &KsCheckBoxDialog::apply, - &_data, &KsDataStore::applyPosCPUFilter); + this, &KsMainWindow::_applyCPUFilter); dialog->show(); } +void KsMainWindow::_applyCPUFilter(QVector showCPUs) +{ + QVector allCPUs = KsUtils::getCPUList(); + + if (showCPUs.count() < allCPUs.count() / 2) { + _data.applyPosCPUFilter(showCPUs); + } else { + /* + * It is more efficiant to apply negative (do not show) filter. + */ + QVector diff = _revertFilterIds(allCPUs, showCPUs); + _data.applyNegCPUFilter(diff); + } +} + void KsMainWindow::_advancedFiltering() { KsAdvFilteringDialog *dialog; diff --git a/kernel-shark/src/KsMainWindow.hpp b/kernel-shark/src/KsMainWindow.hpp index 59030e4..ecfc12c 100644 --- a/kernel-shark/src/KsMainWindow.hpp +++ b/kernel-shark/src/KsMainWindow.hpp @@ -177,6 +177,18 @@ private: void _graphFilterSync(int state); + QVector _getFilterCbStatus(tracecmd_filter_id *showFilter, + tracecmd_filter_id *hideFilter, + QVector ids); + + QVector _revertFilterIds(QVector all, QVector vec); + + void _applyEventFilter(QVector showEvents); + + void _applyTaskFilter(QVector showPids); + + void _applyCPUFilter(QVector showCPUs); + void _showEvents(); void _showTasks();