![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2008 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtVrfBackendState.h,v $ $Revision: 1.3 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00011 00013 00014 #pragma once 00015 00016 #include <vrfGuiCore/vrfGuiCore.h> 00017 00018 #include <vrvUtil/signalslib.h> 00019 00020 #include <vrvCore/DtSimStateObject.h> 00021 #include <vrvCore/DtSimState.h> 00022 #include <vrvCore/DtSimEntry.h> 00023 #include <vrvCore/DtStateView.h> 00024 00025 #include <vlpi/simulationAddress.h> 00026 00027 #include <map> 00028 00030 #include <vrfutil/backend.h> 00031 00032 namespace makVrv 00033 { 00034 class DtMessage; 00035 } 00036 00037 class DtSimMessage; 00038 00039 namespace makVrf 00040 { 00041 enum DtBackendChangedStates 00042 { 00043 DtBackendLoadedState = 0x00000001, 00044 DtBackendSimTime = 0x00000002, 00045 DtBackendExerciseTime = 0x00000004, 00046 DtBackendCanSimulate = 0x00000008, 00047 DtBackendControlState = 0x00000010, 00048 DtBackendSaving = 0x00000020, 00049 DtBackendAdded = 0x00000040, 00050 DtBackendRemoved = 0x00000080, 00051 DtBackendLoadedNewScenario = 0x00000100 00052 }; 00053 00054 class DT_DLL_VRFGUICORE DtVrfBackendState : public makVrv::DtSimState 00055 { 00056 public: 00057 DtVrfBackendState(makVrv::DtDe& de) 00058 : mySaving(false) 00059 , myDe(de) 00060 , myFrameRateReportPeriod(1) 00061 , mySampleSize(50) 00062 , myMonitoringReference(0) 00063 , myFrameRateMean(0) 00064 , myFrameRateMedian(0) 00065 , myFrameStandardDeviation(0) 00066 , myMinFrameRate(0) 00067 , myMaxFrameRate(0) 00068 , mySimTimeToRealTimeRatio(0) 00069 { 00070 } 00071 00072 DtVrfBackendState(makVrv::DtDe& de, const DtBackend& b) 00073 : myBackend(b) 00074 , myDe(de) 00075 , mySaving(false) 00076 , myFrameRateReportPeriod(1) 00077 , mySampleSize(50) 00078 , myMonitoringReference(0) 00079 , myFrameRateMean(0) 00080 , myFrameRateMedian(0) 00081 , myFrameStandardDeviation(0) 00082 , myMinFrameRate(0) 00083 , myMaxFrameRate(0) 00084 , mySimTimeToRealTimeRatio(0) 00085 { 00086 } 00087 00088 DtVrfBackendState(const DtVrfBackendState& o) 00089 : myBackend(o.myBackend) 00090 , mySaving(o.mySaving) 00091 , myDe(o.myDe) 00092 , myFrameRateMean(o.myFrameRateMean) 00093 , myFrameRateMedian(o.myFrameRateMedian) 00094 , myFrameStandardDeviation(o.myFrameStandardDeviation) 00095 , myMinFrameRate(o.myMinFrameRate) 00096 , myMaxFrameRate(o.myMaxFrameRate) 00097 , mySimTimeToRealTimeRatio(o.mySimTimeToRealTimeRatio) 00098 { 00099 if (o.myMonitoringReference) 00100 { 00101 myMonitoringReference = o.myMonitoringReference; 00102 (*myMonitoringReference)++; 00103 } 00104 } 00105 00106 virtual ~DtVrfBackendState(); 00107 00108 DtVrfBackendState& operator=(const DtVrfBackendState& rhs); 00109 00110 std::string displayName() const 00111 { 00112 return myBackend.address().string(); 00113 } 00114 00115 const DtBackend& backend() const 00116 { 00117 return myBackend; 00118 } 00119 00120 DtBackend& backend() 00121 { 00122 return myBackend; 00123 } 00124 00125 void setBackend(const DtBackend& b) 00126 { 00127 myBackend = b; 00128 } 00129 00130 void setSaving(bool b) 00131 { 00132 mySaving = b; 00133 } 00134 00135 bool saving() const 00136 { 00137 return mySaving; 00138 } 00139 00140 virtual void startFrameRateMonitor(); 00141 virtual void stopFrameRateMonitor(); 00142 00143 boost::signal<void (const DtVrfBackendState&)> signal_frameRatesUpdated; 00144 00145 public: 00146 double frameRateMean() const 00147 { 00148 return myFrameRateMean; 00149 } 00150 00151 double frameRateMedian() const 00152 { 00153 return myFrameRateMedian; 00154 } 00155 00156 double frameRateStandardDeviation() const 00157 { 00158 return myFrameStandardDeviation; 00159 } 00160 00161 double frameRateMin() const 00162 { 00163 return myMinFrameRate; 00164 } 00165 00166 double frameRateMax() const 00167 { 00168 return myMaxFrameRate; 00169 } 00170 00171 double frameRateSimTimeToRealTimeRatio() const 00172 { 00173 return mySimTimeToRealTimeRatio; 00174 } 00175 00176 protected: 00177 virtual void processFrameRateCallback(DtSimMessage * msg); 00178 00179 protected: 00180 makVrv::DtDe& myDe; 00181 DtBackend myBackend; 00182 bool mySaving; 00183 double myFrameRateReportPeriod; 00184 int mySampleSize; 00185 int* myMonitoringReference; 00186 00187 double myFrameRateMean; 00188 double myFrameRateMedian; 00189 double myFrameStandardDeviation; 00190 double myMinFrameRate; 00191 double myMaxFrameRate; 00192 double mySimTimeToRealTimeRatio; 00193 }; 00194 00196 DT_DLL_VRFGUICORE makVrv::DtMessage& operator<<( makVrv::DtMessage& msg,const DtVrfBackendState& state ); 00197 00199 DT_DLL_VRFGUICORE makVrv::DtMessage& operator>>( makVrv::DtMessage& msg, DtVrfBackendState& state ); 00200 00201 typedef makVrv::DtStateView<DtVrfBackendState> DtVrfBackendStateView; 00202 00203 class DT_DLL_VRFGUICORE DtVrfBackendStateObject : public makVrv::DtSimStateObject 00204 { 00205 public: 00206 DtVrfBackendStateObject(makVrv::DtDe& de, makVrv::DtUniqueID); 00207 00209 void setState(DtVrfBackendState& state) 00210 { 00211 DtVrfBackendState* backendState = dynamic_cast<DtVrfBackendState*>(myState); 00212 if(backendState) 00213 { 00214 *backendState = state; 00215 00216 if(mySimEntry) 00217 { 00218 mySimEntry->stateUpdated(); 00219 } 00220 } 00221 } 00222 00223 void setBackend(const DtBackend& b) 00224 { 00225 ((DtVrfBackendState*)myState)->setBackend(b); 00226 } 00227 00228 const DtVrfBackendState& backend() const 00229 { 00230 return *((DtVrfBackendState*)myState); 00231 } 00232 }; 00233 }