tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

parser.benchmark.js (2295B)


      1 'use strict';
      2 
      3 const benchmark = require('benchmark');
      4 const crypto = require('crypto');
      5 
      6 const WebSocket = require('..');
      7 
      8 const Receiver = WebSocket.Receiver;
      9 const Sender = WebSocket.Sender;
     10 
     11 const options = {
     12  fin: true,
     13  rsv1: false,
     14  mask: true,
     15  readOnly: false
     16 };
     17 
     18 function createBinaryFrame(length) {
     19  const list = Sender.frame(crypto.randomBytes(length), {
     20    opcode: 0x02,
     21    ...options
     22  });
     23 
     24  return Buffer.concat(list);
     25 }
     26 
     27 const pingFrame1 = Buffer.concat(
     28  Sender.frame(crypto.randomBytes(5), { opcode: 0x09, ...options })
     29 );
     30 
     31 const textFrame = Buffer.from('819461616161' + '61'.repeat(20), 'hex');
     32 const pingFrame2 = Buffer.from('8980146e915a', 'hex');
     33 const binaryFrame1 = createBinaryFrame(125);
     34 const binaryFrame2 = createBinaryFrame(65535);
     35 const binaryFrame3 = createBinaryFrame(200 * 1024);
     36 const binaryFrame4 = createBinaryFrame(1024 * 1024);
     37 
     38 const suite = new benchmark.Suite();
     39 const receiver = new Receiver({
     40  binaryType: 'nodebuffer',
     41  extensions: {},
     42  isServer: true,
     43  skipUTF8Validation: false
     44 });
     45 
     46 suite.add('ping frame (5 bytes payload)', {
     47  defer: true,
     48  fn: (deferred) => {
     49    receiver.write(pingFrame1, deferred.resolve.bind(deferred));
     50  }
     51 });
     52 suite.add('ping frame (no payload)', {
     53  defer: true,
     54  fn: (deferred) => {
     55    receiver.write(pingFrame2, deferred.resolve.bind(deferred));
     56  }
     57 });
     58 suite.add('text frame (20 bytes payload)', {
     59  defer: true,
     60  fn: (deferred) => {
     61    receiver.write(textFrame, deferred.resolve.bind(deferred));
     62  }
     63 });
     64 suite.add('binary frame (125 bytes payload)', {
     65  defer: true,
     66  fn: (deferred) => {
     67    receiver.write(binaryFrame1, deferred.resolve.bind(deferred));
     68  }
     69 });
     70 suite.add('binary frame (65535 bytes payload)', {
     71  defer: true,
     72  fn: (deferred) => {
     73    receiver.write(binaryFrame2, deferred.resolve.bind(deferred));
     74  }
     75 });
     76 suite.add('binary frame (200 KiB payload)', {
     77  defer: true,
     78  fn: (deferred) => {
     79    receiver.write(binaryFrame3, deferred.resolve.bind(deferred));
     80  }
     81 });
     82 suite.add('binary frame (1 MiB payload)', {
     83  defer: true,
     84  fn: (deferred) => {
     85    receiver.write(binaryFrame4, deferred.resolve.bind(deferred));
     86  }
     87 });
     88 
     89 suite.on('cycle', (e) => console.log(e.target.toString()));
     90 
     91 if (require.main === module) {
     92  suite.run({ async: true });
     93 } else {
     94  module.exports = suite;
     95 }