diff --git a/test/benchmarks/time.js b/test/benchmarks/time.js index e86340f7..24ba752a 100644 --- a/test/benchmarks/time.js +++ b/test/benchmarks/time.js @@ -1,4 +1,5 @@ import Benchmark from 'benchmark'; +import { readToEnd } from '@openpgp/web-stream-tools'; import * as openpgp from 'openpgp'; const wrapAsync = func => ({ @@ -25,6 +26,22 @@ const onError = err => { (async () => { const suite = new Benchmark.Suite(); const { armoredKey, privateKey, publicKey, armoredEncryptedMessage, armoredSignedMessage } = await getTestData(); + function* largeDataGenerator({ chunk, numberOfChunks }) { + for (let chunkNumber = 0; chunkNumber < numberOfChunks; chunkNumber++) { + yield chunk; + } + } + + const streamFromGenerator = it => new ReadableStream({ + pull: controller => { + const { value, done } = it.next(); + if (done) { + controller.close(); + } else { + controller.enqueue(value); + } + } + }); suite.add('openpgp.readKey', wrapAsync(async () => { await openpgp.readKey({ armoredKey }); @@ -48,6 +65,14 @@ const onError = err => { await openpgp.sign({ message, signingKeys: privateKey }); })); + suite.add('openpgp.sign (stream)', wrapAsync(async () => { + const inputStream = streamFromGenerator(largeDataGenerator({ chunk: new Uint8Array(10000), numberOfChunks: 10 })); + const message = await openpgp.createMessage({ binary: inputStream }); + const signed = await openpgp.sign({ message, signingKeys: privateKey }); + + await readToEnd(signed); + })); + suite.add('openpgp.decrypt', wrapAsync(async () => { const message = await openpgp.readMessage({ armoredMessage: armoredEncryptedMessage }); await openpgp.decrypt({ message, decryptionKeys: privateKey });