Feat: update to new power detection method

This commit is contained in:
Laurent Clouet
2023-02-02 18:25:53 +01:00
parent 39cb89470e
commit 2d41b42c96
2 changed files with 24 additions and 1 deletions

View File

@@ -1089,6 +1089,9 @@ import okhttp3.HttpUrl;
protected Error.Type confirmJob(Job ajob, int checkpoint) { protected Error.Type confirmJob(Job ajob, int checkpoint) {
String url_real = String.format(LOCALE, "%s&rendertime=%d&memoryused=%s", ajob.getValidationUrl(), ajob.getProcessRender().getRenderDuration(), String url_real = String.format(LOCALE, "%s&rendertime=%d&memoryused=%s", ajob.getValidationUrl(), ajob.getProcessRender().getRenderDuration(),
ajob.getProcessRender().getPeakMemoryUsed()); ajob.getProcessRender().getPeakMemoryUsed());
if (ajob.getSpeedSamplesRendered() > 0.0) {
url_real += String.format(LOCALE, "&speedsamples=%s", ajob.getSpeedSamplesRendered());
}
this.log.debug(checkpoint, "Client::confirmeJob url " + url_real); this.log.debug(checkpoint, "Client::confirmeJob url " + url_real);
this.log.debug(checkpoint, "path frame " + ajob.getOutputImagePath()); this.log.debug(checkpoint, "path frame " + ajob.getOutputImagePath());

View File

@@ -24,7 +24,6 @@ import com.sheepit.client.Error.Type;
import com.sheepit.client.os.OS; import com.sheepit.client.os.OS;
import lombok.Data; import lombok.Data;
import lombok.Getter; import lombok.Getter;
import org.simpleframework.xml.util.Match;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File; import java.io.File;
@@ -78,6 +77,7 @@ import java.util.regex.Pattern;
private String blenderShortVersion; private String blenderShortVersion;
private String blenderLongVersion; private String blenderLongVersion;
private boolean synchronousUpload; private boolean synchronousUpload;
private float speedSamplesRendered; // only used for powerdetection project
private RenderProcess render; private RenderProcess render;
private boolean askForRendererKill; private boolean askForRendererKill;
private boolean userBlockJob; private boolean userBlockJob;
@@ -113,6 +113,7 @@ import java.util.regex.Pattern;
render = new RenderProcess(log_); render = new RenderProcess(log_);
blenderShortVersion = null; blenderShortVersion = null;
blenderLongVersion = null; blenderLongVersion = null;
speedSamplesRendered = 0;
} }
public void block() { public void block() {
@@ -398,6 +399,7 @@ import java.util.regex.Pattern;
return Error.Type.RENDERER_OUT_OF_MEMORY; return Error.Type.RENDERER_OUT_OF_MEMORY;
} }
updateSpeedSamplesRendered(line, progress);
updateRenderingStatus(line, progress); updateRenderingStatus(line, progress);
Type error = detectError(line); Type error = detectError(line);
if (error != Error.Type.OK) { if (error != Error.Type.OK) {
@@ -600,6 +602,24 @@ import java.util.regex.Pattern;
return newProgress; return newProgress;
} }
private void updateSpeedSamplesRendered(String line, int progress) {
// Looking for "Rendered 1281 samples in 66.319402 seconds"
Pattern pattern = Pattern.compile("^Rendered (\\d+) samples in ([\\d.]+) seconds$");
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
int amount = Integer.parseInt(matcher.group(1));
float duration = Float.parseFloat(matcher.group(2));
if (duration != 0 && amount != 0) {
this.speedSamplesRendered = amount / duration;
}
}
// should we use this, instead ???
// "Average time per sample: 0.052112 seconds"
}
private void updateRenderingStatus(String line, int progress) { private void updateRenderingStatus(String line, int progress) {
if (getUpdateRenderingStatusMethod() == null || getUpdateRenderingStatusMethod().equals(Job.UPDATE_METHOD_BY_REMAINING_TIME)) { if (getUpdateRenderingStatusMethod() == null || getUpdateRenderingStatusMethod().equals(Job.UPDATE_METHOD_BY_REMAINING_TIME)) {
String search_remaining = "remaining:"; String search_remaining = "remaining:";