mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-02 23:27:16 +00:00
[lldb] Use the debugger's asynchronous output stream for progress events.
Use the debugger's asynchronous output stream for printing progress events. This allows the active IOHandler to be in charge of printing them and doing the necessary synchronization. Differential revision: https://reviews.llvm.org/D121502
This commit is contained in:
parent
3568333815
commit
c231deb791
@ -1750,45 +1750,47 @@ void Debugger::HandleProgressEvent(const lldb::EventSP &event_sp) {
|
||||
// Determine whether the current output file is an interactive terminal with
|
||||
// color support. We assume that if we support ANSI escape codes we support
|
||||
// vt100 escape codes.
|
||||
File &output = GetOutputFile();
|
||||
if (!output.GetIsInteractive() || !output.GetIsTerminalWithColors())
|
||||
File &file = GetOutputFile();
|
||||
if (!file.GetIsInteractive() || !file.GetIsTerminalWithColors())
|
||||
return;
|
||||
|
||||
StreamSP output = GetAsyncOutputStream();
|
||||
|
||||
// Print over previous line, if any.
|
||||
output.Printf("\r");
|
||||
output->Printf("\r");
|
||||
|
||||
if (data->GetCompleted()) {
|
||||
// Clear the current line.
|
||||
output.Printf("\x1B[2K");
|
||||
output.Flush();
|
||||
output->Printf("\x1B[2K");
|
||||
output->Flush();
|
||||
return;
|
||||
}
|
||||
|
||||
const bool use_color = GetUseColor();
|
||||
llvm::StringRef ansi_prefix = GetShowProgressAnsiPrefix();
|
||||
if (!ansi_prefix.empty())
|
||||
output.Printf(
|
||||
output->Printf(
|
||||
"%s", ansi::FormatAnsiTerminalCodes(ansi_prefix, use_color).c_str());
|
||||
|
||||
// Print the progress message.
|
||||
std::string message = data->GetMessage();
|
||||
if (data->GetTotal() != UINT64_MAX) {
|
||||
output.Printf("[%" PRIu64 "/%" PRIu64 "] %s...", data->GetCompleted(), data->GetTotal(),
|
||||
message.c_str());
|
||||
output->Printf("[%" PRIu64 "/%" PRIu64 "] %s...", data->GetCompleted(),
|
||||
data->GetTotal(), message.c_str());
|
||||
} else {
|
||||
output.Printf("%s...", message.c_str());
|
||||
output->Printf("%s...", message.c_str());
|
||||
}
|
||||
|
||||
llvm::StringRef ansi_suffix = GetShowProgressAnsiSuffix();
|
||||
if (!ansi_suffix.empty())
|
||||
output.Printf(
|
||||
output->Printf(
|
||||
"%s", ansi::FormatAnsiTerminalCodes(ansi_suffix, use_color).c_str());
|
||||
|
||||
// Clear until the end of the line.
|
||||
output.Printf("\x1B[K\r");
|
||||
output->Printf("\x1B[K\r");
|
||||
|
||||
// Flush the output.
|
||||
output.Flush();
|
||||
output->Flush();
|
||||
}
|
||||
|
||||
bool Debugger::HasIOHandlerThread() { return m_io_handler_thread.IsJoinable(); }
|
||||
|
Loading…
x
Reference in New Issue
Block a user