Mercurial > MadButterfly
view nodejs/examples/simple/testleak.js @ 1160:1a699dc00fa3
Fix the issue of not removing node in old scene when switching scenes.
- When a timeline is playing and crossing two scenes (tween block),
nodes, for the old scene, in duplicate group must be removed. But,
it is not.
- It is fixed by checking if nodes, in the duplicate group, are also
in the key frame next to the new scene. All nodes that is not in
next key frame are remove.
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Tue, 28 Dec 2010 13:35:34 +0800 |
parents | a74b4d986a91 |
children |
line wrap: on
line source
// -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*- // vim: sw=4:ts=8:sts=4 var mbfly = require("mbfly"); var sys = require("sys"); var cproc = require("child_process"); function testcase1() { var mbrt = new mbfly.mb_rt(":32.0", 300, 200); var root = mbrt.root; var coords = []; var coord; var i; while(true) { for(i = 0; i < 200; i++) { coords.push(mbrt.coord_new(root)); } mbrt.redraw_changed(); mbrt.flush(); while(coords.length > 0) { coord = coords.pop(); coord.remove(); } } } function testcase2() { var mbrt = new mbfly.mb_rt(":32.0", 300, 200); var root = mbrt.root; var coords = []; var coord; var i, j; while(true) { for(i = 0; i < 200; i++) { coords.push(mbrt.coord_new(root)); for(j = 0; j < 10; j++) coord = mbrt.coord_new(coords[i]); } mbrt.redraw_changed(); mbrt.flush(); while(coords.length > 0) { coord = coords.pop(); coord.remove(); } } } function testcase3() { var mbrt = new mbfly.mb_rt(":32.0", 300, 200); var root = mbrt.root; var coords = []; var coord; var shape; var i, j; while(true) { for(i = 0; i < 200; i++) { coords.push(mbrt.coord_new(root)); for(j = 0; j < 10; j++) { coord = mbrt.coord_new(coords[i]); shape = mbrt.rect_new(15, 15, 20, 20, 0, 0); coord.add_shape(shape); } } mbrt.redraw_changed(); mbrt.flush(); while(coords.length > 0) { coord = coords.pop(); coord.remove(); } } } function testcase4() { var mbrt = new mbfly.mb_rt(":32.0", 300, 200); var root = mbrt.root; var coords = []; var coord; var shape; var i, j; while(true) { for(i = 0; i < 200; i++) { coords.push(mbrt.coord_new(root)); for(j = 0; j < 10; j++) { coord = mbrt.coord_new(coords[i]); shape = mbrt.path_new("m 10,10 l 55,27 l -30,-3 z"); coord.add_shape(shape); } } mbrt.redraw_changed(); mbrt.flush(); while(coords.length > 0) { coord = coords.pop(); coord.remove(); } } } function testcase5() { var mbrt = new mbfly.mb_rt(":32.0", 300, 200); var root = mbrt.root; var paint; while(true) { paint = mbrt.paint_color_new(0.5, 0.5, 0.5, 1); } } function testcase6() { var mbrt = new mbfly.mb_rt(":32.0", 300, 200); var root = mbrt.root; var coords = []; var coord; var shape; var paint; var i, j; while(true) { for(i = 0; i < 200; i++) { coords.push(mbrt.coord_new(root)); /* Paint is free, but rdman is dirty */ paint = mbrt.paint_color_new(0.5, 0.5, 0.5, 1); for(j = 0; j < 10; j++) { coord = mbrt.coord_new(coords[i]); shape = mbrt.rect_new(5, 5, 20, 20, 0, 0); coord.add_shape(shape); } } mbrt.redraw_changed(); mbrt.flush(); while(coords.length > 0) { coord = coords.pop(); coord.remove(); } } } function testcase7() { var mbrt = new mbfly.mb_rt(":32.0", 300, 200); var root = mbrt.root; var coords = []; var coord; var shape; var paint; var i, j; while(true) { for(i = 0; i < 200; i++) { coords.push(mbrt.coord_new(root)); for(j = 0; j < 10; j++) { /* paint is not free, and rdman is dirty */ paint = mbrt.paint_color_new(0.5, 0.5, 0.5, 1); coord = mbrt.coord_new(coords[i]); shape = mbrt.path_new("M 100,100 L 30,30 L 0,30 z"); coord.add_shape(shape); paint.stroke(shape); } } mbrt.redraw_changed(); mbrt.flush(); while(coords.length > 0) { coord = coords.pop(); coord.remove(); } } } cproc.exec("killall -9 Xvfb; Xvfb :32 -screen 0 800x600x24"); setTimeout(function() { if(process.argv.length == 1) testcase1(); else if(process.argv.length == 3) { sys.puts("testcase " + process.argv[2]); switch(process.argv[2]) { case "1": testcase1(); break; case "2": testcase2(); break; case "3": testcase3(); break; case "4": testcase4(); break; case "5": testcase5(); break; case "6": testcase6(); break; case "7": testcase7(); break; default: sys.puts("Usage: node testleak.js [1|2|3...7]"); } } else sys.puts("Usage: node testleak.js [1|2|3...7]"); cproc.exec("killall -9 Xvfb"); }, 1500);