File: CastleTimeUtils.TFramesPerSecond.html

package info (click to toggle)
castle-game-engine 5.2.0-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 185,428 kB
  • sloc: pascal: 260,781; cpp: 1,363; objc: 713; makefile: 537; xml: 496; sh: 480; php: 4
file content (220 lines) | stat: -rw-r--r-- 14,980 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<title>Castle Game Engine: CastleTimeUtils: Class TFramesPerSecond</title>
<meta name="generator" content="PasDoc 0.13.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="StyleSheet" type="text/css" href="pasdoc.css">
</head>
<body>
<table class="container"><tr><td class="navigation">
<h2>Castle Game Engine</h2><p><a href="introduction.html" class="navigation">Introduction</a></p><p><a href="AllUnits.html" class="navigation">Units</a></p><p><a href="ClassHierarchy.html" class="navigation">Class Hierarchy</a></p><p><a href="AllClasses.html" class="navigation">Classes, Interfaces, Objects and Records</a></p><p><a href="AllTypes.html" class="navigation">Types</a></p><p><a href="AllVariables.html" class="navigation">Variables</a></p><p><a href="AllConstants.html" class="navigation">Constants</a></p><p><a href="AllFunctions.html" class="navigation">Functions and Procedures</a></p><p><a href="AllIdentifiers.html" class="navigation">Identifiers</a></p></td><td class="content">
<a name="TFramesPerSecond"></a><h1 class="cio">Class TFramesPerSecond</h1>
<table class="sections wide_list">
<tr>
<td><a class="section" href="#PasDoc-Description">Description</a></td><td><a class="section" href="#PasDoc-Hierarchy">Hierarchy</a></td><td>Fields</td><td><a class="section" href="#PasDoc-Methods">Methods</a></td><td><a class="section" href="#PasDoc-Properties">Properties</a></td></tr></table>
<a name="PasDoc-Description"></a><h2 class="unit">Unit</h2>
<p class="unitlink">
<a  href="CastleTimeUtils.html">CastleTimeUtils</a></p>
<h2 class="declaration">Declaration</h2>
<p class="declaration">
<code>type TFramesPerSecond = class(TObject)</code></p>
<h2 class="description">Description</h2>
<p>
Utility to measure frames per second, independent of actual rendering API. For example, it can be easily &quot;plugged&quot; into <a class="normal" href="CastleWindow.TCastleWindowCustom.html">TCastleWindowCustom</a> (see <a class="normal" href="CastleWindow.TCastleWindowCustom.html#Fps">TCastleWindowCustom.FPS</a>) or Lazarus GL control (see <a class="normal" href="CastleControl.TCastleControlCustom.html#Fps">TCastleControlCustom.FPS</a>).

<p>Things named &quot;_&quot; here are supposed to be internal to the <a class="normal" href="CastleWindow.TCastleWindowCustom.html">TCastleWindowCustom</a> / <a class="normal" href="CastleControl.TCastleControlCustom.html">TCastleControlCustom</a> and such implementations. Other properties can be controlled by the user of <a class="normal" href="CastleWindow.TCastleWindowCustom.html">TCastleWindowCustom</a> / <a class="normal" href="CastleControl.TCastleControlCustom.html">TCastleControlCustom</a>.</p>
<a name="PasDoc-Hierarchy"></a><h2 class="hierarchy">Hierarchy</h2>
<ul class="hierarchy"><li class="ancestor">TObject</li>
<li class="thisitem">TFramesPerSecond</li></ul><h2 class="overview">Overview</h2>
<a name="PasDoc-Methods"></a><h3 class="summary">Methods</h3>
<table class="summary wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>constructor <b><a  href="CastleTimeUtils.TFramesPerSecond.html#Create">Create</a></b>;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleTimeUtils.TFramesPerSecond.html#_RenderBegin">_RenderBegin</a></b>;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleTimeUtils.TFramesPerSecond.html#_RenderEnd">_RenderEnd</a></b>;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleTimeUtils.TFramesPerSecond.html#_UpdateBegin">_UpdateBegin</a></b>;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleTimeUtils.TFramesPerSecond.html#ZeroNextSecondsPassed">ZeroNextSecondsPassed</a></b>;</code></td>
</tr>
</table>
<a name="PasDoc-Properties"></a><h3 class="summary">Properties</h3>
<table class="summary wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>property <b><a  href="CastleTimeUtils.TFramesPerSecond.html#FrameTime">FrameTime</a></b>: Double read FFrameTime;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>property <b><a  href="CastleTimeUtils.TFramesPerSecond.html#RealTime">RealTime</a></b>: Double read FRealTime;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>property <b><a  href="CastleTimeUtils.TFramesPerSecond.html#UpdateSecondsPassed">UpdateSecondsPassed</a></b>: Single read FUpdateSecondsPassed;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>property <b><a  href="CastleTimeUtils.TFramesPerSecond.html#MaxSensibleSecondsPassed">MaxSensibleSecondsPassed</a></b>: Single
      read FMaxSensibleSecondsPassed write FMaxSensibleSecondsPassed;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>property <b><a  href="CastleTimeUtils.TFramesPerSecond.html#UpdateStartTime">UpdateStartTime</a></b>: <a  href="CastleTimeUtils.html#TTimerResult">TTimerResult</a> read FUpdateStartTime;</code></td>
