Allow user to set tile size

This commit is contained in:
Jackson
2016-09-21 23:26:44 +02:00
committed by Laurent Clouet
parent 6747b666ef
commit 55b909c98b
6 changed files with 143 additions and 11 deletions

View File

@@ -54,6 +54,7 @@ public class Configuration {
private String extras; private String extras;
private boolean autoSignIn; private boolean autoSignIn;
private String UIType; private String UIType;
private int tileSize;
public Configuration(File cache_dir_, String login_, String password_) { public Configuration(File cache_dir_, String login_, String password_) {
this.login = login_; this.login = login_;
@@ -73,6 +74,7 @@ public class Configuration {
this.extras = ""; this.extras = "";
this.autoSignIn = false; this.autoSignIn = false;
this.UIType = null; this.UIType = null;
this.tileSize = -1; // ie not set
} }
public String toString() { public String toString() {
@@ -215,6 +217,14 @@ public class Configuration {
return this.UIType; return this.UIType;
} }
public void setTileSize(int size) {
this.tileSize = size;
}
public int getTileSize() {
return this.tileSize;
}
public void cleanWorkingDirectory() { public void cleanWorkingDirectory() {
this.cleanDirectory(this.workingDirectory); this.cleanDirectory(this.workingDirectory);
this.cleanDirectory(this.storageDirectory); this.cleanDirectory(this.storageDirectory);

View File

@@ -633,14 +633,17 @@ public class Job {
return Type.OK; return Type.OK;
} }
private int getTileSize() { public int getTileSize() {
if (config.getTileSize() == -1) { // not set
int size = 32; // CPU int size = 32; // CPU
GPUDevice gpu = this.config.getGPUDevice(); GPUDevice gpu = this.config.getGPUDevice();
if (getUseGPU() && this.config.getGPUDevice() != null) { if (getUseGPU() && gpu != null) {
// GPU return gpu.getRecommandedTileSize();
// if the vram is lower than 1G reduce the size of tile to avoid black output
size = (gpu.getMemory() > 1073741824L) ? 256 : 128;
} }
return size; return size;
} }
else {
return config.getTileSize();
}
}
} }

View File

@@ -30,6 +30,7 @@ public class SettingsLoader {
private String cacheDir; private String cacheDir;
private String autoSignIn; private String autoSignIn;
private String ui; private String ui;
private String tileSize;
public SettingsLoader() { public SettingsLoader() {
path = getDefaultFilePath(); path = getDefaultFilePath();
@@ -39,7 +40,7 @@ public class SettingsLoader {
path = path_; path = path_;
} }
public SettingsLoader(String login_, String password_, String proxy_, ComputeType computeMethod_, GPUDevice gpu_, int cores_, String cacheDir_, boolean autoSignIn_, String ui_) { public SettingsLoader(String login_, String password_, String proxy_, ComputeType computeMethod_, GPUDevice gpu_, int cores_, String cacheDir_, boolean autoSignIn_, String ui_, String tileSize_) {
path = getDefaultFilePath(); path = getDefaultFilePath();
login = login_; login = login_;
password = password_; password = password_;
@@ -47,6 +48,7 @@ public class SettingsLoader {
cacheDir = cacheDir_; cacheDir = cacheDir_;
autoSignIn = String.valueOf(autoSignIn_); autoSignIn = String.valueOf(autoSignIn_);
ui = ui_; ui = ui_;
tileSize = tileSize_;
if (cores_ > 0) { if (cores_ > 0) {
cores = String.valueOf(cores_); cores = String.valueOf(cores_);
} }
@@ -114,6 +116,10 @@ public class SettingsLoader {
prop.setProperty("ui", ui); prop.setProperty("ui", ui);
} }
if (tileSize != null) {
prop.setProperty("tile-size", tileSize);
}
prop.store(output, null); prop.store(output, null);
} }
catch (IOException io) { catch (IOException io) {
@@ -155,6 +161,7 @@ public class SettingsLoader {
this.cacheDir = null; this.cacheDir = null;
this.autoSignIn = null; this.autoSignIn = null;
this.ui = null; this.ui = null;
this.tileSize = null;
if (new File(path).exists() == false) { if (new File(path).exists() == false) {
return; return;
@@ -201,6 +208,10 @@ public class SettingsLoader {
if (prop.containsKey("ui")) { if (prop.containsKey("ui")) {
this.ui = prop.getProperty("ui"); this.ui = prop.getProperty("ui");
} }
if (prop.containsKey("tile-size")) {
this.tileSize = prop.getProperty("tile-size");
}
} }
catch (IOException io) { catch (IOException io) {
io.printStackTrace(); io.printStackTrace();
@@ -265,6 +276,10 @@ public class SettingsLoader {
config.setUIType(ui); config.setUIType(ui);
} }
if (config.getTileSize() == -1 && tileSize != null) {
config.setTileSize(Integer.valueOf(tileSize));
}
config.setAutoSignIn(Boolean.valueOf(autoSignIn)); config.setAutoSignIn(Boolean.valueOf(autoSignIn));
} }

View File

@@ -60,4 +60,10 @@ public class GPUDevice {
return "GPUDevice [model=" + model + ", memory=" + memory + ", cudaName=" + cudaName + "]"; return "GPUDevice [model=" + model + ", memory=" + memory + ", cudaName=" + cudaName + "]";
} }
public int getRecommandedTileSize() {
// GPU
// if the vram is lower than 1G reduce the size of tile to avoid black output
return (getMemory() > 1073741824L) ? 256 : 128;
}
} }

View File

@@ -184,6 +184,24 @@ public class GuiSwing extends JFrame implements Gui {
client = cli; client = cli;
} }
public JLabel addPaddingReturn(int x, int y, int width, int height) {
GridBagConstraints constraints = new GridBagConstraints();
JLabel label = new JLabel("");
return label;
}
public GridBagConstraints addPaddingConstraints(int x, int y, int width, int height) {
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1.0;
constraints.weighty = 1.0;
constraints.gridwidth = width;
constraints.gridheight = height;
constraints.gridx = x;
constraints.gridy = y;
return constraints;
}
public void addPadding(int x, int y, int width, int height) { public void addPadding(int x, int y, int width, int height) {
GridBagConstraints constraints = new GridBagConstraints(); GridBagConstraints constraints = new GridBagConstraints();
JLabel label = new JLabel(""); JLabel label = new JLabel("");

View File

@@ -57,6 +57,11 @@ public class Settings implements Activity {
private boolean haveAutoStarted; private boolean haveAutoStarted;
private JLabel tileSizePadding;
private JTextField tileSizeValue;
private JLabel tileSizeLabel;
private JCheckBox customTileSize;
public Settings(GuiSwing parent_) { public Settings(GuiSwing parent_) {
parent = parent_; parent = parent_;
cacheDir = null; cacheDir = null;
@@ -245,6 +250,42 @@ public class Settings implements Activity {
++currentRow; ++currentRow;
} }
customTileSize = new JCheckBox("Custom render tile size", config.getTileSize() != -1);
constraints.gridx = 2;
constraints.gridy = currentRow;
parent.getContentPane().add(customTileSize, constraints);
customTileSize.addActionListener(new TileSizeChange());
tileSizePadding = parent.addPaddingReturn(1, ++currentRow, columns - 2, 1);
parent.getContentPane().add(tileSizePadding, parent.addPaddingConstraints(1, ++currentRow, columns - 2, 1));
++currentRow;
tileSizeLabel = new JLabel("Tile Size:");
constraints.gridwidth = columns - 3;
constraints.gridx = 1;
constraints.gridy = currentRow;
parent.getContentPane().add(tileSizeLabel, constraints);
tileSizeValue = new JTextField();
int fromConfig = parent.getConfiguration().getTileSize();
if (fromConfig == -1) {
if (parent.getConfiguration().getGPUDevice() != null) {
fromConfig = parent.getConfiguration().getGPUDevice().getRecommandedTileSize();
}
else {
fromConfig = 32;
}
}
tileSizeValue.setText(Integer.toString(fromConfig));
constraints.gridx = 2;
constraints.gridy = currentRow;
parent.getContentPane().add(tileSizeValue, constraints);
parent.addPadding(1, ++currentRow, columns - 2, 1);
++currentRow;
hideCustomTileSize(config.getTileSize() != -1, false);
saveFile = new JCheckBox("Save settings", true); saveFile = new JCheckBox("Save settings", true);
constraints.gridwidth = columns - 3; constraints.gridwidth = columns - 3;
constraints.gridx = 2; constraints.gridx = 2;
@@ -281,7 +322,6 @@ public class Settings implements Activity {
parent.addPadding(0, 0, 1, currentRow + 1); parent.addPadding(0, 0, 1, currentRow + 1);
parent.addPadding(columns - 1, 0, 1, currentRow + 1); parent.addPadding(columns - 1, 0, 1, currentRow + 1);
if (haveAutoStarted == false && config.getAutoSignIn() && checkDisplaySaveButton()) { if (haveAutoStarted == false && config.getAutoSignIn() && checkDisplaySaveButton()) {
// auto start // auto start
haveAutoStarted = true; haveAutoStarted = true;
@@ -289,6 +329,15 @@ public class Settings implements Activity {
} }
} }
public void hideCustomTileSize(boolean hidden, boolean displayWarning) {
tileSizePadding.setVisible(hidden);
tileSizeValue.setVisible(hidden);
tileSizeLabel.setVisible(hidden);
if (customTileSize.isSelected() == true && displayWarning) {
JOptionPane.showMessageDialog(parent.getContentPane(), "<html>These settings should only be changed if you are an advanced user.<br /> Improper settings may lead to invalid and slower renders!</html>", "Warning: Advanced Users Only!", JOptionPane.WARNING_MESSAGE);
}
}
public boolean checkDisplaySaveButton() { public boolean checkDisplaySaveButton() {
boolean selected = useCPU.isSelected(); boolean selected = useCPU.isSelected();
for (JCheckBoxGPU box : useGPUs) { for (JCheckBoxGPU box : useGPUs) {
@@ -299,6 +348,15 @@ public class Settings implements Activity {
if (login.getText().isEmpty() || password.getPassword().length == 0 || Proxy.isValidURL(proxy.getText()) == false) { if (login.getText().isEmpty() || password.getPassword().length == 0 || Proxy.isValidURL(proxy.getText()) == false) {
selected = false; selected = false;
} }
if (customTileSize.isSelected()) {
try {
Integer.parseInt(tileSizeValue.getText().replaceAll(",", ""));
}
catch (NumberFormatException e) {
selected = false;
}
}
saveButton.setEnabled(selected); saveButton.setEnabled(selected);
return selected; return selected;
} }
@@ -348,6 +406,15 @@ public class Settings implements Activity {
} }
} }
class TileSizeChange implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
boolean custom = customTileSize.isSelected();
hideCustomTileSize(custom, true);
}
}
class SaveAction implements ActionListener { class SaveAction implements ActionListener {
@Override @Override
@@ -416,6 +483,19 @@ public class Settings implements Activity {
} }
} }
String tile = null;
if (customTileSize.isSelected() && tileSizeValue != null) {
try {
tile = tileSizeValue.getText().replaceAll(",", "");
config.setTileSize(Integer.parseInt(tile));
}
catch (NumberFormatException e1) {
System.err.println("Error: wrong tile format");
System.err.println(e);
System.exit(2);
}
}
parent.setCredentials(login.getText(), new String(password.getPassword())); parent.setCredentials(login.getText(), new String(password.getPassword()));
String cachePath = null; String cachePath = null;
@@ -424,7 +504,7 @@ public class Settings implements Activity {
} }
if (saveFile.isSelected()) { if (saveFile.isSelected()) {
new SettingsLoader(login.getText(), new String(password.getPassword()), proxyText, method, selected_gpu, cpu_cores, cachePath, autoSignIn.isSelected(), GuiSwing.type).saveFile(); new SettingsLoader(login.getText(), new String(password.getPassword()), proxyText, method, selected_gpu, cpu_cores, cachePath, autoSignIn.isSelected(), GuiSwing.type, tile).saveFile();
} }
else { else {
try { try {