From 017c260b96736e797fee120107b85c4c7fc81aa1 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 17 Jun 2017 14:00:45 +0200 Subject: [PATCH] Consistently use call_once to initialize static metrics. --- decklink_output.cpp | 10 +++++----- quicksync_encoder.cpp | 7 +++---- x264_encoder.cpp | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/decklink_output.cpp b/decklink_output.cpp index 17cc520..544e2ed 100644 --- a/decklink_output.cpp +++ b/decklink_output.cpp @@ -3,6 +3,8 @@ #include // Must be above the Xlib includes. #include +#include + #include #include "chroma_subsampler.h" @@ -20,7 +22,7 @@ using namespace std::chrono; namespace { // This class can be deleted during regular use, so make all the metrics static. -bool metrics_inited = false; +once_flag decklink_metrics_inited; LatencyHistogram latency_histogram; atomic metric_decklink_output_width_pixels{-1}; atomic metric_decklink_output_height_pixels{-1}; @@ -49,7 +51,7 @@ DeckLinkOutput::DeckLinkOutput(ResourcePool *resource_pool, QSurface *surface, u { chroma_subsampler.reset(new ChromaSubsampler(resource_pool)); - if (!metrics_inited) { + call_once(decklink_metrics_inited, [](){ latency_histogram.init("decklink_output"); global_metrics.add("decklink_output_width_pixels", &metric_decklink_output_width_pixels, Metrics::TYPE_GAUGE); global_metrics.add("decklink_output_height_pixels", &metric_decklink_output_height_pixels, Metrics::TYPE_GAUGE); @@ -70,9 +72,7 @@ DeckLinkOutput::DeckLinkOutput(ResourcePool *resource_pool, QSurface *surface, u global_metrics.add("decklink_output_completed_frames", {{ "status", "unknown" }}, &metric_decklink_output_completed_frames_unknown); global_metrics.add("decklink_output_scheduled_samples", &metric_decklink_output_scheduled_samples); - - metrics_inited = true; - } + }); } void DeckLinkOutput::set_device(IDeckLink *decklink) diff --git a/quicksync_encoder.cpp b/quicksync_encoder.cpp index 0c9cf06..1b36aa5 100644 --- a/quicksync_encoder.cpp +++ b/quicksync_encoder.cpp @@ -68,7 +68,7 @@ namespace { // These need to survive several QuickSyncEncoderImpl instances, // so they are outside. -bool quick_sync_metrics_inited = false; +once_flag quick_sync_metrics_inited; LatencyHistogram mixer_latency_histogram, qs_latency_histogram; MuxMetrics current_file_mux_metrics, total_mux_metrics; std::atomic metric_current_file_start_time_seconds{0.0 / 0.0}; @@ -1573,15 +1573,14 @@ QuickSyncEncoderImpl::QuickSyncEncoderImpl(const std::string &filename, Resource memset(&slice_param, 0, sizeof(slice_param)); } - if (!quick_sync_metrics_inited) { + call_once(quick_sync_metrics_inited, [](){ mixer_latency_histogram.init("mixer"); qs_latency_histogram.init("quick_sync"); current_file_mux_metrics.init({{ "destination", "current_file" }}); total_mux_metrics.init({{ "destination", "files_total" }}); global_metrics.add("current_file_start_time_seconds", &metric_current_file_start_time_seconds, Metrics::TYPE_GAUGE); global_metrics.add("quick_sync_stalled_frames", &metric_quick_sync_stalled_frames); - quick_sync_metrics_inited = true; - } + }); storage_thread = thread(&QuickSyncEncoderImpl::storage_task_thread, this); diff --git a/x264_encoder.cpp b/x264_encoder.cpp index e32fcac..90b61ed 100644 --- a/x264_encoder.cpp +++ b/x264_encoder.cpp @@ -66,7 +66,7 @@ X264Encoder::X264Encoder(AVOutputFormat *oformat) : wants_global_headers(oformat->flags & AVFMT_GLOBALHEADER), dyn(load_x264_for_bit_depth(global_flags.x264_bit_depth)) { - call_once(x264_metrics_inited, [&](){ + call_once(x264_metrics_inited, [](){ global_metrics.add("x264_queued_frames", &metric_x264_queued_frames, Metrics::TYPE_GAUGE); global_metrics.add("x264_max_queued_frames", &metric_x264_max_queued_frames, Metrics::TYPE_GAUGE); global_metrics.add("x264_dropped_frames", &metric_x264_dropped_frames); -- 2.39.2