OpenGL ES SDK for Android ARM Developer Center
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Utils.h
Go to the documentation of this file.
1 /* Copyright (c) 2017, ARM Limited and Contributors
2  *
3  * SPDX-License-Identifier: MIT
4  *
5  * Permission is hereby granted, free of charge,
6  * to any person obtaining a copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation the rights to
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
9  * and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
12  *
13  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
14  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
16  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
17  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19  */
20 
21 #pragma once
22 #include <time.h>
23 
24 namespace Stats
25 {
26  timespec endFrame;
27  timespec startFrame;
28  uint32_t nbFrame = 0;
29  uint32_t totalNbFrame;
30  double TotalFrameTime = 0;
31 
32  inline void StartFrame()
33  {
35  }
36 
37  inline void EndFrame()
38  {
39  clock_gettime(CLOCK_REALTIME, &endFrame );
40  float diff = (endFrame.tv_sec - startFrame.tv_sec) + (endFrame.tv_nsec - startFrame.tv_nsec);
41  if (diff < 0)
42  diff += 1000000000;
43 
44  TotalFrameTime += diff;
45  ++nbFrame;
46  ++totalNbFrame;
47  }
48 
49  inline float GetFPS()
50  {
51  return 1000000000 / (TotalFrameTime / nbFrame);
52  }
53 
54  inline float GetAverageFrameTime()
55  {
56  return (TotalFrameTime / nbFrame) / 1000000;
57  }
58 
59  inline void Clear()
60  {
61  TotalFrameTime = 0;
62  nbFrame = 0;
63  }
64 
65 }
uint32_t nbFrame
Definition: Utils.h:28
void StartFrame()
Definition: Utils.h:32
timespec endFrame
Definition: Utils.h:26
double TotalFrameTime
Definition: Utils.h:30
timespec startFrame
Definition: Utils.h:27
float GetAverageFrameTime()
Definition: Utils.h:54
void Clear()
Definition: Utils.h:59
float GetFPS()
Definition: Utils.h:49
void EndFrame()
Definition: Utils.h:37
uint32_t totalNbFrame
Definition: Utils.h:29