Merge branch 'master' into bwindels/url-routing
This commit is contained in:
commit
8122d76e73
4 changed files with 12 additions and 9 deletions
|
@ -41,7 +41,7 @@ export class RoomEncryption {
|
||||||
this._encryptionParams = encryptionParams;
|
this._encryptionParams = encryptionParams;
|
||||||
|
|
||||||
this._megolmBackfillCache = this._megolmDecryption.createSessionCache();
|
this._megolmBackfillCache = this._megolmDecryption.createSessionCache();
|
||||||
this._megolmSyncCache = this._megolmDecryption.createSessionCache();
|
this._megolmSyncCache = this._megolmDecryption.createSessionCache(1);
|
||||||
// session => event ids of messages we tried to decrypt and the session was missing
|
// session => event ids of messages we tried to decrypt and the session was missing
|
||||||
this._missingSessions = new SessionToEventIdsMap();
|
this._missingSessions = new SessionToEventIdsMap();
|
||||||
// sessions that may or may not be missing, but that while
|
// sessions that may or may not be missing, but that while
|
||||||
|
|
|
@ -41,8 +41,8 @@ export class Decryption {
|
||||||
this._olmWorker = olmWorker;
|
this._olmWorker = olmWorker;
|
||||||
}
|
}
|
||||||
|
|
||||||
createSessionCache(fallback) {
|
createSessionCache(size) {
|
||||||
return new SessionCache(fallback);
|
return new SessionCache(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -14,13 +14,14 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const CACHE_MAX_SIZE = 10;
|
const DEFAULT_CACHE_SIZE = 10;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cache of unpickled inbound megolm session.
|
* Cache of unpickled inbound megolm session.
|
||||||
*/
|
*/
|
||||||
export class SessionCache {
|
export class SessionCache {
|
||||||
constructor() {
|
constructor(size) {
|
||||||
|
this._size = typeof size === "number" ? size : DEFAULT_CACHE_SIZE;
|
||||||
this._sessions = [];
|
this._sessions = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,12 +52,12 @@ export class SessionCache {
|
||||||
sessionInfo.retain();
|
sessionInfo.retain();
|
||||||
// add new at top
|
// add new at top
|
||||||
this._sessions.unshift(sessionInfo);
|
this._sessions.unshift(sessionInfo);
|
||||||
if (this._sessions.length > CACHE_MAX_SIZE) {
|
if (this._sessions.length > this._size) {
|
||||||
// free sessions we're about to remove
|
// free sessions we're about to remove
|
||||||
for (let i = CACHE_MAX_SIZE; i < this._sessions.length; i += 1) {
|
for (let i = this._size; i < this._sessions.length; i += 1) {
|
||||||
this._sessions[i].release();
|
this._sessions[i].release();
|
||||||
}
|
}
|
||||||
this._sessions = this._sessions.slice(0, CACHE_MAX_SIZE);
|
this._sessions = this._sessions.slice(0, this._size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,9 @@ function findFirstSessionId(sessionIds) {
|
||||||
const OTK_ALGORITHM = "signed_curve25519";
|
const OTK_ALGORITHM = "signed_curve25519";
|
||||||
// only encrypt this amount of olm messages at once otherwise we run out of wasm memory
|
// only encrypt this amount of olm messages at once otherwise we run out of wasm memory
|
||||||
// with all the sessions loaded at the same time
|
// with all the sessions loaded at the same time
|
||||||
const MAX_BATCH_SIZE = 50;
|
// See https://github.com/vector-im/hydrogen-web/issues/150 as well, which indicates the limit is 44,
|
||||||
|
// but let's take a conservative limit as the megolm session cache also takes space
|
||||||
|
const MAX_BATCH_SIZE = 20;
|
||||||
|
|
||||||
export class Encryption {
|
export class Encryption {
|
||||||
constructor({account, olm, olmUtil, ownUserId, storage, now, pickleKey, senderKeyLock}) {
|
constructor({account, olm, olmUtil, ownUserId, storage, now, pickleKey, senderKeyLock}) {
|
||||||
|
|
Reference in a new issue