update customElementsTakeRecords

Revert "Revert "update platform.js to get memory leak fixes""

R=jmesserly@google.com

Review URL: https://codereview.chromium.org//617413002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40854 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
jakemac@google.com
2014-10-01 20:55:45 +00:00
parent 7d8c6d3a73
commit aedbb32333
8 changed files with 64 additions and 39 deletions
+11
View File
@@ -1,3 +1,14 @@
#### Pub version 0.8.0
* Re-apply changes from 0.7.1+1 and also cherry pick
[efdbbc](https://github.com/polymer/CustomElements/commit/efdbbc) to fix
the customElementsTakeRecords function.
* **Breaking Change** The customElementsTakeRecords function now has an
an optional argument `node`. There is no longer a single global observer,
but one for each ShadowRoot and one for the main document. The observer that
is actually used defaults to the main document, but if `node` is supplied
then it will walk up the document tree and use the first observer that it
finds.
#### Pub version 0.7.1+2
* Revert the change from 0.7.1+1 due to redness in FF/Safari/IE.
+7 -7
View File
@@ -1,28 +1,28 @@
BUILD LOG
---------
Build Time: 2014-09-22T10:39:00
Build Time: 2014-10-01T13:14:41
NODEJS INFORMATION
==================
nodejs: v0.10.29
chai: 1.9.1
grunt: 0.4.5
grunt-concat-sourcemap: 0.4.3
grunt-audit: 0.0.3
grunt-concat-sourcemap: 0.4.3
grunt-contrib-concat: 0.4.0
grunt-contrib-uglify: 0.5.1
grunt-karma: 0.8.3
karma: 0.12.22
karma-crbot-reporter: 0.0.4
karma-firefox-launcher: 0.1.3
karma-ie-launcher: 0.1.5
karma-mocha: 0.1.9
karma-safari-launcher: 0.1.1
mocha: 1.21.4
karma-crbot-reporter: 0.0.4
karma: 0.12.22
karma-mocha: 0.1.9
REPO REVISIONS
==============
CustomElements: 85981b0986799744f452bd71ee6170f9d05851ac
CustomElements: a9abaa0c9fd8c8faa86b77f1f7353dd91c164df0
HTMLImports: 77efd89e04ae63a3ee7c88cb7e1d2784cf60dcb1
ShadowDOM: bb82f0b0d361e90ca5efb1c59dd44c976ffeffb4
URL: 35e0e6aaab5979d277afa4822a2776a7fb7562ba
@@ -30,4 +30,4 @@ platform-dev: d214582dd9537aa4cf0d6034d33c071be2970a66
BUILD HASHES
============
build/platform.js: fe9dc71d22c46bb23f01014e77cdda430227b114
build/platform.js: 52a8bcc635d3db0f494ae6ad4c8303c99a045855
+34 -19
View File
@@ -2317,7 +2317,13 @@ window.ShadowDOMPolyfill = {};
var globalMutationObservers = [];
var isScheduled = false;
function scheduleCallback() {
function scheduleCallback(observer) {
if (observer.scheduled_)
return;
observer.scheduled_ = true;
globalMutationObservers.push(observer);
if (isScheduled)
return;
setEndOfMicrotask(notifyObservers);
@@ -2337,6 +2343,7 @@ window.ShadowDOMPolyfill = {};
for (var i = 0; i < notifyList.length; i++) {
var mo = notifyList[i];
mo.scheduled_ = false;
var queue = mo.takeRecords();
removeTransientObserversFor(mo);
if (queue.length) {
@@ -2452,8 +2459,6 @@ window.ShadowDOMPolyfill = {};
}
}
var anyObserversEnqueued = false;
// 4.
for (var uid in interestedObservers) {
var observer = interestedObservers[uid];
@@ -2486,15 +2491,9 @@ window.ShadowDOMPolyfill = {};
record.oldValue = associatedStrings[uid];
// 8.
if (!observer.records_.length) {
globalMutationObservers.push(observer);
anyObserversEnqueued = true;
}
scheduleCallback(observer);
observer.records_.push(record);
}
if (anyObserversEnqueued)
scheduleCallback();
}
var slice = Array.prototype.slice;
@@ -2557,6 +2556,7 @@ window.ShadowDOMPolyfill = {};
this.nodes_ = [];
this.records_ = [];
this.uid_ = ++uidCounter;
this.scheduled_ = false;
}
MutationObserver.prototype = {
@@ -2642,6 +2642,10 @@ window.ShadowDOMPolyfill = {};
if (node === this.target)
return;
// Make sure we remove transient observers at the end of microtask, even
// if we didn't get any change records.
scheduleCallback(this.observer);
this.transientObservedNodes.push(node);
var registrations = registrationsTable.get(node);
if (!registrations)
@@ -11373,10 +11377,7 @@ function watchShadow(node) {
}
function watchRoot(root) {
if (!root.__watched) {
observe(root);
root.__watched = true;
}
observe(root);
}
function handler(mutations) {
@@ -11421,18 +11422,32 @@ function handler(mutations) {
logFlags.dom && console.groupEnd();
};
var observer = new MutationObserver(handler);
function takeRecords(node) {
// If the optional node is not supplied, assume we mean the whole document.
if (!node) node = wrapIfNeeded(document);
function takeRecords() {
// TODO(sjmiles): ask Raf why we have to call handler ourselves
handler(observer.takeRecords());
takeMutations();
// Find the root of the tree, which will be an Document or ShadowRoot.
while (node.parentNode) {
node = node.parentNode;
}
var observer = node.__observer;
if (observer) {
handler(observer.takeRecords());
takeMutations();
}
}
var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);
function observe(inRoot) {
if (inRoot.__observer) return;
// For each ShadowRoot, we create a new MutationObserver, so the root can be
// garbage collected once all references to the `inRoot` node are gone.
var observer = new MutationObserver(handler);
observer.observe(inRoot, {childList: true, subtree: true});
inRoot.__observer = observer;
}
function observeDocument(doc) {
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+3 -4
View File
@@ -54,9 +54,8 @@ bool get _isReady {
* This method can be used to resolve differences in timing between native and
* polyfilled custom elements.
*/
void customElementsTakeRecords() {
void customElementsTakeRecords([Node node]) {
var customElements = js.context['CustomElements'];
if (customElements != null) {
customElements.callMethod('takeRecords');
}
if (customElements == null) return;
customElements.callMethod('takeRecords', [node]);
}
+1 -1
View File
@@ -1,5 +1,5 @@
name: web_components
version: 0.7.1+2
version: 0.8.0
author: Polymer.dart Authors <web-ui-dev@dartlang.org>
homepage: https://www.dartlang.org/polymer-dart/
description: >