diff options
author | Jeremy Rifkin <51220084+jeremy-rifkin@users.noreply.github.com> | 2022-06-12 08:09:36 -0400 |
---|---|---|
committer | Jeremy Rifkin <51220084+jeremy-rifkin@users.noreply.github.com> | 2022-06-12 08:09:36 -0400 |
commit | 306acc0f67890184cffbc65a0a383f01187c0155 (patch) | |
tree | 788aa4977efeb7f187641bd7cff34dc919e712df /etc/scripts/generate_site_template_screenshots.js | |
parent | 7957fb514666d11d9dadc746047f71e87791523e (diff) | |
download | compiler-explorer-gh-3307.tar.gz compiler-explorer-gh-3307.zip |
Improvements to screenshot generation and site template configgh-3307
Diffstat (limited to 'etc/scripts/generate_site_template_screenshots.js')
-rw-r--r-- | etc/scripts/generate_site_template_screenshots.js | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/etc/scripts/generate_site_template_screenshots.js b/etc/scripts/generate_site_template_screenshots.js index 28d24e64d..127c9e67e 100644 --- a/etc/scripts/generate_site_template_screenshots.js +++ b/etc/scripts/generate_site_template_screenshots.js @@ -77,6 +77,19 @@ function partition(array, filter) { return [pass, fail]; } +async function PromisePoolExecutor(jobs, max_concurrency) { + async function worker(iterator) { + for(const [_, job] of iterator) { + await job(); + } + } + const iterator = jobs.entries(); + const workers = new Array(max_concurrency).fill(iterator).map(worker); + await Promise.allSettled(workers); +} + +// end utils + async function generate_screenshot(url, output_path, settings) { const browser = await puppeteer.launch({ dumpio: true, @@ -111,6 +124,7 @@ async function generate_screenshot(url, output_path, settings) { .split("\n") .filter(l => l !== "") .map(splitProperty) + .map(pair => [pair[0], pair[1].replace(/^https:\/\/godbolt.org\/#/, "")]) .map(([name, data]) => [!name.startsWith("meta.") ? name.replaceAll(/[^a-z]/gi, "") : name, data]), ([name, _]) => name.startsWith("meta.") ); @@ -128,12 +142,12 @@ async function generate_screenshot(url, output_path, settings) { if(!fs.existsSync(output_dir)) { fs.mkdirSync(output_dir, { recursive: true }); } - const promises = []; + const jobs = []; for(const [name, data] of templates) { for(const [theme, colourScheme] of themes) { const path = `${output_dir}/${name}.${theme}.png`; if(!fs.existsSync(path)) { - promises.push(generate_screenshot( + jobs.push(() => generate_screenshot( `${godbolt}/e#${data}`, path, Object.assign(Object.assign({}, defaultSettings), {theme, colourScheme}) @@ -141,5 +155,6 @@ async function generate_screenshot(url, output_path, settings) { } } } - await Promise.all(promises); + // don't launch too many chrome instances concurrently + await PromisePoolExecutor(jobs, 4); })(); |