//===-- SBProgress.cpp --------------------------------------------------*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "lldb/API/SBProgress.h" #include "lldb/Core/Progress.h" #include "lldb/Utility/Instrumentation.h" using namespace lldb; SBProgress::SBProgress(const char *title, const char *details, SBDebugger &debugger) { LLDB_INSTRUMENT_VA(this, title, details, debugger); m_opaque_up = std::make_unique( title, details, /*total=*/std::nullopt, debugger.get(), /*minimum_report_time=*/std::nullopt, lldb_private::Progress::Origin::eExternal); } SBProgress::SBProgress(const char *title, const char *details, uint64_t total_units, SBDebugger &debugger) { LLDB_INSTRUMENT_VA(this, title, details, total_units, debugger); m_opaque_up = std::make_unique( title, details, total_units, debugger.get(), /*minimum_report_time=*/std::nullopt, lldb_private::Progress::Origin::eExternal); } SBProgress::SBProgress(SBProgress &&rhs) : m_opaque_up(std::move(rhs.m_opaque_up)) {} SBProgress::~SBProgress() = default; void SBProgress::Increment(uint64_t amount, const char *description) { LLDB_INSTRUMENT_VA(amount, description); if (!m_opaque_up) return; std::optional description_opt; if (description && description[0]) description_opt = description; m_opaque_up->Increment(amount, std::move(description_opt)); } void SBProgress::Finalize() { // The lldb_private::Progress object is designed to be RAII and send the end // progress event when it gets destroyed. So force our contained object to be // destroyed and send the progress end event. Clearing this object also allows // all other methods to quickly return without doing any work if they are // called after this method. m_opaque_up.reset(); } lldb_private::Progress &SBProgress::ref() const { return *m_opaque_up; }