Support lock-based OPFS implementation in worker

This commit is contained in:
Simon Binder 2023-05-31 18:07:09 +02:00
parent 0060e0ea44
commit d79633ee6b
No known key found for this signature in database
GPG Key ID: 7891917E4147B8C0
4 changed files with 14 additions and 6 deletions

View File

@ -88,8 +88,11 @@ Future<WasmDatabaseResult> openWasmDatabase({
await workerMessages.next as DedicatedWorkerCompatibilityResult;
missingFeatures.addAll(status.missingFeatures);
if (status.canAccessOpfs && status.supportsSharedArrayBuffers) {
// todo send second worker to first one
if (status.supportsNestedWorkers &&
status.canAccessOpfs &&
status.supportsSharedArrayBuffers) {
return connect(WasmStorageImplementation.opfsLocks,
(msg) => msg.sendToWorker(dedicatedWorker));
} else if (status.supportsIndexedDb) {
return connect(WasmStorageImplementation.unsafeIndexedDb,
(msg) => msg.sendToWorker(dedicatedWorker));
@ -105,6 +108,4 @@ Future<WasmDatabaseResult> openWasmDatabase({
missingFeatures,
);
}
throw 'todo';
}

View File

@ -35,6 +35,7 @@ class DedicatedDriftWorker {
final supportsIndexedDb = await checkIndexedDbSupport();
DedicatedWorkerCompatibilityResult(
supportsNestedWorkers: hasProperty(globalThis, 'Worker'),
canAccessOpfs: supportsOpfs,
supportsIndexedDb: supportsIndexedDb,
supportsSharedArrayBuffers:
@ -64,7 +65,9 @@ class DedicatedDriftWorker {
});
server.serve(message.port.channel());
break;
case StartFileSystemServer(sqlite3Options: final options):
final worker = await VfsWorker.create(options);
await worker.start();
default:
break;
}

View File

@ -173,11 +173,13 @@ final class DedicatedWorkerCompatibilityResult
extends WasmInitializationMessage {
static const type = 'DedicatedWorkerCompatibilityResult';
final bool supportsNestedWorkers;
final bool canAccessOpfs;
final bool supportsSharedArrayBuffers;
final bool supportsIndexedDb;
DedicatedWorkerCompatibilityResult({
required this.supportsNestedWorkers,
required this.canAccessOpfs,
required this.supportsSharedArrayBuffers,
required this.supportsIndexedDb,
@ -185,6 +187,7 @@ final class DedicatedWorkerCompatibilityResult
factory DedicatedWorkerCompatibilityResult.fromJsPayload(Object payload) {
return DedicatedWorkerCompatibilityResult(
supportsNestedWorkers: getProperty(payload, 'supportsNestedWorkers'),
canAccessOpfs: getProperty(payload, 'canAccessOpfs'),
supportsSharedArrayBuffers:
getProperty(payload, 'supportsSharedArrayBuffers'),
@ -195,6 +198,8 @@ final class DedicatedWorkerCompatibilityResult
@override
void _send(_PostMessage sender) {
final object = newObject<Object>();
setProperty(object, 'supportsNestedWorkers', supportsNestedWorkers);
setProperty(object, 'canAccessOpfs', canAccessOpfs);
setProperty(object, 'supportsIndexedDb', supportsIndexedDb);
setProperty(

View File

@ -6,7 +6,6 @@ import 'package:drift/wasm.dart';
import 'package:js/js_util.dart';
import 'protocol.dart';
import 'shared.dart';
class SharedDriftWorker {
final SharedWorkerGlobalScope self;