1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2 #ifndef __CINNAMON_PERF_LOG_H__
3 #define __CINNAMON_PERF_LOG_H__
4 
5 #include <glib-object.h>
6 #include <gio/gio.h>
7 
8 G_BEGIN_DECLS
9 
10 typedef struct _CinnamonPerfLog CinnamonPerfLog;
11 typedef struct _CinnamonPerfLogClass CinnamonPerfLogClass;
12 
13 #define CINNAMON_TYPE_PERF_LOG              (cinnamon_perf_log_get_type ())
14 #define CINNAMON_PERF_LOG(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), CINNAMON_TYPE_PERF_LOG, CinnamonPerfLog))
15 #define CINNAMON_PERF_LOG_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), CINNAMON_TYPE_PERF_LOG, CinnamonPerfLogClass))
16 #define CINNAMON_IS_PERF_LOG(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), CINNAMON_TYPE_PERF_LOG))
17 #define CINNAMON_IS_PERF_LOG_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), CINNAMON_TYPE_PERF_LOG))
18 #define CINNAMON_PERF_LOG_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), CINNAMON_TYPE_PERF_LOG, CinnamonPerfLogClass))
19 
20 GType cinnamon_perf_log_get_type (void) G_GNUC_CONST;
21 
22 CinnamonPerfLog *cinnamon_perf_log_get_default (void);
23 
24 void cinnamon_perf_log_set_enabled (CinnamonPerfLog *perf_log,
25 				 gboolean      enabled);
26 
27 void cinnamon_perf_log_define_event (CinnamonPerfLog *perf_log,
28 				  const char   *name,
29 				  const char   *description,
30 				  const char   *signature);
31 void cinnamon_perf_log_event        (CinnamonPerfLog *perf_log,
32 				  const char   *name);
33 void cinnamon_perf_log_event_i      (CinnamonPerfLog *perf_log,
34 				  const char   *name,
35 				  gint32        arg);
36 void cinnamon_perf_log_event_x      (CinnamonPerfLog *perf_log,
37 				  const char   *name,
38 				  gint64        arg);
39 void cinnamon_perf_log_event_s      (CinnamonPerfLog *perf_log,
40 				  const char   *name,
41 				  const char   *arg);
42 
43 void cinnamon_perf_log_define_statistic (CinnamonPerfLog *perf_log,
44                                       const char   *name,
45                                       const char   *description,
46                                       const char   *signature);
47 
48 void cinnamon_perf_log_update_statistic_i (CinnamonPerfLog *perf_log,
49                                         const char   *name,
50                                         int           value);
51 void cinnamon_perf_log_update_statistic_x (CinnamonPerfLog *perf_log,
52                                         const char   *name,
53                                         gint64        value);
54 
55 typedef void (*CinnamonPerfStatisticsCallback) (CinnamonPerfLog *perf_log,
56                                              gpointer      data);
57 
58 void cinnamon_perf_log_add_statistics_callback (CinnamonPerfLog               *perf_log,
59                                              CinnamonPerfStatisticsCallback callback,
60                                              gpointer                    user_data,
61                                              GDestroyNotify              notify);
62 
63 void cinnamon_perf_log_collect_statistics (CinnamonPerfLog *perf_log);
64 
65 typedef void (*CinnamonPerfReplayFunction) (gint64      time,
66 					 const char *name,
67 					 const char *signature,
68 					 GValue     *arg,
69                                          gpointer    user_data);
70 
71 void cinnamon_perf_log_replay (CinnamonPerfLog            *perf_log,
72 			    CinnamonPerfReplayFunction  replay_function,
73                             gpointer                 user_data);
74 
75 gboolean cinnamon_perf_log_dump_events (CinnamonPerfLog   *perf_log,
76                                      GOutputStream  *out,
77                                      GError        **error);
78 gboolean cinnamon_perf_log_dump_log    (CinnamonPerfLog   *perf_log,
79                                      GOutputStream  *out,
80                                      GError        **error);
81 
82 G_END_DECLS
83 
84 #endif /* __CINNAMON_PERF_LOG_H__ */
85