UNPKG

mudb

Version:

Real-time database for multiplayer games

67 lines 2.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const perf_hooks_1 = require("perf_hooks"); const stream_1 = require("../../stream"); function deltaByteLength(schema, a, b) { const ws = new stream_1.MuWriteStream(1); schema.diff(a, b, ws); console.log(`${JSON.stringify(a)} -> ${JSON.stringify(b)}: ${ws.bytes().length}`); } exports.deltaByteLength = deltaByteLength; function diffPatchDuration(schema, a, b, rounds, id = '', sampleSize = 9) { const diffSample = []; const diffObserver = new perf_hooks_1.PerformanceObserver((list) => { const entry = list.getEntriesByName(`diff`)[0]; if (entry) { perf_hooks_1.performance.clearMarks(); diffSample.push(entry.duration); if (diffSample.length === sampleSize) { diffObserver.disconnect(); diffSample.sort((x, y) => x - y); const median = diffSample[sampleSize >>> 1]; console.log((id && `${id}: `) + `diff ${rounds} rounds: ${median}`); } } }); diffObserver.observe({ entryTypes: ['measure'] }); const wss = new Array(sampleSize * rounds); for (let i = 0; i < wss.length; ++i) { wss[i] = new stream_1.MuWriteStream(1); } for (let i = 0; i < sampleSize; ++i) { perf_hooks_1.performance.mark('A'); for (let j = 0; j < rounds; ++j) { const ws = wss[i * rounds + j]; schema.diff(a, b, ws); } perf_hooks_1.performance.mark('B'); perf_hooks_1.performance.measure(`diff`, 'A', 'B'); } const patchSample = []; const patchObserver = new perf_hooks_1.PerformanceObserver((list) => { const entry = list.getEntriesByName(`patch`)[0]; if (entry) { perf_hooks_1.performance.clearMarks(); patchSample.push(entry.duration); if (patchSample.length === sampleSize) { patchObserver.disconnect(); patchSample.sort((x, y) => x - y); const median = patchSample[sampleSize >>> 1]; console.log((id && `${id}: `) + `patch ${rounds} rounds: ${median}`); } } }); patchObserver.observe({ entryTypes: ['measure'] }); const rss = wss.map((ws) => new stream_1.MuReadStream(ws.bytes())); for (let i = 0; i < sampleSize; ++i) { perf_hooks_1.performance.mark('C'); for (let j = 0; j < rounds; ++j) { const rs = rss[i * rounds + j]; (rs.offset < rs.length) && schema.patch(a, rs); } perf_hooks_1.performance.mark('D'); perf_hooks_1.performance.measure(`patch`, 'C', 'D'); } } exports.diffPatchDuration = diffPatchDuration; //# sourceMappingURL=_do.js.map