| //===-- 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<lldb_private::Progress>( | |
| 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<lldb_private::Progress>( | |
| 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<std::string> 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; } |