mirror of https://github.com/AMT-Cheif/drift.git
Support lock-based OPFS implementation in worker
This commit is contained in:
parent
0060e0ea44
commit
d79633ee6b
|
@ -88,8 +88,11 @@ Future<WasmDatabaseResult> openWasmDatabase({
|
||||||
await workerMessages.next as DedicatedWorkerCompatibilityResult;
|
await workerMessages.next as DedicatedWorkerCompatibilityResult;
|
||||||
missingFeatures.addAll(status.missingFeatures);
|
missingFeatures.addAll(status.missingFeatures);
|
||||||
|
|
||||||
if (status.canAccessOpfs && status.supportsSharedArrayBuffers) {
|
if (status.supportsNestedWorkers &&
|
||||||
// todo send second worker to first one
|
status.canAccessOpfs &&
|
||||||
|
status.supportsSharedArrayBuffers) {
|
||||||
|
return connect(WasmStorageImplementation.opfsLocks,
|
||||||
|
(msg) => msg.sendToWorker(dedicatedWorker));
|
||||||
} else if (status.supportsIndexedDb) {
|
} else if (status.supportsIndexedDb) {
|
||||||
return connect(WasmStorageImplementation.unsafeIndexedDb,
|
return connect(WasmStorageImplementation.unsafeIndexedDb,
|
||||||
(msg) => msg.sendToWorker(dedicatedWorker));
|
(msg) => msg.sendToWorker(dedicatedWorker));
|
||||||
|
@ -105,6 +108,4 @@ Future<WasmDatabaseResult> openWasmDatabase({
|
||||||
missingFeatures,
|
missingFeatures,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
throw 'todo';
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ class DedicatedDriftWorker {
|
||||||
final supportsIndexedDb = await checkIndexedDbSupport();
|
final supportsIndexedDb = await checkIndexedDbSupport();
|
||||||
|
|
||||||
DedicatedWorkerCompatibilityResult(
|
DedicatedWorkerCompatibilityResult(
|
||||||
|
supportsNestedWorkers: hasProperty(globalThis, 'Worker'),
|
||||||
canAccessOpfs: supportsOpfs,
|
canAccessOpfs: supportsOpfs,
|
||||||
supportsIndexedDb: supportsIndexedDb,
|
supportsIndexedDb: supportsIndexedDb,
|
||||||
supportsSharedArrayBuffers:
|
supportsSharedArrayBuffers:
|
||||||
|
@ -64,7 +65,9 @@ class DedicatedDriftWorker {
|
||||||
});
|
});
|
||||||
|
|
||||||
server.serve(message.port.channel());
|
server.serve(message.port.channel());
|
||||||
break;
|
case StartFileSystemServer(sqlite3Options: final options):
|
||||||
|
final worker = await VfsWorker.create(options);
|
||||||
|
await worker.start();
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,11 +173,13 @@ final class DedicatedWorkerCompatibilityResult
|
||||||
extends WasmInitializationMessage {
|
extends WasmInitializationMessage {
|
||||||
static const type = 'DedicatedWorkerCompatibilityResult';
|
static const type = 'DedicatedWorkerCompatibilityResult';
|
||||||
|
|
||||||
|
final bool supportsNestedWorkers;
|
||||||
final bool canAccessOpfs;
|
final bool canAccessOpfs;
|
||||||
final bool supportsSharedArrayBuffers;
|
final bool supportsSharedArrayBuffers;
|
||||||
final bool supportsIndexedDb;
|
final bool supportsIndexedDb;
|
||||||
|
|
||||||
DedicatedWorkerCompatibilityResult({
|
DedicatedWorkerCompatibilityResult({
|
||||||
|
required this.supportsNestedWorkers,
|
||||||
required this.canAccessOpfs,
|
required this.canAccessOpfs,
|
||||||
required this.supportsSharedArrayBuffers,
|
required this.supportsSharedArrayBuffers,
|
||||||
required this.supportsIndexedDb,
|
required this.supportsIndexedDb,
|
||||||
|
@ -185,6 +187,7 @@ final class DedicatedWorkerCompatibilityResult
|
||||||
|
|
||||||
factory DedicatedWorkerCompatibilityResult.fromJsPayload(Object payload) {
|
factory DedicatedWorkerCompatibilityResult.fromJsPayload(Object payload) {
|
||||||
return DedicatedWorkerCompatibilityResult(
|
return DedicatedWorkerCompatibilityResult(
|
||||||
|
supportsNestedWorkers: getProperty(payload, 'supportsNestedWorkers'),
|
||||||
canAccessOpfs: getProperty(payload, 'canAccessOpfs'),
|
canAccessOpfs: getProperty(payload, 'canAccessOpfs'),
|
||||||
supportsSharedArrayBuffers:
|
supportsSharedArrayBuffers:
|
||||||
getProperty(payload, 'supportsSharedArrayBuffers'),
|
getProperty(payload, 'supportsSharedArrayBuffers'),
|
||||||
|
@ -195,6 +198,8 @@ final class DedicatedWorkerCompatibilityResult
|
||||||
@override
|
@override
|
||||||
void _send(_PostMessage sender) {
|
void _send(_PostMessage sender) {
|
||||||
final object = newObject<Object>();
|
final object = newObject<Object>();
|
||||||
|
|
||||||
|
setProperty(object, 'supportsNestedWorkers', supportsNestedWorkers);
|
||||||
setProperty(object, 'canAccessOpfs', canAccessOpfs);
|
setProperty(object, 'canAccessOpfs', canAccessOpfs);
|
||||||
setProperty(object, 'supportsIndexedDb', supportsIndexedDb);
|
setProperty(object, 'supportsIndexedDb', supportsIndexedDb);
|
||||||
setProperty(
|
setProperty(
|
||||||
|
|
|
@ -6,7 +6,6 @@ import 'package:drift/wasm.dart';
|
||||||
import 'package:js/js_util.dart';
|
import 'package:js/js_util.dart';
|
||||||
|
|
||||||
import 'protocol.dart';
|
import 'protocol.dart';
|
||||||
import 'shared.dart';
|
|
||||||
|
|
||||||
class SharedDriftWorker {
|
class SharedDriftWorker {
|
||||||
final SharedWorkerGlobalScope self;
|
final SharedWorkerGlobalScope self;
|
||||||
|
|
Loading…
Reference in New Issue