]> git.sesse.net Git - nageru/commitdiff
Add metrics for how many frames we are decoding, but did not have the time to display.
authorSteinar H. Gunderson <steinar+nageru@gunderson.no>
Sun, 8 Mar 2020 14:02:21 +0000 (15:02 +0100)
committerBigscreen user <sesse@bigscreen.party.solskogen.no>
Sun, 8 Mar 2020 14:02:35 +0000 (15:02 +0100)
futatabi/jpeg_frame_view.cpp
futatabi/jpeg_frame_view.h

index c95a2ce0af403d7bf99b3a052d7e7494e13d4056..ebcf509dbc91b470d18377e973d97874617093a0 100644 (file)
@@ -72,6 +72,8 @@ atomic<int64_t> metric_jpeg_software_decode_frames{ 0 };
 atomic<int64_t> metric_jpeg_software_fail_frames{ 0 };
 atomic<int64_t> metric_jpeg_vaapi_decode_frames{ 0 };
 atomic<int64_t> metric_jpeg_vaapi_fail_frames{ 0 };
+atomic<int64_t> metric_jpeg_prepared_frames{ 0 };
+atomic<int64_t> metric_jpeg_displayed_frames{ 0 };
 Summary metric_jpeg_decode_time_seconds;
 
 }  // namespace
@@ -358,6 +360,8 @@ JPEGFrameView::JPEGFrameView(QWidget *parent)
                global_metrics.add("jpeg_decode_frames", { { "decoder", "software" }, { "result", "fail" } }, &metric_jpeg_software_fail_frames);
                global_metrics.add("jpeg_decode_frames", { { "decoder", "vaapi" }, { "result", "decode" } }, &metric_jpeg_vaapi_decode_frames);
                global_metrics.add("jpeg_decode_frames", { { "decoder", "vaapi" }, { "result", "fail" } }, &metric_jpeg_vaapi_fail_frames);
+               global_metrics.add("jpeg_frames", { { "action", "prepared" } }, &metric_jpeg_prepared_frames);
+               global_metrics.add("jpeg_frames", { { "action", "displayed" } }, &metric_jpeg_displayed_frames);
                vector<double> quantiles{ 0.01, 0.1, 0.25, 0.5, 0.75, 0.9, 0.99 };
                metric_jpeg_decode_time_seconds.init(quantiles, 60.0);
                global_metrics.add("jpeg_decode_time_seconds", &metric_jpeg_decode_time_seconds);
@@ -428,6 +432,11 @@ void JPEGFrameView::paintGL()
                return;
        }
 
+       if (!displayed_this_frame) {
+               ++metric_jpeg_displayed_frames;
+               displayed_this_frame = true;
+       }
+
        check_error();
        current_chain->render_to_screen();
 
@@ -458,6 +467,8 @@ void JPEGFrameView::setDecodedFrame(shared_ptr<Frame> frame, shared_ptr<Frame> s
                } else {
                        current_chain = ycbcr_converter->prepare_chain_for_conversion(frame);
                }
+               ++metric_jpeg_prepared_frames;
+               displayed_this_frame = false;
                update();
        });
 }
index 108aa73d0c424eb84f0a42f70dfe578ab94440f3..3f92e4c708e602819696bd57fadafd54efb61b2b 100644 (file)
@@ -62,6 +62,7 @@ private:
        std::unique_ptr<YCbCrConverter> ycbcr_converter;
        movit::EffectChain *current_chain = nullptr;  // Owned by ycbcr_converter.
 
+       bool displayed_this_frame = false;  // Owned by the UI frame.
        std::shared_ptr<Frame> current_frame;  // So that we hold on to the pixels.
        std::shared_ptr<Frame> current_secondary_frame;  // Same.