Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1495176

[PATCH 12/22] perf tools: Query terminal width and use in perf list

From Arnaldo Carvalho de Melo <acme@kernel.org>
Newsgroups linux.kernel
Subject [PATCH 12/22] perf tools: Query terminal width and use in perf list
Date 2016-10-04 04:50 +0200
Message-ID <sonXQ-4PN-27@gated-at.bofh.it> (permalink)
References <sonO9-4Mz-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: Andi Kleen <ak@linux.intel.com>

Automatically adapt the now wider and word wrapped perf list output to
wider terminals. This requires querying the terminal before the auto
pager takes over, and exporting this information from the pager
subsystem.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Acked-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: linuxppc-dev@lists.ozlabs.org
Link: http://lkml.kernel.org/r/1473978296-20712-8-git-send-email-sukadev@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/lib/subcmd/pager.c | 16 ++++++++++++++++
 tools/lib/subcmd/pager.h |  1 +
 tools/perf/util/pmu.c    |  3 ++-
 3 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/tools/lib/subcmd/pager.c b/tools/lib/subcmd/pager.c
index d50f3b58606b..6518bea926d6 100644
--- a/tools/lib/subcmd/pager.c
+++ b/tools/lib/subcmd/pager.c
@@ -3,6 +3,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <signal.h>
+#include <sys/ioctl.h>
 #include "pager.h"
 #include "run-command.h"
 #include "sigchain.h"
@@ -14,6 +15,7 @@
  */
 
 static int spawned_pager;
+static int pager_columns;
 
 void pager_init(const char *pager_env)
 {
@@ -58,9 +60,12 @@ static void wait_for_pager_signal(int signo)
 void setup_pager(void)
 {
 	const char *pager = getenv(subcmd_config.pager_env);
+	struct winsize sz;
 
 	if (!isatty(1))
 		return;
+	if (ioctl(1, TIOCGWINSZ, &sz) == 0)
+		pager_columns = sz.ws_col;
 	if (!pager)
 		pager = getenv("PAGER");
 	if (!(pager || access("/usr/bin/pager", X_OK)))
@@ -98,3 +103,14 @@ int pager_in_use(void)
 {
 	return spawned_pager;
 }
+
+int pager_get_columns(void)
+{
+	char *s;
+
+	s = getenv("COLUMNS");
+	if (s)
+		return atoi(s);
+
+	return (pager_columns ? pager_columns : 80) - 2;
+}
diff --git a/tools/lib/subcmd/pager.h b/tools/lib/subcmd/pager.h
index 8b83714ecf73..623f5542d05d 100644
--- a/tools/lib/subcmd/pager.h
+++ b/tools/lib/subcmd/pager.h
@@ -5,5 +5,6 @@ extern void pager_init(const char *pager_env);
 
 extern void setup_pager(void);
 extern int pager_in_use(void);
+extern int pager_get_columns(void);
 
 #endif /* __SUBCMD_PAGER_H */
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
index 9857fb14ea86..7b46e772f5f9 100644
--- a/tools/perf/util/pmu.c
+++ b/tools/perf/util/pmu.c
@@ -14,6 +14,7 @@
 #include "cpumap.h"
 #include "header.h"
 #include "pmu-events/pmu-events.h"
+#include "cache.h"
 
 struct perf_pmu_format {
 	char *name;
@@ -1092,7 +1093,7 @@ void print_pmu_events(const char *event_glob, bool name_only)
 	int len, j;
 	struct pair *aliases;
 	int numdesc = 0;
-	int columns = 78;
+	int columns = pager_get_columns();
 
 	pmu = NULL;
 	len = 0;
-- 
2.7.4

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[GIT PULL 00/22] perf/core improvements and fixes Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:40 +0200
  [PATCH 02/22] perf tools: Experiment with cppcheck Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:40 +0200
  [PATCH 01/22] perf probe: Check if *ptr2 is zero and not ptr2 Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:40 +0200
  [PATCH 03/22] tools build: Add support for host programs format Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:40 +0200
  [PATCH 15/22] perf jevents: Add support for long descriptions Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:40 +0200
  [PATCH 04/22] tools build: Make fixdep a hostprog Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:40 +0200
  [PATCH 14/22] perf pmu: Add override support for event list CPUID Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:50 +0200
  [PATCH 11/22] perf pmu: Support alias descriptions Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:50 +0200
  [PATCH 06/22] perf jevents: Program to convert JSON file Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:50 +0200
  [PATCH 07/22] perf pmu: Use pmu_events table to create aliases Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:50 +0200
  [PATCH 09/22] perf tools: Support CPU id matching for x86 v2 Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:50 +0200
  [PATCH 19/22] perf tools: Allow period= in perf stat CPU event descriptions. Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:50 +0200
  [PATCH 08/22] perf powerpc: Support CPU ID matching for Powerpc Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:50 +0200
  [PATCH 17/22] perf list jevents: Add support for event list topics Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:50 +0200
  [PATCH 10/22] perf jevents: Handle header line in mapfile Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:50 +0200
  [PATCH 16/22] perf list: Support long jevents descriptions Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:50 +0200
  [PATCH 21/22] perf pmu-events: Fix fixed counters on Intel Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:50 +0200
  [PATCH 12/22] perf tools: Query terminal width and use in perf list Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-04 04:50 +0200
  Re: [GIT PULL 00/22] perf/core improvements and fixes Ingo Molnar <mingo@kernel.org> - 2016-10-04 10:10 +0200

csiph-web