Add CLI option to set number of render threads
This commit is contained in:
1 parent
e964908e46
commit
88bfc29323
3 files changed
+28
No files matched your search
@@ -11,6 +11,8 @@
|
|||||||
FLAG(help, "help", false) \
|
FLAG(help, "help", false) \
|
||||||
FLAG(output, "o", true) \
|
FLAG(output, "o", true) \
|
||||||
FLAG(output_l, "output", true) \
|
FLAG(output_l, "output", true) \
|
||||||
|
FLAG(threads, "t", true) \
|
||||||
|
FLAG(threads_l, "threads", true) \
|
||||||
FLAG(version, "version", false) \
|
FLAG(version, "version", false) \
|
||||||
FLAG(width, "w", true) \
|
FLAG(width, "w", true) \
|
||||||
FLAG(width_l, "width", true) \
|
FLAG(width_l, "width", true) \
|
||||||
@@ -184,6 +186,7 @@ int Cli::handle_option(size_t flag_idx, const char * arg_value)
|
|||||||
printf(" -h, --height H Set render height to H\n");
|
printf(" -h, --height H Set render height to H\n");
|
||||||
printf(" --help Show this help and exit\n");
|
printf(" --help Show this help and exit\n");
|
||||||
printf(" -o, --output F Write rendered image to file F\n");
|
printf(" -o, --output F Write rendered image to file F\n");
|
||||||
|
printf(" -t, --threads N Use N render threads (default: number of CPUs)\n");
|
||||||
printf(" -w, --width W Set render width to W\n");
|
printf(" -w, --width W Set render width to W\n");
|
||||||
printf(" --version Show fart version and exit\n");
|
printf(" --version Show fart version and exit\n");
|
||||||
return 1;
|
return 1;
|
||||||
@@ -193,6 +196,19 @@ int Cli::handle_option(size_t flag_idx, const char * arg_value)
|
|||||||
this->output_file = arg_value;
|
this->output_file = arg_value;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case flag_threads:
|
||||||
|
case flag_threads_l:
|
||||||
|
if (!parse_size(flag_defs[flag_idx].flag, arg_value, &this->params.threads))
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
if (*this->params.threads == 0u)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: option %s must be at least 1\n", flag_defs[flag_idx].flag);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
case flag_width:
|
case flag_width:
|
||||||
case flag_width_l:
|
case flag_width_l:
|
||||||
if (!parse_size(flag_defs[flag_idx].flag, arg_value, &this->params.width))
|
if (!parse_size(flag_defs[flag_idx].flag, arg_value, &this->params.width))
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#include <fart/RenderParams.h>
|
#include <fart/RenderParams.h>
|
||||||
|
#include <thread>
|
||||||
|
|
||||||
void RenderParams::merge(const RenderParams & other)
|
void RenderParams::merge(const RenderParams & other)
|
||||||
{
|
{
|
||||||
@@ -10,6 +11,10 @@ void RenderParams::merge(const RenderParams & other)
|
|||||||
{
|
{
|
||||||
height = other.height;
|
height = other.height;
|
||||||
}
|
}
|
||||||
|
if (!threads)
|
||||||
|
{
|
||||||
|
threads = other.threads;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderParams::apply_defaults()
|
void RenderParams::apply_defaults()
|
||||||
@@ -22,4 +27,10 @@ void RenderParams::apply_defaults()
|
|||||||
{
|
{
|
||||||
height = 600u;
|
height = 600u;
|
||||||
}
|
}
|
||||||
|
if (!threads)
|
||||||
|
{
|
||||||
|
/* hardware_concurrency() may return 0 if it cannot be determined. */
|
||||||
|
size_t n = std::thread::hardware_concurrency();
|
||||||
|
threads = n > 0u ? n : 1u;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -6,6 +6,7 @@ struct RenderParams
|
|||||||
{
|
{
|
||||||
opt<size_t> width;
|
opt<size_t> width;
|
||||||
opt<size_t> height;
|
opt<size_t> height;
|
||||||
|
opt<size_t> threads;
|
||||||
|
|
||||||
/* Set each field that is not already set to the value from other. */
|
/* Set each field that is not already set to the value from other. */
|
||||||
void merge(const RenderParams & other);
|
void merge(const RenderParams & other);
|
||||||
|
|||||||
Reference in new issue
Block a user