docs: public Priority updatePriority(Priority oldPriority, long quantaNanos, long scheduledNanos)
      {
          int oldLevel = oldPriority.getLevel();
          int newLevel = computeLevel(scheduledNanos);
  
          long levelContribution = Math.min(quantaNanos, LEVEL_CONTRIBUTION_CAP);
  
          if (oldLevel == newLevel) {
              addLevelTime(oldLevel, levelContribution);
              return new Priority(oldLevel, oldPriority.getLevelPriority() + quantaNanos);
          }
  
          long remainingLevelContribution = levelContribution;
          long remainingTaskTime = quantaNanos;
  
          // a task normally slowly accrues scheduled time in a level and then moves to the next, but
          // if the split had a particularly long quanta, accrue time to each level as if it had run
          // in that level up to the level limit.
          for (int currentLevel = oldLevel; currentLevel < newLevel; currentLevel++) {
              long timeAccruedToLevel = Math.min(SECONDS.toNanos(LEVEL_THRESHOLD_SECONDS[currentLevel + 1] - LEVEL_THRESHOLD_SECONDS[currentLevel]), remainingLevelContribution);
              addLevelTime(currentLevel, timeAccruedToLevel);
              remainingLevelContribution -= timeAccruedToLevel;
              remainingTaskTime -= timeAccruedToLevel;
          }
  
          addLevelTime(newLevel, remainingLevelContribution);
          long newLevelMinPriority = getLevelMinPriority(newLevel, scheduledNanos);
          return new Priority(newLevel, newLevelMinPriority + remainingTaskTime);
      }