]> Pileus Git - ~andy/gtk/blob - gdk/gdkframetimings.c
Add GdkFrameHistory and GdkFrameTimings, handle _NET_WM_FRAME_TIMINGS
[~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   gboolean complete;
27   gint64 frame_counter;
28   guint64 cookie;
29   gint64 frame_time;
30   gint64 drawn_time;
31   gint64 presentation_time;
32   gint64 refresh_interval;
33 };
34
35 G_DEFINE_BOXED_TYPE (GdkFrameTimings, gdk_frame_timings,
36                      gdk_frame_timings_ref,
37                      gdk_frame_timings_unref)
38
39 GdkFrameTimings *
40 gdk_frame_timings_new (gint64 frame_counter)
41 {
42   GdkFrameTimings *timings;
43
44   timings = g_slice_new0 (GdkFrameTimings);
45   timings->ref_count = 1;
46   timings->frame_counter = frame_counter;
47
48   return timings;
49 }
50
51 GdkFrameTimings *
52 gdk_frame_timings_ref (GdkFrameTimings *timings)
53 {
54   g_return_val_if_fail (timings != NULL, NULL);
55
56   timings->ref_count++;
57
58   return timings;
59 }
60
61 void
62 gdk_frame_timings_unref (GdkFrameTimings *timings)
63 {
64   g_return_if_fail (timings != NULL);
65   g_return_if_fail (timings->ref_count > 0);
66
67   timings->ref_count--;
68   if (timings->ref_count == 0)
69     {
70       g_slice_free (GdkFrameTimings, timings);
71     }
72 }
73
74 gint64
75 gdk_frame_timings_get_frame_counter (GdkFrameTimings *timings)
76 {
77   return timings->frame_counter;
78 }
79
80 guint64
81 gdk_frame_timings_get_cookie (GdkFrameTimings *timings)
82 {
83   g_return_val_if_fail (timings != NULL, 0);
84
85   return timings->cookie;
86 }
87
88 void
89 gdk_frame_timings_set_cookie (GdkFrameTimings *timings,
90                               guint64          cookie)
91 {
92   g_return_if_fail (timings != NULL);
93
94   timings->cookie = cookie;
95 }
96
97 gboolean
98 gdk_frame_timings_get_complete (GdkFrameTimings *timings)
99 {
100   g_return_val_if_fail (timings != NULL, FALSE);
101
102   return timings->complete;
103 }
104
105 void
106 gdk_frame_timings_set_complete (GdkFrameTimings *timings,
107                                 gboolean         complete)
108 {
109   g_return_if_fail (timings != NULL);
110
111   timings->complete = complete;
112 }
113
114 gint64
115 gdk_frame_timings_get_frame_time (GdkFrameTimings *timings)
116 {
117   g_return_val_if_fail (timings != NULL, 0);
118
119   return timings->frame_time;
120 }
121
122 void
123 gdk_frame_timings_set_frame_time (GdkFrameTimings *timings,
124                                   gint64           frame_time)
125 {
126   g_return_if_fail (timings != NULL);
127
128   timings->frame_time = frame_time;
129 }
130
131 gint64
132 gdk_frame_timings_get_drawn_time (GdkFrameTimings *timings)
133 {
134   g_return_val_if_fail (timings != NULL, 0);
135
136   return timings->drawn_time;
137 }
138
139 void
140 gdk_frame_timings_set_drawn_time (GdkFrameTimings *timings,
141                                   gint64           drawn_time)
142 {
143   g_return_if_fail (timings != NULL);
144
145   timings->drawn_time = drawn_time;
146 }
147
148 gint64
149 gdk_frame_timings_get_presentation_time (GdkFrameTimings *timings)
150 {
151   g_return_val_if_fail (timings != NULL, 0);
152
153   return timings->presentation_time;
154 }
155
156 void
157 gdk_frame_timings_set_presentation_time (GdkFrameTimings *timings,
158                                          gint64           presentation_time)
159 {
160   g_return_if_fail (timings != NULL);
161
162   timings->presentation_time = presentation_time;
163 }
164
165 gint64
166 gdk_frame_timings_get_refresh_interval (GdkFrameTimings *timings)
167 {
168   g_return_val_if_fail (timings != NULL, 0);
169
170   return timings->refresh_interval;
171 }
172
173 void
174 gdk_frame_timings_set_refresh_interval (GdkFrameTimings *timings,
175                                         gint64           refresh_interval)
176 {
177   g_return_if_fail (timings != NULL);
178
179   timings->refresh_interval = refresh_interval;
180 }