🚀. Socket Launch Week Day 2:Introducing Manifest Alerts.Learn more
Sign In

@fluidframework/id-compressor

Package Overview
Dependencies
Maintainers
1
Versions
216
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@fluidframework/id-compressor - npm Package Compare versions

Comparing version
2.100.0
to
2.101.0
+4
-0
CHANGELOG.md
# @fluidframework/id-compressor
## 2.101.0
Dependency updates only.
## 2.100.0

@@ -4,0 +8,0 @@

+1
-1

@@ -8,3 +8,3 @@ /*!

export declare const pkgName = "@fluidframework/id-compressor";
export declare const pkgVersion = "2.100.0";
export declare const pkgVersion = "2.101.0";
//# sourceMappingURL=packageVersion.d.ts.map

@@ -11,3 +11,3 @@ "use strict";

exports.pkgName = "@fluidframework/id-compressor";
exports.pkgVersion = "2.100.0";
exports.pkgVersion = "2.101.0";
//# sourceMappingURL=packageVersion.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,+BAA+B,CAAC;AAC1C,QAAA,UAAU,GAAG,SAAS,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/id-compressor\";\nexport const pkgVersion = \"2.100.0\";\n"]}
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,+BAA+B,CAAC;AAC1C,QAAA,UAAU,GAAG,SAAS,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/id-compressor\";\nexport const pkgVersion = \"2.101.0\";\n"]}

@@ -1,1 +0,1 @@

{"version":3,"file":"idCompressor.perf.spec.js","sourceRoot":"","sources":["../../src/test/idCompressor.perf.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { take } from \"@fluid-private/stochastic-test-utils\";\nimport { benchmarkDuration, benchmarkIt } from \"@fluid-tools/benchmark\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport { IdCompressor } from \"../idCompressor.js\";\nimport type {\n\tIdCreationRange,\n\tOpSpaceCompressedId,\n\tSerializedIdCompressorWithNoSession,\n\tSessionId,\n\tSessionSpaceCompressedId,\n} from \"../index.js\";\nimport { createSessionId } from \"../utilities.js\";\n\nimport {\n\tClient,\n\tDestinationClient,\n\tIdCompressorTestNetwork,\n\tbuildHugeCompressor,\n\tmakeOpGenerator,\n\tperformFuzzActions,\n\tsessionIds,\n} from \"./idCompressorTestUtilities.js\";\nimport {\n\ttype FinalCompressedId,\n\ttype LocalCompressedId,\n\tfail,\n\tisFinalId,\n\tisLocalId,\n} from \"./testCommon.js\";\n\nconst initialClusterCapacity = 512;\n\ndescribe(\"IdCompressor Perf\", () => {\n\tconst localClient = Client.Client1;\n\tconst remoteClient = Client.Client2;\n\n\tfunction setupCompressors(\n\t\tclusterSize: number,\n\t\tlocalClientCanEdit: boolean,\n\t\tsynchronizeAtEnd: boolean,\n\t): { network: IdCompressorTestNetwork; perfCompressor: IdCompressor } {\n\t\tconst perfNetwork = new IdCompressorTestNetwork(clusterSize);\n\t\tconst maxClusterSize = clusterSize * 2;\n\t\tconst generator = take(\n\t\t\t1000,\n\t\t\tmakeOpGenerator({\n\t\t\t\tvalidateInterval: 2000,\n\t\t\t\tmaxClusterSize,\n\t\t\t\toutsideAllocationFraction: 0.9,\n\t\t\t}),\n\t\t);\n\t\tperformFuzzActions(\n\t\t\tgenerator,\n\t\t\tperfNetwork,\n\t\t\tMath.E,\n\t\t\tlocalClientCanEdit ? undefined : localClient,\n\t\t\tsynchronizeAtEnd,\n\t\t);\n\t\tconst perfCompressor = perfNetwork.getCompressorUnsafeNoProxy(localClient);\n\t\treturn { network: perfNetwork, perfCompressor };\n\t}\n\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: false,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): LocalCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: true,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): FinalCompressedId & SessionSpaceCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: boolean,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): SessionSpaceCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: boolean,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): SessionSpaceCompressedId {\n\t\tconst log = network.getIdLog(client);\n\t\tfor (let i = log.length - 1; i > 0; i--) {\n\t\t\tconst { id, originatingClient } = log[i];\n\t\t\tif (\n\t\t\t\toriginatingClient === client &&\n\t\t\t\t((eagerFinal && isFinalId(id)) || (!eagerFinal && isLocalId(id)))\n\t\t\t) {\n\t\t\t\tassert(eagerFinal === isFinalId(id), \"Not local/final as requested.\");\n\t\t\t\treturn id;\n\t\t\t}\n\t\t}\n\t\tfail(\"no ID found in log\");\n\t}\n\n\tfunction benchmarkWithFlag(creator: (flag: boolean) => void): void {\n\t\tfor (const flag of [true, false]) {\n\t\t\tcreator(flag);\n\t\t}\n\t}\n\n\tbenchmarkIt({\n\t\ttitle: `allocate local ID`,\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { perfCompressor } = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.generateCompressedId();\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tbenchmarkIt({\n\t\ttitle: \"take an ID creation range\",\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { perfCompressor } = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.generateCompressedId();\n\t\t\t\t\tperfCompressor.takeNextCreationRange();\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tfor (const clusterSize of [1, 10, 500, 1000]) {\n\t\tconst numIds = 7;\n\t\tconst session1 = \"8150a099-5302-4672-b5f3-7a4492b59418\" as SessionId;\n\t\tconst session2 = \"f2ded886-92da-4248-967b-eb96ee04cf51\" as SessionId;\n\t\tbenchmarkIt({\n\t\t\ttitle: `finalize a range of IDs (cluster size = ${clusterSize})`,\n\t\t\t...benchmarkDuration({\n\t\t\t\t// Force batch size of 1\n\t\t\t\tminBatchDurationSeconds: 0,\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { perfCompressor } = setupCompressors(clusterSize, false, true);\n\t\t\t\t\tlet session: SessionId = session1;\n\t\t\t\t\tlet nextFirstFinalizedGenCount1 = 1;\n\t\t\t\t\tlet nextFirstFinalizedGenCount2 = 1;\n\t\t\t\t\tlet duration: number;\n\t\t\t\t\tdo {\n\t\t\t\t\t\t// Create a range with as minimal overhead as possible\n\t\t\t\t\t\tconst isFirstClient = session === session1;\n\t\t\t\t\t\tconst firstGenCount = isFirstClient\n\t\t\t\t\t\t\t? nextFirstFinalizedGenCount1\n\t\t\t\t\t\t\t: nextFirstFinalizedGenCount2;\n\t\t\t\t\t\tconst range: IdCreationRange = {\n\t\t\t\t\t\t\tsessionId: session,\n\t\t\t\t\t\t\tids: {\n\t\t\t\t\t\t\t\tfirstGenCount,\n\t\t\t\t\t\t\t\tcount: numIds,\n\t\t\t\t\t\t\t\trequestedClusterSize: initialClusterCapacity,\n\t\t\t\t\t\t\t\tlocalIdRanges: [], // no need to populate, as session is remote and compressor would ignore in production\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst start = state.timer.now();\n\t\t\t\t\t\tperfCompressor.finalizeCreationRange(range);\n\t\t\t\t\t\tconst end = state.timer.now();\n\t\t\t\t\t\tduration = state.timer.toSeconds(start, end);\n\n\t\t\t\t\t\tconst lastGenCount = firstGenCount + numIds;\n\t\t\t\t\t\tif (isFirstClient) {\n\t\t\t\t\t\t\tnextFirstFinalizedGenCount1 = lastGenCount;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextFirstFinalizedGenCount2 = lastGenCount;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Alternate clients to sidestep optimization that packs them all into last cluster\n\t\t\t\t\t\tsession = isFirstClient ? session1 : session2;\n\t\t\t\t\t} while (state.recordBatch(duration));\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t}\n\n\tbenchmarkWithFlag((isLocal) => {\n\t\tconst remoteSessionId = sessionIds.get(remoteClient);\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize a ${\n\t\t\t\tisLocal ? \"local\" : \"final\"\n\t\t\t} ID from a remote session to session space`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst remoteSession = getIdMadeBy(remoteClient, false, network);\n\t\t\t\t\tconst opSpaceId = (\n\t\t\t\t\t\tisLocal\n\t\t\t\t\t\t\t? remoteSession\n\t\t\t\t\t\t\t: network.getCompressor(remoteClient).normalizeToOpSpace(remoteSession)\n\t\t\t\t\t) as OpSpaceCompressedId;\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToSessionSpace(opSpaceId, remoteSessionId);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize a final ID corresponding to a ${\n\t\t\t\teagerFinal ? \"eager final\" : \"local\"\n\t\t\t} ID from op space to the local session`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst opId = perfCompressor.normalizeToOpSpace(\n\t\t\t\t\t\tgetIdMadeBy(localClient, eagerFinal, network),\n\t\t\t\t\t);\n\t\t\t\t\tassert(isFinalId(opId), \"Must be final\");\n\t\t\t\t\tconst id = opId as OpSpaceCompressedId & FinalCompressedId;\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToSessionSpace(id, perfCompressor.localSessionId);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((isLocalOriginator) => {\n\t\tconst remoteSessionId = sessionIds.get(remoteClient);\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize a final ID from a ${\n\t\t\t\tisLocalOriginator ? \"local\" : \"remote\"\n\t\t\t} session to a small session space (common case)`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\t// Ensure the local session has several different clusters\n\t\t\t\t\tfor (let clusterCount = 0; clusterCount < 5; clusterCount++) {\n\t\t\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\t\t\tlocalClient,\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\t\t\tperfCompressor[\"nextRequestedClusterSize\"],\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\t\t\tremoteClient,\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\t\t\tperfCompressor[\"nextRequestedClusterSize\"] * 2,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\t\t}\n\t\t\t\t\tconst client = isLocalOriginator ? localClient : remoteClient;\n\t\t\t\t\tconst idFromSession = getIdMadeBy(client, true, network);\n\t\t\t\t\tconst opSpaceId = network.getCompressor(client).normalizeToOpSpace(idFromSession);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToSessionSpace(opSpaceId, remoteSessionId);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkIt({\n\t\ttitle: `normalize an unacked local ID from the local session to op space`,\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\ttrue,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t\t// Ensure no eager finals\n\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\tlocalClient,\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\tnetwork.getCompressor(localClient)[\"nextRequestedClusterSize\"] * 2 + 1,\n\t\t\t\t);\n\t\t\t\tconst unackedLocalId = getIdMadeBy(localClient, false, network);\n\t\t\t\tassert(\n\t\t\t\t\tperfCompressor.normalizeToOpSpace(unackedLocalId) === (unackedLocalId as number),\n\t\t\t\t\t\"Local was acked.\",\n\t\t\t\t);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.normalizeToOpSpace(unackedLocalId);\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize an acked ${\n\t\t\t\teagerFinal ? \"eager final\" : \"local\"\n\t\t\t} ID from the local session to op space`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst id = getIdMadeBy(localClient, eagerFinal, network);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToOpSpace(id);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((local) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `decompress a final ID from a ${\n\t\t\t\tlocal ? \"local\" : \"remote\"\n\t\t\t} client into a stable ID`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst finalIdToDecompress = getIdMadeBy(\n\t\t\t\t\t\tlocal ? localClient : remoteClient,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tnetwork,\n\t\t\t\t\t);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.decompress(finalIdToDecompress);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkIt({\n\t\ttitle: `decompress a local ID into a stable ID`,\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\ttrue,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t\tconst localIdToDecompress = getIdMadeBy(localClient, false, network);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.decompress(localIdToDecompress);\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `recompress a stable ID to a ${eagerFinal ? \"local\" : \"final\"} ID`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst stableToCompress = perfCompressor.decompress(\n\t\t\t\t\t\tgetIdMadeBy(localClient, eagerFinal, network),\n\t\t\t\t\t);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.recompress(stableToCompress);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((manySessions) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `serialize an IdCompressor (${manySessions ? \"many sessions\" : \"many clusters\"})`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst perfCompressor = manySessions\n\t\t\t\t\t\t? buildHugeCompressor(undefined, initialClusterCapacity)\n\t\t\t\t\t\t: setupCompressors(initialClusterCapacity, false, true).perfCompressor;\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.serialize(false);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((manySessions) => {\n\t\tconst overrideRemoteSessionId = createSessionId();\n\t\tbenchmarkIt({\n\t\t\ttitle: `deserialize an IdCompressor (${\n\t\t\t\tmanySessions ? \"many sessions\" : \"many clusters\"\n\t\t\t})`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst perfCompressor = manySessions\n\t\t\t\t\t\t? buildHugeCompressor(undefined, initialClusterCapacity)\n\t\t\t\t\t\t: setupCompressors(initialClusterCapacity, false, true).perfCompressor;\n\t\t\t\t\tconst serialized: SerializedIdCompressorWithNoSession =\n\t\t\t\t\t\tperfCompressor.serialize(false);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tIdCompressor.deserialize({\n\t\t\t\t\t\t\tserialized,\n\t\t\t\t\t\t\tnewSessionId: overrideRemoteSessionId,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n});\n"]}
{"version":3,"file":"idCompressor.perf.spec.js","sourceRoot":"","sources":["../../src/test/idCompressor.perf.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { take } from \"@fluid-private/stochastic-test-utils\";\nimport {\n\tbenchmarkDuration,\n\tbenchmarkDurationBatchless,\n\tbenchmarkIt,\n} from \"@fluid-tools/benchmark\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport { IdCompressor } from \"../idCompressor.js\";\nimport type {\n\tIdCreationRange,\n\tOpSpaceCompressedId,\n\tSerializedIdCompressorWithNoSession,\n\tSessionId,\n\tSessionSpaceCompressedId,\n} from \"../index.js\";\nimport { createSessionId } from \"../utilities.js\";\n\nimport {\n\tClient,\n\tDestinationClient,\n\tIdCompressorTestNetwork,\n\tbuildHugeCompressor,\n\tmakeOpGenerator,\n\tperformFuzzActions,\n\tsessionIds,\n} from \"./idCompressorTestUtilities.js\";\nimport {\n\ttype FinalCompressedId,\n\ttype LocalCompressedId,\n\tfail,\n\tisFinalId,\n\tisLocalId,\n} from \"./testCommon.js\";\n\nconst initialClusterCapacity = 512;\n\ndescribe(\"IdCompressor Perf\", () => {\n\tconst localClient = Client.Client1;\n\tconst remoteClient = Client.Client2;\n\n\tfunction setupCompressors(\n\t\tclusterSize: number,\n\t\tlocalClientCanEdit: boolean,\n\t\tsynchronizeAtEnd: boolean,\n\t): { network: IdCompressorTestNetwork; perfCompressor: IdCompressor } {\n\t\tconst perfNetwork = new IdCompressorTestNetwork(clusterSize);\n\t\tconst maxClusterSize = clusterSize * 2;\n\t\tconst generator = take(\n\t\t\t1000,\n\t\t\tmakeOpGenerator({\n\t\t\t\tvalidateInterval: 2000,\n\t\t\t\tmaxClusterSize,\n\t\t\t\toutsideAllocationFraction: 0.9,\n\t\t\t}),\n\t\t);\n\t\tperformFuzzActions(\n\t\t\tgenerator,\n\t\t\tperfNetwork,\n\t\t\tMath.E,\n\t\t\tlocalClientCanEdit ? undefined : localClient,\n\t\t\tsynchronizeAtEnd,\n\t\t);\n\t\tconst perfCompressor = perfNetwork.getCompressorUnsafeNoProxy(localClient);\n\t\treturn { network: perfNetwork, perfCompressor };\n\t}\n\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: false,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): LocalCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: true,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): FinalCompressedId & SessionSpaceCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: boolean,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): SessionSpaceCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: boolean,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): SessionSpaceCompressedId {\n\t\tconst log = network.getIdLog(client);\n\t\tfor (let i = log.length - 1; i > 0; i--) {\n\t\t\tconst { id, originatingClient } = log[i];\n\t\t\tif (\n\t\t\t\toriginatingClient === client &&\n\t\t\t\t((eagerFinal && isFinalId(id)) || (!eagerFinal && isLocalId(id)))\n\t\t\t) {\n\t\t\t\tassert(eagerFinal === isFinalId(id), \"Not local/final as requested.\");\n\t\t\t\treturn id;\n\t\t\t}\n\t\t}\n\t\tfail(\"no ID found in log\");\n\t}\n\n\tfunction benchmarkWithFlag(creator: (flag: boolean) => void): void {\n\t\tfor (const flag of [true, false]) {\n\t\t\tcreator(flag);\n\t\t}\n\t}\n\n\tbenchmarkIt({\n\t\ttitle: `allocate local ID`,\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { perfCompressor } = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.generateCompressedId();\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tbenchmarkIt({\n\t\ttitle: \"take an ID creation range\",\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { perfCompressor } = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.generateCompressedId();\n\t\t\t\t\tperfCompressor.takeNextCreationRange();\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tfor (const clusterSize of [1, 10, 500, 1000]) {\n\t\tconst numIds = 7;\n\t\tconst session1 = \"8150a099-5302-4672-b5f3-7a4492b59418\" as SessionId;\n\t\tconst session2 = \"f2ded886-92da-4248-967b-eb96ee04cf51\" as SessionId;\n\t\tbenchmarkIt({\n\t\t\ttitle: `finalize a range of IDs (cluster size = ${clusterSize})`,\n\t\t\t...benchmarkDurationBatchless({\n\t\t\t\tbenchmarkFn: (state) => {\n\t\t\t\t\tconst { perfCompressor } = setupCompressors(clusterSize, false, true);\n\t\t\t\t\tlet session: SessionId = session1;\n\t\t\t\t\tlet nextFirstFinalizedGenCount1 = 1;\n\t\t\t\t\tlet nextFirstFinalizedGenCount2 = 1;\n\t\t\t\t\tlet running: boolean;\n\t\t\t\t\tdo {\n\t\t\t\t\t\t// Create a range with as minimal overhead as possible\n\t\t\t\t\t\tconst isFirstClient = session === session1;\n\t\t\t\t\t\tconst firstGenCount = isFirstClient\n\t\t\t\t\t\t\t? nextFirstFinalizedGenCount1\n\t\t\t\t\t\t\t: nextFirstFinalizedGenCount2;\n\t\t\t\t\t\tconst range: IdCreationRange = {\n\t\t\t\t\t\t\tsessionId: session,\n\t\t\t\t\t\t\tids: {\n\t\t\t\t\t\t\t\tfirstGenCount,\n\t\t\t\t\t\t\t\tcount: numIds,\n\t\t\t\t\t\t\t\trequestedClusterSize: initialClusterCapacity,\n\t\t\t\t\t\t\t\tlocalIdRanges: [], // no need to populate, as session is remote and compressor would ignore in production\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\trunning = state.time(() => {\n\t\t\t\t\t\t\tperfCompressor.finalizeCreationRange(range);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst lastGenCount = firstGenCount + numIds;\n\t\t\t\t\t\tif (isFirstClient) {\n\t\t\t\t\t\t\tnextFirstFinalizedGenCount1 = lastGenCount;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextFirstFinalizedGenCount2 = lastGenCount;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Alternate clients to sidestep optimization that packs them all into last cluster\n\t\t\t\t\t\tsession = isFirstClient ? session1 : session2;\n\t\t\t\t\t} while (running);\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t}\n\n\tbenchmarkWithFlag((isLocal) => {\n\t\tconst remoteSessionId = sessionIds.get(remoteClient);\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize a ${\n\t\t\t\tisLocal ? \"local\" : \"final\"\n\t\t\t} ID from a remote session to session space`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst remoteSession = getIdMadeBy(remoteClient, false, network);\n\t\t\t\t\tconst opSpaceId = (\n\t\t\t\t\t\tisLocal\n\t\t\t\t\t\t\t? remoteSession\n\t\t\t\t\t\t\t: network.getCompressor(remoteClient).normalizeToOpSpace(remoteSession)\n\t\t\t\t\t) as OpSpaceCompressedId;\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToSessionSpace(opSpaceId, remoteSessionId);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize a final ID corresponding to a ${\n\t\t\t\teagerFinal ? \"eager final\" : \"local\"\n\t\t\t} ID from op space to the local session`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst opId = perfCompressor.normalizeToOpSpace(\n\t\t\t\t\t\tgetIdMadeBy(localClient, eagerFinal, network),\n\t\t\t\t\t);\n\t\t\t\t\tassert(isFinalId(opId), \"Must be final\");\n\t\t\t\t\tconst id = opId as OpSpaceCompressedId & FinalCompressedId;\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToSessionSpace(id, perfCompressor.localSessionId);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((isLocalOriginator) => {\n\t\tconst remoteSessionId = sessionIds.get(remoteClient);\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize a final ID from a ${\n\t\t\t\tisLocalOriginator ? \"local\" : \"remote\"\n\t\t\t} session to a small session space (common case)`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\t// Ensure the local session has several different clusters\n\t\t\t\t\tfor (let clusterCount = 0; clusterCount < 5; clusterCount++) {\n\t\t\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\t\t\tlocalClient,\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\t\t\tperfCompressor[\"nextRequestedClusterSize\"],\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\t\t\tremoteClient,\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\t\t\tperfCompressor[\"nextRequestedClusterSize\"] * 2,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\t\t}\n\t\t\t\t\tconst client = isLocalOriginator ? localClient : remoteClient;\n\t\t\t\t\tconst idFromSession = getIdMadeBy(client, true, network);\n\t\t\t\t\tconst opSpaceId = network.getCompressor(client).normalizeToOpSpace(idFromSession);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToSessionSpace(opSpaceId, remoteSessionId);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkIt({\n\t\ttitle: `normalize an unacked local ID from the local session to op space`,\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\ttrue,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t\t// Ensure no eager finals\n\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\tlocalClient,\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\tnetwork.getCompressor(localClient)[\"nextRequestedClusterSize\"] * 2 + 1,\n\t\t\t\t);\n\t\t\t\tconst unackedLocalId = getIdMadeBy(localClient, false, network);\n\t\t\t\tassert(\n\t\t\t\t\tperfCompressor.normalizeToOpSpace(unackedLocalId) === (unackedLocalId as number),\n\t\t\t\t\t\"Local was acked.\",\n\t\t\t\t);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.normalizeToOpSpace(unackedLocalId);\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize an acked ${\n\t\t\t\teagerFinal ? \"eager final\" : \"local\"\n\t\t\t} ID from the local session to op space`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst id = getIdMadeBy(localClient, eagerFinal, network);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToOpSpace(id);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((local) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `decompress a final ID from a ${\n\t\t\t\tlocal ? \"local\" : \"remote\"\n\t\t\t} client into a stable ID`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst finalIdToDecompress = getIdMadeBy(\n\t\t\t\t\t\tlocal ? localClient : remoteClient,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tnetwork,\n\t\t\t\t\t);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.decompress(finalIdToDecompress);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkIt({\n\t\ttitle: `decompress a local ID into a stable ID`,\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\ttrue,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t\tconst localIdToDecompress = getIdMadeBy(localClient, false, network);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.decompress(localIdToDecompress);\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `recompress a stable ID to a ${eagerFinal ? \"local\" : \"final\"} ID`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst stableToCompress = perfCompressor.decompress(\n\t\t\t\t\t\tgetIdMadeBy(localClient, eagerFinal, network),\n\t\t\t\t\t);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.recompress(stableToCompress);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((manySessions) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `serialize an IdCompressor (${manySessions ? \"many sessions\" : \"many clusters\"})`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst perfCompressor = manySessions\n\t\t\t\t\t\t? buildHugeCompressor(undefined, initialClusterCapacity)\n\t\t\t\t\t\t: setupCompressors(initialClusterCapacity, false, true).perfCompressor;\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.serialize(false);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((manySessions) => {\n\t\tconst overrideRemoteSessionId = createSessionId();\n\t\tbenchmarkIt({\n\t\t\ttitle: `deserialize an IdCompressor (${\n\t\t\t\tmanySessions ? \"many sessions\" : \"many clusters\"\n\t\t\t})`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst perfCompressor = manySessions\n\t\t\t\t\t\t? buildHugeCompressor(undefined, initialClusterCapacity)\n\t\t\t\t\t\t: setupCompressors(initialClusterCapacity, false, true).perfCompressor;\n\t\t\t\t\tconst serialized: SerializedIdCompressorWithNoSession =\n\t\t\t\t\t\tperfCompressor.serialize(false);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tIdCompressor.deserialize({\n\t\t\t\t\t\t\tserialized,\n\t\t\t\t\t\t\tnewSessionId: overrideRemoteSessionId,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n});\n"]}

@@ -8,3 +8,3 @@ /*!

export declare const pkgName = "@fluidframework/id-compressor";
export declare const pkgVersion = "2.100.0";
export declare const pkgVersion = "2.101.0";
//# sourceMappingURL=packageVersion.d.ts.map

@@ -8,3 +8,3 @@ /*!

export const pkgName = "@fluidframework/id-compressor";
export const pkgVersion = "2.100.0";
export const pkgVersion = "2.101.0";
//# sourceMappingURL=packageVersion.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,+BAA+B,CAAC;AACvD,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/id-compressor\";\nexport const pkgVersion = \"2.100.0\";\n"]}
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,+BAA+B,CAAC;AACvD,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/id-compressor\";\nexport const pkgVersion = \"2.101.0\";\n"]}

@@ -1,1 +0,1 @@

{"version":3,"file":"idCompressor.perf.spec.js","sourceRoot":"","sources":["../../src/test/idCompressor.perf.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { take } from \"@fluid-private/stochastic-test-utils\";\nimport { benchmarkDuration, benchmarkIt } from \"@fluid-tools/benchmark\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport { IdCompressor } from \"../idCompressor.js\";\nimport type {\n\tIdCreationRange,\n\tOpSpaceCompressedId,\n\tSerializedIdCompressorWithNoSession,\n\tSessionId,\n\tSessionSpaceCompressedId,\n} from \"../index.js\";\nimport { createSessionId } from \"../utilities.js\";\n\nimport {\n\tClient,\n\tDestinationClient,\n\tIdCompressorTestNetwork,\n\tbuildHugeCompressor,\n\tmakeOpGenerator,\n\tperformFuzzActions,\n\tsessionIds,\n} from \"./idCompressorTestUtilities.js\";\nimport {\n\ttype FinalCompressedId,\n\ttype LocalCompressedId,\n\tfail,\n\tisFinalId,\n\tisLocalId,\n} from \"./testCommon.js\";\n\nconst initialClusterCapacity = 512;\n\ndescribe(\"IdCompressor Perf\", () => {\n\tconst localClient = Client.Client1;\n\tconst remoteClient = Client.Client2;\n\n\tfunction setupCompressors(\n\t\tclusterSize: number,\n\t\tlocalClientCanEdit: boolean,\n\t\tsynchronizeAtEnd: boolean,\n\t): { network: IdCompressorTestNetwork; perfCompressor: IdCompressor } {\n\t\tconst perfNetwork = new IdCompressorTestNetwork(clusterSize);\n\t\tconst maxClusterSize = clusterSize * 2;\n\t\tconst generator = take(\n\t\t\t1000,\n\t\t\tmakeOpGenerator({\n\t\t\t\tvalidateInterval: 2000,\n\t\t\t\tmaxClusterSize,\n\t\t\t\toutsideAllocationFraction: 0.9,\n\t\t\t}),\n\t\t);\n\t\tperformFuzzActions(\n\t\t\tgenerator,\n\t\t\tperfNetwork,\n\t\t\tMath.E,\n\t\t\tlocalClientCanEdit ? undefined : localClient,\n\t\t\tsynchronizeAtEnd,\n\t\t);\n\t\tconst perfCompressor = perfNetwork.getCompressorUnsafeNoProxy(localClient);\n\t\treturn { network: perfNetwork, perfCompressor };\n\t}\n\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: false,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): LocalCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: true,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): FinalCompressedId & SessionSpaceCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: boolean,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): SessionSpaceCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: boolean,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): SessionSpaceCompressedId {\n\t\tconst log = network.getIdLog(client);\n\t\tfor (let i = log.length - 1; i > 0; i--) {\n\t\t\tconst { id, originatingClient } = log[i];\n\t\t\tif (\n\t\t\t\toriginatingClient === client &&\n\t\t\t\t((eagerFinal && isFinalId(id)) || (!eagerFinal && isLocalId(id)))\n\t\t\t) {\n\t\t\t\tassert(eagerFinal === isFinalId(id), \"Not local/final as requested.\");\n\t\t\t\treturn id;\n\t\t\t}\n\t\t}\n\t\tfail(\"no ID found in log\");\n\t}\n\n\tfunction benchmarkWithFlag(creator: (flag: boolean) => void): void {\n\t\tfor (const flag of [true, false]) {\n\t\t\tcreator(flag);\n\t\t}\n\t}\n\n\tbenchmarkIt({\n\t\ttitle: `allocate local ID`,\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { perfCompressor } = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.generateCompressedId();\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tbenchmarkIt({\n\t\ttitle: \"take an ID creation range\",\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { perfCompressor } = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.generateCompressedId();\n\t\t\t\t\tperfCompressor.takeNextCreationRange();\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tfor (const clusterSize of [1, 10, 500, 1000]) {\n\t\tconst numIds = 7;\n\t\tconst session1 = \"8150a099-5302-4672-b5f3-7a4492b59418\" as SessionId;\n\t\tconst session2 = \"f2ded886-92da-4248-967b-eb96ee04cf51\" as SessionId;\n\t\tbenchmarkIt({\n\t\t\ttitle: `finalize a range of IDs (cluster size = ${clusterSize})`,\n\t\t\t...benchmarkDuration({\n\t\t\t\t// Force batch size of 1\n\t\t\t\tminBatchDurationSeconds: 0,\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { perfCompressor } = setupCompressors(clusterSize, false, true);\n\t\t\t\t\tlet session: SessionId = session1;\n\t\t\t\t\tlet nextFirstFinalizedGenCount1 = 1;\n\t\t\t\t\tlet nextFirstFinalizedGenCount2 = 1;\n\t\t\t\t\tlet duration: number;\n\t\t\t\t\tdo {\n\t\t\t\t\t\t// Create a range with as minimal overhead as possible\n\t\t\t\t\t\tconst isFirstClient = session === session1;\n\t\t\t\t\t\tconst firstGenCount = isFirstClient\n\t\t\t\t\t\t\t? nextFirstFinalizedGenCount1\n\t\t\t\t\t\t\t: nextFirstFinalizedGenCount2;\n\t\t\t\t\t\tconst range: IdCreationRange = {\n\t\t\t\t\t\t\tsessionId: session,\n\t\t\t\t\t\t\tids: {\n\t\t\t\t\t\t\t\tfirstGenCount,\n\t\t\t\t\t\t\t\tcount: numIds,\n\t\t\t\t\t\t\t\trequestedClusterSize: initialClusterCapacity,\n\t\t\t\t\t\t\t\tlocalIdRanges: [], // no need to populate, as session is remote and compressor would ignore in production\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst start = state.timer.now();\n\t\t\t\t\t\tperfCompressor.finalizeCreationRange(range);\n\t\t\t\t\t\tconst end = state.timer.now();\n\t\t\t\t\t\tduration = state.timer.toSeconds(start, end);\n\n\t\t\t\t\t\tconst lastGenCount = firstGenCount + numIds;\n\t\t\t\t\t\tif (isFirstClient) {\n\t\t\t\t\t\t\tnextFirstFinalizedGenCount1 = lastGenCount;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextFirstFinalizedGenCount2 = lastGenCount;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Alternate clients to sidestep optimization that packs them all into last cluster\n\t\t\t\t\t\tsession = isFirstClient ? session1 : session2;\n\t\t\t\t\t} while (state.recordBatch(duration));\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t}\n\n\tbenchmarkWithFlag((isLocal) => {\n\t\tconst remoteSessionId = sessionIds.get(remoteClient);\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize a ${\n\t\t\t\tisLocal ? \"local\" : \"final\"\n\t\t\t} ID from a remote session to session space`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst remoteSession = getIdMadeBy(remoteClient, false, network);\n\t\t\t\t\tconst opSpaceId = (\n\t\t\t\t\t\tisLocal\n\t\t\t\t\t\t\t? remoteSession\n\t\t\t\t\t\t\t: network.getCompressor(remoteClient).normalizeToOpSpace(remoteSession)\n\t\t\t\t\t) as OpSpaceCompressedId;\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToSessionSpace(opSpaceId, remoteSessionId);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize a final ID corresponding to a ${\n\t\t\t\teagerFinal ? \"eager final\" : \"local\"\n\t\t\t} ID from op space to the local session`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst opId = perfCompressor.normalizeToOpSpace(\n\t\t\t\t\t\tgetIdMadeBy(localClient, eagerFinal, network),\n\t\t\t\t\t);\n\t\t\t\t\tassert(isFinalId(opId), \"Must be final\");\n\t\t\t\t\tconst id = opId as OpSpaceCompressedId & FinalCompressedId;\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToSessionSpace(id, perfCompressor.localSessionId);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((isLocalOriginator) => {\n\t\tconst remoteSessionId = sessionIds.get(remoteClient);\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize a final ID from a ${\n\t\t\t\tisLocalOriginator ? \"local\" : \"remote\"\n\t\t\t} session to a small session space (common case)`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\t// Ensure the local session has several different clusters\n\t\t\t\t\tfor (let clusterCount = 0; clusterCount < 5; clusterCount++) {\n\t\t\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\t\t\tlocalClient,\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\t\t\tperfCompressor[\"nextRequestedClusterSize\"],\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\t\t\tremoteClient,\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\t\t\tperfCompressor[\"nextRequestedClusterSize\"] * 2,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\t\t}\n\t\t\t\t\tconst client = isLocalOriginator ? localClient : remoteClient;\n\t\t\t\t\tconst idFromSession = getIdMadeBy(client, true, network);\n\t\t\t\t\tconst opSpaceId = network.getCompressor(client).normalizeToOpSpace(idFromSession);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToSessionSpace(opSpaceId, remoteSessionId);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkIt({\n\t\ttitle: `normalize an unacked local ID from the local session to op space`,\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\ttrue,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t\t// Ensure no eager finals\n\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\tlocalClient,\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\tnetwork.getCompressor(localClient)[\"nextRequestedClusterSize\"] * 2 + 1,\n\t\t\t\t);\n\t\t\t\tconst unackedLocalId = getIdMadeBy(localClient, false, network);\n\t\t\t\tassert(\n\t\t\t\t\tperfCompressor.normalizeToOpSpace(unackedLocalId) === (unackedLocalId as number),\n\t\t\t\t\t\"Local was acked.\",\n\t\t\t\t);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.normalizeToOpSpace(unackedLocalId);\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize an acked ${\n\t\t\t\teagerFinal ? \"eager final\" : \"local\"\n\t\t\t} ID from the local session to op space`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst id = getIdMadeBy(localClient, eagerFinal, network);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToOpSpace(id);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((local) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `decompress a final ID from a ${\n\t\t\t\tlocal ? \"local\" : \"remote\"\n\t\t\t} client into a stable ID`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst finalIdToDecompress = getIdMadeBy(\n\t\t\t\t\t\tlocal ? localClient : remoteClient,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tnetwork,\n\t\t\t\t\t);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.decompress(finalIdToDecompress);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkIt({\n\t\ttitle: `decompress a local ID into a stable ID`,\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\ttrue,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t\tconst localIdToDecompress = getIdMadeBy(localClient, false, network);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.decompress(localIdToDecompress);\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `recompress a stable ID to a ${eagerFinal ? \"local\" : \"final\"} ID`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst stableToCompress = perfCompressor.decompress(\n\t\t\t\t\t\tgetIdMadeBy(localClient, eagerFinal, network),\n\t\t\t\t\t);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.recompress(stableToCompress);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((manySessions) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `serialize an IdCompressor (${manySessions ? \"many sessions\" : \"many clusters\"})`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst perfCompressor = manySessions\n\t\t\t\t\t\t? buildHugeCompressor(undefined, initialClusterCapacity)\n\t\t\t\t\t\t: setupCompressors(initialClusterCapacity, false, true).perfCompressor;\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.serialize(false);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((manySessions) => {\n\t\tconst overrideRemoteSessionId = createSessionId();\n\t\tbenchmarkIt({\n\t\t\ttitle: `deserialize an IdCompressor (${\n\t\t\t\tmanySessions ? \"many sessions\" : \"many clusters\"\n\t\t\t})`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst perfCompressor = manySessions\n\t\t\t\t\t\t? buildHugeCompressor(undefined, initialClusterCapacity)\n\t\t\t\t\t\t: setupCompressors(initialClusterCapacity, false, true).perfCompressor;\n\t\t\t\t\tconst serialized: SerializedIdCompressorWithNoSession =\n\t\t\t\t\t\tperfCompressor.serialize(false);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tIdCompressor.deserialize({\n\t\t\t\t\t\t\tserialized,\n\t\t\t\t\t\t\tnewSessionId: overrideRemoteSessionId,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n});\n"]}
{"version":3,"file":"idCompressor.perf.spec.js","sourceRoot":"","sources":["../../src/test/idCompressor.perf.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { take } from \"@fluid-private/stochastic-test-utils\";\nimport {\n\tbenchmarkDuration,\n\tbenchmarkDurationBatchless,\n\tbenchmarkIt,\n} from \"@fluid-tools/benchmark\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport { IdCompressor } from \"../idCompressor.js\";\nimport type {\n\tIdCreationRange,\n\tOpSpaceCompressedId,\n\tSerializedIdCompressorWithNoSession,\n\tSessionId,\n\tSessionSpaceCompressedId,\n} from \"../index.js\";\nimport { createSessionId } from \"../utilities.js\";\n\nimport {\n\tClient,\n\tDestinationClient,\n\tIdCompressorTestNetwork,\n\tbuildHugeCompressor,\n\tmakeOpGenerator,\n\tperformFuzzActions,\n\tsessionIds,\n} from \"./idCompressorTestUtilities.js\";\nimport {\n\ttype FinalCompressedId,\n\ttype LocalCompressedId,\n\tfail,\n\tisFinalId,\n\tisLocalId,\n} from \"./testCommon.js\";\n\nconst initialClusterCapacity = 512;\n\ndescribe(\"IdCompressor Perf\", () => {\n\tconst localClient = Client.Client1;\n\tconst remoteClient = Client.Client2;\n\n\tfunction setupCompressors(\n\t\tclusterSize: number,\n\t\tlocalClientCanEdit: boolean,\n\t\tsynchronizeAtEnd: boolean,\n\t): { network: IdCompressorTestNetwork; perfCompressor: IdCompressor } {\n\t\tconst perfNetwork = new IdCompressorTestNetwork(clusterSize);\n\t\tconst maxClusterSize = clusterSize * 2;\n\t\tconst generator = take(\n\t\t\t1000,\n\t\t\tmakeOpGenerator({\n\t\t\t\tvalidateInterval: 2000,\n\t\t\t\tmaxClusterSize,\n\t\t\t\toutsideAllocationFraction: 0.9,\n\t\t\t}),\n\t\t);\n\t\tperformFuzzActions(\n\t\t\tgenerator,\n\t\t\tperfNetwork,\n\t\t\tMath.E,\n\t\t\tlocalClientCanEdit ? undefined : localClient,\n\t\t\tsynchronizeAtEnd,\n\t\t);\n\t\tconst perfCompressor = perfNetwork.getCompressorUnsafeNoProxy(localClient);\n\t\treturn { network: perfNetwork, perfCompressor };\n\t}\n\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: false,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): LocalCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: true,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): FinalCompressedId & SessionSpaceCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: boolean,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): SessionSpaceCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: boolean,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): SessionSpaceCompressedId {\n\t\tconst log = network.getIdLog(client);\n\t\tfor (let i = log.length - 1; i > 0; i--) {\n\t\t\tconst { id, originatingClient } = log[i];\n\t\t\tif (\n\t\t\t\toriginatingClient === client &&\n\t\t\t\t((eagerFinal && isFinalId(id)) || (!eagerFinal && isLocalId(id)))\n\t\t\t) {\n\t\t\t\tassert(eagerFinal === isFinalId(id), \"Not local/final as requested.\");\n\t\t\t\treturn id;\n\t\t\t}\n\t\t}\n\t\tfail(\"no ID found in log\");\n\t}\n\n\tfunction benchmarkWithFlag(creator: (flag: boolean) => void): void {\n\t\tfor (const flag of [true, false]) {\n\t\t\tcreator(flag);\n\t\t}\n\t}\n\n\tbenchmarkIt({\n\t\ttitle: `allocate local ID`,\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { perfCompressor } = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.generateCompressedId();\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tbenchmarkIt({\n\t\ttitle: \"take an ID creation range\",\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { perfCompressor } = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.generateCompressedId();\n\t\t\t\t\tperfCompressor.takeNextCreationRange();\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tfor (const clusterSize of [1, 10, 500, 1000]) {\n\t\tconst numIds = 7;\n\t\tconst session1 = \"8150a099-5302-4672-b5f3-7a4492b59418\" as SessionId;\n\t\tconst session2 = \"f2ded886-92da-4248-967b-eb96ee04cf51\" as SessionId;\n\t\tbenchmarkIt({\n\t\t\ttitle: `finalize a range of IDs (cluster size = ${clusterSize})`,\n\t\t\t...benchmarkDurationBatchless({\n\t\t\t\tbenchmarkFn: (state) => {\n\t\t\t\t\tconst { perfCompressor } = setupCompressors(clusterSize, false, true);\n\t\t\t\t\tlet session: SessionId = session1;\n\t\t\t\t\tlet nextFirstFinalizedGenCount1 = 1;\n\t\t\t\t\tlet nextFirstFinalizedGenCount2 = 1;\n\t\t\t\t\tlet running: boolean;\n\t\t\t\t\tdo {\n\t\t\t\t\t\t// Create a range with as minimal overhead as possible\n\t\t\t\t\t\tconst isFirstClient = session === session1;\n\t\t\t\t\t\tconst firstGenCount = isFirstClient\n\t\t\t\t\t\t\t? nextFirstFinalizedGenCount1\n\t\t\t\t\t\t\t: nextFirstFinalizedGenCount2;\n\t\t\t\t\t\tconst range: IdCreationRange = {\n\t\t\t\t\t\t\tsessionId: session,\n\t\t\t\t\t\t\tids: {\n\t\t\t\t\t\t\t\tfirstGenCount,\n\t\t\t\t\t\t\t\tcount: numIds,\n\t\t\t\t\t\t\t\trequestedClusterSize: initialClusterCapacity,\n\t\t\t\t\t\t\t\tlocalIdRanges: [], // no need to populate, as session is remote and compressor would ignore in production\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\trunning = state.time(() => {\n\t\t\t\t\t\t\tperfCompressor.finalizeCreationRange(range);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst lastGenCount = firstGenCount + numIds;\n\t\t\t\t\t\tif (isFirstClient) {\n\t\t\t\t\t\t\tnextFirstFinalizedGenCount1 = lastGenCount;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnextFirstFinalizedGenCount2 = lastGenCount;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Alternate clients to sidestep optimization that packs them all into last cluster\n\t\t\t\t\t\tsession = isFirstClient ? session1 : session2;\n\t\t\t\t\t} while (running);\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t}\n\n\tbenchmarkWithFlag((isLocal) => {\n\t\tconst remoteSessionId = sessionIds.get(remoteClient);\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize a ${\n\t\t\t\tisLocal ? \"local\" : \"final\"\n\t\t\t} ID from a remote session to session space`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst remoteSession = getIdMadeBy(remoteClient, false, network);\n\t\t\t\t\tconst opSpaceId = (\n\t\t\t\t\t\tisLocal\n\t\t\t\t\t\t\t? remoteSession\n\t\t\t\t\t\t\t: network.getCompressor(remoteClient).normalizeToOpSpace(remoteSession)\n\t\t\t\t\t) as OpSpaceCompressedId;\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToSessionSpace(opSpaceId, remoteSessionId);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize a final ID corresponding to a ${\n\t\t\t\teagerFinal ? \"eager final\" : \"local\"\n\t\t\t} ID from op space to the local session`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst opId = perfCompressor.normalizeToOpSpace(\n\t\t\t\t\t\tgetIdMadeBy(localClient, eagerFinal, network),\n\t\t\t\t\t);\n\t\t\t\t\tassert(isFinalId(opId), \"Must be final\");\n\t\t\t\t\tconst id = opId as OpSpaceCompressedId & FinalCompressedId;\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToSessionSpace(id, perfCompressor.localSessionId);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((isLocalOriginator) => {\n\t\tconst remoteSessionId = sessionIds.get(remoteClient);\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize a final ID from a ${\n\t\t\t\tisLocalOriginator ? \"local\" : \"remote\"\n\t\t\t} session to a small session space (common case)`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\t// Ensure the local session has several different clusters\n\t\t\t\t\tfor (let clusterCount = 0; clusterCount < 5; clusterCount++) {\n\t\t\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\t\t\tlocalClient,\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\t\t\tperfCompressor[\"nextRequestedClusterSize\"],\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\t\t\tremoteClient,\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\t\t\tperfCompressor[\"nextRequestedClusterSize\"] * 2,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\t\t}\n\t\t\t\t\tconst client = isLocalOriginator ? localClient : remoteClient;\n\t\t\t\t\tconst idFromSession = getIdMadeBy(client, true, network);\n\t\t\t\t\tconst opSpaceId = network.getCompressor(client).normalizeToOpSpace(idFromSession);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToSessionSpace(opSpaceId, remoteSessionId);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkIt({\n\t\ttitle: `normalize an unacked local ID from the local session to op space`,\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\ttrue,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t\t// Ensure no eager finals\n\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\tlocalClient,\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\tnetwork.getCompressor(localClient)[\"nextRequestedClusterSize\"] * 2 + 1,\n\t\t\t\t);\n\t\t\t\tconst unackedLocalId = getIdMadeBy(localClient, false, network);\n\t\t\t\tassert(\n\t\t\t\t\tperfCompressor.normalizeToOpSpace(unackedLocalId) === (unackedLocalId as number),\n\t\t\t\t\t\"Local was acked.\",\n\t\t\t\t);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.normalizeToOpSpace(unackedLocalId);\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `normalize an acked ${\n\t\t\t\teagerFinal ? \"eager final\" : \"local\"\n\t\t\t} ID from the local session to op space`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst id = getIdMadeBy(localClient, eagerFinal, network);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.normalizeToOpSpace(id);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((local) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `decompress a final ID from a ${\n\t\t\t\tlocal ? \"local\" : \"remote\"\n\t\t\t} client into a stable ID`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst finalIdToDecompress = getIdMadeBy(\n\t\t\t\t\t\tlocal ? localClient : remoteClient,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tnetwork,\n\t\t\t\t\t);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.decompress(finalIdToDecompress);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkIt({\n\t\ttitle: `decompress a local ID into a stable ID`,\n\t\t...benchmarkDuration({\n\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\ttrue,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t\tconst localIdToDecompress = getIdMadeBy(localClient, false, network);\n\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\tperfCompressor.decompress(localIdToDecompress);\n\t\t\t\t});\n\t\t\t},\n\t\t}),\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `recompress a stable ID to a ${eagerFinal ? \"local\" : \"final\"} ID`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst { network, perfCompressor } = setupCompressors(\n\t\t\t\t\t\tinitialClusterCapacity,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t\tconst stableToCompress = perfCompressor.decompress(\n\t\t\t\t\t\tgetIdMadeBy(localClient, eagerFinal, network),\n\t\t\t\t\t);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.recompress(stableToCompress);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((manySessions) => {\n\t\tbenchmarkIt({\n\t\t\ttitle: `serialize an IdCompressor (${manySessions ? \"many sessions\" : \"many clusters\"})`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst perfCompressor = manySessions\n\t\t\t\t\t\t? buildHugeCompressor(undefined, initialClusterCapacity)\n\t\t\t\t\t\t: setupCompressors(initialClusterCapacity, false, true).perfCompressor;\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tperfCompressor.serialize(false);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((manySessions) => {\n\t\tconst overrideRemoteSessionId = createSessionId();\n\t\tbenchmarkIt({\n\t\t\ttitle: `deserialize an IdCompressor (${\n\t\t\t\tmanySessions ? \"many sessions\" : \"many clusters\"\n\t\t\t})`,\n\t\t\t...benchmarkDuration({\n\t\t\t\tbenchmarkFnCustom: async (state) => {\n\t\t\t\t\tconst perfCompressor = manySessions\n\t\t\t\t\t\t? buildHugeCompressor(undefined, initialClusterCapacity)\n\t\t\t\t\t\t: setupCompressors(initialClusterCapacity, false, true).perfCompressor;\n\t\t\t\t\tconst serialized: SerializedIdCompressorWithNoSession =\n\t\t\t\t\t\tperfCompressor.serialize(false);\n\t\t\t\t\tstate.timeAllBatches(() => {\n\t\t\t\t\t\tIdCompressor.deserialize({\n\t\t\t\t\t\t\tserialized,\n\t\t\t\t\t\t\tnewSessionId: overrideRemoteSessionId,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\t});\n});\n"]}
{
"name": "@fluidframework/id-compressor",
"version": "2.100.0",
"version": "2.101.0",
"description": "ID compressor",

@@ -84,6 +84,6 @@ "homepage": "https://fluidframework.com",

"dependencies": {
"@fluid-internal/client-utils": "~2.100.0",
"@fluidframework/core-interfaces": "~2.100.0",
"@fluidframework/core-utils": "~2.100.0",
"@fluidframework/telemetry-utils": "~2.100.0",
"@fluid-internal/client-utils": "~2.101.0",
"@fluidframework/core-interfaces": "~2.101.0",
"@fluidframework/core-utils": "~2.101.0",
"@fluidframework/telemetry-utils": "~2.101.0",
"@tylerbu/sorted-btree-es6": "^2.1.1",

@@ -95,5 +95,5 @@ "uuid": "^11.1.0"

"@biomejs/biome": "~2.4.5",
"@fluid-internal/mocha-test-setup": "~2.100.0",
"@fluid-private/stochastic-test-utils": "~2.100.0",
"@fluid-tools/benchmark": "^0.58.0",
"@fluid-internal/mocha-test-setup": "~2.101.0",
"@fluid-private/stochastic-test-utils": "~2.101.0",
"@fluid-tools/benchmark": "^0.59.0",
"@fluid-tools/build-cli": "^0.65.0",

@@ -100,0 +100,0 @@ "@fluidframework/build-common": "^2.0.3",

@@ -9,2 +9,2 @@ /*!

export const pkgName = "@fluidframework/id-compressor";
export const pkgVersion = "2.100.0";
export const pkgVersion = "2.101.0";