diff --git a/src/main/java/com/sheepit/client/Client.java b/src/main/java/com/sheepit/client/Client.java index ef4c8ac..3410e00 100644 --- a/src/main/java/com/sheepit/client/Client.java +++ b/src/main/java/com/sheepit/client/Client.java @@ -1089,6 +1089,9 @@ import okhttp3.HttpUrl; protected Error.Type confirmJob(Job ajob, int checkpoint) { String url_real = String.format(LOCALE, "%s&rendertime=%d&memoryused=%s", ajob.getValidationUrl(), ajob.getProcessRender().getRenderDuration(), 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, "path frame " + ajob.getOutputImagePath()); diff --git a/src/main/java/com/sheepit/client/Job.java b/src/main/java/com/sheepit/client/Job.java index 87a87b3..21bd569 100644 --- a/src/main/java/com/sheepit/client/Job.java +++ b/src/main/java/com/sheepit/client/Job.java @@ -24,7 +24,6 @@ import com.sheepit.client.Error.Type; import com.sheepit.client.os.OS; import lombok.Data; import lombok.Getter; -import org.simpleframework.xml.util.Match; import java.io.BufferedReader; import java.io.File; @@ -78,6 +77,7 @@ import java.util.regex.Pattern; private String blenderShortVersion; private String blenderLongVersion; private boolean synchronousUpload; + private float speedSamplesRendered; // only used for powerdetection project private RenderProcess render; private boolean askForRendererKill; private boolean userBlockJob; @@ -113,6 +113,7 @@ import java.util.regex.Pattern; render = new RenderProcess(log_); blenderShortVersion = null; blenderLongVersion = null; + speedSamplesRendered = 0; } public void block() { @@ -398,6 +399,7 @@ import java.util.regex.Pattern; return Error.Type.RENDERER_OUT_OF_MEMORY; } + updateSpeedSamplesRendered(line, progress); updateRenderingStatus(line, progress); Type error = detectError(line); if (error != Error.Type.OK) { @@ -600,6 +602,24 @@ import java.util.regex.Pattern; 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) { if (getUpdateRenderingStatusMethod() == null || getUpdateRenderingStatusMethod().equals(Job.UPDATE_METHOD_BY_REMAINING_TIME)) { String search_remaining = "remaining:";