michael@0: // |reftest| skip -- unreliable - based on GC timing michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: var BUGNUMBER = 383269; michael@0: var summary = 'Leak related to arguments object'; michael@0: var actual = 'No Leak'; michael@0: var expect = 'No Leak'; michael@0: michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: test(); michael@0: //----------------------------------------------------------------------------- michael@0: michael@0: function test() michael@0: { michael@0: enterFunc ('test'); michael@0: printBugNumber(BUGNUMBER); michael@0: printStatus (summary); michael@0: michael@0: function generate_big_object_graph() michael@0: { michael@0: var root = {}; michael@0: f(root, 17); michael@0: return root; michael@0: function f(parent, depth) { michael@0: if (depth == 0) michael@0: return; michael@0: --depth; michael@0: f(parent.a = {}, depth); michael@0: f(parent.b = {}, depth); michael@0: } michael@0: } michael@0: michael@0: function outer() { var x = arguments; return function inner() { return x }; } michael@0: michael@0: function timed_gc() michael@0: { michael@0: var t1 = Date.now(); michael@0: gc(); michael@0: return Date.now() - t1; michael@0: } michael@0: michael@0: outer(1); michael@0: gc(); michael@0: var base_time = timed_gc(); michael@0: michael@0: var f = outer(generate_big_object_graph()); michael@0: f = null; michael@0: gc(); michael@0: var time = timed_gc(); michael@0: michael@0: if (time > (base_time + 1) * 3) michael@0: actual = "generate_big_object_graph() leaked, base_gc_time="+base_time+", last_gc_time="+time; michael@0: michael@0: reportCompare(expect, actual, summary); michael@0: michael@0: exitFunc ('test'); michael@0: }