Merge remote-tracking branch 'origin/master' into custom

This commit is contained in:
Roy Tam 2019-06-15 06:28:55 +08:00
commit 11fc0dd014
7 changed files with 44 additions and 34 deletions

View file

@ -4,3 +4,4 @@ ecosia
twitter twitter
wikipedia wikipedia
yahoo yahoo
yandex-ru

View file

@ -0,0 +1,13 @@
<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/" xmlns:os="http://a9.com/-/spec/opensearch/1.1/">
<os:ShortName>Яндекс</os:ShortName>
<os:Description>Воспользуйтесь Яндексом для поиска в Интернете.</os:Description>
<os:InputEncoding>UTF-8</os:InputEncoding>
<os:Image width="16" height="16">data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAB50lEQVQ4T43SvWsacRgH8OcPCITSLRQ6BSRL1gxZTNZQsgYC3QKunVoMnTKFhBQSnDqIUa5gxNbBCgriC4pv50sJ1lIR5SROpRVbz+O4b5/flbvedekJH+557nvfH8chdbvdIFMYPAgBICdqt9uKpmnw8huNRuDnX8J5QKvVgmEYnqiqClmWwZ113kmger0OXdf/Wv6EIb0BTo+AgB94ceDKJ5MJuHPOMwlUqVSwWq1sevQaxqvn0O5l6HdvgaMdV75cLtFoNMC9Xd6JisWiedNiPNuB9l4yZ+1jEvBvuXJBURRwL8YzUT6fx2KxsGHrKdQPCXNW794Bvieu3CLegrsnlM1mMZ/PbfqeH6vToDkvb2+Bx49cuWU2m4G7bUqn0xiPx7ZpqYRf29v4cXyMxf4+tLU1V24ZDAbgbptSqRSGw6HL9OwM37n4bXPTvP6bC7lcDtw9oWQyiX6/b/vMH1XZ2MAoEMDXqytM+QBnLtRqNXAvxjNRPB5Hr9ez9Q8PMfD50OM/2P3FBb7wAc680+mIMri3yzuRJEloNpsmORTCJy7INzd/9stLc7dyIZPJgDvnPJNA0WgU1WrVkxJ/4FgsBu6s804CRSKRh0KhgHK5/F+JRAL8fJBnslA4HH7NHhg8CDnLwm8IYz560xw92AAAAABJRU5ErkJggg==</os:Image>
<SearchForm>https://www.yandex.ru/?clid=2348180</SearchForm>
<os:Url type="text/html" method="GET" template="https://yandex.ru/yandsearch/" resultDomain="yandex.ru">
<os:Param name="clid" value="2348180"/>
<os:Param name="text" value="{searchTerms}"/>
</os:Url><os:Url type="application/x-suggestions+json" method="GET" template="https://suggest.yandex.net/suggest-ff.cgi" resultDomain="suggest.yandex.net">
<os:Param name="part" value="{searchTerms}"/>
</os:Url>
</SearchPlugin>

View file

