summaryrefslogtreecommitdiff
path: root/python/openvino/runtime/common/utils/include/samples/console_progress.hpp
diff options
context:
space:
mode:
authorEric Dao <eric@erickhangdao.com>2025-03-10 17:54:31 -0400
committerEric Dao <eric@erickhangdao.com>2025-03-10 17:54:31 -0400
commitab224e2e6ba65f5a369ec392f99cd8845ad06c98 (patch)
treea1e757e9341863ed52b8ad4c5a1c45933aab9da4 /python/openvino/runtime/common/utils/include/samples/console_progress.hpp
parent40da1752f2c8639186b72f6838aa415e854d0b1d (diff)
downloadthesis-master.tar.gz
thesis-master.tar.bz2
thesis-master.zip
completed thesisHEADmaster
Diffstat (limited to 'python/openvino/runtime/common/utils/include/samples/console_progress.hpp')
-rw-r--r--python/openvino/runtime/common/utils/include/samples/console_progress.hpp107
1 files changed, 107 insertions, 0 deletions
diff --git a/python/openvino/runtime/common/utils/include/samples/console_progress.hpp b/python/openvino/runtime/common/utils/include/samples/console_progress.hpp
new file mode 100644
index 0000000..f62aeed
--- /dev/null
+++ b/python/openvino/runtime/common/utils/include/samples/console_progress.hpp
@@ -0,0 +1,107 @@
+// Copyright (C) 2018-2022 Intel Corporation
+// SPDX-License-Identifier: Apache-2.0
+//
+
+#pragma once
+
+#include <cstdio>
+#include <iomanip>
+#include <sstream>
+
+/**
+ * @class ConsoleProgress
+ * @brief A ConsoleProgress class provides functionality for printing progress dynamics
+ */
+class ConsoleProgress {
+ static const size_t DEFAULT_DETALIZATION = 20;
+ static const size_t DEFAULT_PERCENT_TO_UPDATE_PROGRESS = 1;
+
+ size_t total;
+ size_t cur_progress = 0;
+ size_t prev_progress = 0;
+ bool stream_output;
+ size_t detalization;
+ size_t percent_to_update;
+
+public:
+ /**
+ * @brief A constructor of ConsoleProgress class
+ * @param _total - maximum value that is correspondent to 100%
+ * @param _detalization - number of symbols(.) to use to represent progress
+ */
+ explicit ConsoleProgress(size_t _total,
+ bool _stream_output = false,
+ size_t _percent_to_update = DEFAULT_PERCENT_TO_UPDATE_PROGRESS,
+ size_t _detalization = DEFAULT_DETALIZATION)
+ : total(_total),
+ detalization(_detalization),
+ percent_to_update(_percent_to_update) {
+ stream_output = _stream_output;
+ if (total == 0) {
+ total = 1;
+ }
+ }
+
+ /**
+ * @brief Shows progress with current data. Progress is shown from the beginning of the current
+ * line.
+ */
+ void showProgress() const {
+ std::stringstream strm;
+ if (!stream_output) {
+ strm << '\r';
+ }
+ strm << "Progress: [";
+ size_t i = 0;
+ for (; i < detalization * cur_progress / total; i++) {
+ strm << ".";
+ }
+ for (; i < detalization; i++) {
+ strm << " ";
+ }
+ strm << "] " << std::setw(3) << 100 * cur_progress / total << "% done";
+ if (stream_output) {
+ strm << std::endl;
+ }
+ std::fputs(strm.str().c_str(), stdout);
+ std::fflush(stdout);
+ }
+
+ /**
+ * @brief Updates current value and progressbar
+ */
+ void updateProgress() {
+ if (cur_progress > total)
+ cur_progress = total;
+ size_t prev_percent = 100 * prev_progress / total;
+ size_t cur_percent = 100 * cur_progress / total;
+
+ if (prev_progress == 0 || cur_progress == total || prev_percent + percent_to_update <= cur_percent) {
+ showProgress();
+ prev_progress = cur_progress;
+ }
+ }
+
+ /**
+ * @brief Adds value to currently represented and redraw progressbar
+ * @param add - value to add
+ */
+ void addProgress(int add) {
+ if (add < 0 && -add > static_cast<int>(cur_progress)) {
+ add = -static_cast<int>(cur_progress);
+ }
+ cur_progress += add;
+ updateProgress();
+ }
+
+ /**
+ * @brief Output end line.
+ * @return
+ */
+ void finish() {
+ std::stringstream strm;
+ strm << std::endl;
+ std::fputs(strm.str().c_str(), stdout);
+ std::fflush(stdout);
+ }
+};