36 #include <QStringList>
47 mIntervalClock.start();
55 mIntervalClock.start();
61 mIntervalClock.restart();
68 this->
time(
"outside");
73 std::vector<Entry>::iterator iter;
74 for (iter=mTiming.begin(); iter!=mTiming.end(); ++iter)
78 iter->time.push_back(mRenderClock.restart());
84 newEntry.time.push_back(mRenderClock.restart());
85 mTiming.push_back(newEntry);
92 if (!mIntervalClock.elapsed())
94 double numberOfRenderings = mTiming.empty() ? 0 : mTiming.front().time.size();
95 double fps = 1000.0 * numberOfRenderings / mIntervalClock.elapsed();
96 return floor(fps+0.5);
101 return mIntervalClock.elapsed() > mInterval;
147 std::stringstream ss;
148 ss << mName <<
":\t";
149 ss <<
"Elapsed=" << mIntervalClock.elapsed() <<
" ms";
150 ss <<
"\tFPS=" << this->
getFPS() <<
" fps";
155 QStringList meanTimes;
156 QStringList maxTimes;
160 std::vector<Entry>::iterator entry;
161 for (entry=mTiming.begin(); entry!=mTiming.end(); ++entry)
163 double maxTime = this->getMaxTime(entry->time);
164 double meanTime = this->getMeanTime(entry->time);
165 totalTime += meanTime;
172 ss << QString(
"\t(total=%1)").arg(ids.join(
"+"));
173 ss << QString(
"\tMean:(%2=%3) ms/frame").arg(totalTime).arg(meanTimes.join(
"+"));
174 ss << QString(
"\tMax:(%1)").arg(maxTimes.join(
"+"));
179 double CyclicActionLogger::getMeanTime(std::vector<double> &time)
181 return std::accumulate(time.begin(), time.end(), 0)/time.size();
184 double CyclicActionLogger::getMaxTime(std::vector<double> &time)
186 return *std::max_element(time.begin(), time.end());
191 std::vector<Entry>::iterator entry = getTimingVectorIterator(
id);
192 if(entry == mTiming.end())
194 reportWarning(
"CyclicActionLogger::getTime() unknown id: " +
id);
197 return getMeanTime(entry->time);
200 std::vector<CyclicActionLogger::Entry>::iterator CyclicActionLogger::getTimingVectorIterator(QString
id)
202 std::vector<Entry>::iterator entry;
203 for (entry=mTiming.begin(); entry!=mTiming.end(); ++entry)
213 double totalTime = 0;
214 std::vector<Entry>::iterator entry;
215 for (entry=mTiming.begin(); entry!=mTiming.end(); ++entry)
217 if(entry->id !=
"outside")
219 double meanTime = this->getMeanTime(entry->time);
220 totalTime += meanTime;
QString qstring_cast(const T &val)
void reset(int interval=1000)
void begin()
start timing for this cycle
bool intervalPassed() const
void reportWarning(QString msg)
int getTotalLoggedTime()
Total time contained in entered id's (id outside is not counted)
QString dumpStatisticsSmall()
void time(QString id)
store time from begin or last time()