code: public float progress() { update_from_remote();
      float regularProgress = _work==0 ? 0f : Math.min(1,(float)_worked/_work);
      if (_max_runtime_msecs>0) return Math.min(1,Math.max(regularProgress, (float)msec()/_max_runtime_msecs));
      return regularProgress;
    }
docs: Returns a float from 0 to 1 representing progress.  Polled periodically.
  Can default to returning e.g. 0 always.