From dce52320c93796fe17ed4784ca342e9f6770db13 Mon Sep 17 00:00:00 2001 From: Laurent Clouet Date: Sat, 24 Jan 2015 17:49:27 +0000 Subject: [PATCH] Bugfix: if two gpus have the same name/model, the actual gpu used was the first in the list --- src/com/sheepit/client/hardware/gpu/GPU.java | 13 ++++++- .../standalone/swing/activity/Settings.java | 34 +++++++++++++------ 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/com/sheepit/client/hardware/gpu/GPU.java b/src/com/sheepit/client/hardware/gpu/GPU.java index f23ea76..39bfc8b 100644 --- a/src/com/sheepit/client/hardware/gpu/GPU.java +++ b/src/com/sheepit/client/hardware/gpu/GPU.java @@ -96,7 +96,7 @@ public class GPU { return true; } - public static List listDevices() { + public static List listModels() { if (devices == null) { generate(); } @@ -111,6 +111,17 @@ public class GPU { return devs; } + public static List listDevices() { + if (devices == null) { + generate(); + } + if (devices == null) { + return null; + } + + return devices; + } + public static GPUDevice getGPUDevice(String device_model) { if (device_model == null) { return null; diff --git a/src/com/sheepit/client/standalone/swing/activity/Settings.java b/src/com/sheepit/client/standalone/swing/activity/Settings.java index 739f8da..de4499f 100644 --- a/src/com/sheepit/client/standalone/swing/activity/Settings.java +++ b/src/com/sheepit/client/standalone/swing/activity/Settings.java @@ -30,12 +30,12 @@ public class Settings implements Activity { private File cacheDir; private JFileChooser cacheDirChooser; private JCheckBox useCPU; - private List useGPUs; + private List useGPUs; public Settings(GuiSwing parent_) { parent = parent_; cacheDir = null; - useGPUs = new LinkedList(); + useGPUs = new LinkedList(); } @Override @@ -128,11 +128,12 @@ public class Settings implements Activity { useCPU.setBounds(start_label_right, n, size, size_height_label); parent.getContentPane().add(useCPU); - List gpus = GPU.listDevices(); + List gpus = GPU.listDevices(); if (gpus != null) { - for (String model : gpus) { + for (GPUDevice gpu : gpus) { n += 20; - JCheckBox gpuCheckBox = new JCheckBox(model); + JCheckBoxGPU gpuCheckBox = new JCheckBoxGPU(gpu); + gpuCheckBox.setSelected(gpuChecked); gpuCheckBox.setBounds(start_label_right, n, 200, size_height_label); gpuCheckBox.addActionListener(new GpuChangeAction()); @@ -198,10 +199,10 @@ public class Settings implements Activity { } } - String selected_gpu = null; - for (JCheckBox box : useGPUs) { + GPUDevice selected_gpu = null; + for (JCheckBoxGPU box : useGPUs) { if (box.isSelected()) { - selected_gpu = box.getText(); // model + selected_gpu = box.getGPUDevice(); } } @@ -217,13 +218,24 @@ public class Settings implements Activity { } config.setComputeMethod(method); - GPUDevice gpu = GPU.getGPUDevice(selected_gpu); - if (gpu != null) { - config.setUseGPU(gpu); + if (selected_gpu != null) { + config.setUseGPU(selected_gpu); } parent.setCredentials(login.getText(), new String(password.getPassword())); } } + class JCheckBoxGPU extends JCheckBox { + private GPUDevice gpu; + + public JCheckBoxGPU(GPUDevice gpu) { + super(gpu.getModel()); + this.gpu = gpu; + } + + public GPUDevice getGPUDevice() { + return gpu; + } + } }