mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-27 06:00:22 +00:00
b4f52020f0
2005-07-28 Federico Mena Quintero <federico@ximian.com> * perf/README: Update for the new API of the profiler. * perf/gtkwidgetprofiler.[ch]: New files with a widget profiler object. This is the old content of timers.[ch] turned into a nice object, with signals for creation and reporting. The profiler needs to maintain some state when reusing the widget, so it's useful to turn it into a real object. Break down timing show_all into GTK_WIDGET_PROFILER_REPORT_MAP and GTK_WIDGET_PROFILER_REPORT_EXPOSE. * perf/main.c: Refactor to use GtkWidgetProfiler. * perf/appwindow.c (content_area_new): Make this just create a notebook, instead of a complex arrangement of panes. * perf/widgets.h: New header file for all the "create a widget" utility functions. * perf/treeview.c: New file. Moved the tree view part from appwindow.c over to here; GtkTreeView really needs its own tests. (tree_view_new): Set the shadow type to IN. * perf/textview.c: Likewise moved over from appwindow.c, but for GtkTextView. (text_view_new): Set the shadow type to IN. * perf/Makefile.am (testperf_SOURCES): Add the new source files; remove appwindow.h and timers.[ch]. * perf/timers.[ch]: Removed. * perf/appwindow.h: Removed.
65 lines
1.3 KiB
C
65 lines
1.3 KiB
C
#include <stdio.h>
|
|
#include <gtk/gtk.h>
|
|
#include "gtkwidgetprofiler.h"
|
|
#include "widgets.h"
|
|
|
|
#define ITERS 10
|
|
|
|
static GtkWidget *
|
|
create_widget_cb (GtkWidgetProfiler *profiler, gpointer data)
|
|
{
|
|
return appwindow_new ();
|
|
}
|
|
|
|
static void
|
|
report_cb (GtkWidgetProfiler *profiler, GtkWidgetProfilerReport report, GtkWidget *widget, gdouble elapsed, gpointer data)
|
|
{
|
|
const char *type;
|
|
|
|
switch (report) {
|
|
case GTK_WIDGET_PROFILER_REPORT_CREATE:
|
|
type = "widget creation";
|
|
break;
|
|
|
|
case GTK_WIDGET_PROFILER_REPORT_MAP:
|
|
type = "widget map";
|
|
break;
|
|
|
|
case GTK_WIDGET_PROFILER_REPORT_EXPOSE:
|
|
type = "widget expose";
|
|
break;
|
|
|
|
case GTK_WIDGET_PROFILER_REPORT_DESTROY:
|
|
type = "widget destruction";
|
|
break;
|
|
|
|
default:
|
|
g_assert_not_reached ();
|
|
type = NULL;
|
|
}
|
|
|
|
fprintf (stderr, "%s: %g sec\n", type, elapsed);
|
|
|
|
if (report == GTK_WIDGET_PROFILER_REPORT_DESTROY)
|
|
fputs ("\n", stderr);
|
|
}
|
|
|
|
int
|
|
main (int argc, char **argv)
|
|
{
|
|
GtkWidgetProfiler *profiler;
|
|
|
|
gtk_init (&argc, &argv);
|
|
|
|
profiler = gtk_widget_profiler_new ();
|
|
g_signal_connect (profiler, "create-widget",
|
|
G_CALLBACK (create_widget_cb), NULL);
|
|
g_signal_connect (profiler, "report",
|
|
G_CALLBACK (report_cb), NULL);
|
|
|
|
gtk_widget_profiler_set_num_iterations (profiler, ITERS);
|
|
gtk_widget_profiler_profile_boot (profiler);
|
|
|
|
return 0;
|
|
}
|