@ -834,7 +834,7 @@ js::atomics_wait(JSContext* cx, unsigned argc, Value* vp)
} }
bool bool
js::atomics_wake(JSContext* cx, unsigned argc, Value* vp) js::atomics_notify(JSContext* cx, unsigned argc, Value* vp)
{ {
CallArgs args = CallArgsFromVp(argc, vp); CallArgs args = CallArgsFromVp(argc, vp);
HandleValue objv = args.get(0); HandleValue objv = args.get(0);
@ -874,7 +874,7 @@ js::atomics_wake(JSContext* cx, unsigned argc, Value* vp)
iter = iter->lower_pri; iter = iter->lower_pri;
if (c->offset != offset || !c->rt->fx.isWaiting()) if (c->offset != offset || !c->rt->fx.isWaiting())
continue; continue;
c->rt->fx.wake(FutexRuntime::WakeExplicit); c->rt->fx.notify(FutexRuntime::NotifyExplicit);
++woken; ++woken;
--count; --count;
} while (count > 0 && iter != waiters); } while (count > 0 && iter != waiters);
@ -950,7 +950,7 @@ js::FutexRuntime::isWaiting()
// When a worker is awoken for an interrupt it goes into state // When a worker is awoken for an interrupt it goes into state
// WaitingNotifiedForInterrupt for a short time before it actually // WaitingNotifiedForInterrupt for a short time before it actually
// wakes up and goes into WaitingInterrupted. In those states the // wakes up and goes into WaitingInterrupted. In those states the
// worker is still waiting, and if an explicit wake arrives the // worker is still waiting, and if an explicit notify arrives the
// worker transitions to Woken. See further comments in // worker transitions to Woken. See further comments in
// FutexRuntime::wait(). // FutexRuntime::wait().
return state_ == Waiting || state_ == WaitingInterrupted || state_ == WaitingNotifiedForInterrupt; return state_ == Waiting || state_ == WaitingInterrupted || state_ == WaitingNotifiedForInterrupt;
@ -1029,14 +1029,14 @@ js::FutexRuntime::wait(JSContext* cx, js::UniqueLock<js::Mutex>& locked,
// should be woken when the interrupt handler returns. // should be woken when the interrupt handler returns.
// To that end, we flag the thread as interrupted around // To that end, we flag the thread as interrupted around
// the interrupt and check state_ when the interrupt // the interrupt and check state_ when the interrupt
// handler returns. A wake() call that reaches the // handler returns. A notify() call that reaches the
// runtime during the interrupt sets state_ to Woken. // runtime during the interrupt sets state_ to Woken.
// //
// - It is in principle possible for wait() to be // - It is in principle possible for wait() to be
// reentered on the same thread/runtime and waiting on the // reentered on the same thread/runtime and waiting on the
// same location and to yet again be interrupted and enter // same location and to yet again be interrupted and enter
// the interrupt handler. In this case, it is important // the interrupt handler. In this case, it is important
// that when another agent wakes waiters, all waiters using // that when another agent notifies waiters, all waiters using
// the same runtime on the same location are woken in LIFO // the same runtime on the same location are woken in LIFO
// order; FIFO may be the required order, but FIFO would // order; FIFO may be the required order, but FIFO would
// fail to wake up the innermost call. Interrupts are // fail to wake up the innermost call. Interrupts are
@ -1073,25 +1073,25 @@ finished:
} }
void void
js::FutexRuntime::wake(WakeReason reason) js::FutexRuntime::notify(NotifyReason reason)
{ {
MOZ_ASSERT(isWaiting()); MOZ_ASSERT(isWaiting());
if ((state_ == WaitingInterrupted || state_ == WaitingNotifiedForInterrupt) && reason == WakeExplicit) { if ((state_ == WaitingInterrupted || state_ == WaitingNotifiedForInterrupt) && reason == NotifyExplicit) {
state_ = Woken; state_ = Woken;
return; return;
} }
switch (reason) { switch (reason) {
case WakeExplicit: case NotifyExplicit:
state_ = Woken; state_ = Woken;
break; break;
case WakeForJSInterrupt: case NotifyForJSInterrupt:
if (state_ == WaitingNotifiedForInterrupt) if (state_ == WaitingNotifiedForInterrupt)
return; return;
state_ = WaitingNotifiedForInterrupt; state_ = WaitingNotifiedForInterrupt;
break; break;
default: default:
MOZ_CRASH("bad WakeReason in FutexRuntime::wake()"); MOZ_CRASH("bad NotifyReason in FutexRuntime::notify()");
} }
cond_->notify_all(); cond_->notify_all();
} }
@ -1108,7 +1108,8 @@ const JSFunctionSpec AtomicsMethods[] = {
JS_INLINABLE_FN("xor", atomics_xor, 3,0, AtomicsXor), JS_INLINABLE_FN("xor", atomics_xor, 3,0, AtomicsXor),
JS_INLINABLE_FN("isLockFree", atomics_isLockFree, 1,0, AtomicsIsLockFree), JS_INLINABLE_FN("isLockFree", atomics_isLockFree, 1,0, AtomicsIsLockFree),
JS_FN("wait", atomics_wait, 4,0), JS_FN("wait", atomics_wait, 4,0),
JS_FN("wake", atomics_wake, 3,0), JS_FN("notify", atomics_notify, 3,0),
JS_FN("wake", atomics_notify, 3,0), //Legacy name
JS_FS_END JS_FS_END
}; };

View file

