test( 'NodeVisitor Heavy Static Scene', function () { var root = new Node(); mockupBench.addScene( root, 25, false, false ); var timed = Timer.instance().tick(); var visitor = new NodeVisitor(); console.profile(); console.time( 'time' ); var nCount = 20; for ( var n = 0; n < nCount; n++ ) { visitor.apply( root ); } console.timeEnd( 'time' ); console.profileEnd(); timed = Timer.instance().tick() - timed; reportStats( timed, 'Visitor Visiting' ); } );
var fn = Notify.console.timeEnd || function ( name ) { if ( times[ name ] === undefined ) return; var duration = Timer.instance().deltaM( times[ name ], Timer.instance().tick() ); Notify.debug( name + ': ' + duration + 'ms' ); times[ name ] = undefined; };
test('Full Frame ', function() { var canvas = mockup.createCanvas(true); var viewer = new mockup.Viewer(canvas); viewer.setupManipulator(); viewer.init(); viewer.frame(); var cullVisitor = viewer .getCamera() .getRenderer() .getCullVisitor(); var root = new Node(); // dreaded camera no modelview cullVisitor.pushProjectionMatrix(mat4.create()); cullVisitor.pushModelViewMatrix(mat4.create()); cullVisitor.pushModelViewMatrix(mat4.create()); mockupBench.addScene(root, 20, true, true); viewer.setSceneData(root); var fake = mat4.create(); // dreaded camera no modelview cullVisitor.pushProjectionMatrix(fake); cullVisitor.pushModelViewMatrix(fake); cullVisitor.pushModelViewMatrix(fake); // first frame for warm start // shadercompil and averaged stuff for (var k = 0; k < 10; k++) { viewer.frame(); } console.profile(); console.time('time'); var nCount = 20; var s = Timer.instance().tick(); for (var n = 0; n < nCount; n++) { viewer.frame(); } var result = Timer.instance().tick() - s; console.timeEnd('time'); console.profileEnd(); reportStats(result, 'perf Frame'); });
flushDeletedTextureObjects: function ( gl, availableTime ) { // if no time available don't try to flush objects. if ( availableTime <= 0.0 ) return availableTime; var nbTextures = this._orphanedTextureObjects.length; // Should we use a maxSizeTexturePool value? //var size = this.getProfile().getSize(); // We need to test if we have time to flush var elapsedTime = 0.0; var beginTime = Timer.instance().tick(); var i; for ( i = 0; i < nbTextures && elapsedTime < availableTime; i++ ) { gl.deleteTexture( this._orphanedTextureObjects[ i ].id() ); this._orphanedTextureObjects[ i ].reset(); elapsedTime = Timer.instance().deltaS( beginTime, Timer.instance().tick() ); } this._orphanedTextureObjects.splice( 0, i ); return availableTime - elapsedTime; },
test('CullVisitor Heavy Static Scene with 1 light And Shadows ', function() { var canvas = mockup.createCanvas(true); var viewer = new mockup.Viewer(canvas); viewer.setupManipulator(); viewer.init(); viewer.frame(); var cullVisitor = viewer .getCamera() .getRenderer() .getCullVisitor(); var root = new Node(); // dreaded camera no modelview cullVisitor.pushProjectionMatrix(mat4.create()); cullVisitor.pushModelViewMatrix(mat4.create()); cullVisitor.pushModelViewMatrix(mat4.create()); mockupBench.addScene(root, 20, true, true); var fake = mat4.create(); // dreaded camera no modelview cullVisitor.pushProjectionMatrix(fake); cullVisitor.pushModelViewMatrix(fake); cullVisitor.pushModelViewMatrix(fake); // viewer.setSceneData( root ); // viewer.getCamera().addChild( root ); // dreaded camera no modelview end console.profile(); console.time('time'); var timed = Timer.instance().tick(); var nCount = 10; for (var n = 0; n < nCount; n++) { // cullVisitor.apply(root); } timed = Timer.instance().tick() - timed; console.timeEnd('time'); console.profileEnd(); reportStats(timed, 'Main CullVisitor Loop scene + shadow Loop'); });
FrameBufferObject.flushDeletedGLRenderBuffers = function ( gl, availableTime ) { // if no time available don't try to flush objects. if ( availableTime <= 0.0 ) return availableTime; if ( !FrameBufferObject._sDeletedGLRenderBufferCache.has( gl ) ) return availableTime; var elapsedTime = 0.0; var beginTime = Timer.instance().tick(); var deleteList = FrameBufferObject._sDeletedGLRenderBufferCache.get( gl ); var numBuffers = deleteList.length; for ( var i = numBuffers - 1; i >= 0 && elapsedTime < availableTime; i-- ) { gl.deleteRenderbuffer( deleteList[ i ] ); deleteList.splice( i, 1 ); elapsedTime = Timer.instance().deltaS( beginTime, Timer.instance().tick() ); } return availableTime - elapsedTime; };
test( 'IntersectVisitor Heavy Static Scene', function () { this.timeout( 20000 ); var view = new View(); view.getCamera().setViewport( new Viewport() ); view.getCamera().setViewMatrix( Matrix.makeLookAt( Vec3.createAndSet( 0, 0, -10 ), Vec3.createAndSet( 0, 0, 0 ), Vec3.createAndSet( 0, 1, 0 ), Matrix.create() ) ); view.getCamera().setProjectionMatrix( Matrix.makePerspective( 60, 800 / 600, 0.1, 100.0, Matrix.create() ) ); // TODO it uses the old sync parseSceneGraphDeprecated var root = ReaderParser.parseSceneGraph( mockup.getScene() ); view.setSceneData( root ); mockupBench.addScene( root, 25, false, false ); var treeBuilder = new KdTreeBuilder( { _numVerticesProcessed: 0, _targetNumTrianglesPerLeaf: 50, _maxNumLevels: 20 } ); treeBuilder.apply( root ); var camera = new Camera(); camera.setViewport( new Viewport() ); camera.setViewMatrix( Matrix.makeLookAt( Vec3.createAndSet( 0, 0, -10 ), Vec3.createAndSet( 0, 0, 0 ), Vec3.createAndSet( 0, 1, 0 ), Matrix.create() ) ); camera.setProjectionMatrix( Matrix.makePerspective( 60, 800 / 600, 0.1, 100.0, Matrix.create() ) ); var result; var accum = 0; var nCount = 100; var x = new Array( nCount ); var y = new Array( nCount ); var n; for ( n = 0; n < nCount; n++ ) { x[ n ] = Math.random() * 800; y[ n ] = Math.random() * 600; } for ( n = 0; n < nCount; n++ ) { result = view.computeIntersections( x[ n ], y[ n ] ); accum += result.length; } var timed = Timer.instance().tick(); console.profile(); console.time( 'time' ); for ( n = 0; n < nCount; n++ ) { result = view.computeIntersections( x[ n ], y[ n ] ); accum += result.length; } console.timeEnd( 'time' ); console.profileEnd(); timed = Timer.instance().tick() - timed; module.accum = accum; // keep the variable on a scope to avoid JIT otimimization and remove code reportStats( timed, 'IntersectVisitor Visiting' ); } );
var fn = Notify.console.time || function ( name ) { times[ name ] = Timer.instance().tick(); };