litesoft
@ 947
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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
// This Source Code is in the Public Domain per: http://unlicense.org package org.litesoft.render; import java.util.*; public abstract class AbstractRHPwithDependencies extends RenderHelperProcess implements RenderHelperCallback { private RenderHelperProcess[] mDependendsOn; public AbstractRHPwithDependencies( String pName, AbstractSizableRenderHelper pRenderHelper, RenderHelperProcess... pDependendsOn ) { super( pName, pRenderHelper ); mDependendsOn = (pDependendsOn != null) ? pDependendsOn : EMPTY_ARRAY; } private final Set<RenderHelperProcess> mActiveDependsOn = new HashSet<RenderHelperProcess>(); private boolean areAnyActiveDependsOn() { synchronized ( mActiveDependsOn ) { return !mActiveDependsOn.isEmpty(); } } public RenderProcessResult deferPending( RenderHelperProcess pDependsOnProcess ) { synchronized ( mActiveDependsOn ) { mActiveDependsOn.add( pDependsOnProcess ); // System.out.println( "+++Pending: " + pDependsOnProcess + "\n now " + mActiveDependsOn.size() + " on: " + this + "\n" ); } pDependsOnProcess.addCallback( this ); RenderProcessManager.INSTANCE.deferPending( this, pDependsOnProcess ); return RenderProcessResult.Requeued; } public void processCompleted( RenderHelperProcess pCompletedProcess, RenderProcessResult pCompletedProcessResult ) { synchronized ( mActiveDependsOn ) { mActiveDependsOn.remove( pCompletedProcess ); // System.out.println( "---Pending: " + pCompletedProcess + "\n now " + mActiveDependsOn.size() + " on: " + this + "\n" ); } if ( !isDependentProcessingNeededWithRegistration() ) { RenderProcessManager.INSTANCE.release( this ); } } protected boolean isDependentProcessingNeeded() { if ( areAnyActiveDependsOn() ) { return true; } for ( RenderHelperProcess zProcess : mDependendsOn ) { if ( zProcess.isProcessingNeeded() ) { return true; } } return false; } protected boolean isDependentProcessingNeededWithRegistration() { if ( areAnyActiveDependsOn() ) { return true; } boolean anyDependencies = false; for ( RenderHelperProcess zProcess : mDependendsOn ) { if ( zProcess.isProcessingNeeded() ) { anyDependencies = true; deferPending( zProcess ); } } return anyDependencies; } @SuppressWarnings({"SimplifiableIfStatement"}) protected final RenderProcessResult LLprocess() { if ( isDependentProcessingNeededWithRegistration() ) { return RenderProcessResult.Requeued; } if ( LLisProcessingNeededWithDependenciesSatisfied() ) { return LLprocessWithProcessingNeededAndDependenciesSatisfied(); } return RenderProcessResult.Completed; } protected boolean LLisProcessingNeeded() { return isDependentProcessingNeeded() || LLisProcessingNeededWithDependenciesSatisfied(); } abstract protected RenderProcessResult LLprocessWithProcessingNeededAndDependenciesSatisfied(); abstract protected boolean LLisProcessingNeededWithDependenciesSatisfied(); protected AbstractSizableRenderHelper getAbstractSizableRenderHelper() { return (AbstractSizableRenderHelper) mRenderHelper; } } |