1 /* This file is part of the Linux Trace Toolkit viewer
2 * Copyright (C) 2003-2004 Mathieu Desnoyers
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation;
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
21 /*! \defgroup guiEvents libguiControlFlow: The GUI ControlFlow display plugin */
24 /*! \file guiControlFlow.c
25 * \brief Graphical plugin for showing control flow of a trace.
27 * This plugin adds a Control Flow Viewer functionnality to Linux TraceToolkit
28 * GUI when this plugin is loaded. The init and destroy functions add the
29 * viewer's insertion menu item and toolbar icon by calling viewer.h's
30 * API functions. Then, when a viewer's object is created, the constructor
31 * creates ans register through API functions what is needed to interact
32 * with the TraceSet window.
34 * This plugin uses the gdk library to draw the events and gtk to interact
37 * Author : Mathieu Desnoyers, June 2003
45 #include <lttv/lttv.h>
46 #include <lttv/module.h>
47 #include <lttvwindow/lttvwindow.h>
50 #include "eventhooks.h"
52 #include "hGuiControlFlowInsert.xpm"
53 #include "hLegendInsert.xpm"
57 /** Array containing instanced objects. Used when module is unloaded */
58 GSList
*g_control_flow_data_list
= NULL
;
60 GSList
*g_legend_list
= NULL
;
62 /*****************************************************************************
63 * Functions for module loading/unloading *
64 *****************************************************************************/
66 * plugin's init function
68 * This function initializes the Control Flow Viewer functionnality through the
73 g_info("GUI ControlFlow Viewer init()");
75 /* Register the toolbar insert button and menu entry*/
76 lttvwindow_register_constructor("guicontrolflow",
78 "Insert Control Flow Viewer",
79 hGuiControlFlowInsert_xpm
,
80 "Insert Control Flow Viewer",
83 lttvwindow_register_constructor("guicontrolflowlegend",
85 "Popup Control Flow Viewer Legend",
87 "Popup Control Flow Viewer Legend",
91 LTT_NAME_CPU
= g_quark_from_string("/cpu");
94 void destroy_walk(gpointer data
, gpointer user_data
)
96 g_info("Walk destroy GUI Control Flow Viewer");
97 guicontrolflow_destructor_full((ControlFlowData
*)data
);
100 void destroy_legend_walk(gpointer data
, gpointer user_data
)
102 g_info("Walk destroy GUI Control Flow Viewer");
103 legend_destructor((GtkWindow
*)data
);
109 * plugin's destroy function
111 * This function releases the memory reserved by the module and unregisters
112 * everything that has been registered in the gtkTraceSet API.
114 static void destroy() {
115 g_info("GUI Control Flow Viewer destroy()");
117 g_slist_foreach(g_control_flow_data_list
, destroy_walk
, NULL
);
119 g_slist_free(g_control_flow_data_list
);
121 g_slist_foreach(g_legend_list
, destroy_legend_walk
, NULL
);
123 g_slist_free(g_control_flow_data_list
);
125 /* Unregister the toolbar insert button and menu entry */
126 lttvwindow_unregister_constructor(h_guicontrolflow
);
127 lttvwindow_unregister_constructor(h_legend
);
131 LTTV_MODULE("guicontrolflow", "Control flow viewer", \
132 "Graphical module to view processes state and control flow", \
133 init
, destroy
, "lttvwindow")