mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 996983 - Part 3: Push JitActivations for each PJS thread during ForkJoin. (r=nmatsakis)
This commit is contained in:
parent
0b8fefa207
commit
763fd5c59f
@ -1331,10 +1331,11 @@ class ParallelIonInvoke
|
||||
calleeToken_ = CalleeToToken(callee);
|
||||
}
|
||||
|
||||
bool invoke(PerThreadData *perThread) {
|
||||
RootedValue result(perThread);
|
||||
bool invoke(ForkJoinContext *cx) {
|
||||
JitActivation activation(cx);
|
||||
Value result;
|
||||
CALL_GENERATED_CODE(enter_, jitcode_, argc_ + 1, argv_ + 1, nullptr, calleeToken_,
|
||||
nullptr, 0, result.address());
|
||||
nullptr, 0, &result);
|
||||
return !result.isMagic();
|
||||
}
|
||||
};
|
||||
@ -1535,13 +1536,13 @@ ForkJoinShared::executePortion(PerThreadData *perThread, ThreadPoolWorker *worke
|
||||
cx.bailoutRecord->setCause(ParallelBailoutMainScriptNotPresent);
|
||||
setAbortFlagAndRequestInterrupt(false);
|
||||
} else {
|
||||
ParallelIonInvoke<3> fii(cx_->runtime(), fun_, 3);
|
||||
ParallelIonInvoke<3> fii(runtime(), fun_, 3);
|
||||
|
||||
fii.args[0] = Int32Value(worker->id());
|
||||
fii.args[1] = Int32Value(sliceStart_);
|
||||
fii.args[2] = Int32Value(sliceEnd_);
|
||||
|
||||
bool ok = fii.invoke(perThread);
|
||||
bool ok = fii.invoke(&cx);
|
||||
JS_ASSERT(ok == !cx.bailoutRecord->topScript);
|
||||
if (!ok)
|
||||
setAbortFlagAndRequestInterrupt(false);
|
||||
|
@ -1538,6 +1538,19 @@ jit::JitActivation::JitActivation(JSContext *cx, bool firstFrameIsConstructing,
|
||||
}
|
||||
}
|
||||
|
||||
jit::JitActivation::JitActivation(ForkJoinContext *cx)
|
||||
: Activation(cx, Jit),
|
||||
firstFrameIsConstructing_(false),
|
||||
active_(true)
|
||||
#ifdef JS_ION
|
||||
, rematerializedFrames_(nullptr)
|
||||
#endif
|
||||
{
|
||||
prevIonTop_ = cx->perThreadData->ionTop;
|
||||
prevJitJSContext_ = cx->perThreadData->jitJSContext;
|
||||
cx->perThreadData->jitJSContext = nullptr;
|
||||
}
|
||||
|
||||
jit::JitActivation::~JitActivation()
|
||||
{
|
||||
if (active_) {
|
||||
@ -1714,10 +1727,10 @@ AsmJSActivation::~AsmJSActivation()
|
||||
profiler_->exitNative();
|
||||
|
||||
JSContext *cx = cx_->asJSContext();
|
||||
JS_ASSERT(cx->runtime()->mainThread.asmJSActivationStack_ == this);
|
||||
JS_ASSERT(cx->mainThread().asmJSActivationStack_ == this);
|
||||
|
||||
JSRuntime::AutoLockForInterrupt lock(cx->runtime());
|
||||
cx->runtime()->mainThread.asmJSActivationStack_ = prevAsmJS_;
|
||||
cx->mainThread().asmJSActivationStack_ = prevAsmJS_;
|
||||
}
|
||||
|
||||
InterpreterFrameIterator &
|
||||
|
@ -1356,6 +1356,7 @@ class JitActivation : public Activation
|
||||
|
||||
public:
|
||||
JitActivation(JSContext *cx, bool firstFrameIsConstructing, bool active = true);
|
||||
JitActivation(ForkJoinContext *cx);
|
||||
~JitActivation();
|
||||
|
||||
bool isActive() const {
|
||||
|
Loading…
Reference in New Issue
Block a user