[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20221019232952.2212729-1-mattst88@gmail.com>
Date: Wed, 19 Oct 2022 19:29:52 -0400
From: Matt Turner <mattst88@...il.com>
To: linux-perf-users@...r.kernel.org
Cc: linux-kernel@...r.kernel.org,
Peter Zijlstra <peterz@...radead.org>,
Ingo Molnar <mingo@...hat.com>,
Arnaldo Carvalho de Melo <acme@...nel.org>,
Mark Rutland <mark.rutland@....com>,
Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
Jiri Olsa <jolsa@...nel.org>,
Namhyung Kim <namhyung@...nel.org>,
Jelle van der Waa <jvanderwaa@...hat.com>,
Matt Turner <mattst88@...il.com>
Subject: [PATCH v2] tools: port perf ui from GTK 2 to GTK 3
From: Jelle van der Waa <jvanderwaa@...hat.com>
GTK 2 is a legacy API and the newer version is GTK 3 which changes a few
API functions. gtk_tree_view_set_rules_hint is no longer required since
theme's are now responsible to handle this, gtk_vbox_new is deprecated
and replaced by passing the orientation to gtk_box_new. Apart from these
changes the accessing of the screen changed in GTK which requires using
new functions for getting geometry. Lastly the GTK_STOCK_OK define is
deprecated in GTK 3.
Signed-off-by: Jelle van der Waa <jvanderwaa@...hat.com>
Signed-off-by: Matt Turner <mattst88@...il.com>
---
Originally sent in 2019. I've rebased it and given it a test.
One problem I've noticed is that C++ symbol names are often broken.
E.g.:
(perf:3254940): Gtk-WARNING **: 21:47:46.663: Failed to set text from
markup due to error parsing markup: Error on line 1 char 95:
“std::char_traits<char” is not a valid name: “<”
Presumably we need to call g_markup_escape_text() somewhere, but I
struggled to find the right place.
Without the patch, the GTK-2 version repeatedly segfaults, so this is an
improvement regardless.
v2: Dropped changes to test-all.c. I don't know how to build that
apparently.
tools/build/Makefile.feature | 5 +++--
tools/build/feature/Makefile | 12 +++++-----
...est-gtk2-infobar.c => test-gtk3-infobar.c} | 0
.../feature/{test-gtk2.c => test-gtk3.c} | 0
tools/perf/Documentation/perf-report.txt | 2 +-
tools/perf/Makefile | 2 +-
tools/perf/Makefile.config | 22 +++++++++----------
tools/perf/Makefile.perf | 6 ++---
tools/perf/builtin-report.c | 2 +-
tools/perf/builtin-version.c | 1 +
tools/perf/tests/make | 12 +++++-----
tools/perf/ui/gtk/annotate.c | 2 +-
tools/perf/ui/gtk/browser.c | 16 ++++++++------
tools/perf/ui/gtk/hists.c | 6 +----
tools/perf/ui/gtk/progress.c | 2 +-
tools/perf/ui/setup.c | 2 +-
16 files changed, 46 insertions(+), 46 deletions(-)
rename tools/build/feature/{test-gtk2-infobar.c => test-gtk3-infobar.c} (100%)
rename tools/build/feature/{test-gtk2.c => test-gtk3.c} (100%)
diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature
index 57619f240b56..967b8be96b65 100644
--- a/tools/build/Makefile.feature
+++ b/tools/build/Makefile.feature
@@ -80,8 +80,8 @@ FEATURE_TESTS_EXTRA := \
compile-32 \
compile-x32 \
cplus-demangle \
- gtk2 \
- gtk2-infobar \
+ gtk3 \
+ gtk3-infobar \
hello \
libbabeltrace \
libbfd-liberty \
@@ -119,6 +119,7 @@ FEATURE_DISPLAY ?= \
dwarf \
dwarf_getlocations \
glibc \
+ gtk3 \
libbfd \
libbfd-buildid \
libcap \
diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
index 04b07ff88234..bd96b0628836 100644
--- a/tools/build/feature/Makefile
+++ b/tools/build/feature/Makefile
@@ -11,8 +11,8 @@ FILES= \
test-fortify-source.bin \
test-get_current_dir_name.bin \
test-glibc.bin \
- test-gtk2.bin \
- test-gtk2-infobar.bin \
+ test-gtk3.bin \
+ test-gtk3-infobar.bin \
test-hello.bin \
test-libaudit.bin \
test-libbfd.bin \
@@ -214,11 +214,11 @@ $(OUTPUT)test-libtracefs.bin:
$(OUTPUT)test-libcrypto.bin:
$(BUILD) -lcrypto
-$(OUTPUT)test-gtk2.bin:
- $(BUILD) $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null) -Wno-deprecated-declarations
+$(OUTPUT)test-gtk3.bin:
+ $(BUILD) $(shell $(PKG_CONFIG) --libs --cflags gtk+-3.0 2>/dev/null)
-$(OUTPUT)test-gtk2-infobar.bin:
- $(BUILD) $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null)
+$(OUTPUT)test-gtk3-infobar.bin:
+ $(BUILD) $(shell $(PKG_CONFIG) --libs --cflags gtk+-3.0 2>/dev/null)
grep-libs = $(filter -l%,$(1))
strip-libs = $(filter-out -l%,$(1))
diff --git a/tools/build/feature/test-gtk2-infobar.c b/tools/build/feature/test-gtk3-infobar.c
similarity index 100%
rename from tools/build/feature/test-gtk2-infobar.c
rename to tools/build/feature/test-gtk3-infobar.c
diff --git a/tools/build/feature/test-gtk2.c b/tools/build/feature/test-gtk3.c
similarity index 100%
rename from tools/build/feature/test-gtk2.c
rename to tools/build/feature/test-gtk3.c
diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt
index 4533db2ee56b..2df20623943f 100644
--- a/tools/perf/Documentation/perf-report.txt
+++ b/tools/perf/Documentation/perf-report.txt
@@ -315,7 +315,7 @@ OPTIONS
requires a tty, if one is not present, as when piping to other
commands, the stdio interface is used.
---gtk:: Use the GTK2 interface.
+--gtk:: Use the GTK3 interface.
-k::
--vmlinux=<file>::
diff --git a/tools/perf/Makefile b/tools/perf/Makefile
index f3fe360a35c6..ea3fb4657a91 100644
--- a/tools/perf/Makefile
+++ b/tools/perf/Makefile
@@ -100,7 +100,7 @@ clean:
# make -C tools/perf -f tests/make
#
build-test:
- @$(MAKE) SHUF=1 -f tests/make REUSE_FEATURES_DUMP=1 MK=Makefile SET_PARALLEL=1 --no-print-directory tarpkg make_static make_with_gtk2 out
+ @$(MAKE) SHUF=1 -f tests/make REUSE_FEATURES_DUMP=1 MK=Makefile SET_PARALLEL=1 --no-print-directory tarpkg make_static make_with_gtk3 out
build-test-tarball:
@$(MAKE) -f tests/make REUSE_FEATURES_DUMP=1 MK=Makefile SET_PARALLEL=1 --no-print-directory out
diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index 6fd4b1384b97..281fbcb97b58 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -808,20 +808,20 @@ ifndef NO_SLANG
endif
endif
-ifdef GTK2
- FLAGS_GTK2=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null)
- $(call feature_check,gtk2)
- ifneq ($(feature-gtk2), 1)
- msg := $(warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev);
- NO_GTK2 := 1
+ifdef GTK3
+ FLAGS_GTK3=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) $(shell $(PKG_CONFIG) --libs --cflags gtk+-3.0 2>/dev/null)
+ $(call feature_check,gtk3)
+ ifneq ($(feature-gtk3), 1)
+ msg := $(warning GTK3 not found, disables GTK3 support. Please install gtk3-devel or libgtk3.0-dev);
+ NO_GTK3 := 1
else
- $(call feature_check,gtk2-infobar)
- ifeq ($(feature-gtk2-infobar), 1)
+ $(call feature_check,gtk3-infobar)
+ ifeq ($(feature-gtk3-infobar), 1)
GTK_CFLAGS := -DHAVE_GTK_INFO_BAR_SUPPORT
endif
- CFLAGS += -DHAVE_GTK2_SUPPORT
- GTK_CFLAGS += $(shell $(PKG_CONFIG) --cflags gtk+-2.0 2>/dev/null)
- GTK_LIBS := $(shell $(PKG_CONFIG) --libs gtk+-2.0 2>/dev/null)
+ CFLAGS += -DHAVE_GTK3_SUPPORT
+ GTK_CFLAGS += $(shell $(PKG_CONFIG) --cflags gtk+-3.0 2>/dev/null)
+ GTK_LIBS := $(shell $(PKG_CONFIG) --libs gtk+-3.0 2>/dev/null)
EXTLIBS += -ldl
endif
endif
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
index a432e59afc42..056f29ecaef1 100644
--- a/tools/perf/Makefile.perf
+++ b/tools/perf/Makefile.perf
@@ -48,7 +48,7 @@ include ../scripts/utilities.mak
#
# Define NO_SLANG if you do not want TUI support.
#
-# Define GTK2 if you want GTK+ GUI support.
+# Define GTK3 if you want GTK+ GUI support.
#
# Define NO_DEMANGLE if you do not want C++ symbol demangling.
#
@@ -403,7 +403,7 @@ ifneq ($(OUTPUT),)
CFLAGS += -I$(OUTPUT)
endif
-ifdef GTK2
+ifdef GTK3
ALL_PROGRAMS += $(OUTPUT)libperf-gtk.so
GTK_IN := $(OUTPUT)gtk-in.o
endif
@@ -928,7 +928,7 @@ check: $(OUTPUT)common-cmds.h
### Installation rules
-ifdef GTK2
+ifdef GTK3
install-gtk: $(OUTPUT)libperf-gtk.so
$(call QUIET_INSTALL, 'GTK UI') \
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(libdir_SQ)'; \
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 8361890176c2..4e0caf3d3061 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -1247,7 +1247,7 @@ int cmd_report(int argc, const char **argv)
OPT_BOOLEAN(0, "tui", &report.use_tui, "Use the TUI interface"),
#endif
#ifdef HAVE_GTK2_SUPPORT
- OPT_BOOLEAN(0, "gtk", &report.use_gtk, "Use the GTK2 interface"),
+ OPT_BOOLEAN(0, "gtk", &report.use_gtk, "Use the GTK3 interface"),
#endif
OPT_BOOLEAN(0, "stdio", &report.use_stdio,
"Use the stdio interface"),
diff --git a/tools/perf/builtin-version.c b/tools/perf/builtin-version.c
index a71f491224da..a35e06ca449d 100644
--- a/tools/perf/builtin-version.c
+++ b/tools/perf/builtin-version.c
@@ -60,6 +60,7 @@ static void library_status(void)
STATUS(HAVE_DWARF_SUPPORT, dwarf);
STATUS(HAVE_DWARF_GETLOCATIONS_SUPPORT, dwarf_getlocations);
STATUS(HAVE_GLIBC_SUPPORT, glibc);
+ STATUS(HAVE_GTK3_SUPPORT, gtk3);
#ifndef HAVE_SYSCALL_TABLE_SUPPORT
STATUS(HAVE_LIBAUDIT_SUPPORT, libaudit);
#endif
diff --git a/tools/perf/tests/make b/tools/perf/tests/make
index da013e90a945..cb959dccbe9d 100644
--- a/tools/perf/tests/make
+++ b/tools/perf/tests/make
@@ -72,8 +72,8 @@ make_no_libpython := NO_LIBPYTHON=1
make_no_scripts := NO_LIBPYTHON=1 NO_LIBPERL=1
make_no_newt := NO_NEWT=1
make_no_slang := NO_SLANG=1
-make_no_gtk2 := NO_GTK2=1
-make_no_ui := NO_NEWT=1 NO_SLANG=1 NO_GTK2=1
+make_no_gtk3 := NO_GTK3=1
+make_no_ui := NO_NEWT=1 NO_SLANG=1 NO_GTK3=1
make_no_demangle := NO_DEMANGLE=1
make_no_libelf := NO_LIBELF=1
make_no_libunwind := NO_LIBUNWIND=1
@@ -93,7 +93,7 @@ make_no_sdt := NO_SDT=1
make_no_syscall_tbl := NO_SYSCALL_TABLE=1
make_with_clangllvm := LIBCLANGLLVM=1
make_with_libpfm4 := LIBPFM4=1
-make_with_gtk2 := GTK2=1
+make_with_gtk3 := GTK3=1
make_tags := tags
make_cscope := cscope
make_help := help
@@ -113,7 +113,7 @@ make_install_prefix_slash := install prefix=/tmp/krava/
make_static := LDFLAGS=-static NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 NO_JVMTI=1
# all the NO_* variable combined
-make_minimal := NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1
+make_minimal := NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK3=1
make_minimal += NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1
make_minimal += NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1
make_minimal += NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1
@@ -138,7 +138,7 @@ run += make_no_libpython
run += make_no_scripts
run += make_no_newt
run += make_no_slang
-run += make_no_gtk2
+run += make_no_gtk3
run += make_no_ui
run += make_no_demangle
run += make_no_libelf
@@ -312,7 +312,7 @@ $(run):
$(call test,$@) && \
rm -rf $@ $$TMP_DEST || (cat $@ ; false)
-make_with_gtk2:
+make_with_gtk3:
$(call clean)
@TMP_DEST=$$(mktemp -d); \
cmd="cd $(PERF) && $(MAKE_F) $($@) $(PARALLEL_OPT) $(O_OPT) DESTDIR=$$TMP_DEST"; \
diff --git a/tools/perf/ui/gtk/annotate.c b/tools/perf/ui/gtk/annotate.c
index 0a50e962f9a3..efd380f124aa 100644
--- a/tools/perf/ui/gtk/annotate.c
+++ b/tools/perf/ui/gtk/annotate.c
@@ -208,7 +208,7 @@ static int symbol__gtk_annotate(struct map_symbol *ms, struct evsel *evsel,
if (!pgctx)
return -1;
- vbox = gtk_vbox_new(FALSE, 0);
+ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
notebook = gtk_notebook_new();
pgctx->notebook = notebook;
diff --git a/tools/perf/ui/gtk/browser.c b/tools/perf/ui/gtk/browser.c
index 8f3e43d148a8..6fd85b5325ba 100644
--- a/tools/perf/ui/gtk/browser.c
+++ b/tools/perf/ui/gtk/browser.c
@@ -13,19 +13,21 @@ void perf_gtk__signal(int sig)
psignal(sig, "perf");
}
-void perf_gtk__resize_window(GtkWidget *window)
+void perf_gtk__resize_window(GtkWidget *widget)
{
GdkRectangle rect;
- GdkScreen *screen;
- int monitor;
+ GdkMonitor *monitor;
+ GdkDisplay *display;
+ GdkWindow *window;
int height;
int width;
- screen = gtk_widget_get_screen(window);
+ display = gdk_display_get_default();
+ window = gtk_widget_get_window(widget);
- monitor = gdk_screen_get_monitor_at_window(screen, window->window);
+ monitor = gdk_display_get_monitor_at_window(display, window);
- gdk_screen_get_monitor_geometry(screen, monitor, &rect);
+ gdk_monitor_get_geometry(monitor, &rect);
width = rect.width * 3 / 4;
height = rect.height * 3 / 4;
@@ -58,7 +60,7 @@ GtkWidget *perf_gtk__setup_info_bar(void)
content_area = gtk_info_bar_get_content_area(GTK_INFO_BAR(info_bar));
gtk_container_add(GTK_CONTAINER(content_area), label);
- gtk_info_bar_add_button(GTK_INFO_BAR(info_bar), GTK_STOCK_OK,
+ gtk_info_bar_add_button(GTK_INFO_BAR(info_bar), "_OK",
GTK_RESPONSE_OK);
g_signal_connect(info_bar, "response",
G_CALLBACK(gtk_widget_hide), NULL);
diff --git a/tools/perf/ui/gtk/hists.c b/tools/perf/ui/gtk/hists.c
index c83be2d57f7e..5aa2655c7a0a 100644
--- a/tools/perf/ui/gtk/hists.c
+++ b/tools/perf/ui/gtk/hists.c
@@ -395,8 +395,6 @@ static void perf_gtk__show_hists(GtkWidget *window, struct hists *hists,
}
}
- gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(view), TRUE);
-
g_signal_connect(view, "row-activated",
G_CALLBACK(on_row_activated), NULL);
gtk_container_add(GTK_CONTAINER(window), view);
@@ -583,8 +581,6 @@ static void perf_gtk__show_hierarchy(GtkWidget *window, struct hists *hists,
perf_gtk__add_hierarchy_entries(hists, &hists->entries, store,
NULL, &hpp, min_pcnt);
- gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(view), TRUE);
-
g_signal_connect(view, "row-activated",
G_CALLBACK(on_row_activated), NULL);
gtk_container_add(GTK_CONTAINER(window), view);
@@ -616,7 +612,7 @@ int evlist__gtk_browse_hists(struct evlist *evlist, const char *help,
if (!pgctx)
return -1;
- vbox = gtk_vbox_new(FALSE, 0);
+ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
notebook = gtk_notebook_new();
diff --git a/tools/perf/ui/gtk/progress.c b/tools/perf/ui/gtk/progress.c
index eea6fcde518a..aaa7e7f6e4aa 100644
--- a/tools/perf/ui/gtk/progress.c
+++ b/tools/perf/ui/gtk/progress.c
@@ -13,7 +13,7 @@ static void gtk_ui_progress__update(struct ui_progress *p)
char buf[1024];
if (dialog == NULL) {
- GtkWidget *vbox = gtk_vbox_new(TRUE, 5);
+ GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
GtkWidget *label = gtk_label_new(p->title);
dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
diff --git a/tools/perf/ui/setup.c b/tools/perf/ui/setup.c
index 25ded88801a3..cbcadf4cb288 100644
--- a/tools/perf/ui/setup.c
+++ b/tools/perf/ui/setup.c
@@ -13,7 +13,7 @@ int use_browser = -1;
#define PERF_GTK_DSO "libperf-gtk.so"
-#ifdef HAVE_GTK2_SUPPORT
+#ifdef HAVE_GTK3_SUPPORT
static int setup_gtk_browser(void)
{
--
2.37.3
Powered by blists - more mailing lists