File indexing completed on 2026-05-11 08:47:34
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef _Graphic3d_FrameStats_HeaderFile
0015 #define _Graphic3d_FrameStats_HeaderFile
0016
0017 #include <Graphic3d_FrameStatsData.hxx>
0018 #include <Graphic3d_RenderingParams.hxx>
0019 #include <Standard_Type.hxx>
0020 #include <Standard_Transient.hxx>
0021 #include <TColStd_IndexedDataMapOfStringString.hxx>
0022
0023 class Graphic3d_CView;
0024
0025
0026 class Graphic3d_FrameStats : public Standard_Transient
0027 {
0028 DEFINE_STANDARD_RTTIEXT(Graphic3d_FrameStats, Standard_Transient)
0029 public:
0030
0031 Standard_EXPORT Graphic3d_FrameStats();
0032
0033
0034 Standard_EXPORT virtual ~Graphic3d_FrameStats();
0035
0036
0037 Standard_Real UpdateInterval() const { return myUpdateInterval; }
0038
0039
0040 void SetUpdateInterval(Standard_Real theInterval) { myUpdateInterval = theInterval; }
0041
0042
0043 Standard_Boolean IsLongLineFormat() const { return myIsLongLineFormat; }
0044
0045
0046 void SetLongLineFormat(Standard_Boolean theValue) { myIsLongLineFormat = theValue; }
0047
0048
0049 Standard_EXPORT virtual void FrameStart(const Handle(Graphic3d_CView)& theView,
0050 bool theIsImmediateOnly);
0051
0052
0053 Standard_EXPORT virtual void FrameEnd(const Handle(Graphic3d_CView)& theView,
0054 bool theIsImmediateOnly);
0055
0056 public:
0057
0058 Standard_EXPORT virtual TCollection_AsciiString FormatStats(
0059 Graphic3d_RenderingParams::PerfCounters theFlags) const;
0060
0061
0062 Standard_EXPORT virtual void FormatStats(TColStd_IndexedDataMapOfStringString& theDict,
0063 Graphic3d_RenderingParams::PerfCounters theFlags) const;
0064
0065
0066 Standard_Real FrameDuration() const { return myFrameDuration; }
0067
0068
0069
0070
0071 Standard_Real FrameRate() const { return LastDataFrame().FrameRate(); }
0072
0073
0074
0075
0076
0077
0078
0079
0080 Standard_Real FrameRateCpu() const { return LastDataFrame().FrameRateCpu(); }
0081
0082
0083
0084 Standard_Size CounterValue(Graphic3d_FrameStatsCounter theCounter) const
0085 {
0086 return LastDataFrame()[theCounter];
0087 }
0088
0089
0090
0091 Standard_Real TimerValue(Graphic3d_FrameStatsTimer theTimer) const
0092 {
0093 return LastDataFrame()[theTimer];
0094 }
0095
0096
0097 Standard_Boolean HasCulledLayers() const
0098 {
0099 return LastDataFrame()[Graphic3d_FrameStatsCounter_NbLayersNotCulled]
0100 != LastDataFrame()[Graphic3d_FrameStatsCounter_NbLayers];
0101 }
0102
0103
0104 Standard_Boolean HasCulledStructs() const
0105 {
0106 return LastDataFrame()[Graphic3d_FrameStatsCounter_NbStructsNotCulled]
0107 != LastDataFrame()[Graphic3d_FrameStatsCounter_NbStructs];
0108 }
0109
0110
0111
0112 const Graphic3d_FrameStatsData& LastDataFrame() const
0113 {
0114 return myCounters.Value(myLastFrameIndex);
0115 }
0116
0117
0118 Standard_Integer LastDataFrameIndex() const { return myLastFrameIndex; }
0119
0120
0121 const NCollection_Array1<Graphic3d_FrameStatsData>& DataFrames() const { return myCounters; }
0122
0123
0124 NCollection_Array1<Graphic3d_FrameStatsData>& ChangeDataFrames() { return myCounters; }
0125
0126 public:
0127
0128
0129 Standard_Size& ChangeCounter(Graphic3d_FrameStatsCounter theCounter)
0130 {
0131 return ActiveDataFrame()[theCounter];
0132 }
0133
0134
0135
0136 Standard_Real& ChangeTimer(Graphic3d_FrameStatsTimer theTimer)
0137 {
0138 return ActiveDataFrame()[theTimer];
0139 }
0140
0141
0142
0143 Graphic3d_FrameStatsDataTmp& ActiveDataFrame() { return myCountersTmp; }
0144
0145 protected:
0146
0147 virtual void updateStatistics(const Handle(Graphic3d_CView)& theView,
0148 bool theIsImmediateOnly) = 0;
0149
0150 protected:
0151 OSD_Timer myFpsTimer;
0152 Standard_Real myFrameStartTime;
0153 Standard_Real myFrameDuration;
0154 Standard_Real myUpdateInterval;
0155
0156 Standard_Size myFpsFrameCount;
0157 NCollection_Array1<Graphic3d_FrameStatsData> myCounters;
0158 Graphic3d_FrameStatsDataTmp myCountersTmp;
0159 Graphic3d_FrameStatsData myCountersMax;
0160 Standard_Integer myLastFrameIndex;
0161 Standard_Boolean myIsLongLineFormat;
0162
0163 };
0164
0165 #endif