watchdog_kick: non-allocating (#22892)

* non-allocating

* unpack

* call kick every second

* cleanup include
pull/21968/head
Dean Lee 2021-11-17 19:02:31 +08:00 committed by GitHub
parent 0dcb089254
commit ca88a8769b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 8 additions and 12 deletions

View File

@ -1,19 +1,12 @@
#include "selfdrive/common/watchdog.h" #include "selfdrive/common/watchdog.h"
#include <unistd.h>
#include <cstdint>
#include <string>
#include "selfdrive/common/timing.h" #include "selfdrive/common/timing.h"
#include "selfdrive/common/util.h" #include "selfdrive/common/util.h"
const std::string watchdog_fn_prefix = "/dev/shm/wd_"; // + <pid> const std::string watchdog_fn_prefix = "/dev/shm/wd_"; // + <pid>
bool watchdog_kick() { bool watchdog_kick() {
std::string fn = watchdog_fn_prefix + std::to_string(getpid()); static std::string fn = watchdog_fn_prefix + std::to_string(getpid());
std::string cur_t = std::to_string(nanos_since_boot());
int r = util::write_file(fn.c_str(), cur_t.data(), cur_t.length(), O_WRONLY | O_CREAT); uint64_t ts = nanos_since_boot();
return r == 0; return util::write_file(fn.c_str(), &ts, sizeof(ts), O_WRONLY | O_CREAT) > 0;
} }

View File

@ -1,6 +1,7 @@
import importlib import importlib
import os import os
import signal import signal
import struct
import time import time
import subprocess import subprocess
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
@ -88,7 +89,7 @@ class ManagerProcess(ABC):
try: try:
fn = WATCHDOG_FN + str(self.proc.pid) fn = WATCHDOG_FN + str(self.proc.pid)
self.last_watchdog_time = int(open(fn).read()) self.last_watchdog_time = struct.unpack('Q', open(fn, "rb").read())[0]
except Exception: except Exception:
pass pass

View File

@ -245,7 +245,9 @@ void QUIState::update() {
emit offroadTransition(!ui_state.scene.started); emit offroadTransition(!ui_state.scene.started);
} }
watchdog_kick(); if (ui_state.sm->frame % UI_FREQ == 0) {
watchdog_kick();
}
emit uiUpdate(ui_state); emit uiUpdate(ui_state);
} }