Skip to content

Commit ea49e04

Browse files
authored
[lldb] Don't report all progress event as completed. (llvm#84281)
Currently, progress events reported by the ProgressManager and broadcast to eBroadcastBitProgressCategory always specify they're complete. The problem is that the ProgressManager reports kNonDeterministicTotal for both the total and the completed number of (sub)events. Because the values are the same, the event reports itself as complete. This patch fixes the issue by reporting 0 as the completed value for the start event and kNonDeterministicTotal for the end event.
1 parent e9901d8 commit ea49e04

File tree

3 files changed

+18
-11
lines changed

3 files changed

+18
-11
lines changed

lldb/include/lldb/Core/Progress.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,14 @@ class ProgressManager {
148148

149149
static ProgressManager &Instance();
150150

151-
static void ReportProgress(const Progress::ProgressData &);
152-
153151
private:
152+
enum class EventType {
153+
Begin,
154+
End,
155+
};
156+
static void ReportProgress(const Progress::ProgressData &progress_data,
157+
EventType type);
158+
154159
llvm::StringMap<std::pair<uint64_t, Progress::ProgressData>>
155160
m_progress_category_map;
156161
std::mutex m_progress_map_mutex;

lldb/source/Core/Progress.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ void ProgressManager::Increment(const Progress::ProgressData &progress_data) {
9797
// initial progress report.
9898
if (!m_progress_category_map.contains(progress_data.title)) {
9999
m_progress_category_map[progress_data.title].second = progress_data;
100-
ReportProgress(progress_data);
100+
ReportProgress(progress_data, EventType::Begin);
101101
}
102102
m_progress_category_map[progress_data.title].first++;
103103
}
@@ -110,20 +110,22 @@ void ProgressManager::Decrement(const Progress::ProgressData &progress_data) {
110110
return;
111111

112112
if (pos->second.first <= 1) {
113-
ReportProgress(pos->second.second);
113+
ReportProgress(pos->second.second, EventType::End);
114114
m_progress_category_map.erase(progress_data.title);
115115
} else {
116116
--pos->second.first;
117117
}
118118
}
119119

120120
void ProgressManager::ReportProgress(
121-
const Progress::ProgressData &progress_data) {
121+
const Progress::ProgressData &progress_data, EventType type) {
122122
// The category bit only keeps track of when progress report categories have
123123
// started and ended, so clear the details and reset other fields when
124124
// broadcasting to it since that bit doesn't need that information.
125-
Debugger::ReportProgress(
126-
progress_data.progress_id, progress_data.title, "",
127-
Progress::kNonDeterministicTotal, Progress::kNonDeterministicTotal,
128-
progress_data.debugger_id, Debugger::eBroadcastBitProgressCategory);
125+
const uint64_t completed =
126+
(type == EventType::Begin) ? 0 : Progress::kNonDeterministicTotal;
127+
Debugger::ReportProgress(progress_data.progress_id, progress_data.title, "",
128+
completed, Progress::kNonDeterministicTotal,
129+
progress_data.debugger_id,
130+
Debugger::eBroadcastBitProgressCategory);
129131
}

lldb/unittests/Core/ProgressReportTest.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ TEST_F(ProgressReportTest, TestProgressManager) {
168168

169169
ASSERT_EQ(data->GetDetails(), "");
170170
ASSERT_FALSE(data->IsFinite());
171-
ASSERT_TRUE(data->GetCompleted());
171+
ASSERT_FALSE(data->GetCompleted());
172172
ASSERT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
173173
ASSERT_EQ(data->GetMessage(), "Progress report 1");
174174

@@ -199,7 +199,7 @@ TEST_F(ProgressReportTest, TestProgressManager) {
199199

200200
ASSERT_EQ(data->GetDetails(), "");
201201
ASSERT_FALSE(data->IsFinite());
202-
ASSERT_TRUE(data->GetCompleted());
202+
ASSERT_FALSE(data->GetCompleted());
203203
ASSERT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
204204
ASSERT_EQ(data->GetMessage(), "Overlapping report 1");
205205

0 commit comments

Comments
 (0)