ATLAS Offline Software
Loading...
Searching...
No Matches
VP1Prioritiser::Imp::SystemInfo Class Reference
Collaboration diagram for VP1Prioritiser::Imp::SystemInfo:

Public Types

enum  VisibilityState { NOTVISIBLE , VISIBLE , SOONVISIBLE }

Public Member Functions

 SystemInfo (IVP1System *, Imp *, IVP1ChannelWidget *, const VisibilityState &)
 ~SystemInfo ()
void setVisibilityState (const VisibilityState &)
void addTimeMeasurement (const double &)
double refreshtime () const

Public Attributes

IVP1Systemsystem {}

Private Member Functions

void calcPriority ()
void removeFromPriMap ()

Private Attributes

double m_timing {}
double m_priority {}
const bool m_accumulator
VisibilityState m_vs
Impm_d {}
QQueue< double > m_timemeasurements

Detailed Description

Definition at line 33 of file VP1Prioritiser.cxx.

Member Enumeration Documentation

◆ VisibilityState

Constructor & Destructor Documentation

◆ SystemInfo()

VP1Prioritiser::Imp::SystemInfo::SystemInfo ( IVP1System * s,
Imp * d,
IVP1ChannelWidget * cw,
const VisibilityState & vs )
inline

Definition at line 81 of file VP1Prioritiser.cxx.

82 : system(s), m_priority(117117.117),
84{
85 //If another system with the same name exists already, we use that
86 //timing as a reasonable guess. Otherwise we use the average of the
87 //other channels. Failing that we use a default of 500ms.:
88 double tmp(0);
89 bool found(false);
90 QHash<IVP1System*,Imp::SystemInfo*>::iterator itE = m_d->sys2info.end();
91 for (QHash<IVP1System*,Imp::SystemInfo*>::iterator it=m_d->sys2info.begin();it!=itE;++it) {
92 if ( it.key()->name() == s->name() ) {
93 m_timing=it.value()->refreshtime();
94 found=true;
95 break;
96 }
97 tmp += m_timing=it.value()->refreshtime();
98 }
99 if (!found&&!m_d->sys2info.empty())
100 m_timing = tmp/m_d->sys2info.count();
101 else
102 m_timing=500;
103
104 calcPriority();
105}
virtual bool isAccumulator() const

◆ ~SystemInfo()

VP1Prioritiser::Imp::SystemInfo::~SystemInfo ( )
inline

Definition at line 108 of file VP1Prioritiser.cxx.

Member Function Documentation

◆ addTimeMeasurement()

void VP1Prioritiser::Imp::SystemInfo::addTimeMeasurement ( const double & t)
inline

Definition at line 125 of file VP1Prioritiser.cxx.

126{
127 //Keep the seven latest measurements, and use a truncated mean as
128 //final estimate.
129
130 m_timemeasurements.enqueue(t);
131 if (m_timemeasurements.count()==8)
132 m_timemeasurements.dequeue();
133
134 QList<double> tmplist = m_timemeasurements;
135 std::sort(tmplist.begin(), tmplist.end());
136
137 switch(tmplist.count()) {
138 case 1: m_timing = tmplist.at(0); break;
139 case 2: m_timing = 0.5*(tmplist.at(0)+tmplist.at(1)); break;
140 case 3: m_timing = tmplist.at(1); break;
141 case 4: m_timing = 0.5*(tmplist.at(1)+tmplist.at(2)); break;
142 case 5: m_timing = (tmplist.at(1)+tmplist.at(2)+tmplist.at(3))/3.0; break;
143 case 6: m_timing = 0.5*(tmplist.at(2)+tmplist.at(3)); break;
144 case 7: m_timing = (tmplist.at(2)+tmplist.at(3)+tmplist.at(4))/3.0; break;
145 default: assert(0&&"Should never happen"); break;
146 }
147
148 calcPriority();
149}
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.

◆ calcPriority()

void VP1Prioritiser::Imp::SystemInfo::calcPriority ( )
inlineprivate

Definition at line 152 of file VP1Prioritiser.cxx.

153{
154 //1) Remove from m_d->priority2sys map
155
156 if (m_priority!=117117.117)
158
159 //2) Calculate new priority
160
161 //Priority is based on how long the systems take to refresh (the
162 //fastest gets refreshed first). In order to ensure that visible,
163 //soonvisible, and accumulators gets priority they get a bonus of
164 //30s, XXXms, and 100ms respectively (where XXX depends on the scenario):
165
166 m_priority = m_timing + (m_vs==VISIBLE?-30000.0:(m_vs==SOONVISIBLE?-m_d->soonvisbonus:0.0)) + (m_accumulator?-100.0:0.0);
167
168 //3) Add to m_d->priority2sys map
169
170 std::pair<double,IVP1System*> a(m_priority,system);
171 m_d->priority2sys.insert(a);
172}
static Double_t a

◆ refreshtime()

double VP1Prioritiser::Imp::SystemInfo::refreshtime ( ) const
inline

Definition at line 41 of file VP1Prioritiser.cxx.

41{ return m_timing; }

◆ removeFromPriMap()

void VP1Prioritiser::Imp::SystemInfo::removeFromPriMap ( )
inlineprivate

Definition at line 175 of file VP1Prioritiser.cxx.

176{
177 //Fixme: Cache itp and it (in class Imp even?)!
178 std::pair<Pri2SysMap::iterator, Pri2SysMap::iterator> itp(m_d->priority2sys.equal_range(m_priority));
179 Pri2SysMap::iterator it = itp.first;
180 for (;it!=itp.second;++it) {
181 if (it->second==system) {
182 m_d->priority2sys.erase(it);
183 break;
184 }
185 }
186 assert(it != itp.second);
187}

◆ setVisibilityState()

void VP1Prioritiser::Imp::SystemInfo::setVisibilityState ( const VisibilityState & vs)
inline

Definition at line 114 of file VP1Prioritiser.cxx.

115{
116 //Fixme: When do we get tabmanager setVisible signals? At startup? When channels are added?
117 //Fixme: Do not emit these during file loading!!
118 if (m_vs==vs)
119 return;
120 m_vs = vs;
121 calcPriority();
122}

Member Data Documentation

◆ m_accumulator

const bool VP1Prioritiser::Imp::SystemInfo::m_accumulator
private

Definition at line 45 of file VP1Prioritiser.cxx.

◆ m_d

Imp* VP1Prioritiser::Imp::SystemInfo::m_d {}
private

Definition at line 48 of file VP1Prioritiser.cxx.

48{};

◆ m_priority

double VP1Prioritiser::Imp::SystemInfo::m_priority {}
private

Definition at line 44 of file VP1Prioritiser.cxx.

44{};

◆ m_timemeasurements

QQueue<double> VP1Prioritiser::Imp::SystemInfo::m_timemeasurements
private

Definition at line 50 of file VP1Prioritiser.cxx.

◆ m_timing

double VP1Prioritiser::Imp::SystemInfo::m_timing {}
private

Definition at line 43 of file VP1Prioritiser.cxx.

43{};

◆ m_vs

VisibilityState VP1Prioritiser::Imp::SystemInfo::m_vs
private

Definition at line 46 of file VP1Prioritiser.cxx.

◆ system

IVP1System* VP1Prioritiser::Imp::SystemInfo::system {}

Definition at line 38 of file VP1Prioritiser.cxx.

38{};

The documentation for this class was generated from the following file: