Max memory settings can be set using human number with unit
This commit is contained in:
@@ -565,7 +565,7 @@ public class Job {
|
|||||||
int end = element.indexOf(')');
|
int end = element.indexOf(')');
|
||||||
if (end > 0) {
|
if (end > 0) {
|
||||||
try {
|
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()) {
|
if (mem > getProcessRender().getMemoryUsed()) {
|
||||||
getProcessRender().setMemoryUsed(mem);
|
getProcessRender().setMemoryUsed(mem);
|
||||||
}
|
}
|
||||||
@@ -580,7 +580,7 @@ public class Job {
|
|||||||
int end = element.indexOf('|');
|
int end = element.indexOf('|');
|
||||||
if (end > 0) {
|
if (end > 0) {
|
||||||
try {
|
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()) {
|
if (mem > getProcessRender().getMemoryUsed()) {
|
||||||
getProcessRender().setMemoryUsed(mem);
|
getProcessRender().setMemoryUsed(mem);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ public class SettingsLoader {
|
|||||||
cores = String.valueOf(cores_);
|
cores = String.valueOf(cores_);
|
||||||
}
|
}
|
||||||
if (maxRam_ > 0) {
|
if (maxRam_ > 0) {
|
||||||
ram = String.valueOf(maxRam_);
|
ram = String.valueOf(maxRam_) + "k";
|
||||||
}
|
}
|
||||||
if (maxRenderTime_ > 0) {
|
if (maxRenderTime_ > 0) {
|
||||||
renderTime = String.valueOf(maxRenderTime_);
|
renderTime = String.valueOf(maxRenderTime_);
|
||||||
@@ -350,7 +350,7 @@ public class SettingsLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (config.getMaxMemory() == -1 && ram != null) {
|
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) {
|
if (config.getMaxRenderTime() == -1 && renderTime != null) {
|
||||||
|
|||||||
@@ -146,6 +146,10 @@ public class Utils {
|
|||||||
file.delete();
|
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) {
|
public static long parseNumber(String in) {
|
||||||
in = in.trim();
|
in = in.trim();
|
||||||
in = in.replaceAll(",", ".");
|
in = in.replaceAll(",", ".");
|
||||||
@@ -158,18 +162,22 @@ public class Utils {
|
|||||||
m.find();
|
m.find();
|
||||||
int scale = 1;
|
int scale = 1;
|
||||||
switch (m.group(2).charAt(0)) {
|
switch (m.group(2).charAt(0)) {
|
||||||
case 'G':
|
case 'T':
|
||||||
scale *= 1000;
|
case 't':
|
||||||
case 'g':
|
scale = 1000 * 1000 * 1000 * 1000;
|
||||||
scale *= 1000;
|
break;
|
||||||
case 'M':
|
case 'G':
|
||||||
scale *= 1000;
|
case 'g':
|
||||||
case 'm':
|
scale = 1000 * 1000 * 1000;
|
||||||
scale *= 1000;
|
break;
|
||||||
case 'K':
|
case 'M':
|
||||||
|
case 'm':
|
||||||
|
scale = 1000 * 1000;
|
||||||
|
break;
|
||||||
|
case 'K':
|
||||||
|
case 'k':
|
||||||
|
scale = 1000;
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
return Math.round(Double.parseDouble(m.group(1)) * scale);
|
return Math.round(Double.parseDouble(m.group(1)) * scale);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import com.sheepit.client.Log;
|
|||||||
import com.sheepit.client.Pair;
|
import com.sheepit.client.Pair;
|
||||||
import com.sheepit.client.SettingsLoader;
|
import com.sheepit.client.SettingsLoader;
|
||||||
import com.sheepit.client.ShutdownHook;
|
import com.sheepit.client.ShutdownHook;
|
||||||
|
import com.sheepit.client.Utils;
|
||||||
import com.sheepit.client.hardware.gpu.GPU;
|
import com.sheepit.client.hardware.gpu.GPU;
|
||||||
import com.sheepit.client.hardware.gpu.GPUDevice;
|
import com.sheepit.client.hardware.gpu.GPUDevice;
|
||||||
import com.sheepit.client.hardware.gpu.nvidia.Nvidia;
|
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)
|
@Option(name = "-cores", usage = "Number of cores/threads to use for the render", metaVar = "3", required = false)
|
||||||
private int nb_cores = -1;
|
private int nb_cores = -1;
|
||||||
|
|
||||||
@Option(name = "-memory", usage = "Maximum memory allow to be used by renderer (in MB)", required = false)
|
@Option(name = "-memory", usage = "Maximum memory allow to be used by renderer, number with unit (800M, 2G, ...)", required = false)
|
||||||
private long max_ram = -1;
|
private String max_ram = null;
|
||||||
|
|
||||||
@Option(name = "-rendertime", usage = "Maximum time allow for each frame (in minute)", required = false)
|
@Option(name = "-rendertime", usage = "Maximum time allow for each frame (in minute)", required = false)
|
||||||
private int max_rendertime = -1;
|
private int max_rendertime = -1;
|
||||||
@@ -219,8 +220,14 @@ public class Worker {
|
|||||||
config.setUseNbCores(nb_cores);
|
config.setUseNbCores(nb_cores);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (max_ram > 0) {
|
if (max_ram != null) {
|
||||||
config.setMaxMemory(max_ram * 1000);
|
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) {
|
if (max_rendertime > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user