Skip to content

Commit 7d9c94f

Browse files
author
git apple-llvm automerger
committed
Merge commit 'a6451e53604c' from swift/release/6.0 into stable/20230725
2 parents 303a8f0 + a6451e5 commit 7d9c94f

File tree

2 files changed

+76
-2
lines changed

2 files changed

+76
-2
lines changed

lldb/source/Core/Progress.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ Progress::~Progress() {
4545
// Make sure to always report progress completed when this object is
4646
// destructed so it indicates the progress dialog/activity should go away.
4747
std::lock_guard<std::mutex> guard(m_mutex);
48-
if (!m_completed)
49-
m_completed = m_total;
48+
m_completed = m_total;
5049
ReportProgress();
5150

5251
// Report to the ProgressManager if that subsystem is enabled.

lldb/unittests/Core/ProgressReportTest.cpp

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,81 @@ TEST_F(ProgressReportTest, TestReportCreation) {
133133
EXPECT_EQ(data->GetMessage(), "Progress report 1: Starting report 1");
134134
}
135135

136+
TEST_F(ProgressReportTest, TestReportDestructionWithPartialProgress) {
137+
ListenerSP listener_sp = CreateListenerFor(lldb::eBroadcastBitProgress);
138+
EventSP event_sp;
139+
const ProgressEventData *data;
140+
141+
// Create a finite progress report and only increment to a non-completed
142+
// state before destruction.
143+
{
144+
Progress progress("Finite progress", "Report 1", 100);
145+
progress.Increment(3);
146+
}
147+
148+
// Verify that the progress in the events are:
149+
// 1. At construction: 0 out of 100
150+
// 2. At increment: 3 out of 100
151+
// 3. At destruction: 100 out of 100
152+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
153+
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
154+
EXPECT_EQ(data->GetDetails(), "Report 1");
155+
EXPECT_TRUE(data->IsFinite());
156+
EXPECT_EQ(data->GetCompleted(), (uint64_t)0);
157+
EXPECT_EQ(data->GetTotal(), (uint64_t)100);
158+
EXPECT_EQ(data->GetMessage(), "Finite progress: Report 1");
159+
160+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
161+
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
162+
EXPECT_EQ(data->GetDetails(), "Report 1");
163+
EXPECT_TRUE(data->IsFinite());
164+
EXPECT_EQ(data->GetCompleted(), (uint64_t)3);
165+
EXPECT_EQ(data->GetTotal(), (uint64_t)100);
166+
EXPECT_EQ(data->GetMessage(), "Finite progress: Report 1");
167+
168+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
169+
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
170+
EXPECT_EQ(data->GetDetails(), "Report 1");
171+
EXPECT_TRUE(data->IsFinite());
172+
EXPECT_EQ(data->GetCompleted(), (uint64_t)100);
173+
EXPECT_EQ(data->GetTotal(), (uint64_t)100);
174+
EXPECT_EQ(data->GetMessage(), "Finite progress: Report 1");
175+
176+
// Create an infinite progress report and increment by some amount.
177+
{
178+
Progress progress("Infinite progress", "Report 2");
179+
progress.Increment(3);
180+
}
181+
182+
// Verify that the progress in the events are:
183+
// 1. At construction: 0
184+
// 2. At increment: 3
185+
// 3. At destruction: Progress::kNonDeterministicTotal
186+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
187+
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
188+
EXPECT_EQ(data->GetDetails(), "Report 2");
189+
EXPECT_FALSE(data->IsFinite());
190+
EXPECT_EQ(data->GetCompleted(), (uint64_t)0);
191+
EXPECT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
192+
EXPECT_EQ(data->GetMessage(), "Infinite progress: Report 2");
193+
194+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
195+
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
196+
EXPECT_EQ(data->GetDetails(), "Report 2");
197+
EXPECT_FALSE(data->IsFinite());
198+
EXPECT_EQ(data->GetCompleted(), (uint64_t)3);
199+
EXPECT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
200+
EXPECT_EQ(data->GetMessage(), "Infinite progress: Report 2");
201+
202+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
203+
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
204+
EXPECT_EQ(data->GetDetails(), "Report 2");
205+
EXPECT_FALSE(data->IsFinite());
206+
EXPECT_EQ(data->GetCompleted(), Progress::kNonDeterministicTotal);
207+
EXPECT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
208+
EXPECT_EQ(data->GetMessage(), "Infinite progress: Report 2");
209+
}
210+
136211
TEST_F(ProgressReportTest, TestProgressManager) {
137212
ListenerSP listener_sp =
138213
CreateListenerFor(lldb::eBroadcastBitProgressCategory);

0 commit comments

Comments
 (0)