mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
auto merge of #3820 : cgaebel/servo/rebase-lalehs-patch, r=pcwalton
I addressed all but one of the code review comments, which was a request for documentation on where a number came from (which I'm not qualified to answer), and rebased this on to latest master. xref: #3505 cc: @LalehB @larsbergstrom r? @pcwalton
This commit is contained in:
commit
9e94ecf99c
1 changed files with 14 additions and 1 deletions
|
@ -16,6 +16,7 @@ use std::rand::weak_rng;
|
||||||
use std::sync::atomics::{AtomicUint, SeqCst};
|
use std::sync::atomics::{AtomicUint, SeqCst};
|
||||||
use std::sync::deque::{Abort, BufferPool, Data, Empty, Stealer, Worker};
|
use std::sync::deque::{Abort, BufferPool, Data, Empty, Stealer, Worker};
|
||||||
use std::task::TaskBuilder;
|
use std::task::TaskBuilder;
|
||||||
|
use libc::funcs::posix88::unistd::usleep;
|
||||||
|
|
||||||
/// A unit of work.
|
/// A unit of work.
|
||||||
///
|
///
|
||||||
|
@ -70,7 +71,9 @@ struct WorkerThread<QueueData, WorkData> {
|
||||||
rng: XorShiftRng,
|
rng: XorShiftRng,
|
||||||
}
|
}
|
||||||
|
|
||||||
static SPIN_COUNT: uint = 1000;
|
static SPIN_COUNT: u32 = 128;
|
||||||
|
static SPINS_UNTIL_BACKOFF: u32 = 100;
|
||||||
|
static BACKOFF_INCREMENT_IN_US: u32 = 5;
|
||||||
|
|
||||||
impl<QueueData: Send, WorkData: Send> WorkerThread<QueueData, WorkData> {
|
impl<QueueData: Send, WorkData: Send> WorkerThread<QueueData, WorkData> {
|
||||||
/// The main logic. This function starts up the worker and listens for
|
/// The main logic. This function starts up the worker and listens for
|
||||||
|
@ -84,6 +87,8 @@ impl<QueueData: Send, WorkData: Send> WorkerThread<QueueData, WorkData> {
|
||||||
ExitMsg => return,
|
ExitMsg => return,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let mut back_off_sleep = 0 as u32;
|
||||||
|
|
||||||
// We're off!
|
// We're off!
|
||||||
//
|
//
|
||||||
// FIXME(pcwalton): Can't use labeled break or continue cross-crate due to a Rust bug.
|
// FIXME(pcwalton): Can't use labeled break or continue cross-crate due to a Rust bug.
|
||||||
|
@ -107,10 +112,18 @@ impl<QueueData: Send, WorkData: Send> WorkerThread<QueueData, WorkData> {
|
||||||
}
|
}
|
||||||
Data(work) => {
|
Data(work) => {
|
||||||
work_unit = work;
|
work_unit = work;
|
||||||
|
back_off_sleep = 0 as u32;
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if i > SPINS_UNTIL_BACKOFF {
|
||||||
|
unsafe {
|
||||||
|
usleep(back_off_sleep as u32);
|
||||||
|
}
|
||||||
|
back_off_sleep += BACKOFF_INCREMENT_IN_US;
|
||||||
|
}
|
||||||
|
|
||||||
if i == SPIN_COUNT {
|
if i == SPIN_COUNT {
|
||||||
match self.port.try_recv() {
|
match self.port.try_recv() {
|
||||||
Ok(StopMsg) => {
|
Ok(StopMsg) => {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue