]> Pileus Git - ~andy/gtk/blob - gdk/gdkframetimings.c
Change GdkFrameClock from an interface to a class
[~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   gint64 predicted_presentation_time;
33
34 #ifdef G_ENABLE_DEBUG
35   gint64 layout_start_time;
36   gint64 paint_start_time;
37   gint64 frame_end_time;
38 #endif /* G_ENABLE_DEBUG */
39
40   guint complete : 1;
41   guint slept_before : 1;
42 };
43
44 G_DEFINE_BOXED_TYPE (GdkFrameTimings, gdk_frame_timings,
45                      gdk_frame_timings_ref,
46                      gdk_frame_timings_unref)
47
48 GdkFrameTimings *
49 gdk_frame_timings_new (gint64 frame_counter)
50 {
51   GdkFrameTimings *timings;
52
53   timings = g_slice_new0 (GdkFrameTimings);
54   timings->ref_count = 1;
55   timings->frame_counter = frame_counter;
56
57   return timings;
58 }
59
60 GdkFrameTimings *
61 gdk_frame_timings_ref (GdkFrameTimings *timings)
62 {
63   g_return_val_if_fail (timings != NULL, NULL);
64
65   timings->ref_count++;
66
67   return timings;
68 }
69
70 void
71 gdk_frame_timings_unref (GdkFrameTimings *timings)
72 {
73   g_return_if_fail (timings != NULL);
74   g_return_if_fail (timings->ref_count > 0);
75
76   timings->ref_count--;
77   if (timings->ref_count == 0)
78     {
79       g_slice_free (GdkFrameTimings, timings);
80     }
81 }
82
83 gint64
84 gdk_frame_timings_get_frame_counter (GdkFrameTimings *timings)
85 {
86   return timings->frame_counter;
87 }
88
89 guint64
90 gdk_frame_timings_get_cookie (GdkFrameTimings *timings)
91 {
92   g_return_val_if_fail (timings != NULL, 0);
93
94   return timings->cookie;
95 }
96
97 void
98 gdk_frame_timings_set_cookie (GdkFrameTimings *timings,
99                               guint64          cookie)
100 {
101   g_return_if_fail (timings != NULL);
102
103   timings->cookie = cookie;
104 }
105
106 gboolean
107 gdk_frame_timings_get_complete (GdkFrameTimings *timings)
108 {
109   g_return_val_if_fail (timings != NULL, FALSE);
110
111   return timings->complete;
112 }
113
114 void
115 gdk_frame_timings_set_complete (GdkFrameTimings *timings,
116                                 gboolean         complete)
117 {
118   g_return_if_fail (timings != NULL);
119
120   timings->complete = complete;
121 }
122
123 gboolean
124 gdk_frame_timings_get_slept_before (GdkFrameTimings *timings)
125 {
126   g_return_val_if_fail (timings != NULL, FALSE);
127
128   return timings->slept_before;
129 }
130
131 void
132 gdk_frame_timings_set_slept_before (GdkFrameTimings *timings,
133                                     gboolean         slept_before)
134 {
135   g_return_if_fail (timings != NULL);
136
137   timings->slept_before = slept_before;
138 }
139
140 gint64
141 gdk_frame_timings_get_frame_time (GdkFrameTimings *timings)
142 {
143   g_return_val_if_fail (timings != NULL, 0);
144
145   return timings->frame_time;
146 }
147
148 void
149 gdk_frame_timings_set_frame_time (GdkFrameTimings *timings,
150                                   gint64           frame_time)
151 {
152   g_return_if_fail (timings != NULL);
153
154   timings->frame_time = frame_time;
155 }
156
157 gint64
158 gdk_frame_timings_get_drawn_time (GdkFrameTimings *timings)
159 {
160   g_return_val_if_fail (timings != NULL, 0);
161
162   return timings->drawn_time;
163 }
164
165 void
166 gdk_frame_timings_set_drawn_time (GdkFrameTimings *timings,
167                                   gint64           drawn_time)
168 {
169   g_return_if_fail (timings != NULL);
170
171   timings->drawn_time = drawn_time;
172 }
173
174 gint64
175 gdk_frame_timings_get_presentation_time (GdkFrameTimings *timings)
176 {
177   g_return_val_if_fail (timings != NULL, 0);
178
179   return timings->presentation_time;
180 }
181
182 void
183 gdk_frame_timings_set_presentation_time (GdkFrameTimings *timings,
184                                          gint64           presentation_time)
185 {
186   g_return_if_fail (timings != NULL);
187
188   timings->presentation_time = presentation_time;
189 }
190
191 gint64
192 gdk_frame_timings_get_predicted_presentation_time (GdkFrameTimings *timings)
193 {
194   g_return_val_if_fail (timings != NULL, 0);
195
196   return timings->predicted_presentation_time;
197 }
198
199 void
200 gdk_frame_timings_set_predicted_presentation_time (GdkFrameTimings *timings,
201                                                    gint64           predicted_presentation_time)
202 {
203   g_return_if_fail (timings != NULL);
204
205   timings->predicted_presentation_time = predicted_presentation_time;
206 }
207
208 gint64
209 gdk_frame_timings_get_refresh_interval (GdkFrameTimings *timings)
210 {
211   g_return_val_if_fail (timings != NULL, 0);
212
213   return timings->refresh_interval;
214 }
215
216 void
217 gdk_frame_timings_set_refresh_interval (GdkFrameTimings *timings,
218                                         gint64           refresh_interval)
219 {
220   g_return_if_fail (timings != NULL);
221
222   timings->refresh_interval = refresh_interval;
223 }
224
225 #ifdef G_ENABLE_DEBUG
226 gint64
227 _gdk_frame_timings_get_layout_start_time (GdkFrameTimings *timings)
228 {
229   g_return_val_if_fail (timings != NULL, 0);
230
231   return timings->layout_start_time;
232 }
233
234 void
235 _gdk_frame_timings_set_layout_start_time (GdkFrameTimings *timings,
236                                           gint64           layout_start_time)
237 {
238   g_return_if_fail (timings != NULL);
239
240   timings->layout_start_time = layout_start_time;
241 }
242
243 gint64
244 _gdk_frame_timings_get_paint_start_time (GdkFrameTimings *timings)
245 {
246   g_return_val_if_fail (timings != NULL, 0);
247
248   return timings->paint_start_time;
249 }
250
251 void
252 _gdk_frame_timings_set_paint_start_time (GdkFrameTimings *timings,
253                                          gint64           paint_start_time)
254 {
255   g_return_if_fail (timings != NULL);
256
257   timings->paint_start_time = paint_start_time;
258 }
259
260 gint64
261 _gdk_frame_timings_get_frame_end_time (GdkFrameTimings *timings)
262 {
263   g_return_val_if_fail (timings != NULL, 0);
264
265   return timings->frame_end_time;
266 }
267
268 void
269 _gdk_frame_timings_set_frame_end_time (GdkFrameTimings *timings,
270                                        gint64           frame_end_time)
271 {
272   g_return_if_fail (timings != NULL);
273
274   timings->frame_end_time = frame_end_time;
275 }
276
277 #endif /* G_ENABLE_DEBUG */