aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md3
-rw-r--r--components/net/image_cache_task.rs56
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py61
-rw-r--r--components/script/dom/bindings/codegen/Configuration.py17
-rw-r--r--components/script/dom/bindings/codegen/parser/WebIDL.py6
-rw-r--r--components/script/dom/bindings/error.rs66
-rw-r--r--components/script/dom/document.rs23
-rw-r--r--components/script/dom/domexception.rs28
-rw-r--r--components/script/dom/domparser.rs4
-rw-r--r--components/script/dom/testbinding.rs3
-rw-r--r--components/script/dom/webidls/DOMParser.webidl4
-rw-r--r--components/script/dom/webidls/TestBinding.webidl2
-rw-r--r--components/script/dom/workerglobalscope.rs4
-rw-r--r--components/servo/lib.rs6
-rw-r--r--components/util/cache.rs16
-rw-r--r--components/util/debug_utils.rs2
-rw-r--r--components/util/deque/mod.rs42
-rw-r--r--components/util/geometry.rs14
-rw-r--r--components/util/memory.rs2
-rw-r--r--components/util/opts.rs16
-rw-r--r--components/util/persistent_list.rs4
-rw-r--r--components/util/taskpool.rs2
-rw-r--r--components/util/tid.rs4
-rw-r--r--components/util/time.rs2
-rw-r--r--components/util/vec.rs18
-rw-r--r--components/util/workqueue.rs18
-rw-r--r--ports/gonk/src/lib.rs6
27 files changed, 244 insertions, 185 deletions
diff --git a/README.md b/README.md
index d7b7341ecc2..6a218877f7a 100644
--- a/README.md
+++ b/README.md
@@ -98,6 +98,9 @@ cp servobuild.example .servobuild
## Running
+Use `./mach run [url]` to run Servo.
+
+
### Commandline Arguments
- `-p INTERVAL` turns on the profiler and dumps info to the console every
diff --git a/components/net/image_cache_task.rs b/components/net/image_cache_task.rs
index ddf80570d10..6a0d0832353 100644
--- a/components/net/image_cache_task.rs
+++ b/components/net/image_cache_task.rs
@@ -9,6 +9,7 @@ use resource_task::ProgressMsg::{Payload, Done};
use util::task::spawn_named;
use util::taskpool::TaskPool;
+use util::time::{self, profile, TimeProfilerChan};
use std::borrow::ToOwned;
use std::collections::HashMap;
use std::collections::hash_map::Entry::{Occupied, Vacant};
@@ -73,7 +74,8 @@ pub struct ImageCacheTask {
}
impl ImageCacheTask {
- pub fn new(resource_task: ResourceTask, task_pool: TaskPool) -> ImageCacheTask {
+ pub fn new(resource_task: ResourceTask, task_pool: TaskPool,
+ time_profiler_chan: TimeProfilerChan) -> ImageCacheTask {
let (chan, port) = channel();
let chan_clone = chan.clone();
@@ -86,6 +88,7 @@ impl ImageCacheTask {
wait_map: HashMap::new(),
need_exit: None,
task_pool: task_pool,
+ time_profiler_chan: time_profiler_chan,
};
cache.run();
});
@@ -95,11 +98,13 @@ impl ImageCacheTask {
}
}
- pub fn new_sync(resource_task: ResourceTask, task_pool: TaskPool) -> ImageCacheTask {
+ pub fn new_sync(resource_task: ResourceTask, task_pool: TaskPool,
+ time_profiler_chan: TimeProfilerChan) -> ImageCacheTask {
let (chan, port) = channel();
spawn_named("ImageCacheTask (sync)".to_owned(), move || {
- let inner_cache = ImageCacheTask::new(resource_task, task_pool);
+ let inner_cache = ImageCacheTask::new(resource_task, task_pool,
+ time_profiler_chan);
loop {
let msg: Msg = port.recv().unwrap();
@@ -136,6 +141,7 @@ struct ImageCache {
wait_map: HashMap<Url, Arc<Mutex<Vec<Sender<ImageResponseMsg>>>>>,
need_exit: Option<Sender<()>>,
task_pool: TaskPool,
+ time_profiler_chan: TimeProfilerChan,
}
#[derive(Clone)]
@@ -303,11 +309,16 @@ impl ImageCache {
ImageState::Prefetched(data) => {
let to_cache = self.chan.clone();
let url_clone = url.clone();
+ let time_profiler_chan = self.time_profiler_chan.clone();
self.task_pool.execute(move || {
let url = url_clone;
debug!("image_cache_task: started image decode for {}", url.serialize());
- let image = load_from_memory(data.as_slice());
+ let image = profile(time::TimeProfilerCategory::ImageDecoding,
+ None, time_profiler_chan, || {
+ load_from_memory(data.as_slice())
+ });
+
let image = image.map(|image| Arc::new(box image));
to_cache.send(Msg::StoreImage(url.clone(), image)).unwrap();
debug!("image_cache_task: ended image decode for {}", url.serialize());
@@ -485,6 +496,7 @@ mod tests {
use sniffer_task;
use image::base::test_image_bin;
use util::taskpool::TaskPool;
+ use util::time::{TimeProfiler, TimeProfilerChan};
use std::sync::mpsc::{Sender, channel, Receiver};
use url::Url;
@@ -575,11 +587,15 @@ mod tests {
})
}
+ fn profiler() -> TimeProfilerChan {
+ TimeProfiler::create(None)
+ }
+
#[test]
fn should_exit_on_request() {
let mock_resource_task = mock_resource_task(box DoesNothing);
- let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4), profiler());
image_cache_task.exit();
mock_resource_task.send(resource_task::ControlMsg::Exit);
@@ -590,7 +606,7 @@ mod tests {
fn should_fail_if_unprefetched_image_is_requested() {
let mock_resource_task = mock_resource_task(box DoesNothing);
- let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4), profiler());
let url = Url::parse("file:///").unwrap();
let (chan, port) = channel();
@@ -604,7 +620,7 @@ mod tests {
let mock_resource_task = mock_resource_task(box JustSendOK { url_requested_chan: url_requested_chan});
- let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4), profiler());
let url = Url::parse("file:///").unwrap();
image_cache_task.send(Prefetch(url));
@@ -619,7 +635,7 @@ mod tests {
let mock_resource_task = mock_resource_task(box JustSendOK { url_requested_chan: url_requested_chan});
- let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4), profiler());
let url = Url::parse("file:///").unwrap();
image_cache_task.send(Prefetch(url.clone()));
@@ -639,7 +655,7 @@ mod tests {
let mock_resource_task = mock_resource_task(box WaitSendTestImage{wait_port: wait_port});
- let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4), profiler());
let url = Url::parse("file:///").unwrap();
image_cache_task.send(Prefetch(url.clone()));
@@ -656,7 +672,7 @@ mod tests {
fn should_return_decoded_image_data_if_data_has_arrived() {
let mock_resource_task = mock_resource_task(box SendTestImage);
- let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4), profiler());
let url = Url::parse("file:///").unwrap();
let join_port = image_cache_task.wait_for_store();
@@ -682,7 +698,7 @@ mod tests {
fn should_return_decoded_image_data_for_multiple_requests() {
let mock_resource_task = mock_resource_task(box SendTestImage);
- let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4), profiler());
let url = Url::parse("file:///").unwrap();
let join_port = image_cache_task.wait_for_store();
@@ -736,7 +752,7 @@ mod tests {
}
});
- let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4), profiler());
let url = Url::parse("file:///").unwrap();
image_cache_task.send(Prefetch(url.clone()));
@@ -788,7 +804,7 @@ mod tests {
}
});
- let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4), profiler());
let url = Url::parse("file:///").unwrap();
image_cache_task.send(Prefetch(url.clone()));
@@ -817,7 +833,7 @@ mod tests {
fn should_return_failed_if_image_bin_cannot_be_fetched() {
let mock_resource_task = mock_resource_task(box SendTestImageErr);
- let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4), profiler());
let url = Url::parse("file:///").unwrap();
let join_port = image_cache_task.wait_for_store_prefetched();
@@ -843,7 +859,7 @@ mod tests {
fn should_return_failed_for_multiple_get_image_requests_if_image_bin_cannot_be_fetched() {
let mock_resource_task = mock_resource_task(box SendTestImageErr);
- let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4), profiler());
let url = Url::parse("file:///").unwrap();
let join_port = image_cache_task.wait_for_store_prefetched();
@@ -877,7 +893,7 @@ mod tests {
fn should_return_failed_if_image_decode_fails() {
let mock_resource_task = mock_resource_task(box SendBogusImage);
- let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4), profiler());
let url = Url::parse("file:///").unwrap();
let join_port = image_cache_task.wait_for_store();
@@ -905,7 +921,7 @@ mod tests {
fn should_return_image_on_wait_if_image_is_already_loaded() {
let mock_resource_task = mock_resource_task(box SendTestImage);
- let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4), profiler());
let url = Url::parse("file:///").unwrap();
let join_port = image_cache_task.wait_for_store();
@@ -933,7 +949,7 @@ mod tests {
let mock_resource_task = mock_resource_task(box WaitSendTestImage {wait_port: wait_port});
- let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4), profiler());
let url = Url::parse("file:///").unwrap();
image_cache_task.send(Prefetch(url.clone()));
@@ -959,7 +975,7 @@ mod tests {
let mock_resource_task = mock_resource_task(box WaitSendTestImageErr{wait_port: wait_port});
- let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new(mock_resource_task.clone(), TaskPool::new(4), profiler());
let url = Url::parse("file:///").unwrap();
image_cache_task.send(Prefetch(url.clone()));
@@ -983,7 +999,7 @@ mod tests {
fn sync_cache_should_wait_for_images() {
let mock_resource_task = mock_resource_task(box SendTestImage);
- let image_cache_task = ImageCacheTask::new_sync(mock_resource_task.clone(), TaskPool::new(4));
+ let image_cache_task = ImageCacheTask::new_sync(mock_resource_task.clone(), TaskPool::new(4), profiler());
let url = Url::parse("file:///").unwrap();
image_cache_task.send(Prefetch(url.clone()));
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 3ac47486fe0..c35c6b954dd 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -68,13 +68,6 @@ def stripTrailingWhitespace(text):
return '\n'.join(lines) + tail
def MakeNativeName(name):
- # The gecko counterpart to this file uses the BinaryName machinery
- # for this purpose (#4435 is the servo issue for BinaryName).
- replacements = {
- "__stringifier": "Stringify",
- }
- if name in replacements:
- return replacements[name]
return name[0].upper() + name[1:]
builtinNames = {
@@ -2569,7 +2562,8 @@ class CGSpecializedMethod(CGAbstractExternMethod):
@staticmethod
def makeNativeName(descriptor, method):
- return MakeNativeName(method.identifier.name)
+ name = method.identifier.name
+ return MakeNativeName(descriptor.binaryNameFor(name))
class CGStaticMethod(CGAbstractStaticBindingMethod):
"""
@@ -2635,7 +2629,8 @@ class CGSpecializedGetter(CGAbstractExternMethod):
@staticmethod
def makeNativeName(descriptor, attr):
- nativeName = MakeNativeName(attr.identifier.name)
+ name = attr.identifier.name
+ nativeName = MakeNativeName(descriptor.binaryNameFor(name))
infallible = ('infallible' in
descriptor.getExtendedAttributes(attr, getter=True))
if attr.type.nullable() or not infallible:
@@ -2713,7 +2708,8 @@ class CGSpecializedSetter(CGAbstractExternMethod):
@staticmethod
def makeNativeName(descriptor, attr):
- return "Set" + MakeNativeName(attr.identifier.name)
+ name = attr.identifier.name
+ return "Set" + MakeNativeName(descriptor.binaryNameFor(name))
class CGStaticSetter(CGAbstractStaticBindingMethod):
@@ -3569,7 +3565,7 @@ class CGProxySpecialOperation(CGPerSignatureCall):
(don't use this directly, use the derived classes below).
"""
def __init__(self, descriptor, operation):
- nativeName = MakeNativeName(operation)
+ nativeName = MakeNativeName(descriptor.binaryNameFor(operation))
operation = descriptor.operations[operation]
assert len(operation.signatures()) == 1
signature = operation.signatures()[0]
@@ -3993,7 +3989,8 @@ class CGDOMJSProxyHandler_obj_toString(CGAbstractExternMethod):
def getBody(self):
stringifier = self.descriptor.operations['Stringifier']
if stringifier:
- nativeName = MakeNativeName(stringifier.identifier.name)
+ name = self.descriptor.binaryNameFor(stringifier.identifier.name)
+ nativeName = MakeNativeName(name)
signature = stringifier.signatures()[0]
returnType = signature[0]
extendedAttributes = self.descriptor.getExtendedAttributes(stringifier)
@@ -4077,7 +4074,8 @@ class CGClassConstructHook(CGAbstractExternMethod):
let global = global_object_for_js_object(JS_CALLEE(cx, vp).to_object());
let global = global.root();
""")
- nativeName = MakeNativeName(self._ctor.identifier.name)
+ name = self._ctor.identifier.name
+ nativeName = MakeNativeName(self.descriptor.binaryNameFor(name))
callGenerator = CGMethodCall(["global.r()"], nativeName, True,
self.descriptor, self._ctor)
return CGList([preamble, callGenerator])
@@ -4645,7 +4643,7 @@ class CGBindingRoot(CGThing):
'dom::bindings::codegen::{PrototypeList, RegisterBindings, UnionTypes}',
'dom::bindings::codegen::Bindings::*',
'dom::bindings::error::{Fallible, Error, ErrorResult}',
- 'dom::bindings::error::Error::FailureUnknown',
+ 'dom::bindings::error::Error::JSFailed',
'dom::bindings::error::throw_dom_exception',
'dom::bindings::error::throw_type_error',
'dom::bindings::proxyhandler',
@@ -4674,9 +4672,9 @@ class CGBindingRoot(CGThing):
def define(self):
return stripTrailingWhitespace(self.root.define())
-def argument_type(descriptorProvdider, ty, optional=False, defaultValue=None, variadic=False):
+def argument_type(descriptorProvider, ty, optional=False, defaultValue=None, variadic=False):
info = getJSToNativeConversionInfo(
- ty, descriptorProvdider, isArgument=True)
+ ty, descriptorProvider, isArgument=True)
declType = info.declType
if variadic:
@@ -4814,14 +4812,14 @@ class CGCallback(CGClass):
setupCall = ("let s = CallSetup::new(self, aExceptionHandling);\n"
"if s.get_context().is_null() {\n"
- " return Err(FailureUnknown);\n"
+ " return Err(JSFailed);\n"
"}\n")
bodyWithThis = string.Template(
setupCall+
"let thisObjJS = wrap_call_this_object(s.get_context(), thisObj);\n"
"if thisObjJS.is_null() {\n"
- " return Err(FailureUnknown);\n"
+ " return Err(JSFailed);\n"
"}\n"
"return ${methodName}(${callArgs});").substitute({
"callArgs" : ", ".join(argnamesWithThis),
@@ -4848,11 +4846,15 @@ class CGCallback(CGClass):
return self._deps
# We're always fallible
-def callbackGetterName(attr):
- return "Get" + MakeNativeName(attr.identifier.name)
+def callbackGetterName(attr, descriptor):
+ return "Get" + MakeNativeName(
+ descriptor.binaryNameFor(attr.identifier.name))
+
+
+def callbackSetterName(attr, descriptor):
+ return "Set" + MakeNativeName(
+ descriptor.binaryNameFor(attr.identifier.name))
-def callbackSetterName(attr):
- return "Set" + MakeNativeName(attr.identifier.name)
class CGCallbackFunction(CGCallback):
def __init__(self, callback, descriptorProvider):
@@ -4946,7 +4948,7 @@ class CallbackMember(CGNativeMember):
jsObjectsArePtr=True)
# We have to do all the generation of our body now, because
# the caller relies on us throwing if we can't manage it.
- self.exceptionCode= "return Err(FailureUnknown);"
+ self.exceptionCode = "return Err(JSFailed);"
self.body = self.getImpl()
def getImpl(self):
@@ -5076,7 +5078,7 @@ class CallbackMember(CGNativeMember):
"CallSetup s(CallbackPreserveColor(), aRv, aExceptionHandling);\n"
"JSContext* cx = s.get_context();\n"
"if (!cx) {\n"
- " return Err(FailureUnknown);\n"
+ " return Err(JSFailed);\n"
"}\n")
def getArgcDecl(self):
@@ -5121,7 +5123,7 @@ class CallbackMethod(CallbackMember):
" ${argc}, ${argv}, &mut rval)\n"
"};\n"
"if ok == 0 {\n"
- " return Err(FailureUnknown);\n"
+ " return Err(JSFailed);\n"
"}\n").substitute(replacements)
class CallCallback(CallbackMethod):
@@ -5158,7 +5160,7 @@ class CallbackOperationBase(CallbackMethod):
}
getCallableFromProp = string.Template(
'match self.parent.get_callable_property(cx, "${methodName}") {\n'
- ' Err(_) => return Err(FailureUnknown),\n'
+ ' Err(_) => return Err(JSFailed),\n'
' Ok(callable) => callable,\n'
'}').substitute(replacements)
if not self.singleOperation:
@@ -5179,7 +5181,8 @@ class CallbackOperation(CallbackOperationBase):
self.ensureASCIIName(method)
jsName = method.identifier.name
CallbackOperationBase.__init__(self, signature,
- jsName, MakeNativeName(jsName),
+ jsName,
+ MakeNativeName(descriptor.binaryNameFor(jsName)),
descriptor, descriptor.interface.isSingleOperationInterface())
class CallbackGetter(CallbackMember):
@@ -5201,7 +5204,7 @@ class CallbackGetter(CallbackMember):
}
return string.Template(
'if (!JS_GetProperty(cx, mCallback, "${attrName}", &rval)) {\n'
- ' return Err(FailureUnknown);\n'
+ ' return Err(JSFailed);\n'
'}\n').substitute(replacements);
class CallbackSetter(CallbackMember):
@@ -5227,7 +5230,7 @@ class CallbackSetter(CallbackMember):
return string.Template(
'MOZ_ASSERT(argv.length() == 1);\n'
'if (!JS_SetProperty(cx, mCallback, "${attrName}", ${argv})) {\n'
- ' return Err(FailureUnknown);\n'
+ ' return Err(JSFailed);\n'
'}\n').substitute(replacements)
def getArgcDecl(self):
diff --git a/components/script/dom/bindings/codegen/Configuration.py b/components/script/dom/bindings/codegen/Configuration.py
index 8944070f09c..e6712357d35 100644
--- a/components/script/dom/bindings/codegen/Configuration.py
+++ b/components/script/dom/bindings/codegen/Configuration.py
@@ -251,6 +251,20 @@ class Descriptor(DescriptorProvider):
else:
add('all', [config], attribute)
+ self._binaryNames = desc.get('binaryNames', {})
+ self._binaryNames.setdefault('__legacycaller', 'LegacyCall')
+ self._binaryNames.setdefault('__stringifier', 'Stringify')
+
+ for member in self.interface.members:
+ if not member.isAttr() and not member.isMethod():
+ continue
+ binaryName = member.getExtendedAttribute("BinaryName")
+ if binaryName:
+ assert isinstance(binaryName, list)
+ assert len(binaryName) == 1
+ self._binaryNames.setdefault(member.identifier.name,
+ binaryName[0])
+
# Build the prototype chain.
self.prototypeChain = []
parent = interface
@@ -260,6 +274,9 @@ class Descriptor(DescriptorProvider):
config.maxProtoChainLength = max(config.maxProtoChainLength,
len(self.prototypeChain))
+ def binaryNameFor(self, name):
+ return self._binaryNames.get(name, name)
+
def getExtendedAttributes(self, member, getter=False, setter=False):
def maybeAppendInfallibleToAttrs(attrs, throws):
if throws is None:
diff --git a/components/script/dom/bindings/codegen/parser/WebIDL.py b/components/script/dom/bindings/codegen/parser/WebIDL.py
index 370ac7df7c0..7474f56baa2 100644
--- a/components/script/dom/bindings/codegen/parser/WebIDL.py
+++ b/components/script/dom/bindings/codegen/parser/WebIDL.py
@@ -3262,7 +3262,8 @@ class IDLAttribute(IDLInterfaceMember):
identifier == "Frozen" or
identifier == "AvailableIn" or
identifier == "NewObject" or
- identifier == "CheckPermissions"):
+ identifier == "CheckPermissions" or
+ identifier == "BinaryName"):
# Known attributes that we don't need to do anything with here
pass
else:
@@ -3861,7 +3862,8 @@ class IDLMethod(IDLInterfaceMember, IDLScope):
identifier == "Pref" or
identifier == "Func" or
identifier == "AvailableIn" or
- identifier == "CheckPermissions"):
+ identifier == "CheckPermissions" or
+ identifier == "BinaryName"):
# Known attributes that we don't need to do anything with here
pass
else:
diff --git a/components/script/dom/bindings/error.rs b/components/script/dom/bindings/error.rs
index 806e3c21ffe..275c498c038 100644
--- a/components/script/dom/bindings/error.rs
+++ b/components/script/dom/bindings/error.rs
@@ -6,7 +6,9 @@
use dom::bindings::conversions::ToJSValConvertible;
use dom::bindings::global::GlobalRef;
-use dom::domexception::DOMException;
+use dom::domexception::{DOMException, DOMErrorName};
+
+use util::str::DOMString;
use js::jsapi::{JSContext, JSBool, JSObject};
use js::jsapi::{JS_IsExceptionPending, JS_SetPendingException, JS_ReportPendingException};
@@ -22,38 +24,42 @@ use std::ptr;
/// DOM exceptions that can be thrown by a native DOM method.
#[derive(Debug, Clone)]
pub enum Error {
- /// IndexSizeError
+ /// IndexSizeError DOMException
IndexSize,
- /// NotFoundError
+ /// NotFoundError DOMException
NotFound,
- /// HierarchyRequestError
+ /// HierarchyRequestError DOMException
HierarchyRequest,
- /// InvalidCharacterError
+ /// InvalidCharacterError DOMException
InvalidCharacter,
- /// NotSupportedError
+ /// NotSupportedError DOMException
NotSupported,
- /// InvalidStateError
+ /// InvalidStateError DOMException
InvalidState,
- /// SyntaxError
+ /// SyntaxError DOMException
Syntax,
- /// NamespaceError
+ /// NamespaceError DOMException
NamespaceError,
- /// InvalidAccessError
+ /// InvalidAccessError DOMException
InvalidAccess,
- /// SecurityError
+ /// SecurityError DOMException
Security,
- /// NetworkError
+ /// NetworkError DOMException
Network,
- /// AbortError
+ /// AbortError DOMException
Abort,
- /// TimeoutError
+ /// TimeoutError DOMException
Timeout,
- /// DataCloneError
+ /// DataCloneError DOMException
DataClone,
- /// NoModificationAllowedError
+ /// NoModificationAllowedError DOMException
NoModificationAllowedError,
- /// Unknown failure
- FailureUnknown,
+
+ /// TypeError JavaScript Error
+ TypeError(DOMString),
+
+ /// A JavaScript exception is already pending.
+ JSFailed,
}
/// The return type for IDL operations that can throw DOM exceptions.
@@ -67,7 +73,29 @@ pub type ErrorResult = Fallible<()>;
pub fn throw_dom_exception(cx: *mut JSContext, global: GlobalRef,
result: Error) {
assert!(unsafe { JS_IsExceptionPending(cx) } == 0);
- let exception = DOMException::new_from_error(global, result).root();
+ let code = match result {
+ Error::IndexSize => DOMErrorName::IndexSizeError,
+ Error::NotFound => DOMErrorName::NotFoundError,
+ Error::HierarchyRequest => DOMErrorName::HierarchyRequestError,
+ Error::InvalidCharacter => DOMErrorName::InvalidCharacterError,
+ Error::NotSupported => DOMErrorName::NotSupportedError,
+ Error::InvalidState => DOMErrorName::InvalidStateError,
+ Error::Syntax => DOMErrorName::SyntaxError,
+ Error::NamespaceError => DOMErrorName::NamespaceError,
+ Error::InvalidAccess => DOMErrorName::InvalidAccessError,
+ Error::Security => DOMErrorName::SecurityError,
+ Error::Network => DOMErrorName::NetworkError,
+ Error::Abort => DOMErrorName::AbortError,
+ Error::Timeout => DOMErrorName::TimeoutError,
+ Error::DataClone => DOMErrorName::DataCloneError,
+ Error::NoModificationAllowedError => DOMErrorName::NoModificationAllowedError,
+ Error::TypeError(message) => {
+ throw_type_error(cx, &message);
+ return;
+ }
+ Error::JSFailed => panic!(),
+ };
+ let exception = DOMException::new(global, code).root();
let thrown = exception.to_jsval(cx);
unsafe {
JS_SetPendingException(cx, thrown);
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 969a29216bd..d33e223bde5 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -450,14 +450,25 @@ impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> {
let doc = window.r().Document().root();
doc.r().begin_focus_transaction();
- let event = Event::new(GlobalRef::Window(window.r()),
- "click".to_owned(),
- EventBubbles::Bubbles,
- EventCancelable::Cancelable).root();
+ // https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html#event-type-click
+ let x = point.x as i32;
+ let y = point.y as i32;
+ let event = MouseEvent::new(window.r(),
+ "click".to_owned(),
+ true,
+ true,
+ Some(window.r()),
+ 0i32,
+ x, y, x, y,
+ false, false, false, false,
+ 0i16,
+ None).root();
+ let event: JSRef<Event> = EventCast::from_ref(event.r());
+
// https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html#trusted-events
- event.r().set_trusted(true);
+ event.set_trusted(true);
// https://html.spec.whatwg.org/multipage/interaction.html#run-authentic-click-activation-steps
- el.authentic_click_activation(event.r());
+ el.authentic_click_activation(event);
doc.r().commit_focus_transaction();
window.r().flush_layout(ReflowGoal::ForDisplay, ReflowQueryType::NoQuery);
diff --git a/components/script/dom/domexception.rs b/components/script/dom/domexception.rs
index 4509c0b5eaf..53511d4d721 100644
--- a/components/script/dom/domexception.rs
+++ b/components/script/dom/domexception.rs
@@ -5,7 +5,6 @@
use dom::bindings::codegen::Bindings::DOMExceptionBinding;
use dom::bindings::codegen::Bindings::DOMExceptionBinding::DOMExceptionConstants;
use dom::bindings::codegen::Bindings::DOMExceptionBinding::DOMExceptionMethods;
-use dom::bindings::error::Error;
use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflector, reflect_dom_object};
@@ -40,29 +39,6 @@ pub enum DOMErrorName {
EncodingError
}
-impl DOMErrorName {
- fn from_error(error: Error) -> DOMErrorName {
- match error {
- Error::IndexSize => DOMErrorName::IndexSizeError,
- Error::NotFound => DOMErrorName::NotFoundError,
- Error::HierarchyRequest => DOMErrorName::HierarchyRequestError,
- Error::InvalidCharacter => DOMErrorName::InvalidCharacterError,
- Error::NotSupported => DOMErrorName::NotSupportedError,
- Error::InvalidState => DOMErrorName::InvalidStateError,
- Error::Syntax => DOMErrorName::SyntaxError,
- Error::NamespaceError => DOMErrorName::NamespaceError,
- Error::InvalidAccess => DOMErrorName::InvalidAccessError,
- Error::Security => DOMErrorName::SecurityError,
- Error::Network => DOMErrorName::NetworkError,
- Error::Abort => DOMErrorName::AbortError,
- Error::Timeout => DOMErrorName::TimeoutError,
- Error::DataClone => DOMErrorName::DataCloneError,
- Error::NoModificationAllowedError => DOMErrorName::NoModificationAllowedError,
- Error::FailureUnknown => panic!(),
- }
- }
-}
-
#[dom_struct]
pub struct DOMException {
reflector_: Reflector,
@@ -80,10 +56,6 @@ impl DOMException {
pub fn new(global: GlobalRef, code: DOMErrorName) -> Temporary<DOMException> {
reflect_dom_object(box DOMException::new_inherited(code), global, DOMExceptionBinding::Wrap)
}
-
- pub fn new_from_error(global: GlobalRef, code: Error) -> Temporary<DOMException> {
- DOMException::new(global, DOMErrorName::from_error(code))
- }
}
impl<'a> DOMExceptionMethods for JSRef<'a, DOMException> {
diff --git a/components/script/dom/domparser.rs b/components/script/dom/domparser.rs
index c33b151d9cf..91d5d96a615 100644
--- a/components/script/dom/domparser.rs
+++ b/components/script/dom/domparser.rs
@@ -7,7 +7,6 @@ use dom::bindings::codegen::Bindings::DOMParserBinding;
use dom::bindings::codegen::Bindings::DOMParserBinding::DOMParserMethods;
use dom::bindings::codegen::Bindings::DOMParserBinding::SupportedType::{Text_html, Text_xml};
use dom::bindings::error::Fallible;
-use dom::bindings::error::Error::FailureUnknown;
use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JS, JSRef, Temporary};
use dom::bindings::utils::{Reflector, reflect_dom_object};
@@ -69,9 +68,6 @@ impl<'a> DOMParserMethods for JSRef<'a, DOMParser> {
Some(content_type),
DocumentSource::NotFromParser))
}
- _ => {
- Err(FailureUnknown)
- }
}
}
}
diff --git a/components/script/dom/testbinding.rs b/components/script/dom/testbinding.rs
index 2166164babe..c6810483a88 100644
--- a/components/script/dom/testbinding.rs
+++ b/components/script/dom/testbinding.rs
@@ -98,6 +98,8 @@ impl<'a> TestBindingMethods for JSRef<'a, TestBinding> {
fn SetByteStringAttributeNullable(self, _: Option<ByteString>) {}
fn GetStringAttributeNullable(self) -> Option<DOMString> { Some("".to_owned()) }
fn SetStringAttributeNullable(self, _: Option<DOMString>) {}
+ fn SetBinaryRenamedAttribute(self, _: DOMString) {}
+ fn BinaryRenamedAttribute(self) -> DOMString { "".to_owned() }
fn GetEnumAttributeNullable(self) -> Option<TestEnum> { Some(_empty) }
fn GetInterfaceAttributeNullable(self) -> Option<Temporary<Blob>> {
let global = self.global.root();
@@ -108,6 +110,7 @@ impl<'a> TestBindingMethods for JSRef<'a, TestBinding> {
fn SetUnionAttributeNullable(self, _: Option<HTMLElementOrLong>) {}
fn GetUnion2AttributeNullable(self) -> Option<EventOrString> { Some(eString("".to_owned())) }
fn SetUnion2AttributeNullable(self, _: Option<EventOrString>) {}
+ fn BinaryRenamedMethod(self) -> () {}
fn ReceiveVoid(self) -> () {}
fn ReceiveBoolean(self) -> bool { false }
fn ReceiveByte(self) -> i8 { 0 }
diff --git a/components/script/dom/webidls/DOMParser.webidl b/components/script/dom/webidls/DOMParser.webidl
index 236fae785f2..2cb50530627 100644
--- a/components/script/dom/webidls/DOMParser.webidl
+++ b/components/script/dom/webidls/DOMParser.webidl
@@ -8,10 +8,10 @@
enum SupportedType {
"text/html",
- "text/xml",
+ "text/xml"/*,
"application/xml",
"application/xhtml+xml",
- "image/svg+xml"
+ "image/svg+xml"*/
};
[Constructor]
diff --git a/components/script/dom/webidls/TestBinding.webidl b/components/script/dom/webidls/TestBinding.webidl
index c013e4312fa..c6bbd8fadea 100644
--- a/components/script/dom/webidls/TestBinding.webidl
+++ b/components/script/dom/webidls/TestBinding.webidl
@@ -91,7 +91,9 @@ interface TestBinding {
attribute Blob? interfaceAttributeNullable;
attribute (HTMLElement or long)? unionAttributeNullable;
attribute (Event or DOMString)? union2AttributeNullable;
+ [BinaryName="BinaryRenamedAttribute"] attribute DOMString attrToBinaryRename;
+ [BinaryName="BinaryRenamedMethod"] void methToBinaryRename();
void receiveVoid();
boolean receiveBoolean();
byte receiveByte();
diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs
index 5b2ff2c971e..86d93db6ce0 100644
--- a/components/script/dom/workerglobalscope.rs
+++ b/components/script/dom/workerglobalscope.rs
@@ -6,7 +6,7 @@ use dom::bindings::codegen::Bindings::FunctionBinding::Function;
use dom::bindings::codegen::Bindings::WorkerGlobalScopeBinding::WorkerGlobalScopeMethods;
use dom::bindings::codegen::InheritTypes::DedicatedWorkerGlobalScopeCast;
use dom::bindings::error::{ErrorResult, Fallible};
-use dom::bindings::error::Error::{Syntax, Network, FailureUnknown};
+use dom::bindings::error::Error::{Syntax, Network, JSFailed};
use dom::bindings::global::GlobalRef;
use dom::bindings::js::{MutNullableJS, JSRef, Temporary};
use dom::bindings::utils::Reflectable;
@@ -118,7 +118,7 @@ impl<'a> WorkerGlobalScopeMethods for JSRef<'a, WorkerGlobalScope> {
Ok(_) => (),
Err(_) => {
println!("evaluate_script failed");
- return Err(FailureUnknown);
+ return Err(JSFailed);
}
}
}
diff --git a/components/servo/lib.rs b/components/servo/lib.rs
index 903beab52f3..ef2b1b320c5 100644
--- a/components/servo/lib.rs
+++ b/components/servo/lib.rs
@@ -94,9 +94,11 @@ impl<Window> Browser<Window> where Window: WindowMethods + 'static {
// image load or we risk emitting an output file missing the
// image.
let image_cache_task = if opts.output_file.is_some() {
- ImageCacheTask::new_sync(resource_task.clone(), shared_task_pool)
+ ImageCacheTask::new_sync(resource_task.clone(), shared_task_pool,
+ time_profiler_chan_clone.clone())
} else {
- ImageCacheTask::new(resource_task.clone(), shared_task_pool)
+ ImageCacheTask::new(resource_task.clone(), shared_task_pool,
+ time_profiler_chan_clone.clone())
};
let font_cache_task = FontCacheTask::new(resource_task.clone());
let storage_task: StorageTask = StorageTaskFactory::new();
diff --git a/components/util/cache.rs b/components/util/cache.rs
index b3f2aaf55c4..757a6d60c20 100644
--- a/components/util/cache.rs
+++ b/components/util/cache.rs
@@ -59,7 +59,7 @@ impl<K, V> HashCache<K,V>
#[test]
fn test_hashcache() {
- let mut cache: HashCache<uint, Cell<&str>> = HashCache::new();
+ let mut cache: HashCache<usize, Cell<&str>> = HashCache::new();
cache.insert(1, Cell::new("one"));
assert!(cache.find(&1).is_some());
@@ -72,11 +72,11 @@ fn test_hashcache() {
pub struct LRUCache<K, V> {
entries: Vec<(K, V)>,
- cache_size: uint,
+ cache_size: usize,
}
impl<K: Clone + PartialEq, V: Clone> LRUCache<K,V> {
- pub fn new(size: uint) -> LRUCache<K, V> {
+ pub fn new(size: usize) -> LRUCache<K, V> {
LRUCache {
entries: vec!(),
cache_size: size,
@@ -84,7 +84,7 @@ impl<K: Clone + PartialEq, V: Clone> LRUCache<K,V> {
}
#[inline]
- pub fn touch(&mut self, pos: uint) -> V {
+ pub fn touch(&mut self, pos: usize) -> V {
let last_index = self.entries.len() - 1;
if pos != last_index {
let entry = self.entries.remove(pos);
@@ -134,7 +134,7 @@ pub struct SimpleHashCache<K,V> {
}
impl<K:Clone+Eq+Hash<SipHasher>,V:Clone> SimpleHashCache<K,V> {
- pub fn new(cache_size: uint) -> SimpleHashCache<K,V> {
+ pub fn new(cache_size: usize) -> SimpleHashCache<K,V> {
let mut r = rand::thread_rng();
SimpleHashCache {
entries: repeat(None).take(cache_size).collect(),
@@ -144,15 +144,15 @@ impl<K:Clone+Eq+Hash<SipHasher>,V:Clone> SimpleHashCache<K,V> {
}
#[inline]
- fn to_bucket(&self, h: uint) -> uint {
+ fn to_bucket(&self, h: usize) -> usize {
h % self.entries.len()
}
#[inline]
- fn bucket_for_key<Q:Hash<SipHasher>>(&self, key: &Q) -> uint {
+ fn bucket_for_key<Q:Hash<SipHasher>>(&self, key: &Q) -> usize {
let mut hasher = SipHasher::new_with_keys(self.k0, self.k1);
key.hash(&mut hasher);
- self.to_bucket(hasher.finish() as uint)
+ self.to_bucket(hasher.finish() as usize)
}
pub fn insert(&mut self, key: K, value: V) {
diff --git a/components/util/debug_utils.rs b/components/util/debug_utils.rs
index 8d9789de029..f7c02b8068b 100644
--- a/components/util/debug_utils.rs
+++ b/components/util/debug_utils.rs
@@ -12,7 +12,7 @@ fn hexdump_slice(buf: &[u8]) {
let mut stderr = io::stderr();
stderr.write_all(b" ").unwrap();
for (i, &v) in buf.iter().enumerate() {
- let output = format!("{:02X} ", v as uint);
+ let output = format!("{:02X} ", v);
stderr.write_all(output.as_bytes()).unwrap();
match i % 16 {
15 => { stderr.write_all(b"\n ").unwrap(); },
diff --git a/components/util/deque/mod.rs b/components/util/deque/mod.rs
index 6dce728679b..089edf6bd43 100644
--- a/components/util/deque/mod.rs
+++ b/components/util/deque/mod.rs
@@ -57,23 +57,23 @@ use std::mem::{forget, min_align_of, size_of, transmute};
use std::ptr;
use std::sync::Mutex;
-use std::sync::atomic::{AtomicInt, AtomicPtr};
+use std::sync::atomic::{AtomicIsize, AtomicPtr};
use std::sync::atomic::Ordering::SeqCst;
// Once the queue is less than 1/K full, then it will be downsized. Note that
// the deque requires that this number be less than 2.
-static K: int = 4;
+static K: isize = 4;
// Minimum number of bits that a buffer size should be. No buffer will resize to
// under this value, and all deques will initially contain a buffer of this
// size.
//
// The size in question is 1 << MIN_BITS
-static MIN_BITS: uint = 7;
+static MIN_BITS: usize = 7;
struct Deque<T> {
- bottom: AtomicInt,
- top: AtomicInt,
+ bottom: AtomicIsize,
+ top: AtomicIsize,
array: AtomicPtr<Buffer<T>>,
pool: BufferPool<T>,
}
@@ -139,7 +139,7 @@ pub struct BufferPool<T> {
/// LLVM is probably pretty good at doing this already.
struct Buffer<T> {
storage: *const T,
- log_size: uint,
+ log_size: usize,
}
unsafe impl<T: 'static> Send for Buffer<T> { }
@@ -159,7 +159,7 @@ impl<T: Send> BufferPool<T> {
(Worker { deque: a }, Stealer { deque: b })
}
- fn alloc(&mut self, bits: uint) -> Box<Buffer<T>> {
+ fn alloc(&mut self, bits: usize) -> Box<Buffer<T>> {
unsafe {
let mut pool = self.pool.lock().unwrap();
match pool.iter().position(|x| x.size() >= (1 << bits)) {
@@ -228,8 +228,8 @@ impl<T: Send> Deque<T> {
fn new(mut pool: BufferPool<T>) -> Deque<T> {
let buf = pool.alloc(MIN_BITS);
Deque {
- bottom: AtomicInt::new(0),
- top: AtomicInt::new(0),
+ bottom: AtomicIsize::new(0),
+ top: AtomicIsize::new(0),
array: AtomicPtr::new(unsafe { transmute(buf) }),
pool: pool,
}
@@ -299,7 +299,7 @@ impl<T: Send> Deque<T> {
}
}
- unsafe fn maybe_shrink(&self, b: int, t: int) {
+ unsafe fn maybe_shrink(&self, b: isize, t: isize) {
let a = self.array.load(SeqCst);
if b - t < (*a).size() / K && b - t > (1 << MIN_BITS) {
self.swap_buffer(b, a, (*a).resize(b, t, -1));
@@ -313,7 +313,7 @@ impl<T: Send> Deque<T> {
// after this method has called 'free' on it. The continued usage is simply
// a read followed by a forget, but we must make sure that the memory can
// continue to be read after we flag this buffer for reclamation.
- unsafe fn swap_buffer(&self, b: int, old: *mut Buffer<T>,
+ unsafe fn swap_buffer(&self, b: isize, old: *mut Buffer<T>,
buf: Buffer<T>) -> *mut Buffer<T> {
let newbuf: *mut Buffer<T> = transmute(box buf);
self.array.store(newbuf, SeqCst);
@@ -345,12 +345,12 @@ impl<T: Send> Drop for Deque<T> {
}
#[inline]
-fn buffer_alloc_size<T>(log_size: uint) -> uint {
+fn buffer_alloc_size<T>(log_size: usize) -> usize {
(1 << log_size) * size_of::<T>()
}
impl<T: Send> Buffer<T> {
- unsafe fn new(log_size: uint) -> Buffer<T> {
+ unsafe fn new(log_size: usize) -> Buffer<T> {
let size = buffer_alloc_size::<T>(log_size);
let buffer = allocate(size, min_align_of::<T>());
if buffer.is_null() { ::alloc::oom() }
@@ -360,12 +360,12 @@ impl<T: Send> Buffer<T> {
}
}
- fn size(&self) -> int { 1 << self.log_size }
+ fn size(&self) -> isize { 1 << self.log_size }
// Apparently LLVM cannot optimize (foo % (1 << bar)) into this implicitly
- fn mask(&self) -> int { (1 << self.log_size) - 1 }
+ fn mask(&self) -> isize { (1 << self.log_size) - 1 }
- unsafe fn elem(&self, i: int) -> *const T {
+ unsafe fn elem(&self, i: isize) -> *const T {
self.storage.offset(i & self.mask())
}
@@ -373,23 +373,23 @@ impl<T: Send> Buffer<T> {
// nor does this clear out the contents contained within. Hence, this is a
// very unsafe method which the caller needs to treat specially in case a
// race is lost.
- unsafe fn get(&self, i: int) -> T {
+ unsafe fn get(&self, i: isize) -> T {
ptr::read(self.elem(i))
}
// Unsafe because this unsafely overwrites possibly uninitialized or
// initialized data.
- unsafe fn put(&self, i: int, t: T) {
+ unsafe fn put(&self, i: isize, t: T) {
ptr::write(self.elem(i) as *mut T, t);
}
// Again, unsafe because this has incredibly dubious ownership violations.
// It is assumed that this buffer is immediately dropped.
- unsafe fn resize(&self, b: int, t: int, delta: int) -> Buffer<T> {
+ unsafe fn resize(&self, b: isize, t: isize, delta: isize) -> Buffer<T> {
// NB: not entirely obvious, but thanks to 2's complement,
- // casting delta to uint and then adding gives the desired
+ // casting delta to usize and then adding gives the desired
// effect.
- let buf = Buffer::new(self.log_size + delta as uint);
+ let buf = Buffer::new(self.log_size + delta as usize);
for i in range(t, b) {
buf.put(i, self.get(i));
}
diff --git a/components/util/geometry.rs b/components/util/geometry.rs
index 59f61c5afc0..3a165facb5c 100644
--- a/components/util/geometry.rs
+++ b/components/util/geometry.rs
@@ -236,7 +236,7 @@ impl Au {
}
#[inline]
- pub fn from_px(px: int) -> Au {
+ pub fn from_px(px: isize) -> Au {
NumCast::from(px * 60).unwrap()
}
@@ -246,9 +246,9 @@ impl Au {
}
#[inline]
- pub fn to_nearest_px(&self) -> int {
+ pub fn to_nearest_px(&self) -> isize {
let Au(s) = *self;
- ((s as f64) / 60f64).round() as int
+ ((s as f64) / 60f64).round() as isize
}
#[inline]
@@ -309,13 +309,13 @@ pub fn from_frac_px(px: f64) -> Au {
Au((px * 60f64) as i32)
}
-pub fn from_px(px: int) -> Au {
+pub fn from_px(px: isize) -> Au {
NumCast::from(px * 60).unwrap()
}
-pub fn to_px(au: Au) -> int {
+pub fn to_px(au: Au) -> isize {
let Au(a) = au;
- (a / 60) as int
+ (a / 60) as isize
}
pub fn to_frac_px(au: Au) -> f64 {
@@ -325,7 +325,7 @@ pub fn to_frac_px(au: Au) -> f64 {
// assumes 72 points per inch, and 96 px per inch
pub fn from_pt(pt: f64) -> Au {
- from_px((pt / 72f64 * 96f64) as int)
+ from_px((pt / 72f64 * 96f64) as isize)
}
// assumes 72 points per inch, and 96 px per inch
diff --git a/components/util/memory.rs b/components/util/memory.rs
index f895c129fea..e5e20d4cc94 100644
--- a/components/util/memory.rs
+++ b/components/util/memory.rs
@@ -241,7 +241,7 @@ macro_rules! option_try(
);
#[cfg(target_os="linux")]
-fn get_proc_self_statm_field(field: uint) -> Option<u64> {
+fn get_proc_self_statm_field(field: usize) -> Option<u64> {
let mut f = File::open(&Path::new("/proc/self/statm"));
match f.read_to_string() {
Ok(contents) => {
diff --git a/components/util/opts.rs b/components/util/opts.rs
index b64fe4e8f46..6bcbf694940 100644
--- a/components/util/opts.rs
+++ b/components/util/opts.rs
@@ -28,14 +28,14 @@ pub struct Opts {
/// How many threads to use for CPU painting (`-t`).
///
/// Note that painting is sequentialized when using GPU painting.
- pub paint_threads: uint,
+ pub paint_threads: usize,
/// True to use GPU painting via Skia-GL, false to use CPU painting via Skia (`-g`). Note that
/// compositing is always done on the GPU.
pub gpu_painting: bool,
/// The maximum size of each tile in pixels (`-s`).
- pub tile_size: uint,
+ pub tile_size: usize,
/// The ratio of device pixels per px at the default scale. If unspecified, will use the
/// platform default setting.
@@ -54,7 +54,7 @@ pub struct Opts {
/// The number of threads to use for layout (`-y`). Defaults to 1, which results in a recursive
/// sequential algorithm.
- pub layout_threads: uint,
+ pub layout_threads: usize,
pub nonincremental_layout: bool,
@@ -102,7 +102,7 @@ pub struct Opts {
pub devtools_port: Option<u16>,
/// The initial requested size of the window.
- pub initial_window_size: TypedSize2D<ScreenPx, uint>,
+ pub initial_window_size: TypedSize2D<ScreenPx, u32>,
/// An optional string allowing the user agent to be set for testing.
pub user_agent: Option<String>,
@@ -256,7 +256,7 @@ pub fn from_cmdline_args(args: &[String]) -> bool {
opt_match.free.clone()
};
- let tile_size: uint = match opt_match.opt_str("s") {
+ let tile_size: usize = match opt_match.opt_str("s") {
Some(tile_size_str) => tile_size_str.parse().unwrap(),
None => 512,
};
@@ -265,7 +265,7 @@ pub fn from_cmdline_args(args: &[String]) -> bool {
ScaleFactor(dppx_str.parse().unwrap())
);
- let mut paint_threads: uint = match opt_match.opt_str("t") {
+ let mut paint_threads: usize = match opt_match.opt_str("t") {
Some(paint_threads_str) => paint_threads_str.parse().unwrap(),
None => cmp::max(rt::default_sched_threads() * 3 / 4, 1),
};
@@ -280,7 +280,7 @@ pub fn from_cmdline_args(args: &[String]) -> bool {
let gpu_painting = !FORCE_CPU_PAINTING && opt_match.opt_present("g");
- let mut layout_threads: uint = match opt_match.opt_str("y") {
+ let mut layout_threads: usize = match opt_match.opt_str("y") {
Some(layout_threads_str) => layout_threads_str.parse().unwrap(),
None => cmp::max(rt::default_sched_threads() * 3 / 4, 1),
};
@@ -301,7 +301,7 @@ pub fn from_cmdline_args(args: &[String]) -> bool {
let initial_window_size = match opt_match.opt_str("resolution") {
Some(res_string) => {
- let res: Vec<uint> = res_string.split('x').map(|r| r.parse().unwrap()).collect();
+ let res: Vec<u32> = res_string.split('x').map(|r| r.parse().unwrap()).collect();
TypedSize2D(res[0], res[1])
}
None => {
diff --git a/components/util/persistent_list.rs b/components/util/persistent_list.rs
index f20edff3d38..e78dc3daa1e 100644
--- a/components/util/persistent_list.rs
+++ b/components/util/persistent_list.rs
@@ -9,7 +9,7 @@ use std::sync::Arc;
pub struct PersistentList<T> {
head: PersistentListLink<T>,
- length: uint,
+ length: usize,
}
struct PersistentListEntry<T> {
@@ -29,7 +29,7 @@ impl<T> PersistentList<T> where T: Send + Sync {
}
#[inline]
- pub fn len(&self) -> uint {
+ pub fn len(&self) -> usize {
self.length
}
diff --git a/components/util/taskpool.rs b/components/util/taskpool.rs
index 5572395fc98..d3f52c5018b 100644
--- a/components/util/taskpool.rs
+++ b/components/util/taskpool.rs
@@ -25,7 +25,7 @@ pub struct TaskPool {
}
impl TaskPool {
- pub fn new(tasks: uint) -> TaskPool {
+ pub fn new(tasks: u32) -> TaskPool {
assert!(tasks > 0);
let (tx, rx) = channel();
diff --git a/components/util/tid.rs b/components/util/tid.rs
index 7351f85f085..9a01a19f6ce 100644
--- a/components/util/tid.rs
+++ b/components/util/tid.rs
@@ -8,10 +8,10 @@ use std::cell::RefCell;
static mut next_tid: AtomicUsize = ATOMIC_USIZE_INIT;
-thread_local!(static TASK_LOCAL_TID: Rc<RefCell<Option<uint>>> = Rc::new(RefCell::new(None)));
+thread_local!(static TASK_LOCAL_TID: Rc<RefCell<Option<usize>>> = Rc::new(RefCell::new(None)));
/// Every task gets one, that's unique.
-pub fn tid() -> uint {
+pub fn tid() -> usize {
TASK_LOCAL_TID.with(|ref k| {
let ret =
match *k.borrow() {
diff --git a/components/util/time.rs b/components/util/time.rs
index 0a255f45bea..46de5abbceb 100644
--- a/components/util/time.rs
+++ b/components/util/time.rs
@@ -88,6 +88,7 @@ pub enum TimeProfilerCategory {
PaintingPerTile,
PaintingPrepBuff,
Painting,
+ ImageDecoding,
}
impl Formatable for TimeProfilerCategory {
@@ -125,6 +126,7 @@ impl Formatable for TimeProfilerCategory {
TimeProfilerCategory::PaintingPerTile => "Painting Per Tile",
TimeProfilerCategory::PaintingPrepBuff => "Buffer Prep",
TimeProfilerCategory::Painting => "Painting",
+ TimeProfilerCategory::ImageDecoding => "Image Decoding",
};
format!("{}{}", padding, name)
}
diff --git a/components/util/vec.rs b/components/util/vec.rs
index 960e7e8db1a..a1b07126e06 100644
--- a/components/util/vec.rs
+++ b/components/util/vec.rs
@@ -16,11 +16,11 @@ pub trait Comparator<K,T> {
pub trait BinarySearchMethods<'a, T: Ord + PartialOrd + PartialEq> {
fn binary_search_(&self, key: &T) -> Option<&'a T>;
- fn binary_search_index(&self, key: &T) -> Option<uint>;
+ fn binary_search_index(&self, key: &T) -> Option<usize>;
}
pub trait FullBinarySearchMethods<T> {
- fn binary_search_index_by<K,C:Comparator<K,T>>(&self, key: &K, cmp: C) -> Option<uint>;
+ fn binary_search_index_by<K,C:Comparator<K,T>>(&self, key: &K, cmp: C) -> Option<usize>;
}
impl<'a, T: Ord + PartialOrd + PartialEq> BinarySearchMethods<'a, T> for &'a [T] {
@@ -28,28 +28,28 @@ impl<'a, T: Ord + PartialOrd + PartialEq> BinarySearchMethods<'a, T> for &'a [T]
self.binary_search_index(key).map(|i| &self[i])
}
- fn binary_search_index(&self, key: &T) -> Option<uint> {
+ fn binary_search_index(&self, key: &T) -> Option<usize> {
self.binary_search_index_by(key, DefaultComparator)
}
}
impl<'a, T> FullBinarySearchMethods<T> for &'a [T] {
- fn binary_search_index_by<K,C:Comparator<K,T>>(&self, key: &K, cmp: C) -> Option<uint> {
+ fn binary_search_index_by<K,C:Comparator<K,T>>(&self, key: &K, cmp: C) -> Option<usize> {
if self.len() == 0 {
return None;
}
- let mut low : int = 0;
- let mut high : int = (self.len() as int) - 1;
+ let mut low : isize = 0;
+ let mut high : isize = (self.len() as isize) - 1;
while low <= high {
// http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html
- let mid = ((low as uint) + (high as uint)) >> 1;
+ let mid = ((low as usize) + (high as usize)) >> 1;
let midv = &self[mid];
match cmp.compare(key, midv) {
- Ordering::Greater => low = (mid as int) + 1,
- Ordering::Less => high = (mid as int) - 1,
+ Ordering::Greater => low = (mid as isize) + 1,
+ Ordering::Less => high = (mid as isize) - 1,
Ordering::Equal => return Some(mid),
}
}
diff --git a/components/util/workqueue.rs b/components/util/workqueue.rs
index ad39b1e349f..c24f40602f9 100644
--- a/components/util/workqueue.rs
+++ b/components/util/workqueue.rs
@@ -13,7 +13,7 @@ use task_state;
use libc::funcs::posix88::unistd::usleep;
use std::mem;
use rand::{Rng, weak_rng, XorShiftRng};
-use std::sync::atomic::{AtomicUint, Ordering};
+use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::mpsc::{channel, Sender, Receiver};
use deque::{Abort, BufferPool, Data, Empty, Stealer, Worker};
@@ -33,7 +33,7 @@ pub struct WorkUnit<QueueData, WorkData> {
/// Messages from the supervisor to the worker.
enum WorkerMsg<QueueData: 'static, WorkData: 'static> {
/// Tells the worker to start work.
- Start(Worker<WorkUnit<QueueData, WorkData>>, *mut AtomicUint, *const QueueData),
+ Start(Worker<WorkUnit<QueueData, WorkData>>, *mut AtomicUsize, *const QueueData),
/// Tells the worker to stop. It can be restarted again with a `WorkerMsg::Start`.
Stop,
/// Tells the worker thread to terminate.
@@ -45,7 +45,7 @@ unsafe impl<QueueData: 'static, WorkData: 'static> Send for WorkerMsg<QueueData,
/// Messages to the supervisor.
enum SupervisorMsg<QueueData: 'static, WorkData: 'static> {
Finished,
- ReturnDeque(uint, Worker<WorkUnit<QueueData, WorkData>>),
+ ReturnDeque(usize, Worker<WorkUnit<QueueData, WorkData>>),
}
unsafe impl<QueueData: 'static, WorkData: 'static> Send for SupervisorMsg<QueueData, WorkData> {}
@@ -63,7 +63,7 @@ struct WorkerInfo<QueueData: 'static, WorkData: 'static> {
/// Information specific to each worker thread that the thread keeps.
struct WorkerThread<QueueData: 'static, WorkData: 'static> {
/// The index of this worker.
- index: uint,
+ index: usize,
/// The communication port from the supervisor.
port: Receiver<WorkerMsg<QueueData, WorkData>>,
/// The communication channel on which messages are sent to the supervisor.
@@ -110,7 +110,7 @@ impl<QueueData: Send, WorkData: Send> WorkerThread<QueueData, WorkData> {
let mut i = 0;
let mut should_continue = true;
loop {
- let victim = (self.rng.next_u32() as uint) % self.other_deques.len();
+ let victim = (self.rng.next_u32() as usize) % self.other_deques.len();
match self.other_deques[victim].steal() {
Empty | Abort => {
// Continue.
@@ -179,7 +179,7 @@ impl<QueueData: Send, WorkData: Send> WorkerThread<QueueData, WorkData> {
/// A handle to the work queue that individual work units have.
pub struct WorkerProxy<'a, QueueData: 'a, WorkData: 'a> {
worker: &'a mut Worker<WorkUnit<QueueData, WorkData>>,
- ref_count: *mut AtomicUint,
+ ref_count: *mut AtomicUsize,
queue_data: *const QueueData,
worker_index: u8,
}
@@ -216,7 +216,7 @@ pub struct WorkQueue<QueueData: 'static, WorkData: 'static> {
/// A port on which deques can be received from the workers.
port: Receiver<SupervisorMsg<QueueData, WorkData>>,
/// The amount of work that has been enqueued.
- work_count: uint,
+ work_count: usize,
/// Arbitrary user data.
pub data: QueueData,
}
@@ -226,7 +226,7 @@ impl<QueueData: Send, WorkData: Send> WorkQueue<QueueData, WorkData> {
/// it.
pub fn new(task_name: &'static str,
state: task_state::TaskState,
- thread_count: uint,
+ thread_count: usize,
user_data: QueueData) -> WorkQueue<QueueData, WorkData> {
// Set up data structures.
let (supervisor_chan, supervisor_port) = channel();
@@ -295,7 +295,7 @@ impl<QueueData: Send, WorkData: Send> WorkQueue<QueueData, WorkData> {
/// Synchronously runs all the enqueued tasks and waits for them to complete.
pub fn run(&mut self) {
// Tell the workers to start.
- let mut work_count = AtomicUint::new(self.work_count);
+ let mut work_count = AtomicUsize::new(self.work_count);
for worker in self.workers.iter_mut() {
worker.chan.send(WorkerMsg::Start(worker.deque.take().unwrap(), &mut work_count, &self.data)).unwrap()
}
diff --git a/ports/gonk/src/lib.rs b/ports/gonk/src/lib.rs
index d3d729481bb..68e0c55de1a 100644
--- a/ports/gonk/src/lib.rs
+++ b/ports/gonk/src/lib.rs
@@ -94,9 +94,11 @@ impl<Window> Browser<Window> where Window: WindowMethods + 'static {
// image load or we risk emitting an output file missing the
// image.
let image_cache_task = if opts.output_file.is_some() {
- ImageCacheTask::new_sync(resource_task.clone(), shared_task_pool)
+ ImageCacheTask::new_sync(resource_task.clone(), shared_task_pool,
+ time_profiler_chan_clone.clone())
} else {
- ImageCacheTask::new(resource_task.clone(), shared_task_pool)
+ ImageCacheTask::new(resource_task.clone(), shared_task_pool,
+ time_profiler_chan_clone.clone())
};
let font_cache_task = FontCacheTask::new(resource_task.clone());
let storage_task = StorageTaskFactory::new();