Convert affinity control from the deprecated PLPA to HWLOC

This commit is contained in:
Hisham Muhammad
2011-09-24 00:30:47 +00:00
parent d07b043ee0
commit ec17b7029a
108 changed files with 72722 additions and 3299 deletions

View File

@ -1,9 +1,8 @@
#include "ProcessList.h"
#include "AffinityPanel.h"
#include "Panel.h"
#include "CheckItem.h"
#include "ProcessList.h"
#include "debug.h"
#include <assert.h>
@ -26,25 +25,33 @@ static HandlerResult AffinityPanel_eventHandler(Panel* this, int ch) {
return result;
}
Panel* AffinityPanel_new(ProcessList* pl, unsigned long mask) {
Panel* AffinityPanel_new(ProcessList* pl, Affinity* affinity) {
Panel* this = Panel_new(1, 1, 1, 1, CHECKITEM_CLASS, true, ListItem_compare);
this->eventHandler = AffinityPanel_eventHandler;
Panel_setHeader(this, "Use CPUs:");
int curCpu = 0;
for (int i = 0; i < pl->cpuCount; i++) {
char number[10];
snprintf(number, 9, "%d", ProcessList_cpuId(pl, i));
Panel_add(this, (Object*) CheckItem_new(String_copy(number), NULL, mask & (1 << i)));
bool mode;
if (curCpu < affinity->used && affinity->cpus[curCpu] == i) {
mode = true;
curCpu++;
} else {
mode = false;
}
Panel_add(this, (Object*) CheckItem_new(String_copy(number), NULL, mode));
}
return this;
}
unsigned long AffinityPanel_getAffinity(Panel* this) {
Affinity* AffinityPanel_getAffinity(Panel* this) {
Affinity* affinity = Affinity_new();
int size = Panel_size(this);
unsigned long mask = 0;
for (int i = 0; i < size; i++) {
if (CheckItem_get((CheckItem*)Panel_get(this, i)))
mask = mask | (1 << i);
Affinity_add(affinity, i);
}
return mask;
return affinity;
}