1 // Copyright (c) 2018 OPEN CASCADE SAS
3 // This file is part of Open CASCADE Technology software library.
5 // This library is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU Lesser General Public License version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
14 #include <Graphic3d_FrameStatsData.hxx>
16 // =======================================================================
17 // function : Graphic3d_FrameStatsData
19 // =======================================================================
20 Graphic3d_FrameStatsData::Graphic3d_FrameStatsData()
23 myFpsImmediate (-1.0),
24 myFpsCpuImmediate (-1.0)
26 myCounters .resize (Graphic3d_FrameStatsCounter_NB, 0);
27 myTimers .resize (Graphic3d_FrameStatsTimer_NB, 0.0);
28 myTimersMin.resize (Graphic3d_FrameStatsTimer_NB, RealLast());
29 myTimersMax.resize (Graphic3d_FrameStatsTimer_NB, 0.0);
33 // =======================================================================
34 // function : operator=
36 // =======================================================================
37 Graphic3d_FrameStatsData& Graphic3d_FrameStatsData::operator= (const Graphic3d_FrameStatsData& theOther)
39 myFps = theOther.myFps;
40 myFpsCpu = theOther.myFpsCpu;
41 myFpsImmediate = theOther.myFpsImmediate;
42 myFpsCpuImmediate = theOther.myFpsCpuImmediate;
43 myCounters = theOther.myCounters;
44 myTimers = theOther.myTimers;
45 myTimersMin = theOther.myTimersMin;
46 myTimersMax = theOther.myTimersMax;
50 // =======================================================================
53 // =======================================================================
54 void Graphic3d_FrameStatsData::Reset()
58 myFpsImmediate = -1.0;
59 myFpsCpuImmediate = -1.0;
60 myCounters .assign (myCounters.size(), 0);
61 myTimers .assign (myTimers.size(), 0.0);
62 myTimersMin.assign (myTimersMin.size(), RealLast());
63 myTimersMax.assign (myTimersMax.size(), 0.0);
66 // =======================================================================
69 // =======================================================================
70 void Graphic3d_FrameStatsData::FillMax (const Graphic3d_FrameStatsData& theOther)
72 myFps = Max (myFps, theOther.myFps);
73 myFpsCpu = Max (myFpsCpu, theOther.myFpsCpu);
74 myFpsImmediate = Max (myFpsImmediate, theOther.myFpsImmediate);
75 myFpsCpuImmediate = Max (myFpsCpuImmediate, theOther.myFpsCpuImmediate);
76 for (size_t aCounterIter = 0; aCounterIter < myCounters.size(); ++aCounterIter)
78 myCounters[aCounterIter] = myCounters[aCounterIter] > theOther.myCounters[aCounterIter] ? myCounters[aCounterIter] : theOther.myCounters[aCounterIter];
80 for (size_t aTimerIter = 0; aTimerIter < myTimers.size(); ++aTimerIter)
82 myTimersMax[aTimerIter] = Max (myTimersMax[aTimerIter], theOther.myTimersMax[aTimerIter]);
83 myTimersMin[aTimerIter] = Min (myTimersMin[aTimerIter], theOther.myTimersMin[aTimerIter]);
84 myTimers [aTimerIter] = myTimersMax[aTimerIter];
88 // =======================================================================
89 // function : Graphic3d_FrameStatsDataTmp
91 // =======================================================================
92 Graphic3d_FrameStatsDataTmp::Graphic3d_FrameStatsDataTmp()
94 myOsdTimers .resize (Graphic3d_FrameStatsTimer_NB, OSD_Timer (true));
95 myTimersPrev.resize (Graphic3d_FrameStatsTimer_NB, 0.0);
98 // =======================================================================
99 // function : FlushTimers
101 // =======================================================================
102 void Graphic3d_FrameStatsDataTmp::FlushTimers (Standard_Size theNbFrames, bool theIsFinal)
104 for (size_t aTimerIter = 0; aTimerIter < myTimers.size(); ++aTimerIter)
106 const Standard_Real aFrameTime = myTimers[aTimerIter] - myTimersPrev[aTimerIter];
107 myTimersMax [aTimerIter] = Max (myTimersMax[aTimerIter], aFrameTime);
108 myTimersMin [aTimerIter] = Min (myTimersMin[aTimerIter], aFrameTime);
109 myTimersPrev[aTimerIter] = myTimers[aTimerIter];
114 const Standard_Real aNbFrames = (Standard_Real )theNbFrames;
115 for (size_t aTimerIter = 0; aTimerIter < myTimers.size(); ++aTimerIter)
117 myTimers[aTimerIter] /= aNbFrames;
122 // =======================================================================
125 // =======================================================================
126 void Graphic3d_FrameStatsDataTmp::Reset()
128 Graphic3d_FrameStatsData::Reset();
129 myTimersPrev.assign (myTimersPrev.size(), 0.0);
130 for (size_t aTimerIter = 0; aTimerIter < myOsdTimers.size(); ++aTimerIter)
132 myOsdTimers[aTimerIter].Reset();