| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <html> | 2 <html> |
| 3 <body> | 3 <body> |
| 4 <script src="../../../resources/js-test.js"></script> | 4 <script src="../../../resources/js-test.js"></script> |
| 5 <script> | 5 <script> |
| 6 var callbackWasTriggered = false; | 6 var callbackWasTriggered = false; |
| 7 | 7 |
| 8 var callback = function(node) { | 8 var callback = function(node) { |
| 9 callbackWasTriggered = true; | 9 callbackWasTriggered = true; |
| 10 return NodeFilter.FILTER_ACCEPT; | 10 return NodeFilter.FILTER_ACCEPT; |
| 11 }; | 11 }; |
| 12 var nodeIterator = document.createNodeIterator(document, NodeFilter.SHOW_ELE
MENT, callback, false); | |
| 13 | 12 |
| 14 // Do not pass the object as a parameter to observeGC function. This may | 13 var nodeIterator, callbackObservation, nodeFilterObservation, nodeIteratorOb
servation; |
| 15 // remain live on this function's stack preventing GC from collecting | |
| 16 // it. Accessing the object inside an inner function will prevent any | |
| 17 // unneeded references on this function's stack. | |
| 18 var callbackObservation = internals.observeGC((() => {return callback;})()); | |
| 19 callback = null; | |
| 20 var nodeFilterObservation = internals.observeGC((() => {return nodeIterator.
filter;})()); | |
| 21 var nodeIteratorObservation = internals.observeGC((() => {return nodeIterato
r;})()); | |
| 22 | 14 |
| 15 // Do initialization work in an inner function to avoid references to |
| 16 // objects remaining live on this function's stack frame. |
| 17 // (http://crbug.com/595672/). |
| 18 function initialize() { |
| 19 nodeIterator = document.createNodeIterator(document, |
| 20 NodeFilter.SHOW_ELEMENT, callback, false); |
| 21 callbackObservation = internals.observeGC(callback); |
| 22 callback = null; |
| 23 nodeFilterObservation = internals.observeGC(nodeIterator.filter); |
| 24 nodeIteratorObservation = internals.observeGC(nodeIterator); |
| 25 } |
| 26 |
| 27 initialize(); |
| 23 gc(); | 28 gc(); |
| 24 shouldBeFalse('nodeFilterObservation.wasCollected'); | 29 shouldBeFalse('nodeFilterObservation.wasCollected'); |
| 25 shouldBeFalse('callbackObservation.wasCollected'); | 30 shouldBeFalse('callbackObservation.wasCollected'); |
| 26 | 31 |
| 27 nodeIterator.nextNode(); | 32 nodeIterator.nextNode(); |
| 28 shouldBeTrue('callbackWasTriggered'); | 33 shouldBeTrue('callbackWasTriggered'); |
| 29 | 34 |
| 30 nodeIterator = null; | 35 nodeIterator = null; |
| 31 gc(); | 36 gc(); |
| 32 shouldBeTrue('nodeIteratorObservation.wasCollected'); | 37 shouldBeTrue('nodeIteratorObservation.wasCollected'); |
| 33 shouldBeTrue('nodeFilterObservation.wasCollected'); | 38 shouldBeTrue('nodeFilterObservation.wasCollected'); |
| 34 shouldBeTrue('callbackObservation.wasCollected'); | 39 shouldBeTrue('callbackObservation.wasCollected'); |
| 35 </script> | 40 </script> |
| 36 </body> | 41 </body> |
| 37 </html> | 42 </html> |
| OLD | NEW |