</tr>
</table>
<h2 class="description">Description</h2>
<h3 class="detail">Methods</h3>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Create"></a><code>constructor <b>Create</b>;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="_RenderBegin"></a><code>procedure <b>_RenderBegin</b>;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="_RenderEnd"></a><code>procedure <b>_RenderEnd</b>;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="_UpdateBegin"></a><code>procedure <b>_UpdateBegin</b>;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="ZeroNextSecondsPassed"></a><code>procedure <b>ZeroNextSecondsPassed</b>;</code></td>
</tr>
<tr><td colspan="2">
<p>
Forces <a class="normal" href="CastleTimeUtils.TFramesPerSecond.html#UpdateSecondsPassed">UpdateSecondsPassed</a> for the next Update call (using <a class="normal" href="CastleTimeUtils.TFramesPerSecond.html#_UpdateBegin">_UpdateBegin</a>) to be zero.

<p>This is useful if you just came back from some lenghty state, like a GUI dialog box (like <a class="normal" href="CastleWindow.TCastleWindowCustom.html#FileDialog">TCastleWindowCustom.FileDialog</a> or modal boxes in <a class="normal" href="CastleMessages.html">CastleMessages</a> &mdash; but actually all our stuff already calls this as needed, <a class="normal" href="CastleWindowModes.TGLMode.html">TGLMode</a> takes care of this). <a class="normal" href="CastleTimeUtils.TFramesPerSecond.html#UpdateSecondsPassed">UpdateSecondsPassed</a> would be ridicoulously long in such case (if our loop is totally stopped) or not relevant (if we do our loop, but with totally different callbacks, like <a class="normal" href="CastleMessages.html">CastleMessages</a>). Instead, it's most sensible in such case to fake that <a class="normal" href="CastleTimeUtils.TFramesPerSecond.html#UpdateSecondsPassed">UpdateSecondsPassed</a> is 0.0, so things such as <a class="normal" href="CastleSceneCore.TCastleSceneCore.html#Time">TCastleSceneCore.Time</a> should not advance wildly just because we did GUI box.

