litesoft
@ 819
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
// This Source Code is in the Public Domain per: http://litesoft.org/License.txt package org.litesoft.render; import org.litesoft.core.delayed.*; import org.litesoft.core.typeutils.*; public class TicklerForRPM implements RenderProcessManager.Listener, TimedRunnable { private TimedRunner mTimedRunner; public TicklerForRPM( TimedRunner pTimedRunner ) { mTimedRunner = pTimedRunner; } public Again runOnce() { if ( !mProcessing ) { Long zNextTime = process(); if ( zNextTime != null ) { return new RunAgainOnOrAfter( zNextTime ); } } return null; } public void processManagerNowHasProcesses() { if ( !mProcessing ) { mTimedRunner.runIn( this, 1 ); // Defer queue processing until current thread is complete // Use to execute immediately - but that caused certain Callbacks to be added AFTER the process had completed! //Long zNextTime = process(); //if ( zNextTime != null ) //{ // mTimedRunner.runOnOrAfter( this, zNextTime ); //} } } private boolean mProcessing = false; private Long process() { mProcessing = true; long zEnd, zStarted = Dates.now().getTime(); RenderProcessManager zRPM = RenderProcessManager.INSTANCE; do { for ( int i = 0; i < 100; i++ ) { RenderHelperProcess zProcess = zRPM.first(); if ( zProcess == null ) { mProcessing = false; return zRPM.whenIsNextDeferredProcess(); } zProcess.process(); } zEnd = Dates.now().getTime(); } while ( (zEnd - zStarted) < 5000 ); // 5 Secs Max at a time! mProcessing = false; return (zEnd + 50); // 50 millisecs } } |