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;
|
||||
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';
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue