docs: public void offer(PrioritizedSplitRunner split)
      {
          checkArgument(split != null, "split is null");
  
          split.setReady();
          int level = split.getPriority().getLevel();
          lock.lock();
          try {
              if (levelWaitingSplits.get(level).isEmpty()) {
                  // Accesses to levelScheduledTime are not synchronized, so we have a data race
                  // here - our level time math will be off. However, the staleness is bounded by
                  // the fact that only running splits that complete during this computation
                  // can update the level time. Therefore, this is benign.
                  long level0Time = getLevel0TargetTime();
                  long levelExpectedTime = (long) (level0Time / Math.pow(levelTimeMultiplier, level));
                  long delta = levelExpectedTime - levelScheduledTime[level].get();
                  levelScheduledTime[level].addAndGet(delta);
              }
  
              levelWaitingSplits.get(level).offer(split);
              notEmpty.signal();
          }
          finally {
              lock.unlock();
          }
      }