]> Pileus Git - ~andy/gtk/blob - gdk/gdkframetimings.c
08130015fd4a2aa1a7cc41b17b47c9e25c410215
[~andy/gtk] / gdk / gdkframetimings.c
1 /* GDK - The GIMP Drawing Kit
2  * Copyright (C) 2012 Red Hat, Inc.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16  */
17
18 #include "config.h"
19
20 #include "gdkframetimings.h"
21
22 struct _GdkFrameTimings
23 {
24   guint ref_count;
25
26   gint64 frame_counter;
27   guint64 cookie;
28   gint64 frame_time;
29   gint64 drawn_time;
30   gint64 presentation_time;
31   gint64 refresh_interval;
32
33 #ifdef G_ENABLE_DEBUG
34   gint64 layout_start_time;
35   gint64 paint_start_time;
36   gint64 frame_end_time;
37 #endif /* G_ENABLE_DEBUG */
38
39   guint complete : 1;
40   guint slept_before : 1;
41 };
42
43 G_DEFINE_BOXED_TYPE (GdkFrameTimings, gdk_frame_timings,
44                      gdk_frame_timings_ref,
45                      gdk_frame_timings_unref)
46
47 GdkFrameTimings *
48 gdk_frame_timings_new (gint64 frame_counter)
49 {
50   GdkFrameTimings *timings;
51
52   timings = g_slice_new0 (GdkFrameTimings);
53   timings->ref_count = 1;
54   timings->frame_counter = frame_counter;
55
56   return timings;
57 }
58
59 GdkFrameTimings *
60 gdk_frame_timings_ref (GdkFrameTimings *timings)
61 {
62   g_return_val_if_fail (timings != NULL, NULL);
63
64   timings->ref_count++;
65
66   return timings;
67 }
68
69 void
70 gdk_frame_timings_unref (GdkFrameTimings *timings)
71 {
72   g_return_if_fail (timings != NULL);
73   g_return_if_fail (timings->ref_count > 0);
74
75   timings->ref_count--;
76   if (timings->ref_count == 0)
77     {
78       g_slice_free (GdkFrameTimings, timings);
79     }
80 }
81
82 gint64
83 gdk_frame_timings_get_frame_counter (GdkFrameTimings *timings)
84 {
85   return timings->frame_counter;
86 }
87
88 guint64
89 gdk_frame_timings_get_cookie (GdkFrameTimings *timings)
90 {
91   g_return_val_if_fail (timings != NULL, 0);
92
93   return timings->cookie;
94 }
95
96 void
97 gdk_frame_timings_set_cookie (GdkFrameTimings *timings,
98                               guint64          cookie)
99 {
100   g_return_if_fail (timings != NULL);
101
102   timings->cookie = cookie;
103 }
104
105 gboolean
106 gdk_frame_timings_get_complete (GdkFrameTimings *timings)
107 {
108   g_return_val_if_fail (timings != NULL, FALSE);
109
110   return timings->complete;
111 }
112
113 void
114 gdk_frame_timings_set_complete (GdkFrameTimings *timings,
115                                 gboolean         complete)
116 {
117   g_return_if_fail (timings != NULL);
118
119   timings->complete = complete;
120 }
121
122 gboolean
123 gdk_frame_timings_get_slept_before (GdkFrameTimings *timings)
124 {
125   g_return_val_if_fail (timings != NULL, FALSE);
126
127   return timings->slept_before;
128 }
129
130 void
131 gdk_frame_timings_set_slept_before (GdkFrameTimings *timings,
132                                     gboolean         slept_before)
133 {
134   g_return_if_fail (timings != NULL);
135
136   timings->slept_before = slept_before;
137 }
138
139 gint64
140 gdk_frame_timings_get_frame_time (GdkFrameTimings *timings)
141 {
142   g_return_val_if_fail (timings != NULL, 0);
143
144   return timings->frame_time;
145 }
146
147 void
148 gdk_frame_timings_set_frame_time (GdkFrameTimings *timings,
149                                   gint64           frame_time)
150 {
151   g_return_if_fail (timings != NULL);
152
153   timings->frame_time = frame_time;
154 }
155
156 gint64
157 gdk_frame_timings_get_drawn_time (GdkFrameTimings *timings)
158 {
159   g_return_val_if_fail (timings != NULL, 0);
160
161   return timings->drawn_time;
162 }
163
164 void
165 gdk_frame_timings_set_drawn_time (GdkFrameTimings *timings,
166                                   gint64           drawn_time)
167 {
168   g_return_if_fail (timings != NULL);
169
170   timings->drawn_time = drawn_time;
171 }
172
173 gint64
174 gdk_frame_timings_get_presentation_time (GdkFrameTimings *timings)
175 {
176   g_return_val_if_fail (timings != NULL, 0);
177
178   return timings->presentation_time;
179 }
180
181 void
182 gdk_frame_timings_set_presentation_time (GdkFrameTimings *timings,
183                                          gint64           presentation_time)
184 {
185   g_return_if_fail (timings != NULL);
186
187   timings->presentation_time = presentation_time;
188 }
189
190 gint64
191 gdk_frame_timings_get_refresh_interval (GdkFrameTimings *timings)
192 {
193   g_return_val_if_fail (timings != NULL, 0);
194
195   return timings->refresh_interval;
196 }
197
198 void
199 gdk_frame_timings_set_refresh_interval (GdkFrameTimings *timings,
200                                         gint64           refresh_interval)
201 {
202   g_return_if_fail (timings != NULL);
203
204   timings->refresh_interval = refresh_interval;
205 }
206
207 #ifdef G_ENABLE_DEBUG
208 gint64
209 _gdk_frame_timings_get_layout_start_time (GdkFrameTimings *timings)
210 {
211   g_return_val_if_fail (timings != NULL, 0);
212
213   return timings->layout_start_time;
214 }
215
216 void
217 _gdk_frame_timings_set_layout_start_time (GdkFrameTimings *timings,
218                                           gint64           layout_start_time)
219 {
220   g_return_if_fail (timings != NULL);
221
222   timings->layout_start_time = layout_start_time;
223 }
224
225 gint64
226 _gdk_frame_timings_get_paint_start_time (GdkFrameTimings *timings)
227 {
228   g_return_val_if_fail (timings != NULL, 0);
229
230   return timings->paint_start_time;
231 }
232
233 void
234 _gdk_frame_timings_set_paint_start_time (GdkFrameTimings *timings,
235                                          gint64           paint_start_time)
236 {
237   g_return_if_fail (timings != NULL);
238
239   timings->paint_start_time = paint_start_time;
240 }
241
242 gint64
243 _gdk_frame_timings_get_frame_end_time (GdkFrameTimings *timings)
244 {
245   g_return_val_if_fail (timings != NULL, 0);
246
247   return timings->frame_end_time;
248 }
249
250 void
251 _gdk_frame_timings_set_frame_end_time (GdkFrameTimings *timings,
252                                        gint64           frame_end_time)
253 {
254   g_return_if_fail (timings != NULL);
255
256   timings->frame_end_time = frame_end_time;
257 }
258
259 #endif /* G_ENABLE_DEBUG */