diff options
author | Michael Howell <michael@notriddle.com> | 2015-07-19 17:44:48 -0700 |
---|---|---|
committer | Michael Howell <michael@notriddle.com> | 2015-07-22 10:53:50 -0700 |
commit | 402a2a8717e7ded0ff750af21466151c35a4f6f6 (patch) | |
tree | b05ed93944a0d785adbd615be3bf0445d5301647 /components/script | |
parent | 36d732a60a39140806b4113d58a6b00e6b1931da (diff) | |
download | servo-402a2a8717e7ded0ff750af21466151c35a4f6f6.tar.gz servo-402a2a8717e7ded0ff750af21466151c35a4f6f6.zip |
Optimize `Node.normalize()`.
Do not copy the discarded node's text data, borrow it.
Closes #6658.
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/characterdata.rs | 7 | ||||
-rw-r--r-- | components/script/dom/node.rs | 3 |
2 files changed, 7 insertions, 3 deletions
diff --git a/components/script/dom/characterdata.rs b/components/script/dom/characterdata.rs index 707a801f70f..dead19c79b6 100644 --- a/components/script/dom/characterdata.rs +++ b/components/script/dom/characterdata.rs @@ -79,7 +79,7 @@ impl<'a> CharacterDataMethods for &'a CharacterData { // https://dom.spec.whatwg.org/#dom-characterdata-appenddatadata fn AppendData(self, data: DOMString) { - self.data.borrow_mut().push_str(&data); + self.append_data(&*data); } // https://dom.spec.whatwg.org/#dom-characterdata-insertdataoffset-data @@ -159,6 +159,7 @@ pub enum CharacterDataTypeId { pub trait CharacterDataHelpers<'a> { fn data(self) -> Ref<'a, DOMString>; + fn append_data(self, data: &str); } impl<'a> CharacterDataHelpers<'a> for &'a CharacterData { @@ -166,6 +167,10 @@ impl<'a> CharacterDataHelpers<'a> for &'a CharacterData { fn data(self) -> Ref<'a, DOMString> { self.data.borrow() } + #[inline] + fn append_data(self, data: &str) { + self.data.borrow_mut().push_str(data) + } } #[allow(unsafe_code)] diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 26af6bb225d..ab48fcd1e35 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -2330,10 +2330,9 @@ impl<'a> NodeMethods for &'a Node { } else { match prev_text { Some(ref text_node) => { - let text_node = text_node.clone(); let prev_characterdata = CharacterDataCast::from_ref(text_node.r()); - let _ = prev_characterdata.AppendData(characterdata.Data()); + prev_characterdata.append_data(&**characterdata.data()); self.remove_child(child.r()); }, None => prev_text = Some(Root::from_ref(text)) |