|
import * as util from '../../../util'; |
|
|
|
var BRp = {}; |
|
|
|
BRp.timeToRender = function(){ |
|
return this.redrawTotalTime / this.redrawCount; |
|
}; |
|
|
|
BRp.redraw = function( options ){ |
|
options = options || util.staticEmptyObject(); |
|
|
|
var r = this; |
|
|
|
if( r.averageRedrawTime === undefined ){ r.averageRedrawTime = 0; } |
|
if( r.lastRedrawTime === undefined ){ r.lastRedrawTime = 0; } |
|
if( r.lastDrawTime === undefined ){ r.lastDrawTime = 0; } |
|
|
|
r.requestedFrame = true; |
|
r.renderOptions = options; |
|
}; |
|
|
|
BRp.beforeRender = function( fn, priority ){ |
|
|
|
if( this.destroyed ){ return; } |
|
|
|
if( priority == null ){ |
|
util.error('Priority is not optional for beforeRender'); |
|
} |
|
|
|
var cbs = this.beforeRenderCallbacks; |
|
|
|
cbs.push({ fn: fn, priority: priority }); |
|
|
|
|
|
cbs.sort(function( a, b ){ return b.priority - a.priority; }); |
|
}; |
|
|
|
var beforeRenderCallbacks = function( r, willDraw, startTime ){ |
|
var cbs = r.beforeRenderCallbacks; |
|
|
|
for( var i = 0; i < cbs.length; i++ ){ |
|
cbs[i].fn( willDraw, startTime ); |
|
} |
|
}; |
|
|
|
BRp.startRenderLoop = function(){ |
|
var r = this; |
|
var cy = r.cy; |
|
|
|
if( r.renderLoopStarted ){ |
|
return; |
|
} else { |
|
r.renderLoopStarted = true; |
|
} |
|
|
|
var renderFn = function( requestTime ){ |
|
if( r.destroyed ){ return; } |
|
|
|
if( cy.batching() ){ |
|
|
|
|
|
|
|
} else if( r.requestedFrame && !r.skipFrame ){ |
|
beforeRenderCallbacks( r, true, requestTime ); |
|
|
|
var startTime = util.performanceNow(); |
|
|
|
r.render( r.renderOptions ); |
|
|
|
var endTime = r.lastDrawTime = util.performanceNow(); |
|
|
|
if( r.averageRedrawTime === undefined ){ |
|
r.averageRedrawTime = endTime - startTime; |
|
} |
|
|
|
if( r.redrawCount === undefined ){ |
|
r.redrawCount = 0; |
|
} |
|
|
|
r.redrawCount++; |
|
|
|
if( r.redrawTotalTime === undefined ){ |
|
r.redrawTotalTime = 0; |
|
} |
|
|
|
var duration = endTime - startTime; |
|
|
|
r.redrawTotalTime += duration; |
|
r.lastRedrawTime = duration; |
|
|
|
|
|
r.averageRedrawTime = r.averageRedrawTime / 2 + duration / 2; |
|
|
|
r.requestedFrame = false; |
|
} else { |
|
beforeRenderCallbacks( r, false, requestTime ); |
|
} |
|
|
|
r.skipFrame = false; |
|
|
|
util.requestAnimationFrame( renderFn ); |
|
}; |
|
|
|
util.requestAnimationFrame( renderFn ); |
|
|
|
}; |
|
|
|
export default BRp; |
|
|