Program Listing for File GilRelease.cc#
↰ Return to documentation for file (doxygen_docs/GeneralKModels/GilRelease.cc)
#include "Karana/GeneralKModels/GilRelease.h"
#include "Karana/KCore/Allocator.h"
#include <chrono>
#include <pybind11/pybind11.h>
/**
* @file
* @brief GilRelease implementation.
*/
namespace Karana::Models {
namespace kd = Karana::Dynamics;
GilRelease::GilRelease(std::string_view name, const kc::ks_ptr<kd::ModelManager> &mm)
: KModel<GilRelease>(name, mm){};
kc::ks_ptr<GilRelease> GilRelease::create(std::string_view name,
const kc::ks_ptr<kd::ModelManager> &mm) {
kc::ks_ptr<GilRelease> srt =
std::allocate_shared<GilRelease>(kc::Allocator<GilRelease>{}, name, mm);
mm->registerModel(srt);
return srt;
}
void GilRelease::postHop(const km::Ktime &, const km::Vec &) {
auto t = std::chrono::high_resolution_clock::now();
if (t >= _next_gil_release) {
pybind11::gil_scoped_release release;
_next_gil_release = t + std::chrono::microseconds(16667);
}
}
// Destructor included for MacOS builds. Must have a key-function out-of-line to avoid dulpicate
// symbols.
GilRelease::~GilRelease(){};
} // namespace Karana::Models