question: public void run ( ) { long last = 0 ; while ( isConnected ( ) ) { try { Thread . sleep ( 250 ) ; } catch ( InterruptedException ie ) { } try { long current = m_protocol . messagesReceived ( ) ; long delta = last - current ; last = current ; if ( ! m_lastResponse || ( ! isSuspended ( ) && delta > 5 ) ) throw new NotSuspendedException ( ) ; for ( Isolate isolate : m_manager . getIsolates ( ) ) { int isolateId = isolate . getId ( ) ; if ( isolateId != Isolate . DEFAULT_ID && ! isWorkerSuspended ( isolateId ) && delta > 5 ) { throw new NotSuspendedException ( ) ; } int count = m_manager . getSwfInfoCount ( isolateId ) ; for ( int i = 0 ; i < count ; i ++ ) { DSwfInfo info = m_manager . getSwfInfo ( i , isolateId ) ; if ( info == null || info . isUnloaded ( ) || info . isPopulated ( ) || ( info . getVmVersion ( ) > 0 ) ) continue ; info . getSwdSize ( this ) ; if ( info . getVmVersion ( ) > 0 ) { info . setPopulated ( ) ; continue ; } if ( ! info . isSwdLoading ( ) && ! info . isUnloaded ( ) ) { if ( info . getSwf ( ) == null && ! info . isUnloaded ( ) ) info . setSwf ( requestSwf ( i ) ) ; if ( info . getSwd ( ) == null && ! info . isUnloaded ( ) ) info . setSwd ( requestSwd ( i ) ) ; try { if ( ! info . isUnloaded ( ) ) info . parseSwfSwd ( m_manager ) ; } catch ( Throwable e ) { if ( Trace . error ) { Trace . trace ( "Error while parsing swf/swd '" + info . getUrl ( ) + "'. Giving up and marking it processed" ) ; e . printStackTrace ( ) ; } info . setPopulated ( ) ; } } } } } catch ( InProgressException ipe ) { } catch ( NoResponseException nre ) { } catch ( NotSuspendedException nse ) { } catch ( Exception e ) { if ( Trace . error ) { Trace . trace ( "Exception in background swf/swd processing thread" ) ; e . printStackTrace ( ) ; } } } }
target:  A background thread which wakes up periodically and fetches the SWF and SWD from the Player for new movies that have loaded.  It then uses these to create an instance of MovieMetaData (a class shared with the Profiler) from which fdb can cull function names. This work is done on a background thread because it can take several seconds, and we want the fdb user to be able to execute other commands while it is happening.