diff --git a/src/com/sheepit/client/Job.java b/src/com/sheepit/client/Job.java index 62b815f..234ea11 100644 --- a/src/com/sheepit/client/Job.java +++ b/src/com/sheepit/client/Job.java @@ -565,7 +565,7 @@ public class Job { int end = element.indexOf(')'); if (end > 0) { try { - long mem = Utils.parseNumber(element.substring(1, end).trim()); + long mem = Utils.parseNumber(element.substring(1, end).trim()) / 1000; // internal use of ram is in kB if (mem > getProcessRender().getMemoryUsed()) { getProcessRender().setMemoryUsed(mem); } @@ -580,7 +580,7 @@ public class Job { int end = element.indexOf('|'); if (end > 0) { try { - long mem = Utils.parseNumber(element.substring(1, end).trim()); + long mem = Utils.parseNumber(element.substring(1, end).trim()) / 1000; // internal use of ram is in kB if (mem > getProcessRender().getMemoryUsed()) { getProcessRender().setMemoryUsed(mem); } diff --git a/src/com/sheepit/client/SettingsLoader.java b/src/com/sheepit/client/SettingsLoader.java index 56579e8..5e56fd8 100644 --- a/src/com/sheepit/client/SettingsLoader.java +++ b/src/com/sheepit/client/SettingsLoader.java @@ -84,7 +84,7 @@ public class SettingsLoader { cores = String.valueOf(cores_); } if (maxRam_ > 0) { - ram = String.valueOf(maxRam_); + ram = String.valueOf(maxRam_) + "k"; } if (maxRenderTime_ > 0) { renderTime = String.valueOf(maxRenderTime_); @@ -350,7 +350,7 @@ public class SettingsLoader { } if (config.getMaxMemory() == -1 && ram != null) { - config.setMaxMemory(Long.valueOf(ram)); + config.setMaxMemory(Utils.parseNumber(ram) / 1000); // internal ram value is in kB } if (config.getMaxRenderTime() == -1 && renderTime != null) { diff --git a/src/com/sheepit/client/Utils.java b/src/com/sheepit/client/Utils.java index 5ada019..a2042c1 100644 --- a/src/com/sheepit/client/Utils.java +++ b/src/com/sheepit/client/Utils.java @@ -146,6 +146,10 @@ public class Utils { file.delete(); } + /** + * Parse a number string to a number. + * Input can be as "32", "10k", "100K", "100G", "1.3G", "0.4T" + */ public static long parseNumber(String in) { in = in.trim(); in = in.replaceAll(",", "."); @@ -158,18 +162,22 @@ public class Utils { m.find(); int scale = 1; switch (m.group(2).charAt(0)) { - case 'G': - scale *= 1000; - case 'g': - scale *= 1000; - case 'M': - scale *= 1000; - case 'm': - scale *= 1000; - case 'K': + case 'T': + case 't': + scale = 1000 * 1000 * 1000 * 1000; + break; + case 'G': + case 'g': + scale = 1000 * 1000 * 1000; + break; + case 'M': + case 'm': + scale = 1000 * 1000; + break; + case 'K': + case 'k': + scale = 1000; break; - default: - return 0; } return Math.round(Double.parseDouble(m.group(1)) * scale); } diff --git a/src/com/sheepit/client/standalone/Worker.java b/src/com/sheepit/client/standalone/Worker.java index c1b8313..d6c74b4 100644 --- a/src/com/sheepit/client/standalone/Worker.java +++ b/src/com/sheepit/client/standalone/Worker.java @@ -38,6 +38,7 @@ import com.sheepit.client.Log; import com.sheepit.client.Pair; import com.sheepit.client.SettingsLoader; import com.sheepit.client.ShutdownHook; +import com.sheepit.client.Utils; import com.sheepit.client.hardware.gpu.GPU; import com.sheepit.client.hardware.gpu.GPUDevice; import com.sheepit.client.hardware.gpu.nvidia.Nvidia; @@ -72,8 +73,8 @@ public class Worker { @Option(name = "-cores", usage = "Number of cores/threads to use for the render", metaVar = "3", required = false) private int nb_cores = -1; - @Option(name = "-memory", usage = "Maximum memory allow to be used by renderer (in MB)", required = false) - private long max_ram = -1; + @Option(name = "-memory", usage = "Maximum memory allow to be used by renderer, number with unit (800M, 2G, ...)", required = false) + private String max_ram = null; @Option(name = "-rendertime", usage = "Maximum time allow for each frame (in minute)", required = false) private int max_rendertime = -1; @@ -219,8 +220,14 @@ public class Worker { config.setUseNbCores(nb_cores); } - if (max_ram > 0) { - config.setMaxMemory(max_ram * 1000); + if (max_ram != null) { + try { + config.setMaxMemory(Utils.parseNumber(max_ram) / 1000); // internal value are in kB + } + catch (java.lang.IllegalStateException e) { + System.err.println("Error: failed to parse memory parameter"); + return; + } } if (max_rendertime > 0) {