The thread model does now also store the scheduling events for the thread.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30506 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold 2009-04-30 12:25:56 +00:00
parent e8e86a50aa
commit 8cd416d9e6
2 changed files with 67 additions and 0 deletions

View File

@ -83,3 +83,46 @@ ThreadModel::AddWaitObjectGroup(
return group;
}
bool
ThreadModel::AddSchedulingEvent(const system_profiler_event_header* eventHeader)
{
return fSchedulingEvents.AddItem(eventHeader);
}
int32
ThreadModel::FindSchedulingEvent(bigtime_t time)
{
if (time < 0)
return 0;
time += fModel->BaseTime();
int32 lower = 0;
int32 upper = CountSchedulingEvents();
while (lower < upper) {
int32 mid = (lower + upper) / 2;
const system_profiler_event_header* header = SchedulingEventAt(mid);
system_profiler_thread_scheduling_event* event
= (system_profiler_thread_scheduling_event*)(header + 1);
if (event->time < time)
lower = mid + 1;
else
upper = mid;
}
// We've found the first event that has a time >= the given time. If its
// time is >, we rather return the previous event.
if (lower > 0) {
const system_profiler_event_header* header = SchedulingEventAt(lower);
system_profiler_thread_scheduling_event* event
= (system_profiler_thread_scheduling_event*)(header + 1);
if (event->time > time)
lower--;
}
return lower;
}

View File

@ -30,13 +30,23 @@ public:
inline int32 CountWaitObjectGroups() const;
inline WaitObjectGroup* WaitObjectGroupAt(int32 index) const;
bool AddSchedulingEvent(
const system_profiler_event_header*
eventHeader);
inline int32 CountSchedulingEvents() const;
inline const system_profiler_event_header* SchedulingEventAt(
int32 index) const;
int32 FindSchedulingEvent(bigtime_t time);
private:
typedef BObjectList<WaitObjectGroup> WaitObjectGroupList;
typedef BObjectList<const system_profiler_event_header> EventList;
private:
Model* fModel;
Model::Thread* fThread;
WaitObjectGroupList fWaitObjectGroups;
EventList fSchedulingEvents;
};
@ -93,6 +103,20 @@ ThreadModel::WaitObjectGroupAt(int32 index) const
}
int32
ThreadModel::CountSchedulingEvents() const
{
return fSchedulingEvents.CountItems();
}
const system_profiler_event_header*
ThreadModel::SchedulingEventAt(int32 index) const
{
return fSchedulingEvents.ItemAt(index);
}
// #pragma mark - WaitObjectGroup