void BlenderSession::update_status_progress() { string timestatus, status, substatus; string scene = ""; float progress; double total_time, remaining_time = 0; char time_str[128]; float mem_used = (float)session->stats.mem_used / 1024.0f / 1024.0f; float mem_peak = (float)session->stats.mem_peak / 1024.0f / 1024.0f; int samples = session->tile_manager.state.sample + 1; int total_samples = session->tile_manager.num_samples; get_status(status, substatus); get_progress(progress, total_time); if(background) { if(progress>0) remaining_time = (1-progress) * (total_time / progress); scene += " | " + b_scene.name(); if(b_rlay_name != "") scene += ", " + b_rlay_name; } else { BLI_timestr(total_time, time_str, sizeof(time_str)); timestatus = "Time:" + string(time_str) + " | "; if(samples > 0 && total_samples != USHRT_MAX) remaining_time = (total_samples - samples) * (total_time / samples); } if(remaining_time>0) { BLI_timestr(remaining_time, time_str, sizeof(time_str)); timestatus += "Remaining:" + string(time_str) + " | "; } timestatus += string_printf("Mem:%.2fM, Peak:%.2fM", mem_used, mem_peak); if(status.size() > 0) status = " | " + status; if(substatus.size() > 0) status += " | " + substatus; if(status != last_status) { b_engine.update_stats("", (timestatus + scene + status).c_str()); b_engine.update_memory_stats(mem_used, mem_peak); last_status = status; } if(progress != last_progress) { b_engine.update_progress(progress); last_progress = progress; } }
void BlenderSession::update_status_progress() { string timestatus, status, substatus; float progress; double total_time; char time_str[128]; get_status(status, substatus); get_progress(progress, total_time); BLI_timestr(total_time, time_str); timestatus = "Elapsed: " + string(time_str) + " | "; if(substatus.size() > 0) status += " | " + substatus; if(status != last_status) { RE_engine_update_stats((RenderEngine*)b_engine.ptr.data, "", (timestatus + status).c_str()); last_status = status; } if(progress != last_progress) { RE_engine_update_progress((RenderEngine*)b_engine.ptr.data, progress); last_progress = progress; } }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Update the status and progress on Blender UI ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void BlenderSession::update_status_progress() { string timestatus, status, substatus; float progress; double total_time; char time_str[128]; get_status(status, substatus); get_progress(progress, total_time); timestatus = b_scene.name(); if(b_rlay_name != "") timestatus += ", " + b_rlay_name; timestatus += " | "; BLI_timestr(total_time, time_str, 60); timestatus += "Elapsed: " + string(time_str) + " | "; if(substatus.size() > 0) status += " | " + substatus; if(status != last_status) { b_engine.update_stats("", (timestatus + status).c_str()); //TODO: Add the memory usage statistics here //b_engine.update_memory_stats(mem_used, mem_peak); last_status = status; } if(progress > last_progress) { b_engine.update_progress(progress); last_progress = progress; } } //update_status_progress()
void BlenderSession::update_status_progress() { string timestatus, status, substatus; float progress; double total_time; char time_str[128]; float mem_used = (float)session->stats.mem_used / 1024.0f / 1024.0f; float mem_peak = (float)session->stats.mem_peak / 1024.0f / 1024.0f; get_status(status, substatus); get_progress(progress, total_time); timestatus = string_printf("Mem: %.2fM, Peak: %.2fM | ", mem_used, mem_peak); timestatus += b_scene.name(); if(b_rlay_name != "") timestatus += ", " + b_rlay_name; timestatus += " | "; BLI_timestr(total_time, time_str, sizeof(time_str)); timestatus += "Elapsed: " + string(time_str) + " | "; if(substatus.size() > 0) status += " | " + substatus; if(status != last_status) { b_engine.update_stats("", (timestatus + status).c_str()); b_engine.update_memory_stats(mem_used, mem_peak); last_status = status; } if(progress != last_progress) { b_engine.update_progress(progress); last_progress = progress; } }
/* * Bake Dynamic Paint image sequence surface */ static int dynamicPaint_initBake(struct bContext *C, struct wmOperator *op) { DynamicPaintModifierData *pmd = NULL; DynamicPaintCanvasSettings *canvas; Object *ob = ED_object_context(C); int status = 0; double timer = PIL_check_seconds_timer(); DynamicPaintSurface *surface; /* * Get modifier data */ pmd = (DynamicPaintModifierData *)modifiers_findByType(ob, eModifierType_DynamicPaint); if (!pmd) { BKE_report(op->reports, RPT_ERROR, "Bake failed: no Dynamic Paint modifier found"); return 0; } /* Make sure we're dealing with a canvas */ canvas = pmd->canvas; if (!canvas) { BKE_report(op->reports, RPT_ERROR, "Bake failed: invalid canvas"); return 0; } surface = get_activeSurface(canvas); /* Set state to baking and init surface */ canvas->error[0] = '\0'; canvas->flags |= MOD_DPAINT_BAKING; G.is_break = FALSE; /* reset blender_test_break*/ /* Bake Dynamic Paint */ status = dynamicPaint_bakeImageSequence(C, surface, ob); /* Clear bake */ canvas->flags &= ~MOD_DPAINT_BAKING; WM_cursor_restore(CTX_wm_window(C)); dynamicPaint_freeSurfaceData(surface); /* Bake was successful: * Report for ended bake and how long it took */ if (status) { /* Format time string */ char time_str[30]; double time = PIL_check_seconds_timer() - timer; BLI_timestr(time, time_str); /* Show bake info */ BKE_reportf(op->reports, RPT_INFO, "Bake complete! (%s)", time_str); } else { if (strlen(canvas->error)) { /* If an error occurred */ BKE_reportf(op->reports, RPT_ERROR, "Bake failed: %s", canvas->error); } else { /* User canceled the bake */ BKE_report(op->reports, RPT_WARNING, "Baking canceled!"); } } return status; }
/* str is IMA_MAX_RENDER_TEXT in size */ static void make_renderinfo_string(RenderStats *rs, Scene *scene, char *str) { char info_time_str[32]; // used to be extern to header_info.c uintptr_t mem_in_use, mmap_in_use, peak_memory; float megs_used_memory, mmap_used_memory, megs_peak_memory; char *spos = str; mem_in_use = MEM_get_memory_in_use(); mmap_in_use = MEM_get_mapped_memory_in_use(); peak_memory = MEM_get_peak_memory(); megs_used_memory = (mem_in_use - mmap_in_use) / (1024.0 * 1024.0); mmap_used_memory = (mmap_in_use) / (1024.0 * 1024.0); megs_peak_memory = (peak_memory) / (1024.0 * 1024.0); if (scene->lay & 0xFF000000) spos += sprintf(spos, IFACE_("Localview | ")); else if (scene->r.scemode & R_SINGLE_LAYER) spos += sprintf(spos, IFACE_("Single Layer | ")); spos += sprintf(spos, IFACE_("Frame:%d "), (scene->r.cfra)); if (rs->statstr) { spos += sprintf(spos, "| %s ", rs->statstr); } else { if (rs->totvert) spos += sprintf(spos, IFACE_("Ve:%d "), rs->totvert); if (rs->totface) spos += sprintf(spos, IFACE_("Fa:%d "), rs->totface); if (rs->tothalo) spos += sprintf(spos, IFACE_("Ha:%d "), rs->tothalo); if (rs->totstrand) spos += sprintf(spos, IFACE_("St:%d "), rs->totstrand); if (rs->totlamp) spos += sprintf(spos, IFACE_("La:%d "), rs->totlamp); if (rs->mem_peak == 0.0f) spos += sprintf(spos, IFACE_("Mem:%.2fM (%.2fM, Peak %.2fM) "), megs_used_memory, mmap_used_memory, megs_peak_memory); else spos += sprintf(spos, IFACE_("Mem:%.2fM, Peak: %.2fM "), rs->mem_used, rs->mem_peak); if (rs->curfield) spos += sprintf(spos, IFACE_("Field %d "), rs->curfield); if (rs->curblur) spos += sprintf(spos, IFACE_("Blur %d "), rs->curblur); } BLI_timestr(rs->lastframetime, info_time_str, sizeof(info_time_str)); spos += sprintf(spos, IFACE_("Time:%s "), info_time_str); if (rs->curfsa) spos += sprintf(spos, IFACE_("| Full Sample %d "), rs->curfsa); if (rs->infostr && rs->infostr[0]) spos += sprintf(spos, "| %s ", rs->infostr); /* very weak... but 512 characters is quite safe */ if (spos >= str + IMA_MAX_RENDER_TEXT) if (G.debug & G_DEBUG) printf("WARNING! renderwin text beyond limit\n"); }
/* str is IMA_MAX_RENDER_TEXT in size */ static void make_renderinfo_string(RenderStats *rs, Scene *scene, char *str) { char info_time_str[32]; // used to be extern to header_info.c uintptr_t mem_in_use, mmap_in_use, peak_memory; float megs_used_memory, mmap_used_memory, megs_peak_memory; char *spos = str; mem_in_use = MEM_get_memory_in_use(); mmap_in_use = MEM_get_mapped_memory_in_use(); peak_memory = MEM_get_peak_memory(); megs_used_memory = (mem_in_use - mmap_in_use) / (1024.0 * 1024.0); mmap_used_memory = (mmap_in_use) / (1024.0 * 1024.0); megs_peak_memory = (peak_memory) / (1024.0 * 1024.0); /* local view */ if (rs->localview) spos += sprintf(spos, "%s | ", IFACE_("Local View")); /* frame number */ spos += sprintf(spos, IFACE_("Frame:%d "), (scene->r.cfra)); /* previous and elapsed time */ BLI_timestr(rs->lastframetime, info_time_str, sizeof(info_time_str)); if (rs->infostr && rs->infostr[0]) { if (rs->lastframetime != 0.0) spos += sprintf(spos, IFACE_("| Last:%s "), info_time_str); else spos += sprintf(spos, "| "); BLI_timestr(PIL_check_seconds_timer() - rs->starttime, info_time_str, sizeof(info_time_str)); } else spos += sprintf(spos, "| "); spos += sprintf(spos, IFACE_("Time:%s "), info_time_str); /* statistics */ if (rs->statstr) { if (rs->statstr[0]) { spos += sprintf(spos, "| %s ", rs->statstr); } } else { if (rs->totvert || rs->totface || rs->tothalo || rs->totstrand || rs->totlamp) spos += sprintf(spos, "| "); if (rs->totvert) spos += sprintf(spos, IFACE_("Ve:%d "), rs->totvert); if (rs->totface) spos += sprintf(spos, IFACE_("Fa:%d "), rs->totface); if (rs->tothalo) spos += sprintf(spos, IFACE_("Ha:%d "), rs->tothalo); if (rs->totstrand) spos += sprintf(spos, IFACE_("St:%d "), rs->totstrand); if (rs->totlamp) spos += sprintf(spos, IFACE_("La:%d "), rs->totlamp); if (rs->mem_peak == 0.0f) spos += sprintf(spos, IFACE_("| Mem:%.2fM (%.2fM, Peak %.2fM) "), megs_used_memory, mmap_used_memory, megs_peak_memory); else spos += sprintf(spos, IFACE_("| Mem:%.2fM, Peak: %.2fM "), rs->mem_used, rs->mem_peak); if (rs->curfield) spos += sprintf(spos, IFACE_("Field %d "), rs->curfield); if (rs->curblur) spos += sprintf(spos, IFACE_("Blur %d "), rs->curblur); } /* full sample */ if (rs->curfsa) spos += sprintf(spos, IFACE_("| Full Sample %d "), rs->curfsa); /* extra info */ if (rs->infostr && rs->infostr[0]) spos += sprintf(spos, "| %s ", rs->infostr); /* very weak... but 512 characters is quite safe */ if (spos >= str + IMA_MAX_RENDER_TEXT) if (G.debug & G_DEBUG) printf("WARNING! renderwin text beyond limit\n"); }
void BlenderSession::update_status_progress() { string timestatus, status, substatus; string scene = ""; float progress; double total_time, remaining_time = 0, render_time; char time_str[128]; float mem_used = (float)session->stats.mem_used / 1024.0f / 1024.0f; float mem_peak = (float)session->stats.mem_peak / 1024.0f / 1024.0f; get_status(status, substatus); get_progress(progress, total_time, render_time); if(progress > 0) remaining_time = (1.0 - (double)progress) * (render_time / (double)progress); if(background) { scene += " | " + b_scene.name(); if(b_rlay_name != "") scene += ", " + b_rlay_name; if(b_rview_name != "") scene += ", " + b_rview_name; } else { BLI_timestr(total_time, time_str, sizeof(time_str)); timestatus = "Time:" + string(time_str) + " | "; } if(remaining_time > 0) { BLI_timestr(remaining_time, time_str, sizeof(time_str)); timestatus += "Remaining:" + string(time_str) + " | "; } timestatus += string_printf("Mem:%.2fM, Peak:%.2fM", (double)mem_used, (double)mem_peak); if(status.size() > 0) status = " | " + status; if(substatus.size() > 0) status += " | " + substatus; if(status != last_status) { b_engine.update_stats("", (timestatus + scene + status).c_str()); b_engine.update_memory_stats(mem_used, mem_peak); last_status = status; } if(progress != last_progress) { b_engine.update_progress(progress); last_progress = progress; } if(session->progress.get_error()) { string error = session->progress.get_error_message(); if(error != last_error) { /* TODO(sergey): Currently C++ RNA API doesn't let us to * use mnemonic name for the variable. Would be nice to * have this figured out. * * For until then, 1 << 5 means RPT_ERROR. */ b_engine.report(1 << 5, error.c_str()); b_engine.error_set(error.c_str()); last_error = error; } } }