@ -36,7 +36,7 @@ MOZ_MUST_USE bool atomics_or(JSContext* cx, unsigned argc, Value* vp);
MOZ_MUST_USE bool atomics_xor(JSContext* cx, unsigned argc, Value* vp); MOZ_MUST_USE bool atomics_xor(JSContext* cx, unsigned argc, Value* vp);
MOZ_MUST_USE bool atomics_isLockFree(JSContext* cx, unsigned argc, Value* vp); MOZ_MUST_USE bool atomics_isLockFree(JSContext* cx, unsigned argc, Value* vp);
MOZ_MUST_USE bool atomics_wait(JSContext* cx, unsigned argc, Value* vp); MOZ_MUST_USE bool atomics_wait(JSContext* cx, unsigned argc, Value* vp);
MOZ_MUST_USE bool atomics_wake(JSContext* cx, unsigned argc, Value* vp); MOZ_MUST_USE bool atomics_notify(JSContext* cx, unsigned argc, Value* vp);
/* asm.js callouts */ /* asm.js callouts */
namespace wasm { class Instance; } namespace wasm { class Instance; }
@ -63,10 +63,10 @@ public:
MOZ_MUST_USE bool initInstance(); MOZ_MUST_USE bool initInstance();
void destroyInstance(); void destroyInstance();
// Parameters to wake(). // Parameters to notify().
enum WakeReason { enum NotifyReason {
WakeExplicit, // Being asked to wake up by another thread NotifyExplicit, // Being asked to wake up by another thread
WakeForJSInterrupt // Interrupt requested NotifyForJSInterrupt // Interrupt requested
}; };
// Result code from wait(). // Result code from wait().
@ -83,29 +83,27 @@ public:
// times allowed; specify mozilla::Nothing() for an indefinite // times allowed; specify mozilla::Nothing() for an indefinite
// wait. // wait.
// //
// wait() will not wake up spuriously. It will return true and // wait() will not wake up spuriously.
// set *result to a return code appropriate for
// Atomics.wait() on success, and return false on error.
MOZ_MUST_USE bool wait(JSContext* cx, js::UniqueLock<js::Mutex>& locked, MOZ_MUST_USE bool wait(JSContext* cx, js::UniqueLock<js::Mutex>& locked,
mozilla::Maybe<mozilla::TimeDuration>& timeout, WaitResult* result); mozilla::Maybe<mozilla::TimeDuration>& timeout, WaitResult* result);
// Wake the thread represented by this Runtime. // Notify the thread represented by this Runtime.
// //
// The futex lock must be held around this call. (The sleeping // The futex lock must be held around this call. (The sleeping
// thread will not wake up until the caller of Atomics.wake() // thread will not wake up until the caller of Atomics.notify()
// releases the lock.) // releases the lock.)
// //
// If the thread is not waiting then this method does nothing. // If the thread is not waiting then this method does nothing.
// //
// If the thread is waiting in a call to wait() and the // If the thread is waiting in a call to wait() and the
// reason is WakeExplicit then the wait() call will return // reason is NotifyExplicit then the wait() call will return
// with Woken. // with Woken.
// //
// If the thread is waiting in a call to wait() and the // If the thread is waiting in a call to wait() and the
// reason is WakeForJSInterrupt then the wait() will return // reason is NotifyForJSInterrupt then the wait() will return
// with WaitingNotifiedForInterrupt; in the latter case the caller // with WaitingNotifiedForInterrupt; in the latter case the caller
// of wait() must handle the interrupt. // of wait() must handle the interrupt.
void wake(WakeReason reason); void notify(NotifyReason reason);
bool isWaiting(); bool isWaiting();
@ -128,7 +126,7 @@ public:
// interrupt handler // interrupt handler
WaitingInterrupted, // We are waiting, but have been interrupted WaitingInterrupted, // We are waiting, but have been interrupted
// and are running the interrupt handler // and are running the interrupt handler
Woken // Woken by a script call to Atomics.wake Woken // Woken by a script call to Atomics.notify
}; };
// Condition variable that this runtime will wait on. // Condition variable that this runtime will wait on.

View file

@ -67,6 +67,8 @@ if (helperThreadCount() === 0) {
quit(); quit();
} }
var mem = new Int32Array(new SharedArrayBuffer(1024));
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
// wait() returns "not-equal" if the value is not the expected one. // wait() returns "not-equal" if the value is not the expected one.
@ -102,7 +104,7 @@ dprint("Sleeping for 2 seconds");
sleep(2); sleep(2);
dprint("Waking the main thread now"); dprint("Waking the main thread now");
setSharedArrayBuffer(null); setSharedArrayBuffer(null);
assertEq(Atomics.wake(mem, 0, 1), 1); // Can fail spuriously but very unlikely assertEq(Atomics.notify(mem, 0, 1), 1); // Can fail spuriously but very unlikely
`); `);
var then = Date.now(); var then = Date.now();
@ -113,14 +115,14 @@ assertEq(getSharedArrayBuffer(), null); // The worker's clearing of the mbx is v
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
// Test the default argument to atomics.wake() // Test the default argument to atomics.notify()
setSharedArrayBuffer(mem.buffer); setSharedArrayBuffer(mem.buffer);
evalInWorker(` evalInWorker(`
var mem = new Int32Array(getSharedArrayBuffer()); var mem = new Int32Array(getSharedArrayBuffer());
sleep(2); // Probably long enough to avoid a spurious error next sleep(2); // Probably long enough to avoid a spurious error next
assertEq(Atomics.wake(mem, 0), 1); // Last argument to wake should default to +Infinity assertEq(Atomics.notify(mem, 0), 1); // Last argument to wake should default to +Infinity
`); `);
var then = Date.now(); var then = Date.now();

View file

@ -589,7 +589,7 @@ JSRuntime::requestInterrupt(InterruptMode mode)
// Atomics.wait(). // Atomics.wait().
fx.lock(); fx.lock();
if (fx.isWaiting()) if (fx.isWaiting())
fx.wake(FutexRuntime::WakeForJSInterrupt); fx.notify(FutexRuntime::NotifyForJSInterrupt);
fx.unlock(); fx.unlock();
InterruptRunningJitCode(this); InterruptRunningJitCode(this);
} }

View file

@ -1319,12 +1319,7 @@ pref("javascript.options.mem.gc_max_empty_chunk_count", 30);
pref("javascript.options.showInConsole", false); pref("javascript.options.showInConsole", false);
#ifdef RELEASE_OR_BETA
// Disabled in Beta and Release for now, see bug 1225406
pref("javascript.options.shared_memory", false);
#else
pref("javascript.options.shared_memory", true); pref("javascript.options.shared_memory", true);
#endif
pref("javascript.options.throw_on_debuggee_would_run", false); pref("javascript.options.throw_on_debuggee_would_run", false);
pref("javascript.options.dump_stack_on_debuggee_would_run", false); pref("javascript.options.dump_stack_on_debuggee_would_run", false);