void MMPAvailabilityInformation::updateAvailability(const TaskDescription & req) { list<MDPTCluster *> clusters; getAvailability(clusters, req); for (list<MDPTCluster *>::iterator it = clusters.begin(); it != clusters.end(); it++) (*it)->maxT = stars::MaxParameter<Time, int64_t>(req.getDeadline()); if (!clusters.empty() && queueRange.getMax() < req.getDeadline()) queueRange.setMaximum(req.getDeadline()); }
unsigned int MMPAvailabilityInformation::getAvailability(list<MDPTCluster *> & clusters, const TaskDescription & req) { unsigned int result = 0; Time now = Time::getCurrentTime(); for (auto & c : summary) { Time start = now; if (c.maxT.getValue() > start) start = c.maxT.getValue(); if (start < req.getDeadline() && c.fulfills(req)) { double time = (req.getDeadline() - start).seconds(); unsigned long int length = req.getLength() ? req.getLength() : 1000; // A minimum length unsigned long int t = (time * c.minP.getValue()) / length; if (t != 0) { clusters.push_back(&c); result += t; } } } return result; }