Make job times include time waiting in the queue.

This is a temporary fix. The real fix will track wait time and run time both.
This commit is contained in:
JoelKatz
2013-07-22 00:40:45 -07:00
parent 5eae0b4005
commit 0e787747d3
3 changed files with 11 additions and 8 deletions

View File

@@ -40,15 +40,9 @@ JobType Job::getType () const
void Job::doJob () void Job::doJob ()
{ {
m_loadEvent->start (); m_loadEvent->reName (mName);
mJob (*this); mJob (*this);
// VFALCO TODO Isn't there a way to construct the load event with
// the proper name? This way the load event object
// can have the invariant "name is always set"
//
m_loadEvent->reName (mName);
} }
void Job::rename (std::string const& newName) void Job::rename (std::string const& newName)
@@ -61,6 +55,11 @@ int Job::getLimit () const
return m_limit; return m_limit;
} }
LoadEvent& Job::peekEvent() const
{
return *m_loadEvent;
}
const char* Job::toString (JobType t) const char* Job::toString (JobType t)
{ {
switch (t) switch (t)

View File

@@ -81,6 +81,8 @@ public:
int getLimit () const; int getLimit () const;
LoadEvent& peekEvent() const;
// These comparison operators make the jobs sort in priority order in the job set // These comparison operators make the jobs sort in priority order in the job set
bool operator< (const Job& j) const; bool operator< (const Job& j) const;
bool operator> (const Job& j) const; bool operator> (const Job& j) const;

View File

@@ -44,7 +44,9 @@ void JobQueue::addLimitJob (JobType type, const std::string& name, int limit, co
if (type != jtCLIENT) // FIXME: Workaround incorrect client shutdown ordering if (type != jtCLIENT) // FIXME: Workaround incorrect client shutdown ordering
assert (mThreadCount != 0); // do not add jobs to a queue with no threads assert (mThreadCount != 0); // do not add jobs to a queue with no threads
mJobSet.insert (Job (type, name, limit, ++mLastJob, mJobLoads[type], jobFunc)); std::pair< std::set <Job>::iterator, bool > it =
mJobSet.insert (Job (type, name, limit, ++mLastJob, mJobLoads[type], jobFunc));
it.first->peekEvent().start(); // start timing how long it stays in the queue
++mJobCounts[type].first; ++mJobCounts[type].first;
mJobCond.notify_one (); mJobCond.notify_one ();
} }