while ((maturePurplePool.enqueuedPages() > 0 || unfilteredPurplePool.enqueuedPages() > 0) && !abort &&
while (maturePurplePool.enqueuedPages()> 0 && !abort &&
  final boolean collectCycles(boolean time) {    collectedCycles = false;    if (shouldFilterPurple()) {      long filterStart = VM_Interface.cycles();      long finishTarget = Plan.getTimeCap();      long remaining = finishTarget - filterStart;      long targetTime = filterStart+(remaining/FILTER_TIME_FRACTION);      long gcTimeCap = VM_Interface.millisToCycles(Options.gcTimeCap);      if (remaining > gcTimeCap/FILTER_TIME_FRACTION) {	filterPurpleBufs(targetTime);	processFreeBufs();	if (shouldCollectCycles()) {	  if (Options.verbose > 0) { 	    Log.write("(CD "); 	  }	  long cycleStart = VM_Interface.cycles();	  remaining = finishTarget - cycleStart;	  boolean abort = false;	  while ((maturePurplePool.enqueuedPages() > 0 ||		  unfilteredPurplePool.enqueuedPages() > 0) && !abort &&		 remaining > gcTimeCap/CYCLE_TIME_FRACTION) {	    abort = collectSomeCycles(time, finishTarget);	    remaining = finishTarget - VM_Interface.cycles();	  }	  flushFilteredPurpleBufs();	  if (Options.verbose > 0) {	    Log.write(VM_Interface.cyclesToMillis(VM_Interface.cycles() - cycleStart));	    Log.write(" ms)");	  }	}      }    }    lastPurplePages = Plan.getMetaDataPagesUsed();    return collectedCycles;  }