queue/schedule.go
func before(i, j ScheduleItem) bool {
	iEnd := i.Time().UnixNano() + i.Duration().Nanoseconds()
	jStart := j.Time().UnixNano()
	if i, ok := i.(ScheduleItemWithTimestamp); ok {
		if j, ok := j.(ScheduleItemWithTimestamp); ok {
			iEnd = i.Timestamp() + i.Duration().Nanoseconds()
			jStart = j.Timestamp()
		}
	}
	return iEnd < jStart
}
func before(i, j ScheduleItem) bool {
	iEnd := i.Time().UnixNano() + i.Duration().Nanoseconds()
	jStart := j.Time().UnixNano()
	if i, ok := i.(ScheduleItemWithTimestamp); ok {
		if j, ok := j.(ScheduleItemWithTimestamp); ok {
			iEnd = i.Timestamp() + i.Duration().Nanoseconds()
			jStart = j.Timestamp()
		}
	}
	return iEnd < jStart
}
// returns true if i before j