mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-27 04:38:02 +00:00
Bug 1276029 - Baldr: change wasm::Compile to take ShareableBytes (r=bbouvier)
MozReview-Commit-ID: FvYx5JTfCXw --HG-- extra : rebase_source : c60dfdfcdcefe3ae97e57e0c194342a430d62969
This commit is contained in:
parent
6c0f538c1a
commit
9c830edcb0
@ -103,9 +103,6 @@ class CodeSegment
|
||||
|
||||
struct ShareableBytes : ShareableBase<ShareableBytes>
|
||||
{
|
||||
ShareableBytes() = default;
|
||||
explicit ShareableBytes(Bytes&& bytes) : bytes(Move(bytes)) {}
|
||||
|
||||
// Vector is 'final', so instead make Vector a member and add boilerplate.
|
||||
Bytes bytes;
|
||||
size_t sizeOfExcludingThis(MallocSizeOf m) const { return bytes.sizeOfExcludingThis(m); }
|
||||
|
@ -1398,7 +1398,7 @@ CompileArgs::init(ExclusiveContext* cx)
|
||||
}
|
||||
|
||||
SharedModule
|
||||
wasm::Compile(Bytes&& bytecode, CompileArgs&& args, UniqueChars* error)
|
||||
wasm::Compile(const ShareableBytes& bytecode, CompileArgs&& args, UniqueChars* error)
|
||||
{
|
||||
bool newFormat = args.assumptions.newFormat;
|
||||
|
||||
@ -1456,9 +1456,5 @@ wasm::Compile(Bytes&& bytecode, CompileArgs&& args, UniqueChars* error)
|
||||
|
||||
MOZ_ASSERT(!*error, "unreported error in decoding");
|
||||
|
||||
SharedBytes sharedBytes = js_new<ShareableBytes>(Move(bytecode));
|
||||
if (!sharedBytes)
|
||||
return nullptr;
|
||||
|
||||
return mg.finish(Move(imports), *sharedBytes);
|
||||
return mg.finish(Move(imports), bytecode);
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ struct CompileArgs
|
||||
};
|
||||
|
||||
SharedModule
|
||||
Compile(Bytes&& code, CompileArgs&& args, UniqueChars* error);
|
||||
Compile(const ShareableBytes& bytecode, CompileArgs&& args, UniqueChars* error);
|
||||
|
||||
} // namespace wasm
|
||||
} // namespace js
|
||||
|
@ -132,8 +132,11 @@ wasm::Eval(JSContext* cx, Handle<TypedArrayObject*> code, HandleObject importObj
|
||||
if (!CheckCompilerSupport(cx))
|
||||
return false;
|
||||
|
||||
Bytes bytecode;
|
||||
if (!bytecode.append((uint8_t*)code->viewDataEither().unwrap(), code->byteLength())) {
|
||||
MutableBytes bytecode = cx->new_<ShareableBytes>();
|
||||
if (!bytecode)
|
||||
return false;
|
||||
|
||||
if (!bytecode->append((uint8_t*)code->viewDataEither().unwrap(), code->byteLength())) {
|
||||
ReportOutOfMemory(cx);
|
||||
return false;
|
||||
}
|
||||
@ -150,7 +153,7 @@ wasm::Eval(JSContext* cx, Handle<TypedArrayObject*> code, HandleObject importObj
|
||||
}
|
||||
|
||||
UniqueChars error;
|
||||
SharedModule module = Compile(Move(bytecode), Move(compileArgs), &error);
|
||||
SharedModule module = Compile(*bytecode, Move(compileArgs), &error);
|
||||
if (!module) {
|
||||
if (error)
|
||||
JS_ReportErrorNumber(cx, GetErrorMessage, nullptr, JSMSG_WASM_FAIL, error.get());
|
||||
@ -311,14 +314,17 @@ WasmModuleObject::construct(JSContext* cx, unsigned argc, Value* vp)
|
||||
return false;
|
||||
}
|
||||
|
||||
Bytes bytecode;
|
||||
MutableBytes bytecode = cx->new_<ShareableBytes>();
|
||||
if (!bytecode)
|
||||
return false;
|
||||
|
||||
if (callArgs[0].toObject().is<TypedArrayObject>()) {
|
||||
TypedArrayObject& view = callArgs[0].toObject().as<TypedArrayObject>();
|
||||
if (!bytecode.append((uint8_t*)view.viewDataEither().unwrap(), view.byteLength()))
|
||||
if (!bytecode->append((uint8_t*)view.viewDataEither().unwrap(), view.byteLength()))
|
||||
return false;
|
||||
} else if (callArgs[0].toObject().is<ArrayBufferObject>()) {
|
||||
ArrayBufferObject& buffer = callArgs[0].toObject().as<ArrayBufferObject>();
|
||||
if (!bytecode.append(buffer.dataPointer(), buffer.byteLength()))
|
||||
if (!bytecode->append(buffer.dataPointer(), buffer.byteLength()))
|
||||
return false;
|
||||
} else {
|
||||
JS_ReportErrorNumber(cx, GetErrorMessage, nullptr, JSMSG_WASM_BAD_BUF_ARG);
|
||||
@ -342,7 +348,7 @@ WasmModuleObject::construct(JSContext* cx, unsigned argc, Value* vp)
|
||||
return false;
|
||||
|
||||
UniqueChars error;
|
||||
SharedModule module = Compile(Move(bytecode), Move(compileArgs), &error);
|
||||
SharedModule module = Compile(*bytecode, Move(compileArgs), &error);
|
||||
if (!module) {
|
||||
if (error)
|
||||
JS_ReportErrorNumber(cx, GetErrorMessage, nullptr, JSMSG_WASM_FAIL, error.get());
|
||||
|
Loading…
x
Reference in New Issue
Block a user