Skip to content
Snippets Groups Projects
Commit 879c6adf authored by Nicolas Pope's avatar Nicolas Pope
Browse files

Show stats periodically

parent 974fa524
Branches
Tags
No related merge requests found
Pipeline #22495 passed
...@@ -81,6 +81,7 @@ ftl::gui::Screen::Screen(ftl::Configurable *proot, ftl::net::Universe *pnet, ftl ...@@ -81,6 +81,7 @@ ftl::gui::Screen::Screen(ftl::Configurable *proot, ftl::net::Universe *pnet, ftl
ctrl_ = controller; ctrl_ = controller;
root_ = proot; root_ = proot;
camera_ = nullptr; camera_ = nullptr;
last_stats_count_ = 0;
#ifdef HAVE_OPENVR #ifdef HAVE_OPENVR
HMD_ = nullptr; HMD_ = nullptr;
...@@ -590,15 +591,14 @@ void ftl::gui::Screen::draw(NVGcontext *ctx) { ...@@ -590,15 +591,14 @@ void ftl::gui::Screen::draw(NVGcontext *ctx) {
if (root()->value("show_information", true)) { if (root()->value("show_information", true)) {
string msg; string msg;
// FIXME: Do not do this every frame, or cache the results every N frames... auto &stats = getStatistics();
auto [fps,latency] = ftl::rgbd::Builder::getStatistics(); msg = string("Frame rate: ") + std::to_string((int)stats.fps);
msg = string("Frame rate: ") + std::to_string((int)fps);
nvgText(ctx, screenSize[0]-10, 20, msg.c_str(), NULL); nvgText(ctx, screenSize[0]-10, 20, msg.c_str(), NULL);
msg = string("Latency: ") + std::to_string((int)latency) + string("ms"); msg = string("Latency: ") + std::to_string((int)stats.latency) + string("ms");
nvgText(ctx, screenSize[0]-10, 40, msg.c_str(), NULL); nvgText(ctx, screenSize[0]-10, 40, msg.c_str(), NULL);
msg = string("Bitrate: ") + to_string_with_precision(ftl::stream::Net::getRequiredBitrate(), 2) + string("Mbps"); msg = string("Bitrate: ") + to_string_with_precision(stats.bitrate, 2) + string("Mbps");
nvgText(ctx, screenSize[0]-10, 60, msg.c_str(), NULL); nvgText(ctx, screenSize[0]-10, 60, msg.c_str(), NULL);
if (camera_) { if (camera_) {
...@@ -617,6 +617,17 @@ void ftl::gui::Screen::draw(NVGcontext *ctx) { ...@@ -617,6 +617,17 @@ void ftl::gui::Screen::draw(NVGcontext *ctx) {
nanogui::Screen::draw(ctx); nanogui::Screen::draw(ctx);
} }
const ftl::gui::Statistics &ftl::gui::Screen::getStatistics() {
if (--last_stats_count_ <= 0) {
auto [fps,latency] = ftl::rgbd::Builder::getStatistics();
stats_.fps = fps;
stats_.latency = latency;
stats_.bitrate = ftl::stream::Net::getRequiredBitrate();
last_stats_count_ = 20;
}
return stats_;
}
void ftl::gui::Screen::drawFast() { void ftl::gui::Screen::drawFast() {
if (camera_) { if (camera_) {
camera_->captureFrame(); camera_->captureFrame();
......
...@@ -23,6 +23,12 @@ namespace gui { ...@@ -23,6 +23,12 @@ namespace gui {
class Camera; class Camera;
class MediaPanel; class MediaPanel;
struct Statistics {
float fps;
float latency;
float bitrate;
};
class Screen : public nanogui::Screen { class Screen : public nanogui::Screen {
public: public:
explicit Screen(ftl::Configurable *root, ftl::net::Universe *net, ftl::ctrl::Master *controller); explicit Screen(ftl::Configurable *root, ftl::net::Universe *net, ftl::ctrl::Master *controller);
...@@ -46,6 +52,8 @@ class Screen : public nanogui::Screen { ...@@ -46,6 +52,8 @@ class Screen : public nanogui::Screen {
void setActiveCamera(ftl::gui::Camera*); void setActiveCamera(ftl::gui::Camera*);
ftl::gui::Camera *activeCamera() { return camera_; } ftl::gui::Camera *activeCamera() { return camera_; }
const ftl::gui::Statistics &getStatistics();
#ifdef HAVE_OPENVR #ifdef HAVE_OPENVR
// initialize OpenVR // initialize OpenVR
bool initVR(); bool initVR();
...@@ -108,6 +116,9 @@ class Screen : public nanogui::Screen { ...@@ -108,6 +116,9 @@ class Screen : public nanogui::Screen {
#ifdef HAVE_OPENVR #ifdef HAVE_OPENVR
vr::IVRSystem *HMD_; vr::IVRSystem *HMD_;
#endif #endif
ftl::gui::Statistics stats_;
int last_stats_count_;
}; };
} }
......
...@@ -75,9 +75,17 @@ static void run(ftl::Configurable *root) { ...@@ -75,9 +75,17 @@ static void run(ftl::Configurable *root) {
source->setChannel(Channel::Depth); source->setChannel(Channel::Depth);
grp->addSource(source); grp->addSource(source);
grp->onFrameSet([sender](ftl::rgbd::FrameSet &fs) { int stats_count = 0;
grp->onFrameSet([sender,&stats_count](ftl::rgbd::FrameSet &fs) {
fs.id = 0; fs.id = 0;
sender->post(fs); sender->post(fs);
if (--stats_count <= 0) {
auto [fps,latency] = ftl::rgbd::Builder::getStatistics();
LOG(INFO) << "Frame rate: " << fps << ", Latency: " << latency;
stats_count = 20;
}
return true; return true;
}); });
......
...@@ -10,11 +10,11 @@ ftl::rgbd::Camera ftl::stream::parseCalibration(const ftl::codecs::Packet &pkt) ...@@ -10,11 +10,11 @@ ftl::rgbd::Camera ftl::stream::parseCalibration(const ftl::codecs::Packet &pkt)
auto unpacked = msgpack::unpack((const char*)pkt.data.data(), pkt.data.size()); auto unpacked = msgpack::unpack((const char*)pkt.data.data(), pkt.data.size());
unpacked.get().convert(params); unpacked.get().convert(params);
LOG(INFO) << "Got Calibration: " //LOG(INFO) << "Got Calibration: "
<< std::get<0>(params).width << "x" << std::get<0>(params).height // << std::get<0>(params).width << "x" << std::get<0>(params).height
<< ", fx: " << std::get<0>(params).fx // << ", fx: " << std::get<0>(params).fx
<< ", cx: " << std::get<0>(params).cx // << ", cx: " << std::get<0>(params).cx
<< ", cy: " << std::get<0>(params).cy; // << ", cy: " << std::get<0>(params).cy;
return std::get<0>(params); return std::get<0>(params);
} }
...@@ -40,6 +40,6 @@ std::string ftl::stream::parseConfig(const ftl::codecs::Packet &pkt) { ...@@ -40,6 +40,6 @@ std::string ftl::stream::parseConfig(const ftl::codecs::Packet &pkt) {
auto unpacked = msgpack::unpack((const char*)pkt.data.data(), pkt.data.size()); auto unpacked = msgpack::unpack((const char*)pkt.data.data(), pkt.data.size());
unpacked.get().convert(cfg); unpacked.get().convert(cfg);
LOG(INFO) << "Config Received: " << cfg; //LOG(INFO) << "Config Received: " << cfg;
return cfg; return cfg;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment