blob: f28bab1f1d140647a34b35128b1c19310f0fc3bd [file] [log] [blame]
// Copyright 2020 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 "src/media/audio/lib/clock/clone_mono.h"
#include <lib/syslog/cpp/macros.h>
#include <lib/zx/clock.h>
namespace media::audio::clock {
void CloneMonotonicInto(zx::clock* clock_out, bool adjustable) {
FX_DCHECK(clock_out) << "Out parameter cannot be null";
auto status =
zx::clock::create(ZX_CLOCK_OPT_AUTO_START | ZX_CLOCK_OPT_MONOTONIC | ZX_CLOCK_OPT_CONTINUOUS,
nullptr, clock_out);
FX_DCHECK(status == ZX_OK) << "Reference clock could not be created";
if (!adjustable) {
constexpr auto rights = ZX_RIGHT_DUPLICATE | ZX_RIGHT_TRANSFER | ZX_RIGHT_READ;
status = clock_out->replace(rights, clock_out);
FX_DCHECK(status == ZX_OK) << "Rights could not be replaced for reference clock";
}
}
zx::clock AdjustableCloneOfMonotonic() {
zx::clock clone;
CloneMonotonicInto(&clone, true);
return clone;
}
zx::clock CloneOfMonotonic() {
zx::clock clone;
CloneMonotonicInto(&clone, false);
return clone;
}
} // namespace media::audio::clock