// Copyright 2013 Lovell Fuller and others.
// SPDX-License-Identifier: Apache-2.0

'use strict';

process.env.UV_THREADPOOL_SIZE = 64;

const assert = require('assert');
const async = require('async');

const sharp = require('../../');
const fixtures = require('../fixtures');

const width = 720;
const height = 480;

sharp.concurrency(1);
sharp.simd(true);

const timer = setInterval(function () {
  console.dir(sharp.counters());
}, 100);

async.mapSeries([1, 1, 2, 4, 8, 16, 32, 64], function (parallelism, next) {
  const start = new Date().getTime();
  async.times(parallelism,
    function (id, callback) {
      /* jslint unused: false */
      sharp(fixtures.inputJpg).resize(width, height).toBuffer(function (err, buffer) {
        buffer = null;
        callback(err, new Date().getTime() - start);
      });
    },
    function (err, ids) {
      assert(!err);
      assert(ids.length === parallelism);
      ids.sort();
      const mean = ids.reduce(function (a, b) {
        return a + b;
      }) / ids.length;
      console.log(parallelism + ' parallel calls: fastest=' + ids[0] + 'ms slowest=' + ids[ids.length - 1] + 'ms mean=' + mean + 'ms');
      next();
    }
  );
}, function () {
  clearInterval(timer);
  console.dir(sharp.counters());
});
