diff --git a/src/server/slavefuncs.c b/src/server/slavefuncs.c --- a/src/server/slavefuncs.c +++ b/src/server/slavefuncs.c @@ -39,6 +39,7 @@ #include #include +#include /** Sends the server a single request (see protocol.h) @@ -302,7 +303,7 @@ int exec_blender(char *input, char *outp _distren_asprintf(&frame_str, "%i", frame); char *command = "blender"; // @TODO: We currently expect this to be in PATH - char *cmd[] = { command, "-b", input, "-o", output, "-f", frame_str, (char *)NULL }; // arguments for blender + char *cmd[] = { command, "-b", input, "-o", output, "-f", frame_str, "-t", "0", (char *)NULL }; // arguments for blender fprintf(stderr,"Preparing to execute command: %s -b %s -o %s -f %s\n", command, input, output, frame_str); @@ -387,11 +388,8 @@ int downloadTar(char *url, char *destina return 1; // Eventually make a retry loop } } - else{ - fprintf(stderr, "Tar already exists! Download cancelled.\n"); - return 2; - } - + fprintf(stderr, "Tar already exists! Download cancelled.\n"); + return 2; } @@ -709,6 +707,7 @@ void _web_resetframe(int slavekey, char } void _web_startframe(int slavekey, char *slavepass, int jobnum, int framenum){ + fprintf(stderr,"Marking frame %d started on server... ",framenum); char *url; _distren_asprintf(&url,"http://dev.distren.org/slave/act.php?mode=startframe&slavekey=%d&slavepass=%s&jobnum=%d&framenum=%d", slavekey, slavepass, jobnum, framenum); struct _web_memorystruct data = _web_getrequest(url); @@ -742,7 +741,81 @@ int _web_getwork(int slavekey, char *sla } } -void _web_setrenderpower(int slavekey, char *slavepass, int jobnum, int framenum){ +void _web_setrenderpower(int slavekey, char *slavepass, int renderpower){ + fprintf(stderr,"Setting render power on server... "); + char *url; + _distren_asprintf(&url,"http://dev.distren.org/slave/act.php?mode=setrenderpower&slavekey=%d&slavepass=%s&renderpower=%d", slavekey, slavepass, renderpower); + struct _web_memorystruct data = _web_getrequest(url); + free(url); + + fprintf(stderr,"%s\n", data.memory); + if(data.memory) + free(data.memory); +} + +int slaveBenchmark(char *datadir, int *benchmarkTime, int *renderPower){ + int ret; + int frameToRender = 1; + char *frame_str; + _distren_asprintf(&frame_str, "%d", frameToRender); // Render frame 1 + + char *output; + _distren_asprintf(&output, "%s/benchmark#.jpg", datadir); // Where to save benchmark output + + char *realOutput; + _distren_asprintf(&realOutput, "%s/benchmark%d.jpg", datadir, frameToRender); // Where to save benchmark output + char *input; + _distren_asprintf(&input, "%s/benchmark.blend", datadir); // Input file + + fprintf(stderr,"Downloading benchmark data...\n"); + curlget("http://data.distren.org/benchmark.blend", input); // Download to input file location + + char *command = "blender"; // @TODO: We currently expect this to be in PATH + char *cmd[] = { command, "-b", input, "-o", output, "-f", frame_str, "-t", "0", (char *)NULL }; // arguments for blender + + // fprintf(stderr,"Preparing to execute command: %s -b %s -o %s -f %s\n", command, input, output, frame_str); + fprintf(stderr,"Running benchmark...\n"); + + long startTime; + long endTime; + + time(&startTime); + + char buf[10]; + struct execio *testrem; + size_t readlen; + + ret = execio_open(&testrem, command, cmd); + buf[20] = '\0'; + while(!execio_read(testrem, buf, 20, &readlen)) + { + if(readlen > 20) { + fprintf(stderr, "Something is terribly wrong!\n"); + } + buf[readlen] = '\0'; + fprintf(stderr, "read \"%s\"\n", buf); + } + execio_close(testrem); + + time(&endTime); + + struct stat buffer; + int ostatus = stat(realOutput, &buffer); + if(ostatus == -1){ + ret = 1; // Return error if output wasn't generated + } + else + remove(output); + + free(frame_str); + free(input); + free(output); + + *benchmarkTime = abs(difftime(startTime,endTime)); + float tmp = *benchmarkTime; + tmp = (1/tmp) * 50000; + *renderPower = (int)tmp; + return ret; }