|
|
|
Lines 2435-2450
class MOZ_RAII AutoSetProcessingScriptTa
|
Link Here
|
|---|
|
| 2435 |
explicit AutoSetProcessingScriptTag(nsIScriptContext* aContext) |
2435 |
explicit AutoSetProcessingScriptTag(nsIScriptContext* aContext) |
| 2436 |
: mContext(aContext), mOldTag(mContext->GetProcessingScriptTag()) { |
2436 |
: mContext(aContext), mOldTag(mContext->GetProcessingScriptTag()) { |
| 2437 |
mContext->SetProcessingScriptTag(true); |
2437 |
mContext->SetProcessingScriptTag(true); |
| 2438 |
} |
2438 |
} |
| 2439 |
|
2439 |
|
| 2440 |
~AutoSetProcessingScriptTag() { mContext->SetProcessingScriptTag(mOldTag); } |
2440 |
~AutoSetProcessingScriptTag() { mContext->SetProcessingScriptTag(mOldTag); } |
| 2441 |
}; |
2441 |
}; |
| 2442 |
|
2442 |
|
|
|
2443 |
static nsresult ExecuteCompiledScript(JSContext* aCx, |
| 2444 |
ScriptLoadRequest* aRequest, |
| 2445 |
nsJSUtils::ExecutionContext& aExec) { |
| 2446 |
JS::Rooted<JSScript*> script(aCx, aExec.GetScript()); |
| 2447 |
|
| 2448 |
// Create a ClassicScript object and associate it with the |
| 2449 |
// JSScript. |
| 2450 |
RefPtr<ClassicScript> classicScript = new ClassicScript( |
| 2451 |
aRequest->mFetchOptions, aRequest->mBaseURL); |
| 2452 |
classicScript->AssociateWithScript(script); |
| 2453 |
|
| 2454 |
return aExec.ExecScript(); |
| 2455 |
} |
| 2456 |
|
| 2443 |
nsresult ScriptLoader::EvaluateScript(ScriptLoadRequest* aRequest) { |
2457 |
nsresult ScriptLoader::EvaluateScript(ScriptLoadRequest* aRequest) { |
| 2444 |
using namespace mozilla::Telemetry; |
2458 |
using namespace mozilla::Telemetry; |
| 2445 |
MOZ_ASSERT(aRequest->IsReadyToRun()); |
2459 |
MOZ_ASSERT(aRequest->IsReadyToRun()); |
| 2446 |
|
2460 |
|
| 2447 |
// We need a document to evaluate scripts. |
2461 |
// We need a document to evaluate scripts. |
| 2448 |
if (!mDocument) { |
2462 |
if (!mDocument) { |
| 2449 |
return NS_ERROR_FAILURE; |
2463 |
return NS_ERROR_FAILURE; |
| 2450 |
} |
2464 |
} |
|
Lines 2543-2566
nsresult ScriptLoader::EvaluateScript(Sc
|
Link Here
|
|---|
|
| 2543 |
|
2557 |
|
| 2544 |
if (NS_SUCCEEDED(rv)) { |
2558 |
if (NS_SUCCEEDED(rv)) { |
| 2545 |
if (aRequest->IsBytecode()) { |
2559 |
if (aRequest->IsBytecode()) { |
| 2546 |
TRACE_FOR_TEST(aRequest->Element(), "scriptloader_execute"); |
2560 |
TRACE_FOR_TEST(aRequest->Element(), "scriptloader_execute"); |
| 2547 |
nsJSUtils::ExecutionContext exec(cx, global); |
2561 |
nsJSUtils::ExecutionContext exec(cx, global); |
| 2548 |
if (aRequest->mOffThreadToken) { |
2562 |
if (aRequest->mOffThreadToken) { |
| 2549 |
LOG(("ScriptLoadRequest (%p): Decode Bytecode & Join and Execute", |
2563 |
LOG(("ScriptLoadRequest (%p): Decode Bytecode & Join and Execute", |
| 2550 |
aRequest)); |
2564 |
aRequest)); |
| 2551 |
exec.JoinDecode(&aRequest->mOffThreadToken); |
2565 |
rv = exec.JoinDecode(&aRequest->mOffThreadToken); |
| 2552 |
} else { |
2566 |
} else { |
| 2553 |
LOG(("ScriptLoadRequest (%p): Decode Bytecode and Execute", |
2567 |
LOG(("ScriptLoadRequest (%p): Decode Bytecode and Execute", |
| 2554 |
aRequest)); |
2568 |
aRequest)); |
| 2555 |
exec.Decode(options, aRequest->mScriptBytecode, |
2569 |
rv = exec.Decode(options, aRequest->mScriptBytecode, |
| 2556 |
aRequest->mBytecodeOffset); |
2570 |
aRequest->mBytecodeOffset); |
| 2557 |
} |
2571 |
} |
| 2558 |
rv = exec.ExecScript(); |
2572 |
|
|
|
2573 |
if (rv == NS_OK) { |
| 2574 |
rv = ExecuteCompiledScript(cx, aRequest, exec); |
| 2575 |
} |
| 2576 |
|
| 2559 |
// We do not expect to be saving anything when we already have some |
2577 |
// We do not expect to be saving anything when we already have some |
| 2560 |
// bytecode. |
2578 |
// bytecode. |
| 2561 |
MOZ_ASSERT(!aRequest->mCacheInfo); |
2579 |
MOZ_ASSERT(!aRequest->mCacheInfo); |
| 2562 |
} else { |
2580 |
} else { |
| 2563 |
MOZ_ASSERT(aRequest->IsSource()); |
2581 |
MOZ_ASSERT(aRequest->IsSource()); |
| 2564 |
JS::Rooted<JSScript*> script(cx); |
2582 |
JS::Rooted<JSScript*> script(cx); |
| 2565 |
bool encodeBytecode = ShouldCacheBytecode(aRequest); |
2583 |
bool encodeBytecode = ShouldCacheBytecode(aRequest); |
| 2566 |
|
2584 |
|
|
Lines 2596-2619
nsresult ScriptLoader::EvaluateScript(Sc
|
Link Here
|
|---|
|
| 2596 |
} else { |
2614 |
} else { |
| 2597 |
rv = NS_ERROR_OUT_OF_MEMORY; |
2615 |
rv = NS_ERROR_OUT_OF_MEMORY; |
| 2598 |
} |
2616 |
} |
| 2599 |
} |
2617 |
} |
| 2600 |
} |
2618 |
} |
| 2601 |
|
2619 |
|
| 2602 |
if (rv == NS_OK) { |
2620 |
if (rv == NS_OK) { |
| 2603 |
script = exec.GetScript(); |
2621 |
script = exec.GetScript(); |
| 2604 |
|
2622 |
rv = ExecuteCompiledScript(cx, aRequest, exec); |
| 2605 |
// Create a ClassicScript object and associate it with the |
|
|
| 2606 |
// JSScript. |
| 2607 |
RefPtr<ClassicScript> classicScript = new ClassicScript( |
| 2608 |
aRequest->mFetchOptions, aRequest->mBaseURL); |
| 2609 |
classicScript->AssociateWithScript(script); |
| 2610 |
|
| 2611 |
rv = exec.ExecScript(); |
| 2612 |
} |
2623 |
} |
| 2613 |
} |
2624 |
} |
| 2614 |
|
2625 |
|
| 2615 |
// Queue the current script load request to later save the bytecode. |
2626 |
// Queue the current script load request to later save the bytecode. |
| 2616 |
if (script && encodeBytecode) { |
2627 |
if (script && encodeBytecode) { |
| 2617 |
aRequest->SetScript(script); |
2628 |
aRequest->SetScript(script); |
| 2618 |
TRACE_FOR_TEST(aRequest->Element(), "scriptloader_encode"); |
2629 |
TRACE_FOR_TEST(aRequest->Element(), "scriptloader_encode"); |
| 2619 |
MOZ_ASSERT(aRequest->mBytecodeOffset == |
2630 |
MOZ_ASSERT(aRequest->mBytecodeOffset == |