0033661: Data Exchange, Step Import - Tessellated GDTs are not imported
[occt.git] / src / Graphic3d / Graphic3d_FrameStatsData.cxx
1 // Copyright (c) 2018 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
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.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14 #include <Graphic3d_FrameStatsData.hxx>
15
16 // =======================================================================
17 // function : Graphic3d_FrameStatsData
18 // purpose  :
19 // =======================================================================
20 Graphic3d_FrameStatsData::Graphic3d_FrameStatsData()
21 : myFps (-1.0),
22   myFpsCpu (-1.0),
23   myFpsImmediate (-1.0),
24   myFpsCpuImmediate (-1.0)
25 {
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);
30   Reset();
31 }
32
33 // =======================================================================
34 // function : operator=
35 // purpose  :
36 // =======================================================================
37 Graphic3d_FrameStatsData& Graphic3d_FrameStatsData::operator= (const Graphic3d_FrameStatsData& theOther)
38 {
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;
47   return *this;
48 }
49
50 // =======================================================================
51 // function : Reset
52 // purpose  :
53 // =======================================================================
54 void Graphic3d_FrameStatsData::Reset()
55 {
56   myFps    = -1.0;
57   myFpsCpu = -1.0;
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);
64 }
65
66 // =======================================================================
67 // function : FillMax
68 // purpose  :
69 // =======================================================================
70 void Graphic3d_FrameStatsData::FillMax (const Graphic3d_FrameStatsData& theOther)
71 {
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)
77   {
78     myCounters[aCounterIter] = myCounters[aCounterIter] > theOther.myCounters[aCounterIter] ? myCounters[aCounterIter] : theOther.myCounters[aCounterIter];
79   }
80   for (size_t aTimerIter = 0; aTimerIter < myTimers.size(); ++aTimerIter)
81   {
82     myTimersMax[aTimerIter] = Max (myTimersMax[aTimerIter], theOther.myTimersMax[aTimerIter]);
83     myTimersMin[aTimerIter] = Min (myTimersMin[aTimerIter], theOther.myTimersMin[aTimerIter]);
84     myTimers   [aTimerIter] = myTimersMax[aTimerIter];
85   }
86 }
87
88 // =======================================================================
89 // function : Graphic3d_FrameStatsDataTmp
90 // purpose  :
91 // =======================================================================
92 Graphic3d_FrameStatsDataTmp::Graphic3d_FrameStatsDataTmp()
93 {
94   myOsdTimers .resize (Graphic3d_FrameStatsTimer_NB, OSD_Timer (true));
95   myTimersPrev.resize (Graphic3d_FrameStatsTimer_NB, 0.0);
96 }
97
98 // =======================================================================
99 // function : FlushTimers
100 // purpose  :
101 // =======================================================================
102 void Graphic3d_FrameStatsDataTmp::FlushTimers (Standard_Size theNbFrames, bool theIsFinal)
103 {
104   for (size_t aTimerIter = 0; aTimerIter < myTimers.size(); ++aTimerIter)
105   {
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];
110   }
111
112   if (theIsFinal)
113   {
114     const Standard_Real aNbFrames = (Standard_Real )theNbFrames;
115     for (size_t aTimerIter = 0; aTimerIter < myTimers.size(); ++aTimerIter)
116     {
117       myTimers[aTimerIter] /= aNbFrames;
118     }
119   }
120 }
121
122 // =======================================================================
123 // function : Reset
124 // purpose  :
125 // =======================================================================
126 void Graphic3d_FrameStatsDataTmp::Reset()
127 {
128   Graphic3d_FrameStatsData::Reset();
129   myTimersPrev.assign (myTimersPrev.size(), 0.0);
130   for (size_t aTimerIter = 0; aTimerIter < myOsdTimers.size(); ++aTimerIter)
131   {
132     myOsdTimers[aTimerIter].Reset();
133   }
134 }