git ssb

0+

wanderer🌟 / js-primea-hypervisor



Tree: 7c1b9abb1401216b0a7325dfb2213933eda8826a

Files: 7c1b9abb1401216b0a7325dfb2213933eda8826a / benchmark / index.js

2168 bytesRaw
1const {Message, ModuleRef} = require('primea-objects')
2const Hypervisor = require('../')
3
4const level = require('level-browserify')
5const RadixTree = require('dfinity-radix-tree')
6const db = level('./testdb')
7
8class BaseContainer {
9 constructor (actor) {
10 this.actor = actor
11 }
12 onStartup () {}
13 static onCreation (code, id) {
14 const exp = {}
15 Object.getOwnPropertyNames(this.prototype).filter(name => name !== 'constructor').forEach(name => {
16 exp[name] = {}
17 })
18 return new ModuleRef(exp, id)
19 }
20 onMessage (message) {
21 return this[message.funcRef.identifier[1]](...message.funcArguments)
22 }
23 static get typeId () {
24 return 9
25 }
26}
27
28async function main (numOfActors, depth) {
29 const tree = new RadixTree({
30 db
31 })
32
33 let numOfMsg = 0
34
35 class BenchmarkContainer extends BaseContainer {
36 main () {
37 const refs = [...arguments]
38 const ref = refs.pop()
39 numOfMsg++
40 this.actor.incrementTicks(10)
41 if (ref) {
42 this.actor.send(new Message({
43 funcRef: ref,
44 funcArguments: refs
45 }))
46 }
47 }
48 }
49
50 const hypervisor = new Hypervisor({tree})
51 hypervisor.registerContainer(BenchmarkContainer)
52
53 const refernces = []
54 let _numOfActors = numOfActors
55 while (_numOfActors--) {
56 const {module} = hypervisor.createActor(BenchmarkContainer.typeId)
57 const funcRef = module.getFuncRef('main')
58 funcRef.gas = 1000
59 refernces.push(funcRef)
60 }
61 _numOfActors = numOfActors
62 let msgs = []
63 while (_numOfActors--) {
64 let _depth = depth
65 const funcArguments = []
66 while (_depth--) {
67 const r = Math.floor(Math.random() * numOfActors)
68 const ref = refernces[r]
69 funcArguments.push(ref)
70 }
71 const message = new Message({
72 funcArguments,
73 funcRef: refernces[_numOfActors]
74 })
75 msgs.push(message)
76 }
77 let start = new Date()
78 hypervisor.send(msgs)
79 await hypervisor.scheduler.on('idle', () => {
80 const end = new Date() - start
81 console.info('Execution time: %dms', end)
82 console.log('messages processed', numOfActors * depth + numOfActors)
83 console.log('messages processed', numOfMsg)
84 })
85}
86
87main(1000, 10)
88

Built with git-ssb-web