From c8695cd9b94e87ad567520089969583d9d36637f Mon Sep 17 00:00:00 2001 From: Gon Pombo Date: Fri, 24 Jan 2025 10:55:52 -0300 Subject: [PATCH] emit messages to specific address (#1014) * emit messages to specific address * update protocol * send state to specific user * update snapshots * udpate protocol to handle multiple address * update protocol * fix tests * add message size * add bytes info * fix tests * limit the size of network messages to 13 * fix inspector * fix tests * remove magic numbers * fix tests * update protocol * update snapshots --- jest.config.js | 2 +- package-lock.json | 479 ++++++++++++++---- package.json | 2 +- packages/@dcl/ecs/src/systems/crdt/index.ts | 16 +- packages/@dcl/ecs/src/systems/crdt/types.ts | 6 +- .../src/lib/data-layer/host/stream.ts | 2 +- .../inspector/src/lib/sdk/connect-stream.ts | 2 +- .../etc/playground-assets.api.md | 2 +- packages/@dcl/sdk-commands/package-lock.json | 14 +- packages/@dcl/sdk-commands/package.json | 2 +- .../sdk/src/internal/transports/logger.ts | 3 +- .../internal/transports/rendererTransport.ts | 2 +- .../sdk/src/network/binary-message-bus.ts | 8 +- .../@dcl/sdk/src/network/message-bus-sync.ts | 40 +- test/ecs/customComponent.spec.ts | 4 +- test/ecs/customComponentWithSystems.spec.ts | 4 +- test/sdk/network/network-transport.spec.ts | 103 ++++ test/sdk/network/sync-engines.spec.ts | 33 +- .../static-scene.test.ts.crdt | 6 +- .../testing-fw.test.ts.crdt | 6 +- .../two-way-crdt.test.ts.crdt | 6 +- test/snapshots/helpers/with-renderer.ts | 2 +- test/snapshots/package-lock.json | 2 +- .../append-value-crdt.ts.crdt | 6 +- .../production-bundles/billboard.ts.crdt | 6 +- .../production-bundles/cube-deleted.ts.crdt | 4 +- .../snapshots/production-bundles/cube.ts.crdt | 4 +- .../production-bundles/cubes.ts.crdt | 12 +- .../production-bundles/pointer-events.ts.crdt | 4 +- .../schema-components.ts.crdt | 4 +- test/snapshots/production-bundles/ui.ts.crdt | 6 +- .../with-main-function.ts.crdt | 4 +- 32 files changed, 597 insertions(+), 199 deletions(-) create mode 100644 test/sdk/network/network-transport.spec.ts diff --git a/jest.config.js b/jest.config.js index 90987ef30..149f19e60 100644 --- a/jest.config.js +++ b/jest.config.js @@ -22,7 +22,7 @@ module.exports = { }, "packages/@dcl/ecs/src/systems/crdt/index.ts": { // This should be deleted on another PR. Need to release this asap. - branches: 72, + branches: 67, functions: 100, lines: 79, statements: 77, diff --git a/package-lock.json b/package-lock.json index e0418ef4f..b5afdd2c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "license": "Apache-2.0", "dependencies": { "@actions/core": "^1.10.0", - "@dcl/protocol": "1.0.0-11954515774.commit-3fb0262", + "@dcl/protocol": "1.0.0-12891435340.commit-b3fea33", "@dcl/quickjs-emscripten": "^0.21.0-3680274614.commit-1808aa1", "@dcl/ts-proto": "1.153.0", "@types/fs-extra": "^9.0.12", @@ -577,9 +577,9 @@ } }, "node_modules/@dcl/protocol": { - "version": "1.0.0-11954515774.commit-3fb0262", - "resolved": "https://registry.npmjs.org/@dcl/protocol/-/protocol-1.0.0-11954515774.commit-3fb0262.tgz", - "integrity": "sha512-6rawE0IsB+9WK+C2lLw/8BIeG8Yavj0N7pt9n21d7Fg3sEmp4iGCDNH8zLviOh+e1VcJk70uIy+Au9Xncmg2XA==", + "version": "1.0.0-12891435340.commit-b3fea33", + "resolved": "https://registry.npmjs.org/@dcl/protocol/-/protocol-1.0.0-12891435340.commit-b3fea33.tgz", + "integrity": "sha512-WBiLqh5g8imJNPvihgxBbqLf9cOY7g+rsj98yjkU1wl+WTuIyXKIWJn6XlQ2+h797ZF+aDRm66q9bhTGMmYdsA==", "dependencies": { "@dcl/ts-proto": "1.154.0" } @@ -2471,16 +2471,47 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -2802,6 +2833,21 @@ "detect-libc": "^1.0.3" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.230", "license": "ISC" @@ -2901,13 +2947,11 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -2921,6 +2965,19 @@ "node": ">= 0.4" } }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", @@ -3807,16 +3864,22 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "dev": true, + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3833,6 +3896,20 @@ "node": ">=8.0.0" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -3953,12 +4030,13 @@ "dev": true }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4019,10 +4097,11 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4031,12 +4110,13 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -4046,10 +4126,11 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -4159,27 +4240,30 @@ "license": "ISC" }, "node_modules/internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -6091,6 +6175,16 @@ "node": ">= 12" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -6191,10 +6285,14 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6875,13 +6973,76 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8232,9 +8393,9 @@ } }, "@dcl/protocol": { - "version": "1.0.0-11954515774.commit-3fb0262", - "resolved": "https://registry.npmjs.org/@dcl/protocol/-/protocol-1.0.0-11954515774.commit-3fb0262.tgz", - "integrity": "sha512-6rawE0IsB+9WK+C2lLw/8BIeG8Yavj0N7pt9n21d7Fg3sEmp4iGCDNH8zLviOh+e1VcJk70uIy+Au9Xncmg2XA==", + "version": "1.0.0-12891435340.commit-b3fea33", + "resolved": "https://registry.npmjs.org/@dcl/protocol/-/protocol-1.0.0-12891435340.commit-b3fea33.tgz", + "integrity": "sha512-WBiLqh5g8imJNPvihgxBbqLf9cOY7g+rsj98yjkU1wl+WTuIyXKIWJn6XlQ2+h797ZF+aDRm66q9bhTGMmYdsA==", "requires": { "@dcl/ts-proto": "1.154.0" }, @@ -9627,16 +9788,35 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "requires": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + } + }, + "call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" } }, "callsites": { @@ -9842,6 +10022,17 @@ "detect-libc": "^1.0.3" } }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, "electron-to-chromium": { "version": "1.4.230" }, @@ -9920,13 +10111,10 @@ } }, "es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.4" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true }, "es-errors": { "version": "1.3.0", @@ -9934,6 +10122,15 @@ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true }, + "es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, "es-set-tostringtag": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", @@ -10541,16 +10738,21 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "dev": true, "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" } }, "get-package-type": { @@ -10558,6 +10760,16 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -10636,13 +10848,10 @@ "dev": true }, "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true }, "graceful-fs": { "version": "4.2.10" @@ -10678,24 +10887,24 @@ "dev": true }, "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true }, "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" } }, "hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "requires": { "function-bind": "^1.1.2" @@ -10759,24 +10968,25 @@ "version": "2.0.4" }, "internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" } }, "is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" } }, "is-arrayish": { @@ -12176,6 +12386,12 @@ "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "dev": true }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -12245,9 +12461,9 @@ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" }, "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true }, "object-keys": { @@ -12673,12 +12889,51 @@ } }, "side-channel": { - "version": "1.0.4", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" } }, "signal-exit": { diff --git a/package.json b/package.json index 4caffcab8..0efe00a20 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "bugs": "https://github.com/decentraland/js-sdk-toolchain/issues", "dependencies": { "@actions/core": "^1.10.0", - "@dcl/protocol": "1.0.0-11954515774.commit-3fb0262", + "@dcl/protocol": "1.0.0-12891435340.commit-b3fea33", "@dcl/quickjs-emscripten": "^0.21.0-3680274614.commit-1808aa1", "@dcl/ts-proto": "1.153.0", "@types/fs-extra": "^9.0.12", diff --git a/packages/@dcl/ecs/src/systems/crdt/index.ts b/packages/@dcl/ecs/src/systems/crdt/index.ts index 9640b573f..59e7cd45f 100644 --- a/packages/@dcl/ecs/src/systems/crdt/index.ts +++ b/packages/@dcl/ecs/src/systems/crdt/index.ts @@ -245,15 +245,25 @@ export function crdtSceneSystem(engine: PreEngine, onProcessEntityComponentChang // Send CRDT messages to transports const transportBuffer = new ReadWriteByteBuffer() for (const index in transports) { + // NetworkMessages can only have a MAX_SIZE of 13kb. So we need to send it in chunks. + const LIVEKIT_MAX_SIZE = 13 + const __NetworkMessagesBuffer: Uint8Array[] = [] + const transportIndex = Number(index) const transport = transports[transportIndex] const isRendererTransport = transport.type === 'renderer' const isNetworkTransport = transport.type === 'network' + + // Reset Buffer for each Transport transportBuffer.resetBuffer() const buffer = new ReadWriteByteBuffer() // Then we send all the new crdtMessages that the transport needs to process for (const message of crdtMessages) { + if (isNetworkTransport && transportBuffer.toBinary().byteLength / 1024 > LIVEKIT_MAX_SIZE) { + __NetworkMessagesBuffer.push(transportBuffer.toBinary()) + transportBuffer.resetBuffer() + } // Avoid echo messages if (message.transportId === transportIndex) continue @@ -310,7 +320,11 @@ export function crdtSceneSystem(engine: PreEngine, onProcessEntityComponentChang // Common message transportBuffer.writeBuffer(message.messageBuffer, false) } - const message = transportBuffer.currentWriteOffset() ? transportBuffer.toBinary() : new Uint8Array([]) + + if (isNetworkTransport && transportBuffer.currentWriteOffset()) { + __NetworkMessagesBuffer.push(transportBuffer.toBinary()) + } + const message = isNetworkTransport ? __NetworkMessagesBuffer : transportBuffer.toBinary() await transport.send(message) } } diff --git a/packages/@dcl/ecs/src/systems/crdt/types.ts b/packages/@dcl/ecs/src/systems/crdt/types.ts index 74ee2c10f..dad61d72e 100644 --- a/packages/@dcl/ecs/src/systems/crdt/types.ts +++ b/packages/@dcl/ecs/src/systems/crdt/types.ts @@ -25,7 +25,11 @@ export type TransportMessage = Omit * @public */ export type Transport = { - send(message: Uint8Array): Promise + /** + * For Network messages its an Uint8Array[]. Due too the LiveKit MAX_SIZE = 13kb + * For Renderer & Other transports we send a single Uint8Array + */ + send(message: Uint8Array | Uint8Array[]): Promise onmessage?(message: Uint8Array): void filter(message: Omit): boolean type?: string diff --git a/packages/@dcl/inspector/src/lib/data-layer/host/stream.ts b/packages/@dcl/inspector/src/lib/data-layer/host/stream.ts index 076a7ec20..5b802902e 100644 --- a/packages/@dcl/inspector/src/lib/data-layer/host/stream.ts +++ b/packages/@dcl/inspector/src/lib/data-layer/host/stream.ts @@ -20,7 +20,7 @@ export function stream( filter() { return !queue.closed }, - async send(message) { + async send(message: Uint8Array) { if (queue.closed) return queue.enqueue({ data: message }) } diff --git a/packages/@dcl/inspector/src/lib/sdk/connect-stream.ts b/packages/@dcl/inspector/src/lib/sdk/connect-stream.ts index 51b045777..93317db25 100644 --- a/packages/@dcl/inspector/src/lib/sdk/connect-stream.ts +++ b/packages/@dcl/inspector/src/lib/sdk/connect-stream.ts @@ -18,7 +18,7 @@ export function connectCrdtToEngine( filter() { return !outgoingMessagesStream.closed }, - async send(message) { + async send(message: Uint8Array) { if (outgoingMessagesStream.closed) return outgoingMessagesStream.enqueue({ data: message }) if (message.byteLength) { diff --git a/packages/@dcl/playground-assets/etc/playground-assets.api.md b/packages/@dcl/playground-assets/etc/playground-assets.api.md index 7661ebf56..2307de0e7 100644 --- a/packages/@dcl/playground-assets/etc/playground-assets.api.md +++ b/packages/@dcl/playground-assets/etc/playground-assets.api.md @@ -4081,7 +4081,7 @@ export type TransformTypeWithOptionals = Partial; // @public (undocumented) export type Transport = { - send(message: Uint8Array): Promise; + send(message: Uint8Array | Uint8Array[]): Promise; onmessage?(message: Uint8Array): void; filter(message: Omit): boolean; type?: string; diff --git a/packages/@dcl/sdk-commands/package-lock.json b/packages/@dcl/sdk-commands/package-lock.json index 2cf551355..e65b25629 100644 --- a/packages/@dcl/sdk-commands/package-lock.json +++ b/packages/@dcl/sdk-commands/package-lock.json @@ -15,7 +15,7 @@ "@dcl/inspector": "file:../inspector", "@dcl/linker-dapp": "^0.14.2", "@dcl/mini-comms": "1.0.1-20230216163137.commit-a4c75be", - "@dcl/protocol": "1.0.0-11954515774.commit-3fb0262", + "@dcl/protocol": "1.0.0-12891435340.commit-b3fea33", "@dcl/quests-client": "^1.0.3", "@dcl/quests-manager": "^0.1.4", "@dcl/rpc": "^1.1.1", @@ -239,9 +239,9 @@ } }, "node_modules/@dcl/protocol": { - "version": "1.0.0-11954515774.commit-3fb0262", - "resolved": "https://registry.npmjs.org/@dcl/protocol/-/protocol-1.0.0-11954515774.commit-3fb0262.tgz", - "integrity": "sha512-6rawE0IsB+9WK+C2lLw/8BIeG8Yavj0N7pt9n21d7Fg3sEmp4iGCDNH8zLviOh+e1VcJk70uIy+Au9Xncmg2XA==", + "version": "1.0.0-12891435340.commit-b3fea33", + "resolved": "https://registry.npmjs.org/@dcl/protocol/-/protocol-1.0.0-12891435340.commit-b3fea33.tgz", + "integrity": "sha512-WBiLqh5g8imJNPvihgxBbqLf9cOY7g+rsj98yjkU1wl+WTuIyXKIWJn6XlQ2+h797ZF+aDRm66q9bhTGMmYdsA==", "dependencies": { "@dcl/ts-proto": "1.154.0" } @@ -3228,9 +3228,9 @@ } }, "@dcl/protocol": { - "version": "1.0.0-11954515774.commit-3fb0262", - "resolved": "https://registry.npmjs.org/@dcl/protocol/-/protocol-1.0.0-11954515774.commit-3fb0262.tgz", - "integrity": "sha512-6rawE0IsB+9WK+C2lLw/8BIeG8Yavj0N7pt9n21d7Fg3sEmp4iGCDNH8zLviOh+e1VcJk70uIy+Au9Xncmg2XA==", + "version": "1.0.0-12891435340.commit-b3fea33", + "resolved": "https://registry.npmjs.org/@dcl/protocol/-/protocol-1.0.0-12891435340.commit-b3fea33.tgz", + "integrity": "sha512-WBiLqh5g8imJNPvihgxBbqLf9cOY7g+rsj98yjkU1wl+WTuIyXKIWJn6XlQ2+h797ZF+aDRm66q9bhTGMmYdsA==", "requires": { "@dcl/ts-proto": "1.154.0" } diff --git a/packages/@dcl/sdk-commands/package.json b/packages/@dcl/sdk-commands/package.json index b2d2662a3..c92bb4d2a 100644 --- a/packages/@dcl/sdk-commands/package.json +++ b/packages/@dcl/sdk-commands/package.json @@ -13,7 +13,7 @@ "@dcl/inspector": "file:../inspector", "@dcl/linker-dapp": "^0.14.2", "@dcl/mini-comms": "1.0.1-20230216163137.commit-a4c75be", - "@dcl/protocol": "1.0.0-11954515774.commit-3fb0262", + "@dcl/protocol": "1.0.0-12891435340.commit-b3fea33", "@dcl/quests-client": "^1.0.3", "@dcl/quests-manager": "^0.1.4", "@dcl/rpc": "^1.1.1", diff --git a/packages/@dcl/sdk/src/internal/transports/logger.ts b/packages/@dcl/sdk/src/internal/transports/logger.ts index 27a5ddb38..90503245d 100644 --- a/packages/@dcl/sdk/src/internal/transports/logger.ts +++ b/packages/@dcl/sdk/src/internal/transports/logger.ts @@ -23,10 +23,11 @@ export function* serializeCrdtMessages(prefix: string, data: Uint8Array, engine: ) { const { componentId, timestamp } = message const data = 'data' in message ? message.data : undefined + const bytes = data ? `${data.byteLength / 1024}KB` : '' try { const c = engine.getComponent(componentId) - yield `${preface} c=${c.componentName} t=${timestamp} data=${JSON.stringify( + yield `${preface} c=${c.componentName} t=${timestamp} ${bytes} data=${JSON.stringify( (data && c.schema.deserialize(new ReadWriteByteBuffer(data))) || null )}` } catch { diff --git a/packages/@dcl/sdk/src/internal/transports/rendererTransport.ts b/packages/@dcl/sdk/src/internal/transports/rendererTransport.ts index ec0e67fe8..9f0c0c95f 100644 --- a/packages/@dcl/sdk/src/internal/transports/rendererTransport.ts +++ b/packages/@dcl/sdk/src/internal/transports/rendererTransport.ts @@ -23,7 +23,7 @@ export function createRendererTransport(engineApi: EngineApiForTransport): Trans const rendererTransport: Transport = { async send(message) { try { - await sendToRenderer(message) + await sendToRenderer(message as Uint8Array) } catch (error) { // this is the console.error of the scene // eslint-disable-next-line no-console diff --git a/packages/@dcl/sdk/src/network/binary-message-bus.ts b/packages/@dcl/sdk/src/network/binary-message-bus.ts index 1d5213f19..69d67d6c4 100644 --- a/packages/@dcl/sdk/src/network/binary-message-bus.ts +++ b/packages/@dcl/sdk/src/network/binary-message-bus.ts @@ -6,14 +6,16 @@ export enum CommsMessage { RES_CRDT_STATE = 3 } -export function BinaryMessageBus(send: (message: Uint8Array) => void) { +export function BinaryMessageBus( + send: (message: Uint8Array, toPeerAddress?: string[]) => void +) { const mapping: Map void> = new Map() return { on: (message: K, callback: (value: Uint8Array, sender: string) => void) => { mapping.set(message, callback) }, - emit: (message: K, value: Uint8Array) => { - send(craftCommsMessage(message, value)) + emit: (message: K, value: Uint8Array, toPeerAddress?: string[]) => { + send(craftCommsMessage(message, value), toPeerAddress) }, __processMessages: (messages: Uint8Array[]) => { for (const message of messages) { diff --git a/packages/@dcl/sdk/src/network/message-bus-sync.ts b/packages/@dcl/sdk/src/network/message-bus-sync.ts index f2ecc2a56..60d98244a 100644 --- a/packages/@dcl/sdk/src/network/message-bus-sync.ts +++ b/packages/@dcl/sdk/src/network/message-bus-sync.ts @@ -17,7 +17,7 @@ export function addSyncTransport( sendBinary: (msg: SendBinaryRequest) => Promise, getUserData: (value: GetUserDataRequest) => Promise ) { - const DEBUG_NETWORK_MESSAGES = () => (globalThis as any).DEBUG_NETWORK_MESSAGES ?? true + const DEBUG_NETWORK_MESSAGES = () => (globalThis as any).DEBUG_NETWORK_MESSAGES ?? false // Profile Info const myProfile: IProfile = {} as IProfile fetchProfile(myProfile!, getUserData) @@ -26,10 +26,13 @@ export function addSyncTransport( const entityDefinitions = entityUtils(engine, myProfile) // List of MessageBuss messsages to be sent on every frame to comms - const pendingMessageBusMessagesToSend: Uint8Array[] = [] - const binaryMessageBus = BinaryMessageBus((message) => pendingMessageBusMessagesToSend.push(message)) + const pendingMessageBusMessagesToSend: { data: Uint8Array[]; address: string[] }[] = [] - function getMessagesToSend() { + const binaryMessageBus = BinaryMessageBus((data, address) => { + pendingMessageBusMessagesToSend.push({ data: [data], address: address ?? [] }) + }) + + function getMessagesToSend(): typeof pendingMessageBusMessagesToSend { const messages = [...pendingMessageBusMessagesToSend] pendingMessageBusMessagesToSend.length = 0 return messages @@ -42,14 +45,25 @@ export function addSyncTransport( // Add Sync Transport const transport: Transport = { filter: syncFilter(engine), - send: async (message: Uint8Array) => { - if (message.byteLength && transportInitialzed) { - DEBUG_NETWORK_MESSAGES() && - console.log(...Array.from(serializeCrdtMessages('[NetworkMessage sent]:', message, engine))) - binaryMessageBus.emit(CommsMessage.CRDT, message) + send: async (messages) => { + for (const message of [messages].flat()) { + if (message.byteLength && transportInitialzed) { + DEBUG_NETWORK_MESSAGES() && + console.log(...Array.from(serializeCrdtMessages('[NetworkMessage sent]:', message, engine))) + binaryMessageBus.emit(CommsMessage.CRDT, message) + } + } + const peerMessages = getMessagesToSend() + let totalSize = 0 + for (const message of peerMessages) { + for (const data of message.data) { + totalSize += data.byteLength + } + } + if (totalSize) { + DEBUG_NETWORK_MESSAGES() && console.log('Sending network messages: ', totalSize / 1024, 'KB') } - const messages = getMessagesToSend() - const response = await sendBinary({ data: messages }) + const response = await sendBinary({ data: [], peerData: peerMessages }) binaryMessageBus.__processMessages(response.data) transportInitialzed = true }, @@ -62,7 +76,7 @@ export function addSyncTransport( binaryMessageBus.on(CommsMessage.RES_CRDT_STATE, (value) => { const { sender, data } = decodeCRDTState(value) if (sender !== myProfile.userId) return - DEBUG_NETWORK_MESSAGES() && console.log('[Processing CRDT State]', data.byteLength) + DEBUG_NETWORK_MESSAGES() && console.log('[Processing CRDT State]', data.byteLength / 1024, 'KB') transport.onmessage!(data) stateIsSyncronized = true }) @@ -71,7 +85,7 @@ export function addSyncTransport( binaryMessageBus.on(CommsMessage.REQ_CRDT_STATE, async (message, userId) => { console.log(`Sending CRDT State to: ${userId}`) transport.onmessage!(message) - binaryMessageBus.emit(CommsMessage.RES_CRDT_STATE, encodeCRDTState(userId, engineToCrdt(engine))) + binaryMessageBus.emit(CommsMessage.RES_CRDT_STATE, encodeCRDTState(userId, engineToCrdt(engine)), [userId]) }) // Process CRDT messages here diff --git a/test/ecs/customComponent.spec.ts b/test/ecs/customComponent.spec.ts index 6a5c21fbd..f4bba5c39 100644 --- a/test/ecs/customComponent.spec.ts +++ b/test/ecs/customComponent.spec.ts @@ -23,7 +23,7 @@ function connectEngines(a: IEngine, b: IEngine) { } const transportA: Transport = { - async send(data) { + async send(data: Uint8Array) { intercept(data, 'a->b') transportB.onmessage!(data) }, @@ -35,7 +35,7 @@ function connectEngines(a: IEngine, b: IEngine) { } } const transportB: Transport = { - async send(data) { + async send(data: Uint8Array) { intercept(data, 'b->a') transportA.onmessage!(data) }, diff --git a/test/ecs/customComponentWithSystems.spec.ts b/test/ecs/customComponentWithSystems.spec.ts index 1a67722dc..e0ac127eb 100644 --- a/test/ecs/customComponentWithSystems.spec.ts +++ b/test/ecs/customComponentWithSystems.spec.ts @@ -23,7 +23,7 @@ function connectEngines(a: IEngine, b: IEngine) { } const transportA: Transport = { - async send(data) { + async send(data: Uint8Array) { intercept(data, 'a->b') transportB.onmessage!(data) }, @@ -35,7 +35,7 @@ function connectEngines(a: IEngine, b: IEngine) { } } const transportB: Transport = { - async send(data) { + async send(data: Uint8Array) { intercept(data, 'b->a') transportA.onmessage!(data) }, diff --git a/test/sdk/network/network-transport.spec.ts b/test/sdk/network/network-transport.spec.ts new file mode 100644 index 000000000..005aebfe7 --- /dev/null +++ b/test/sdk/network/network-transport.spec.ts @@ -0,0 +1,103 @@ +import { + Engine, + IEngine, + Transform, + NetworkEntity, + NetworkParent, + SyncComponents, + EngineInfo, + GltfContainer, + CrdtMessage +} from '../../../packages/@dcl/ecs' +import * as components from '../../../packages/@dcl/ecs/src/components' +import { addSyncTransport } from '../../../packages/@dcl/sdk/network/message-bus-sync' +import { CommsMessage, encodeString } from '../../../packages/@dcl/sdk/network/binary-message-bus' +import { ReadWriteByteBuffer } from '../../../packages/@dcl/ecs/src/serialization/ByteBuffer' +import { readMessage } from '../../../packages/@dcl/ecs/src/serialization/crdt/message' + +import { SendBinaryRequest, SendBinaryResponse } from '~system/CommunicationsController' + +function defineComponents(engine: IEngine) { + return { + Transform: components.Transform(engine as any) as any as typeof Transform, + NetworkEntity: components.NetworkEntity(engine as any) as any as typeof NetworkEntity, + NetworkParent: components.NetworkParent(engine as any) as any as typeof NetworkParent, + SyncComponents: components.SyncComponents(engine as any) as any as typeof SyncComponents, + EngineInfo: components.EngineInfo(engine as any) as any as typeof EngineInfo, + GltfContainer: components.GltfContainer(engine as any) as any as typeof GltfContainer + } +} + +describe('Network Parenting', () => { + const engineA = Engine() + const interceptedMessages: any[] = [] + + function intercept(data: Uint8Array, direction: string) { + const buffer = new ReadWriteByteBuffer(data, 0) + + let msg: CrdtMessage | null + while ((msg = readMessage(buffer))) { + interceptedMessages.push({ + ...msg, + direction + }) + } + } + + const Components = defineComponents(engineA) + + // Network Transports + const networkmessages: Uint8Array[] = [] + + const sendBinaryA: (msg: SendBinaryRequest) => Promise = async (msg) => { + for (const value of msg.peerData) { + for (const data of value.data) { + networkmessages.push(data) + const messageType = data.subarray(0, 1)[0] + if (messageType === CommsMessage.CRDT) { + const crdtMessage = data.subarray(1) + intercept(crdtMessage, 'a->b') + } + } + } + const messages = networkmessages.map(($) => { + const senderBytes = encodeString('B') + const serializedMessage = new Uint8Array($.byteLength + senderBytes.byteLength + 1) + serializedMessage.set(new Uint8Array([senderBytes.byteLength]), 0) + serializedMessage.set(senderBytes, 1) + serializedMessage.set($, senderBytes.byteLength + 1) + return serializedMessage + }) + return { data: messages } + } + + const NetworkUtils = addSyncTransport(engineA, sendBinaryA, async () => ({ + data: { userId: 'A', version: 1, displayName: '1', hasConnectedWeb3: true, avatar: undefined } + })) + + const Cube = engineA.defineComponent('cube', {}) + const CUBES_LENGTH = 320 + afterEach(() => { + interceptedMessages.length = 0 + networkmessages.length = 0 + }) + + it('should create the cubes', async () => { + for (const _ of Array.from({ length: CUBES_LENGTH })) { + const entity = engineA.addEntity() + Components.Transform.create(entity, {}) + Cube.create(entity, {}) + NetworkUtils.syncEntity(entity, [Transform.componentId]) + } + await engineA.update(1) + }) + it('should mutate and send new state for each cube', async () => { + for (const [entity] of engineA.getEntitiesWith(Cube)) { + Components.Transform.getMutable(entity).position.x += 1 + } + await engineA.update(1) + expect(Math.round(networkmessages[0].byteLength / 1024)).toBe(13) + expect(interceptedMessages.length).toBe(CUBES_LENGTH) + expect(networkmessages.length).toBe(2) + }) +}) diff --git a/test/sdk/network/sync-engines.spec.ts b/test/sdk/network/sync-engines.spec.ts index 582755450..1d9c2f97f 100644 --- a/test/sdk/network/sync-engines.spec.ts +++ b/test/sdk/network/sync-engines.spec.ts @@ -18,6 +18,7 @@ import { createRendererTransport } from '../../../packages/@dcl/sdk/internal/tra import { ReadWriteByteBuffer } from '../../../packages/@dcl/ecs/src/serialization/ByteBuffer' import { readMessage } from '../../../packages/@dcl/ecs/src/serialization/crdt/message' import { EntityState, PutNetworkComponentOperation } from '../../../packages/@dcl/ecs/src' +import { SendBinaryRequest, SendBinaryResponse } from '~system/CommunicationsController' function defineComponents(engine: IEngine) { return { @@ -73,15 +74,17 @@ describe('Network Parenting', () => { const messagesA: Uint8Array[] = [] const messagesB: Uint8Array[] = [] - const sendBinaryA = async (msg: { data: Uint8Array[] }) => { - for (const value of msg.data) { - const messageType = value.subarray(0, 1)[0] - if (messageType === CommsMessage.CRDT) { - const crdtMessage = value.subarray(1) - intercept(crdtMessage, 'a->b') + const sendBinaryA: (msg: SendBinaryRequest) => Promise = async (msg) => { + for (const value of msg.peerData) { + for (const data of value.data) { + messagesB.push(data) + const messageType = data.subarray(0, 1)[0] + if (messageType === CommsMessage.CRDT) { + const crdtMessage = data.subarray(1) + intercept(crdtMessage, 'a->b') + } } } - messagesB.push(...msg.data) const messages = [...messagesA].map(($) => { const senderBytes = encodeString('B') const serializedMessage = new Uint8Array($.byteLength + senderBytes.byteLength + 1) @@ -93,16 +96,18 @@ describe('Network Parenting', () => { messagesA.length = 0 return { data: messages } } - const sendBinaryB = async (msg: { data: Uint8Array[] }) => { - for (const value of msg.data) { - const messageType = value.subarray(0, 1)[0] - if (messageType === CommsMessage.CRDT) { - const crdtMessage = value.subarray(1) - intercept(crdtMessage, 'b->a') + const sendBinaryB: (msg: SendBinaryRequest) => Promise = async (msg) => { + for (const value of msg.peerData) { + for (const data of value.data) { + messagesA.push(data) + const messageType = data.subarray(0, 1)[0] + if (messageType === CommsMessage.CRDT) { + const crdtMessage = data.subarray(1) + intercept(crdtMessage, 'b->a') + } } } - messagesA.push(...msg.data) const messages = [...messagesB].map(($) => { const senderBytes = encodeString('A') const serializedMessage = new Uint8Array($.byteLength + senderBytes.byteLength + 1) diff --git a/test/snapshots/development-bundles/static-scene.test.ts.crdt b/test/snapshots/development-bundles/static-scene.test.ts.crdt index c600435a5..24b782659 100644 --- a/test/snapshots/development-bundles/static-scene.test.ts.crdt +++ b/test/snapshots/development-bundles/static-scene.test.ts.crdt @@ -1,4 +1,4 @@ -SCENE_COMPILED_JS_SIZE_PROD=456k bytes +SCENE_COMPILED_JS_SIZE_PROD=456.5k bytes THE BUNDLE HAS SOURCEMAPS (start empty vm 0.21.0-3680274614.commit-1808aa1) OPCODES ~= 0k @@ -11,7 +11,7 @@ EVAL test/snapshots/development-bundles/static-scene.test.js REQUIRE: ~system/EngineApi REQUIRE: ~system/EngineApi OPCODES ~= 54k - MALLOC_COUNT = 13705 + MALLOC_COUNT = 13707 ALIVE_OBJS_DELTA ~= 2.70k CALL onStart() main.crdt: PUT_COMPONENT e=0x200 c=1 t=0 data={"position":{"x":5.880000114440918,"y":2.7916901111602783,"z":7.380000114440918},"rotation":{"x":0,"y":0,"z":0,"w":1},"scale":{"x":1,"y":1,"z":1},"parent":0} @@ -56,4 +56,4 @@ CALL onUpdate(0.1) OPCODES ~= 3k MALLOC_COUNT = -5 ALIVE_OBJS_DELTA ~= 0.00k - MEMORY_USAGE_COUNT ~= 1199.30k bytes \ No newline at end of file + MEMORY_USAGE_COUNT ~= 1200.38k bytes \ No newline at end of file diff --git a/test/snapshots/development-bundles/testing-fw.test.ts.crdt b/test/snapshots/development-bundles/testing-fw.test.ts.crdt index ac876d61f..1f20a01b9 100644 --- a/test/snapshots/development-bundles/testing-fw.test.ts.crdt +++ b/test/snapshots/development-bundles/testing-fw.test.ts.crdt @@ -1,4 +1,4 @@ -SCENE_COMPILED_JS_SIZE_PROD=456.5k bytes +SCENE_COMPILED_JS_SIZE_PROD=457k bytes THE BUNDLE HAS SOURCEMAPS (start empty vm 0.21.0-3680274614.commit-1808aa1) OPCODES ~= 0k @@ -11,7 +11,7 @@ EVAL test/snapshots/development-bundles/testing-fw.test.js REQUIRE: ~system/EngineApi REQUIRE: ~system/EngineApi OPCODES ~= 63k - MALLOC_COUNT = 14226 + MALLOC_COUNT = 14228 ALIVE_OBJS_DELTA ~= 2.85k CALL onStart() LOG: ["Adding one to position.y=0"] @@ -64,4 +64,4 @@ CALL onUpdate(0.1) OPCODES ~= 5k MALLOC_COUNT = -40 ALIVE_OBJS_DELTA ~= -0.01k - MEMORY_USAGE_COUNT ~= 1207.91k bytes \ No newline at end of file + MEMORY_USAGE_COUNT ~= 1208.99k bytes \ No newline at end of file diff --git a/test/snapshots/development-bundles/two-way-crdt.test.ts.crdt b/test/snapshots/development-bundles/two-way-crdt.test.ts.crdt index f0e77ee43..0ee6dbaa5 100644 --- a/test/snapshots/development-bundles/two-way-crdt.test.ts.crdt +++ b/test/snapshots/development-bundles/two-way-crdt.test.ts.crdt @@ -1,4 +1,4 @@ -SCENE_COMPILED_JS_SIZE_PROD=456.5k bytes +SCENE_COMPILED_JS_SIZE_PROD=457k bytes THE BUNDLE HAS SOURCEMAPS (start empty vm 0.21.0-3680274614.commit-1808aa1) OPCODES ~= 0k @@ -11,7 +11,7 @@ EVAL test/snapshots/development-bundles/two-way-crdt.test.js REQUIRE: ~system/EngineApi REQUIRE: ~system/EngineApi OPCODES ~= 63k - MALLOC_COUNT = 14226 + MALLOC_COUNT = 14228 ALIVE_OBJS_DELTA ~= 2.85k CALL onStart() LOG: ["Adding one to position.y=0"] @@ -64,4 +64,4 @@ CALL onUpdate(0.1) OPCODES ~= 5k MALLOC_COUNT = -40 ALIVE_OBJS_DELTA ~= -0.01k - MEMORY_USAGE_COUNT ~= 1207.92k bytes \ No newline at end of file + MEMORY_USAGE_COUNT ~= 1209.00k bytes \ No newline at end of file diff --git a/test/snapshots/helpers/with-renderer.ts b/test/snapshots/helpers/with-renderer.ts index 9833173c9..1e2a0870d 100644 --- a/test/snapshots/helpers/with-renderer.ts +++ b/test/snapshots/helpers/with-renderer.ts @@ -14,7 +14,7 @@ export function withRenderer(cb: (engine: IEngine) => void) { const outMessages: Uint8Array[] = [] const rendererTransport: Transport = { - async send(message) { + async send(message: Uint8Array) { outMessages.push(message) }, filter() { diff --git a/test/snapshots/package-lock.json b/test/snapshots/package-lock.json index bd5efa4bb..6c4505885 100644 --- a/test/snapshots/package-lock.json +++ b/test/snapshots/package-lock.json @@ -168,7 +168,7 @@ "@dcl/inspector": "file:../inspector", "@dcl/linker-dapp": "^0.14.2", "@dcl/mini-comms": "1.0.1-20230216163137.commit-a4c75be", - "@dcl/protocol": "1.0.0-11954515774.commit-3fb0262", + "@dcl/protocol": "1.0.0-12891435340.commit-b3fea33", "@dcl/quests-client": "^1.0.3", "@dcl/quests-manager": "^0.1.4", "@dcl/rpc": "^1.1.1", diff --git a/test/snapshots/production-bundles/append-value-crdt.ts.crdt b/test/snapshots/production-bundles/append-value-crdt.ts.crdt index e2044fafe..852ff6ce2 100644 --- a/test/snapshots/production-bundles/append-value-crdt.ts.crdt +++ b/test/snapshots/production-bundles/append-value-crdt.ts.crdt @@ -1,4 +1,4 @@ -SCENE_COMPILED_JS_SIZE_PROD=199.4k bytes +SCENE_COMPILED_JS_SIZE_PROD=199.5k bytes (start empty vm 0.21.0-3680274614.commit-1808aa1) OPCODES ~= 0k MALLOC_COUNT = 1005 @@ -42,7 +42,7 @@ CALL onUpdate(0.1) LOG: ["✅ Was triggered"] LOG: ["✅ Has DOWN command"] Renderer: APPEND_VALUE e=0x200 c=1063 t=0 data={"button":0,"hit":{"position":{"x":1,"y":2,"z":3},"globalOrigin":{"x":1,"y":2,"z":3},"direction":{"x":1,"y":2,"z":3},"normalHit":{"x":1,"y":2,"z":3},"length":10,"meshName":"mesh","entityId":512},"state":0,"timestamp":4,"analog":5,"tickNumber":0} - OPCODES ~= 13k + OPCODES ~= 14k MALLOC_COUNT = 31 ALIVE_OBJS_DELTA ~= 0.01k CALL onUpdate(0.1) @@ -55,4 +55,4 @@ CALL onUpdate(0.1) OPCODES ~= 14k MALLOC_COUNT = 31 ALIVE_OBJS_DELTA ~= 0.01k - MEMORY_USAGE_COUNT ~= 903.06k bytes \ No newline at end of file + MEMORY_USAGE_COUNT ~= 903.35k bytes \ No newline at end of file diff --git a/test/snapshots/production-bundles/billboard.ts.crdt b/test/snapshots/production-bundles/billboard.ts.crdt index bde499166..ba5132a54 100644 --- a/test/snapshots/production-bundles/billboard.ts.crdt +++ b/test/snapshots/production-bundles/billboard.ts.crdt @@ -1,4 +1,4 @@ -SCENE_COMPILED_JS_SIZE_PROD=232.4k bytes +SCENE_COMPILED_JS_SIZE_PROD=232.5k bytes (start empty vm 0.21.0-3680274614.commit-1808aa1) OPCODES ~= 0k MALLOC_COUNT = 1005 @@ -50,7 +50,7 @@ CALL onUpdate(0) Scene: PUT_COMPONENT e=0x203 c=1018 t=1 data={"mesh":{"$case":"plane","plane":{"uvs":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0]}}} Scene: PUT_COMPONENT e=0x204 c=1018 t=1 data={"mesh":{"$case":"plane","plane":{"uvs":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0]}}} Scene: PUT_COMPONENT e=0x205 c=1018 t=1 data={"mesh":{"$case":"plane","plane":{"uvs":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0]}}} - OPCODES ~= 112k + OPCODES ~= 113k MALLOC_COUNT = 57 ALIVE_OBJS_DELTA ~= 0.02k CALL onUpdate(0.1) @@ -77,4 +77,4 @@ CALL onUpdate(0.1) OPCODES ~= 10k MALLOC_COUNT = 0 ALIVE_OBJS_DELTA ~= 0.00k - MEMORY_USAGE_COUNT ~= 1045.40k bytes \ No newline at end of file + MEMORY_USAGE_COUNT ~= 1045.78k bytes \ No newline at end of file diff --git a/test/snapshots/production-bundles/cube-deleted.ts.crdt b/test/snapshots/production-bundles/cube-deleted.ts.crdt index a71e707bd..7012b50c5 100644 --- a/test/snapshots/production-bundles/cube-deleted.ts.crdt +++ b/test/snapshots/production-bundles/cube-deleted.ts.crdt @@ -1,4 +1,4 @@ -SCENE_COMPILED_JS_SIZE_PROD=195.6k bytes +SCENE_COMPILED_JS_SIZE_PROD=195.7k bytes (start empty vm 0.21.0-3680274614.commit-1808aa1) OPCODES ~= 0k MALLOC_COUNT = 1005 @@ -42,4 +42,4 @@ CALL onUpdate(0.1) OPCODES ~= 5k MALLOC_COUNT = 1 ALIVE_OBJS_DELTA ~= 0.00k - MEMORY_USAGE_COUNT ~= 865.78k bytes \ No newline at end of file + MEMORY_USAGE_COUNT ~= 866.11k bytes \ No newline at end of file diff --git a/test/snapshots/production-bundles/cube.ts.crdt b/test/snapshots/production-bundles/cube.ts.crdt index 39ddc97a2..901b760e7 100644 --- a/test/snapshots/production-bundles/cube.ts.crdt +++ b/test/snapshots/production-bundles/cube.ts.crdt @@ -1,4 +1,4 @@ -SCENE_COMPILED_JS_SIZE_PROD=195.5k bytes +SCENE_COMPILED_JS_SIZE_PROD=195.6k bytes (start empty vm 0.21.0-3680274614.commit-1808aa1) OPCODES ~= 0k MALLOC_COUNT = 1005 @@ -32,4 +32,4 @@ CALL onUpdate(0.1) OPCODES ~= 1k MALLOC_COUNT = 0 ALIVE_OBJS_DELTA ~= 0.00k - MEMORY_USAGE_COUNT ~= 855.70k bytes \ No newline at end of file + MEMORY_USAGE_COUNT ~= 856.02k bytes \ No newline at end of file diff --git a/test/snapshots/production-bundles/cubes.ts.crdt b/test/snapshots/production-bundles/cubes.ts.crdt index a0cd818d9..c87d8778d 100644 --- a/test/snapshots/production-bundles/cubes.ts.crdt +++ b/test/snapshots/production-bundles/cubes.ts.crdt @@ -1,4 +1,4 @@ -SCENE_COMPILED_JS_SIZE_PROD=232.8k bytes +SCENE_COMPILED_JS_SIZE_PROD=232.9k bytes (start empty vm 0.21.0-3680274614.commit-1808aa1) OPCODES ~= 0k MALLOC_COUNT = 1005 @@ -563,7 +563,7 @@ CALL onUpdate(0) Scene: PUT_COMPONENT e=0x2b4 c=1018 t=1 data={"mesh":{"$case":"box","box":{"uvs":[]}}} Scene: PUT_COMPONENT e=0x2b5 c=1018 t=1 data={"mesh":{"$case":"box","box":{"uvs":[]}}} Scene: PUT_COMPONENT e=0x2b6 c=1018 t=1 data={"mesh":{"$case":"box","box":{"uvs":[]}}} - OPCODES ~= 1000k + OPCODES ~= 1002k MALLOC_COUNT = 1840 ALIVE_OBJS_DELTA ~= 0.74k CALL onUpdate(0.1) @@ -925,7 +925,7 @@ CALL onUpdate(0.1) Scene: PUT_COMPONENT e=0x2b4 c=1017 t=2 data={"material":{"$case":"pbr","pbr":{"albedoColor":{"r":0,"g":0,"b":1,"a":1}}}} Scene: PUT_COMPONENT e=0x2b5 c=1017 t=2 data={"material":{"$case":"pbr","pbr":{"albedoColor":{"r":0,"g":0,"b":1,"a":1}}}} Scene: PUT_COMPONENT e=0x2b6 c=1017 t=2 data={"material":{"$case":"pbr","pbr":{"albedoColor":{"r":0,"g":0,"b":1,"a":1}}}} - OPCODES ~= 692k + OPCODES ~= 693k MALLOC_COUNT = 0 ALIVE_OBJS_DELTA ~= 0.00k CALL onUpdate(0.1) @@ -1287,7 +1287,7 @@ CALL onUpdate(0.1) Scene: PUT_COMPONENT e=0x2b4 c=1017 t=3 data={"material":{"$case":"pbr","pbr":{"albedoColor":{"r":0,"g":0,"b":1,"a":1}}}} Scene: PUT_COMPONENT e=0x2b5 c=1017 t=3 data={"material":{"$case":"pbr","pbr":{"albedoColor":{"r":0,"g":0,"b":1,"a":1}}}} Scene: PUT_COMPONENT e=0x2b6 c=1017 t=3 data={"material":{"$case":"pbr","pbr":{"albedoColor":{"r":0,"g":0,"b":1,"a":1}}}} - OPCODES ~= 692k + OPCODES ~= 693k MALLOC_COUNT = 0 ALIVE_OBJS_DELTA ~= 0.00k CALL onUpdate(0.1) @@ -1649,7 +1649,7 @@ CALL onUpdate(0.1) Scene: PUT_COMPONENT e=0x2b4 c=1017 t=4 data={"material":{"$case":"pbr","pbr":{"albedoColor":{"r":0,"g":0,"b":1,"a":1}}}} Scene: PUT_COMPONENT e=0x2b5 c=1017 t=4 data={"material":{"$case":"pbr","pbr":{"albedoColor":{"r":0,"g":0,"b":1,"a":1}}}} Scene: PUT_COMPONENT e=0x2b6 c=1017 t=4 data={"material":{"$case":"pbr","pbr":{"albedoColor":{"r":0,"g":0,"b":1,"a":1}}}} - OPCODES ~= 692k + OPCODES ~= 693k MALLOC_COUNT = 0 ALIVE_OBJS_DELTA ~= 0.00k - MEMORY_USAGE_COUNT ~= 1181.33k bytes \ No newline at end of file + MEMORY_USAGE_COUNT ~= 1181.71k bytes \ No newline at end of file diff --git a/test/snapshots/production-bundles/pointer-events.ts.crdt b/test/snapshots/production-bundles/pointer-events.ts.crdt index b3297944d..cd8ac8666 100644 --- a/test/snapshots/production-bundles/pointer-events.ts.crdt +++ b/test/snapshots/production-bundles/pointer-events.ts.crdt @@ -1,4 +1,4 @@ -SCENE_COMPILED_JS_SIZE_PROD=196.4k bytes +SCENE_COMPILED_JS_SIZE_PROD=196.5k bytes (start empty vm 0.21.0-3680274614.commit-1808aa1) OPCODES ~= 0k MALLOC_COUNT = 1005 @@ -43,4 +43,4 @@ CALL onUpdate(0.1) OPCODES ~= 1k MALLOC_COUNT = 0 ALIVE_OBJS_DELTA ~= 0.00k - MEMORY_USAGE_COUNT ~= 873.43k bytes \ No newline at end of file + MEMORY_USAGE_COUNT ~= 873.75k bytes \ No newline at end of file diff --git a/test/snapshots/production-bundles/schema-components.ts.crdt b/test/snapshots/production-bundles/schema-components.ts.crdt index bd5ae24de..a77b3fca4 100644 --- a/test/snapshots/production-bundles/schema-components.ts.crdt +++ b/test/snapshots/production-bundles/schema-components.ts.crdt @@ -1,4 +1,4 @@ -SCENE_COMPILED_JS_SIZE_PROD=195.5k bytes +SCENE_COMPILED_JS_SIZE_PROD=195.7k bytes (start empty vm 0.21.0-3680274614.commit-1808aa1) OPCODES ~= 0k MALLOC_COUNT = 1005 @@ -31,4 +31,4 @@ CALL onUpdate(0.1) OPCODES ~= 1k MALLOC_COUNT = 0 ALIVE_OBJS_DELTA ~= 0.00k - MEMORY_USAGE_COUNT ~= 858.12k bytes \ No newline at end of file + MEMORY_USAGE_COUNT ~= 858.44k bytes \ No newline at end of file diff --git a/test/snapshots/production-bundles/ui.ts.crdt b/test/snapshots/production-bundles/ui.ts.crdt index a7bdcade7..6fbdd9b20 100644 --- a/test/snapshots/production-bundles/ui.ts.crdt +++ b/test/snapshots/production-bundles/ui.ts.crdt @@ -1,4 +1,4 @@ -SCENE_COMPILED_JS_SIZE_PROD=353.7k bytes +SCENE_COMPILED_JS_SIZE_PROD=353.8k bytes (start empty vm 0.21.0-3680274614.commit-1808aa1) OPCODES ~= 0k MALLOC_COUNT = 1005 @@ -47,7 +47,7 @@ CALL onUpdate(0) Scene: PUT_COMPONENT e=0x202 c=1093 t=1 data={"placeholder":"SARASA","disabled":false} Scene: PUT_COMPONENT e=0x209 c=1093 t=1 data={"placeholder":"","disabled":false} Scene: PUT_COMPONENT e=0x201 c=1094 t=1 data={"acceptEmpty":false,"options":["BOEDO","CASLA"],"selectedIndex":0,"disabled":false,"color":{"r":1,"g":0,"b":0,"a":1}} - OPCODES ~= 133k + OPCODES ~= 134k MALLOC_COUNT = 678 ALIVE_OBJS_DELTA ~= 0.24k CALL onUpdate(0.1) @@ -65,4 +65,4 @@ CALL onUpdate(0.1) OPCODES ~= 64k MALLOC_COUNT = 0 ALIVE_OBJS_DELTA ~= 0.00k - MEMORY_USAGE_COUNT ~= 1695.42k bytes \ No newline at end of file + MEMORY_USAGE_COUNT ~= 1695.75k bytes \ No newline at end of file diff --git a/test/snapshots/production-bundles/with-main-function.ts.crdt b/test/snapshots/production-bundles/with-main-function.ts.crdt index 19affa192..79afb2b7c 100644 --- a/test/snapshots/production-bundles/with-main-function.ts.crdt +++ b/test/snapshots/production-bundles/with-main-function.ts.crdt @@ -1,4 +1,4 @@ -SCENE_COMPILED_JS_SIZE_PROD=196.2k bytes +SCENE_COMPILED_JS_SIZE_PROD=196.3k bytes (start empty vm 0.21.0-3680274614.commit-1808aa1) OPCODES ~= 0k MALLOC_COUNT = 1005 @@ -37,4 +37,4 @@ CALL onUpdate(0.1) OPCODES ~= 3k MALLOC_COUNT = 5 ALIVE_OBJS_DELTA ~= 0.00k - MEMORY_USAGE_COUNT ~= 871.24k bytes \ No newline at end of file + MEMORY_USAGE_COUNT ~= 871.57k bytes \ No newline at end of file