in src/utils/gpu-filter-utils.js [68:116]
export function assignGpuChannel(filter, filters) {
// find first available channel
if (!filter.gpu) {
return filter;
}
const gpuChannel = filter.gpuChannel || [];
filter.dataId.forEach((dataId, datasetIdx) => {
const findGpuChannel = channel => f => {
const dataIdx = toArray(f.dataId).indexOf(dataId);
return (
f.id !== filter.id && dataIdx > -1 && f.gpu && toArray(f.gpuChannel)[dataIdx] === channel
);
};
if (
Number.isFinite(gpuChannel[datasetIdx]) &&
!filters.find(findGpuChannel(gpuChannel[datasetIdx]))
) {
// if value is already assigned and valid
return;
}
let i = 0;
while (i < MAX_GPU_FILTERS) {
if (!filters.find(findGpuChannel(i))) {
gpuChannel[datasetIdx] = i;
return;
}
i++;
}
});
// if cannot find channel for all dataid, set gpu back to false
// TODO: refactor filter to handle same filter different gpu mode
if (!gpuChannel.length || !gpuChannel.every(Number.isFinite)) {
return {
...filter,
gpu: false
};
}
return {
...filter,
gpuChannel
};
}