servo/components/script/dom
bors-servo 944d371b8f Auto merge of #12563 - emilio:stylo, r=bholley,jdm,pcwalton
stylo: Improve restyling performance

This commit adds hooks to the Servo style traversal to avoid traversing all the
DOM for every restyle. Additionally it changes the behavior of the dirty flag to
be propagated top down, to prevent extra overhead when an element is dirtied.

This commit doesn't aim to change the behavior on Servo just yet, since Servo does extra job when dirtying the node related with DOM revision counters that might be necessary.

CC @asajeffrey for the DOM revision counters stuff. When a node is dirty, do all its descendants really need to increment the revision counter, or is this an unintended effect? My intuition is that this is hurting performance quite a lot for servo.

r? @bholley

<!-- Please describe your changes on the following line: -->

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors

<!-- Either: -->
- [x] These changes do not require tests because no geckolib tests yet.

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/12563)
<!-- Reviewable:end -->
2016-07-27 17:56:26 -05:00
..
bindings Auto merge of #12546 - malisas:malisa-bytestring-unions, r=KiChjang 2016-07-21 21:25:42 -05:00
webgl_validations webgl: Refactor texture validations to take advantage of rust type system 2016-06-25 00:03:15 +02:00
webidls Auto merge of #12594 - GuillaumeGomez:remove_row, r=Ms2ger 2016-07-27 11:29:21 -05:00
abstractworker.rs Make the service worker send custom response 2016-07-26 23:16:49 +05:30
abstractworkerglobalscope.rs implement related sw interface and register method 2016-06-02 04:09:39 +05:30
activation.rs Issue 8719: Add basic support for :active selector 2016-07-04 22:24:13 +01:00
attr.rs Stop re-exporting AttrValue. 2016-06-07 13:15:23 +02:00
beforeunloadevent.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
blob.rs Chunked ReadFile from file manager 2016-07-25 19:39:16 +02:00
bluetooth.rs Fix an incorect behavior, when converting optional services. 2016-06-06 10:12:31 +02:00
bluetoothadvertisingdata.rs Fix value types 2016-05-03 10:17:38 +02:00
bluetoothcharacteristicproperties.rs WebBluetooth API classes 2016-03-16 10:34:48 +01:00
bluetoothdevice.rs Remove empty lines following braces. 2016-05-27 13:32:05 -04:00
bluetoothremotegattcharacteristic.rs Remove some unnecessary pub modifiers (#50) 2016-07-14 10:35:06 +02:00
bluetoothremotegattdescriptor.rs Remove some unnecessary pub modifiers (#50) 2016-07-14 10:35:06 +02:00
bluetoothremotegattserver.rs Add WebBluetooth Blacklist support 2016-05-31 17:05:45 +02:00
bluetoothremotegattservice.rs Remove some unnecessary pub modifiers (#50) 2016-07-14 10:35:06 +02:00
bluetoothuuid.rs Remove empty lines following braces. 2016-05-27 13:32:05 -04:00
browsingcontext.rs Switch to using the new rooted!/RootedGuard API for rooting. 2016-07-04 20:59:01 +03:00
canvasgradient.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
canvaspattern.rs Add origin-clean flag tracking for canvas 2015-12-17 11:40:38 -08:00
canvasrenderingcontext2d.rs Move util::vec::byte_swap to canvas_traits 2016-07-04 16:48:15 +02:00
characterdata.rs Make /dom/nodes/CharacterData-surrogates.html not panic. 2016-05-24 16:08:01 +02:00
client.rs implement related sw interface and register method 2016-06-02 04:09:39 +05:30
closeevent.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
comment.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
console.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
create.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
crypto.rs Say farewell to in-tree HeapSizeOf 2016-02-04 22:03:32 +01:00
css.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
cssstyledeclaration.rs Auto merge of #11428 - g-k:csstext, r=SimonSapin 2016-06-01 01:59:12 -05:00
customevent.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
dedicatedworkerglobalscope.rs Auto merge of #12582 - creativcoder:sw-fetch, r=jdm 2016-07-26 22:54:56 -05:00
document.rs script: Unify LoadComplete and DOMLoad messages. 2016-07-27 11:14:47 -07:00
documentfragment.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
documenttype.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
domexception.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
domimplementation.rs script: Obtain referrer policy from header 2016-07-15 08:12:24 -07:00
domparser.rs script: Obtain referrer policy from header 2016-07-15 08:12:24 -07:00
dompoint.rs Add DOMQuad element 2015-12-18 17:37:10 +01:00
dompointreadonly.rs
domquad.rs Remove empty lines following braces. 2016-05-27 13:32:05 -04:00
domrect.rs
domrectlist.rs Remove JS::from_rooted 2016-05-31 14:43:58 +02:00
domrectreadonly.rs
domstringmap.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
domtokenlist.rs Move util::str to style 2016-07-05 10:43:54 +02:00
element.rs Replace AdjacentPosition::parse by TryFrom 2016-07-12 23:33:49 +02:00
errorevent.rs Switch to using the new rooted!/RootedGuard API for rooting. 2016-07-04 20:59:01 +03:00
event.rs Add event runnables 2016-07-11 22:21:45 -06:00
eventdispatcher.rs Use a stack guard and a macro for RootedVec instead of return_address. 2016-07-04 20:59:06 +03:00
eventsource.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
eventtarget.rs Switch to using the new rooted!/RootedGuard API for rooting. 2016-07-04 20:59:01 +03:00
file.rs Patches of File API 2016-07-21 20:52:00 +02:00
filelist.rs Remove JS::from_rooted 2016-05-31 14:43:58 +02:00
filereader.rs Implement file reading task source 2016-07-14 13:27:42 -04:00
focusevent.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
forcetouchevent.rs Remove empty lines following braces. 2016-05-27 13:32:05 -04:00
formdata.rs Remove DataSlice, fix #12249 2016-07-05 17:51:53 +08:00
hashchangeevent.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
headers.rs Small changes to Headers.webidl and headers.rs 2016-07-20 11:41:35 -07:00
history.rs Add History interface 2016-07-22 14:07:51 -06:00
htmlanchorelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlappletelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlareaelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlaudioelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlbaseelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlbodyelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlbrelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlbuttonelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlcanvaselement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlcollection.rs Add DeleteRow method 2016-07-27 02:06:26 +02:00
htmldataelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmldatalistelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmldetailselement.rs Make task queue API usable from non-main threads. 2016-07-14 13:27:41 -04:00
htmldialogelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmldirectoryelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmldivelement.rs Avoid memmove in HTMLDivElement constructor. 2016-07-10 10:24:16 -04:00
htmldlistelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlembedelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlfieldsetelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlfontelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlformcontrolscollection.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
htmlformelement.rs Make task queue API usable from non-main threads. 2016-07-14 13:27:41 -04:00
htmlframeelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlframesetelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlheadelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlheadingelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlhrelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlhtmlelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmliframeelement.rs Implement beginnings of joint session history 2016-07-21 20:51:38 -06:00
htmlimageelement.rs Make task queue API usable from non-main threads. 2016-07-14 13:27:41 -04:00
htmlinputelement.rs Put Blob URL online 2016-07-15 20:33:51 +08:00
htmllabelelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmllegendelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmllielement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmllinkelement.rs Remove some type aliases that are now just re-exports. 2016-07-20 08:42:47 +02:00
htmlmapelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlmediaelement.rs Implement Runnable trait name method for PauseIfNotInDocumentTask 2016-07-18 21:13:59 +02:00
htmlmetaelement.rs Remove some type aliases that are now just re-exports. 2016-07-20 08:42:47 +02:00
htmlmeterelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlmodelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlobjectelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlolistelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmloptgroupelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmloptionelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmloutputelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlparagraphelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlparamelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlpreelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlprogresselement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlquoteelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlscriptelement.rs Stop destructuring load in HTMLScriptElement::execute(). 2016-07-16 12:33:52 +02:00
htmlselectelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlsourceelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlspanelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlstyleelement.rs Remove some type aliases that are now just re-exports. 2016-07-20 08:42:47 +02:00
htmltablecaptionelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmltablecellelement.rs Stop re-exporting AttrValue. 2016-06-07 13:15:23 +02:00
htmltablecolelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmltabledatacellelement.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
htmltableelement.rs Add DeleteRow method 2016-07-27 02:06:26 +02:00
htmltableheadercellelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmltablerowelement.rs Stop re-exporting AttrValue. 2016-06-07 13:15:23 +02:00
htmltablesectionelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmltemplateelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmltextareaelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmltimeelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmltitleelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmltrackelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlulistelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlunknownelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
htmlvideoelement.rs Inline DOM element creation into box expressions in components/script/dom/ 2016-07-14 08:44:22 +02:00
imagedata.rs Update SpiderMonkey 2016-05-03 18:36:11 +02:00
keyboardevent.rs Make textinput handle actual key values. Don't restrict character values to a single byte. 2016-07-06 00:10:24 -04:00
location.rs Ensure that a navigation to the same URL is aborted. Fixes #10952. 2016-06-29 13:40:16 -04:00
macros.rs Use a stack guard and a macro for RootedVec instead of return_address. 2016-07-04 20:59:06 +03:00
mediaerror.rs Tidy fixes. 2016-05-03 18:05:27 -04:00
messageevent.rs Switch to using the new rooted!/RootedGuard API for rooting. 2016-07-04 20:59:01 +03:00
mimetype.rs Report use statements that use {} with only one entry 2016-05-27 10:18:44 +01:00
mimetypearray.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
mod.rs Add History interface 2016-07-22 14:07:51 -06:00
mouseevent.rs Refactor util::prefs operations to be methods on static struct. 2016-07-02 16:43:39 -04:00
namednodemap.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
navigator.rs implement related sw interface and register method 2016-06-02 04:09:39 +05:30
navigatorinfo.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
node.rs style: Remove a few more unuseful traversals now we can. 2016-07-27 11:14:45 -07:00
nodeiterator.rs Remove empty lines following braces. 2016-05-27 13:32:05 -04:00
nodelist.rs Update to rustc 2016-06-14. 2016-06-15 00:27:36 +01:00
pagetransitionevent.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
performance.rs Remove JS::from_rooted 2016-05-31 14:43:58 +02:00
performancetiming.rs Remove empty lines following braces. 2016-05-27 13:32:05 -04:00
plugin.rs Report use statements that use {} with only one entry 2016-05-27 10:18:44 +01:00
pluginarray.rs Remove empty lines following braces. 2016-05-27 13:32:05 -04:00
popstateevent.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
processinginstruction.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
progressevent.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
radionodelist.rs Remove JS::from_rooted 2016-05-31 14:43:58 +02:00
range.rs Use a stack guard and a macro for RootedVec instead of return_address. 2016-07-04 20:59:06 +03:00
screen.rs
serviceworker.rs Integrate service worker manager thread 2016-07-16 23:29:44 +05:30
serviceworkercontainer.rs Integrate service worker manager thread 2016-07-16 23:29:44 +05:30
serviceworkerglobalscope.rs Make the service worker send custom response 2016-07-26 23:16:49 +05:30
serviceworkerregistration.rs Integrate service worker manager thread 2016-07-16 23:29:44 +05:30
servohtmlparser.rs Improve page load error information 2016-07-21 16:06:13 +02:00
servoxmlparser.rs Auto merge of #10647 - ConnorGBrewster:parse_xml, r=jdm 2016-04-27 07:50:54 -07:00
storage.rs Make task queue API usable from non-main threads. 2016-07-14 13:27:41 -04:00
storageevent.rs Report use statements that use {} with only one entry 2016-05-27 10:18:44 +01:00
stylesheet.rs Report use statements that use {} with only one entry 2016-05-27 10:18:44 +01:00
stylesheetlist.rs servo: Clean up unused variables and imports 2016-04-02 16:30:18 +02:00
testbinding.rs Union types now allow ByteString 2016-07-21 19:19:12 -07:00
testbindingproxy.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
text.rs Report use statements that use {} with only one entry 2016-05-27 10:18:44 +01:00
textdecoder.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
textencoder.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
touch.rs
touchevent.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
touchlist.rs
treewalker.rs
uievent.rs Fix all the links to the UI Events spec 2016-06-04 16:04:35 +02:00
url.rs Put Blob URL online 2016-07-15 20:33:51 +08:00
urlhelper.rs Upgrade to rust-url 1.0 and hyper 0.9 2016-04-23 20:27:58 +02:00
urlsearchparams.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
userscripts.rs Use Result instead of panicking when the resource dir can't be found 2016-07-21 12:07:25 +05:30
validation.rs Implement initial pieces of form validation. 2016-03-24 09:07:38 -04:00
validitystate.rs Remove empty lines following braces. 2016-05-27 13:32:05 -04:00
values.rs
virtualmethods.rs Stop re-exporting AttrValue. 2016-06-07 13:15:23 +02:00
webglactiveinfo.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
webglbuffer.rs Use wrappers for GL IDs 2016-06-28 20:11:55 +02:00
webglcontextevent.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
webglframebuffer.rs Use wrappers for GL IDs 2016-06-28 20:11:55 +02:00
webglobject.rs
webglprogram.rs Use wrappers for GL IDs 2016-06-28 20:11:55 +02:00
webglrenderbuffer.rs Use wrappers for GL IDs 2016-06-28 20:11:55 +02:00
webglrenderingcontext.rs Auto merge of #12224 - nox:die-util-die, r=Ms2ger 2016-07-04 12:57:00 -07:00
webglshader.rs Use wrappers for GL IDs 2016-06-28 20:11:55 +02:00
webglshaderprecisionformat.rs
webgltexture.rs Use wrappers for GL IDs 2016-06-28 20:11:55 +02:00
webgluniformlocation.rs Use wrappers for GL IDs 2016-06-28 20:11:55 +02:00
websocket.rs Implemented name for Runnable trait in WebSocket Runnables 2016-07-23 23:27:31 +05:30
window.rs Auto merge of #12563 - emilio:stylo, r=bholley,jdm,pcwalton 2016-07-27 17:56:26 -05:00
worker.rs Implementing Close function and mark success tests. 2016-07-25 11:59:32 +08:00
workerglobalscope.rs Auto merge of #12501 - mephisto41:worker-close-impl, r=KiChjang 2016-07-25 19:34:36 -05:00
workerlocation.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
workernavigator.rs Move DOMString back to script 2016-05-24 10:54:57 +02:00
xmldocument.rs script: Obtain referrer policy from header 2016-07-15 08:12:24 -07:00
xmlhttprequest.rs Auto merge of #12467 - jeenalee:jeena-headersAPI, r=jdm 2016-07-20 16:24:48 -05:00
xmlhttprequesteventtarget.rs
xmlhttprequestupload.rs