Bug 167893 [Workbench] [RCP]Create an org.eclipse.ui.ide.application plug-in
M4 We have many situations where people want to use our resource based APIs but cannot due to a required dependency on the IDE application. Likewise we have code in the IDE that would like to use other plug-in but cannot due to a circular dependency (specifically the Common Navigator requires the resource parts of the IDE so we can't use it in the IDE without the circular dependency). Looking at the code in IDE the vast majority of it could be moved to a resources based plug-in with only a small amount left in IDE to support the IDE application and the Resource Perspective. This would allow 1) RCP apps to use our views like the Problems View with thier own application. Right now many are forced to subclass our (internal) application class to get this to work. 2) The resource navigator to rely only on the new org,eclipse.ui.workbench.resources plug-in thereby allowing the IDE to refer to it.
bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEIdleHelper.java
*  - Never gc if there is a test harness present
 *  - Don't gc if background jobs are running
 *  - Don't gc if the keyboard or mouse have been active within IDLE_INTERVAL
 *  - Don't gc if there has been a GC within the minimum gc interval (system property PROP_GC_INTERVAL)
 *  - After a gc, don't gc again until (duration * GC_DELAY_MULTIPLIER) has elapsed.
 *    For example, if a GC takes 100ms and the multiplier is 60, don't gc for at least five seconds
 *  - Never gc again if any single gc takes longer than system property PROP_GC_MAX
 */
class IDEIdleHelper {
	/**
	 * The default minimum time between garbage collections.
	 */
	private static final int DEFAULT_GC_INTERVAL = 60000;
	/**
	 * The default maximum duration for a garbage collection, beyond which
	 * the explicit gc mechanism is automatically disabled.
	 */
	private static final int DEFAULT_GC_MAX = 8000;
	/**
	 * The multiple of the last gc duration before we will consider doing
	 * another one.
	 */
	private static final int GC_DELAY_MULTIPLIER = 60;
	/**
	 * The time interval of no keyboard or mouse events after which the system 
	 * is considered idle.
	 */
	private static final int IDLE_INTERVAL = 5000;
	/**
	 * The name of the boolean system property that specifies whether explicit