blob: f5996732474dafbd100d0da9867c3037ca667ed1 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "kernel/deadline.h"
#include <zircon/time.h>
const TimerSlack TimerSlack::none_{0, TIMER_SLACK_CENTER};
const Deadline Deadline::infinite_{ZX_TIME_INFINITE, TimerSlack::none()};
zx_time_t Deadline::earliest() const {
switch (slack_.mode()) {
case TIMER_SLACK_CENTER:
return zx_time_sub_duration(when_, slack_.amount());
case TIMER_SLACK_LATE:
return when_;
case TIMER_SLACK_EARLY:
return zx_time_sub_duration(when_, slack_.amount());
default:
panic("invalid timer mode %u\n", slack_.mode());
}
}
zx_time_t Deadline::latest() const {
switch (slack_.mode()) {
case TIMER_SLACK_CENTER:
return zx_time_add_duration(when_, slack_.amount());
case TIMER_SLACK_LATE:
return zx_time_add_duration(when_, slack_.amount());
case TIMER_SLACK_EARLY:
return when_;
default:
panic("invalid timer mode %u\n", slack_.mode());
}
}