<p>This forces the <a class="normal" href="CastleTimeUtils.TFramesPerSecond.html#UpdateSecondsPassed">UpdateSecondsPassed</a> to zero only once, that is only on the next update event (<a class="normal" href="CastleTimeUtils.TFramesPerSecond.html#_UpdateBegin">_UpdateBegin</a>). Following update event (<a class="normal" href="CastleTimeUtils.TFramesPerSecond.html#_UpdateBegin">_UpdateBegin</a>) will have <a class="normal" href="CastleTimeUtils.TFramesPerSecond.html#UpdateSecondsPassed">UpdateSecondsPassed</a> as usual (unless you call <code>ZeroNextSecondsPassed</code> again, of course).</p>
</td></tr>
</table>
<h3 class="detail">Properties</h3>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="FrameTime"></a><code>property <b>FrameTime</b>: Double read FFrameTime;</code></td>
</tr>
<tr><td colspan="2">
<p>
Rendering speed in frames per second. This tells FPS, if we would only call Render (EventRender, OnRender) all the time. That is, this doesn't take into account time spent on other activities, like OnUpdate, and it doesn't take into account that frames are possibly not rendered continously (when AutoRedisplay = <code>False</code>, we may render frames seldom, because there's no need to do it more often).

<p></p>
<h6 class="description_section">See also</h6>
<dl class="see_also">
  <dt><a class="normal" href="CastleTimeUtils.TFramesPerSecond.html#RealTime">RealTime</a></dt>
  <dd>How many frames per second were rendered.</dd>
</dl>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="RealTime"></a><code>property <b>RealTime</b>: Double read FRealTime;</code></td>
</tr>
<tr><td colspan="2">
<p>
How many frames per second were rendered. This is a real number of EventRender (OnRender) calls per second. This means that it's actual speed of your program. Anything can slow this down, not only long EventRender (OnRender), but also slow processing of other events (like OnUpdate). Also, when AutoRedisplay = <code>False</code>, this may be very low, since you just don't need to render frames continously.

<p></p>
<h6 class="description_section">See also</h6>
<dl class="see_also">
  <dt><a class="normal" href="CastleTimeUtils.TFramesPerSecond.html#FrameTime">FrameTime</a></dt>
  <dd>Rendering speed in frames per second.</dd>
</dl>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="UpdateSecondsPassed"></a><code>property <b>UpdateSecondsPassed</b>: Single read FUpdateSecondsPassed;</code></td>
</tr>
<tr><td colspan="2">
<p>
Track how much time passed since last Update call, using <a class="normal" href="CastleTimeUtils.TFramesPerSecond.html#_UpdateBegin">_UpdateBegin</a>.

<p>The time is in seconds, 1.0 = 1 second. For two times faster computer <code>UpdateSecondsPassed</code> = 0.5, for two times slower <code>UpdateSecondsPassed</code> = 2.0. This is useful for doing time-based rendering, when you want to scale some changes by computer speed, to get perceived animation speed the same on every computer, regardless of computer's speed.

<p>This is calculated as a time between start of previous Update event and start of current Update event. So this really measures your whole loop time (unlike previous RenderSpeed that measured only EventRender (OnRender) speed).

<p>You can sanely use this only within EventUpdate (OnUpdate).</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="MaxSensibleSecondsPassed"></a><code>property <b>MaxSensibleSecondsPassed</b>: Single
      read FMaxSensibleSecondsPassed write FMaxSensibleSecondsPassed;</code></td>
</tr>
<tr><td colspan="2">
<p>
Limit the <a class="normal" href="CastleTimeUtils.TFramesPerSecond.html#UpdateSecondsPassed">UpdateSecondsPassed</a> variable, to avoid increasing time in game a lot when a game was hanging or otherwise waiting for some exceptional event from OS. Used only when non-zero.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="UpdateStartTime"></a><code>property <b>UpdateStartTime</b>: <a  href="CastleTimeUtils.html#TTimerResult">TTimerResult</a> read FUpdateStartTime;</code></td>
</tr>
<tr><td colspan="2">
<p>
Time of last Update call.</p>
</td></tr>
</table>
<!-- Piwik -->
<script type="text/javascript">
  var _paq = _paq || [];
  _paq.push(["trackPageView"]);
  _paq.push(["enableLinkTracking"]);

  (function() {
    var u=(("https:" == document.location.protocol) ? "https" : "http") + "://michalis.ii.uni.wroc.pl/piwik-castle-engine/";
    _paq.push(["setTrackerUrl", u+"piwik.php"]);
    _paq.push(["setSiteId", "1"]);
    var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
    g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
  })();
</script>
<!-- End Piwik Code -->

<noscript>
<!-- Piwik Image Tracker -->
<img src="http://michalis.ii.uni.wroc.pl/piwik-castle-engine/piwik.php?idsite=1&amp;rec=1" style="border:0" alt="" />
<!-- End Piwik -->
</noscript>
<hr noshade size="1"><span class="appinfo"><em>Generated by <a  href="http://pasdoc.sourceforge.net/">PasDoc 0.13.0</a> on 2015-06-15 04:43:12</em>
</span>
</td></tr></table></body></html>