19#include <QElapsedTimer>
87 QHash<IVP1System*,Imp::SystemInfo*>::iterator itE =
m_d->sys2info.end();
88 for (QHash<IVP1System*,Imp::SystemInfo*>::iterator it=
m_d->sys2info.begin();it!=itE;++it) {
89 if ( it.key()->name() == s->name() ) {
94 tmp +=
m_timing=it.value()->refreshtime();
96 if (!found&&!
m_d->sys2info.empty())
132 std::sort(tmplist.begin(), tmplist.end());
134 switch(tmplist.count()) {
135 case 1:
m_timing = tmplist.at(0);
break;
136 case 2:
m_timing = 0.5*(tmplist.at(0)+tmplist.at(1));
break;
137 case 3:
m_timing = tmplist.at(1);
break;
138 case 4:
m_timing = 0.5*(tmplist.at(1)+tmplist.at(2));
break;
139 case 5:
m_timing = (tmplist.at(1)+tmplist.at(2)+tmplist.at(3))/3.0;
break;
140 case 6:
m_timing = 0.5*(tmplist.at(2)+tmplist.at(3));
break;
141 case 7:
m_timing = (tmplist.at(2)+tmplist.at(3)+tmplist.at(4))/3.0;
break;
142 default: assert(0&&
"Should never happen");
break;
168 m_d->priority2sys.insert(
a);
175 std::pair<Pri2SysMap::iterator, Pri2SysMap::iterator> itp(
m_d->priority2sys.equal_range(
m_priority));
176 Pri2SysMap::iterator it = itp.first;
177 for (;it!=itp.second;++it) {
179 m_d->priority2sys.erase(it);
183 assert(it != itp.second);
192 : QObject(parent),
m_d(new
Imp)
194 m_d->prioritiser=
this;
195 m_d->stopwatch =
new QElapsedTimer();
196 m_d->currenttimedsystem=0;
203 delete m_d->stopwatch;
209 Imp::Pri2SysMap::iterator itE =
m_d->priority2sys.end();
210 for (Imp::Pri2SysMap::iterator it=
m_d->priority2sys.begin();it!=itE;++it) {
219 QList<IVP1System*> tmp;
220 Imp::Pri2SysMap::iterator itE =
m_d->priority2sys.end();
221 for (Imp::Pri2SysMap::iterator it=
m_d->priority2sys.begin();it!=itE;++it) {
233 QHash<IVP1System*,Imp::SystemInfo*>::iterator itE =
m_d->sys2info.end();
234 for (QHash<IVP1System*,Imp::SystemInfo*>::iterator it=
m_d->sys2info.begin();it!=itE;++it) {
236 tmp += it.value()->refreshtime();
244 assert(!
m_d->currenttimedsystem);
245 m_d->stopwatch->start();
246 m_d->currenttimedsystem=s;
247 assert(
m_d->sys2info.contains(s));
248 return m_d->sys2info[s]->refreshtime();
255 return static_cast<double>(
m_d->stopwatch->elapsed());
261 assert(
m_d->currenttimedsystem);
262 double timing =
static_cast<double>(
m_d->stopwatch->elapsed());
263 if (
m_d->sys2info.contains(
m_d->currenttimedsystem)) {
264 m_d->sys2info[
m_d->currenttimedsystem]->addTimeMeasurement(timing);
266 m_d->currenttimedsystem=0;
290 const QSet<IVP1ChannelWidget*>&newsoonvis,
291 const double& soonvisbonus)
293 if (
m_d->visiblechannels==newvis&&
m_d->soonvisiblechannels==newsoonvis&&
m_d->soonvisbonus==soonvisbonus)
299 m_d->visiblechannels = newvis;
300 m_d->soonvisiblechannels = newsoonvis;
301 m_d->soonvisbonus = soonvisbonus;
307 bool visible =
m_d->visiblechannels.contains(cw);
308 bool soonvisible =
m_d->soonvisiblechannels.contains(cw);
309 assert(!(visible&&soonvisible));
311 assert(!
m_d->sys2info.contains(*(
m_d->itsys)));
314 m_d->sys2info.insert(*(
m_d->itsys),info);
322 assert(
m_d->sys2info.contains(*(
m_d->itsys)));
323 delete m_d->sys2info[*(
m_d->itsys)];
324 m_d->sys2info.remove(*(
m_d->itsys));
326 if (
m_d->visiblechannels.contains(cw))
327 m_d->visiblechannels.remove(cw);
328 if (
m_d->soonvisiblechannels.contains(cw))
329 m_d->soonvisiblechannels.remove(cw);
QQueue< double > m_timemeasurements
void setVisibilityState(const VisibilityState &)
void addTimeMeasurement(const double &)
double refreshtime() const
SystemInfo(IVP1System *, Imp *, IVP1ChannelWidget *, const VisibilityState &)
std::set< IVP1System * >::const_iterator itsys
void updateSysinfoWithVisibilityState(const QSet< IVP1ChannelWidget * > &channels, const SystemInfo::VisibilityState &vs)
VP1Prioritiser * prioritiser
QElapsedTimer * stopwatch
QSet< IVP1ChannelWidget * > soonvisiblechannels
QSet< IVP1ChannelWidget * > visiblechannels
std::set< IVP1System * >::const_iterator itsysE
QHash< IVP1System *, SystemInfo * > sys2info
IVP1System * currenttimedsystem
std::multimap< double, IVP1System * > Pri2SysMap
virtual ~VP1Prioritiser()
void setupSysItr(IVP1ChannelWidget *cw)
double estimateRemainingCalcTime() const
double elapsedTiming_Refresh()
void visibleChannelsChanged(const QSet< IVP1ChannelWidget * > &vis, const QSet< IVP1ChannelWidget * > &soonvis, const double &soonvisbonus)
IVP1System * nextErasedActiveSystemByPriority()
double endTiming_Refresh()
QList< IVP1System * > getSystemsToEraseByPriority()
VP1Prioritiser(QObject *parent)
void channelCreated(IVP1ChannelWidget *)
double beginTiming_Refresh(IVP1System *)
void channelUncreated(IVP1ChannelWidget *)
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.