Subversion Repository Public Repository

litesoft

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
73
74
75
76
77
78
79
// This Source Code is in the Public Domain per: http://litesoft.org/License.txt
package org.litesoft.render;

import org.litesoft.commonfoundation.base.*;
import org.litesoft.core.delayed.*;

public class TicklerForRPM implements RenderProcessManager.Listener,
                                      TimedRunnable
{
    private final MillisecTimeSource mMillisecTimeSource;
    private final TimedRunner mTimedRunner;

    public TicklerForRPM( MillisecTimeSource pMillisecTimeSource, TimedRunner pTimedRunner )
    {
        mMillisecTimeSource = MillisecTimeSource.deNull( pMillisecTimeSource );
        mTimedRunner = pTimedRunner;
    }

    public TicklerForRPM( TimedRunner pTimedRunner )
    {
        this( null, 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 = mMillisecTimeSource.now();

        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 = mMillisecTimeSource.now();
        }
        while ( (zEnd - zStarted) < 5000 ); // 5 Secs Max at a time!

        mProcessing = false;
        return (zEnd + 50); // 50 millisecs
    }
}

Commits for litesoft/trunk/Java/core/Anywhere/src/org/litesoft/render/TicklerForRPM.java

Diff revisions: vs.
Revision Author Commited Message
942 Diff Diff GeorgeS picture GeorgeS Mon 02 Jun, 2014 23:41:46 +0000

Extracting commonfoundation

858 Diff Diff GeorgeS picture GeorgeS Sun 04 Nov, 2012 18:40:40 +0000
851 Diff Diff GeorgeS picture GeorgeS Mon 08 Oct, 2012 00:05:32 +0000

Breaking the code as Temporal changes are implemented...

819 Diff Diff GeorgeS picture GeorgeS Sat 18 Aug, 2012 18:09:40 +0000
151 Diff Diff GeorgeS picture GeorgeS Thu 17 Mar, 2011 04:16:22 +0000
49 Diff Diff GeorgeS picture GeorgeS Mon 12 Apr, 2010 02:59:10 +0000

License Text

2 GeorgeS picture GeorgeS Sun 07 Feb, 2010 12:50:58 +0000