mib created this revision. mib added a reviewer: JDevlieghere. mib added a project: LLDB. Herald added a project: All. mib requested review of this revision. Herald added a subscriber: lldb-commits.
This patch should fix event handling for finite progress reports. Previously, the event handler would get stuck when receiving a finite progress report, and stop displaying upcoming reports. This was due to the fact that we were checking if the progress event was completed by calling `GetCompleted` but returns the completion amount instead of saying whether it's completed. That caused the current event id to remain the same, preventing all the following progress reports to be shown to the user. This patch also adds some logging to facilitate debugging progress events. Signed-off-by: Med Ismail Bennani <medismail.benn...@gmail.com> Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D128768 Files: lldb/source/Core/Debugger.cpp Index: lldb/source/Core/Debugger.cpp =================================================================== --- lldb/source/Core/Debugger.cpp +++ lldb/source/Core/Debugger.cpp @@ -1827,6 +1827,12 @@ } void Debugger::HandleProgressEvent(const lldb::EventSP &event_sp) { + Log *log = GetLog(LLDBLog::Events); + + LLDB_LOGF(log, "%p Debugger('%llu')::HandleProgressEvent (event_sp = {%p})", + static_cast<void *>(this), m_uid, + static_cast<void *>(event_sp.get())); + auto *data = ProgressEventData::GetEventDataFromEvent(event_sp.get()); if (!data) return; @@ -1835,10 +1841,22 @@ // going to show the progress. const uint64_t id = data->GetID(); if (m_current_event_id) { + if (data->IsFinite()) + LLDB_LOGF(log, + "%p Debugger('%llu')::HandleProgressEvent (m_current_event_id " + "= {%llu}, data = {id = %llu, message = %s, completed = %llu, " + "total = %llu})", + static_cast<void *>(this), m_uid, *m_current_event_id, id, + data->GetMessage().data(), data->GetCompleted(), + data->GetTotal()); + else + LLDB_LOGF(log, + "%p Debugger('%llu')::HandleProgressEvent (m_current_event_id " + "= {%llu}, data = {id = %llu, message = %s, infinite = true})", + static_cast<void *>(this), m_uid, *m_current_event_id, id, + data->GetMessage().data()); if (id != *m_current_event_id) return; - if (data->GetCompleted()) - m_current_event_id.reset(); } else { m_current_event_id = id; } @@ -1860,8 +1878,9 @@ // Print over previous line, if any. output->Printf("\r"); - if (data->GetCompleted()) { + if (data->GetCompleted() == data->GetTotal()) { // Clear the current line. + m_current_event_id.reset(); output->Printf("\x1B[2K"); output->Flush(); return;
Index: lldb/source/Core/Debugger.cpp =================================================================== --- lldb/source/Core/Debugger.cpp +++ lldb/source/Core/Debugger.cpp @@ -1827,6 +1827,12 @@ } void Debugger::HandleProgressEvent(const lldb::EventSP &event_sp) { + Log *log = GetLog(LLDBLog::Events); + + LLDB_LOGF(log, "%p Debugger('%llu')::HandleProgressEvent (event_sp = {%p})", + static_cast<void *>(this), m_uid, + static_cast<void *>(event_sp.get())); + auto *data = ProgressEventData::GetEventDataFromEvent(event_sp.get()); if (!data) return; @@ -1835,10 +1841,22 @@ // going to show the progress. const uint64_t id = data->GetID(); if (m_current_event_id) { + if (data->IsFinite()) + LLDB_LOGF(log, + "%p Debugger('%llu')::HandleProgressEvent (m_current_event_id " + "= {%llu}, data = {id = %llu, message = %s, completed = %llu, " + "total = %llu})", + static_cast<void *>(this), m_uid, *m_current_event_id, id, + data->GetMessage().data(), data->GetCompleted(), + data->GetTotal()); + else + LLDB_LOGF(log, + "%p Debugger('%llu')::HandleProgressEvent (m_current_event_id " + "= {%llu}, data = {id = %llu, message = %s, infinite = true})", + static_cast<void *>(this), m_uid, *m_current_event_id, id, + data->GetMessage().data()); if (id != *m_current_event_id) return; - if (data->GetCompleted()) - m_current_event_id.reset(); } else { m_current_event_id = id; } @@ -1860,8 +1878,9 @@ // Print over previous line, if any. output->Printf("\r"); - if (data->GetCompleted()) { + if (data->GetCompleted() == data->GetTotal()) { // Clear the current line. + m_current_event_id.reset(); output->Printf("\x1B[2K"); output->Flush(); return;
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits