Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/common/include/display_device/retry_scheduler.h
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ namespace display_device {
}

try {
SchedulerStopToken scheduler_stop_token {[&]() {
SchedulerStopToken scheduler_stop_token {[this]() {
clearThreadLoopUnlocked();
}};
m_retry_function(*m_iface, scheduler_stop_token);
Expand Down Expand Up @@ -232,7 +232,7 @@ namespace display_device {
}

std::lock_guard lock {m_mutex};
SchedulerStopToken stop_token {[&]() {
SchedulerStopToken stop_token {[this]() {
stopUnlocked();
}};

Expand Down
23 changes: 13 additions & 10 deletions src/windows/settings_manager_apply.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -221,17 +221,18 @@ namespace display_device {
}
}

const auto try_change {[&](const std::string &new_device, const auto info_preamble, const auto error_log) {
auto &dd_api {*m_dd_api};
const auto try_change {[&current_primary_device, &dd_api, &guard_fn, &system_settings_touched](const std::string &new_device, const auto info_preamble, const auto error_log) {
if (current_primary_device != new_device) {
system_settings_touched = true;

DD_LOG(info) << info_preamble << toJson(new_device);
if (!m_dd_api->setAsPrimary(new_device)) {
if (!dd_api.setAsPrimary(new_device)) {
DD_LOG(error) << error_log;
return false;
}

guard_fn = win_utils::primaryGuardFn(*m_dd_api, current_primary_device);
guard_fn = win_utils::primaryGuardFn(dd_api, current_primary_device);
}

return true;
Expand Down Expand Up @@ -275,10 +276,11 @@ namespace display_device {
}
}

const auto try_change {[&](const DeviceDisplayModeMap &new_modes, const auto info_preamble, const auto error_log) {
auto &dd_api {*m_dd_api};
const auto try_change {[&current_display_modes, &dd_api, &guard_fn, &new_state, &system_settings_touched](const DeviceDisplayModeMap &new_modes, const auto info_preamble, const auto error_log) {
if (current_display_modes != new_modes) {
DD_LOG(info) << info_preamble << toJson(new_modes);
if (!m_dd_api->setDisplayModes(new_modes)) {
if (!dd_api.setDisplayModes(new_modes)) {
system_settings_touched = true;
DD_LOG(error) << error_log;
return false;
Expand All @@ -287,9 +289,9 @@ namespace display_device {
// It is possible that the display modes will not actually change even though the "current != new" condition is true.
// This is because of some additional internal checks that determine whether the change is actually needed.
// Therefore we should check the current display modes after the fact!
if (current_display_modes != m_dd_api->getCurrentDisplayModes(win_utils::flattenTopology(new_state.m_modified.m_topology))) {
if (current_display_modes != dd_api.getCurrentDisplayModes(win_utils::flattenTopology(new_state.m_modified.m_topology))) {
system_settings_touched = true;
guard_fn = win_utils::modeGuardFn(*m_dd_api, current_display_modes);
guard_fn = win_utils::modeGuardFn(dd_api, current_display_modes);
}
}

Expand Down Expand Up @@ -336,17 +338,18 @@ namespace display_device {
}
}

const auto try_change {[&](const HdrStateMap &new_states, const auto info_preamble, const auto error_log) {
auto &dd_api {*m_dd_api};
const auto try_change {[&current_hdr_states, &dd_api, &guard_fn, &system_settings_touched](const HdrStateMap &new_states, const auto info_preamble, const auto error_log) {
if (current_hdr_states != new_states) {
system_settings_touched = true;

DD_LOG(info) << info_preamble << toJson(new_states);
if (!m_dd_api->setHdrStates(new_states)) {
if (!dd_api.setHdrStates(new_states)) {
DD_LOG(error) << error_log;
return false;
}

guard_fn = win_utils::hdrStateGuardFn(*m_dd_api, current_hdr_states);
guard_fn = win_utils::hdrStateGuardFn(dd_api, current_hdr_states);
}

return true;
Expand Down
40 changes: 20 additions & 20 deletions tests/unit/general/test_retry_scheduler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ TEST_F_S(Schedule, SchedulingDurations) {
// Note: in this test we care that the delay is not less than the requested one, but we
// do not really have an upper ceiling...

const auto schedule_and_get_average_delays {[&](const std::vector<std::chrono::milliseconds> &durations) {
const auto schedule_and_get_average_delays {[this](const std::vector<std::chrono::milliseconds> &durations) {
m_impl.execute([](TestIface &iface) {
iface.m_durations.clear();
});
Expand Down Expand Up @@ -152,7 +152,7 @@ TEST_F_S(Schedule, SchedulerInteruptAndReplacement) {
}

TEST_F_S(Schedule, StoppedImmediately) {
m_impl.schedule([&](auto, auto &stop_token) {
m_impl.schedule([](auto, auto &stop_token) {
stop_token.requestStop();
},
{.m_sleep_durations = {1000ms}});
Expand All @@ -169,7 +169,7 @@ TEST_F_S(Schedule, Execution, Immediate) {
int first_call_delay {-1};
int second_call_delay {-1};
auto prev = std::chrono::high_resolution_clock::now();
m_impl.schedule([&](auto, auto &stop_token) {
m_impl.schedule([&first_call_delay, &first_call_scheduler_thread_id, &prev, &second_call_delay, &second_call_scheduler_thread_id](auto, auto &stop_token) {
const auto now = std::chrono::high_resolution_clock::now();
const auto duration = static_cast<int>(std::chrono::duration_cast<std::chrono::milliseconds>(now - prev).count());
prev = now;
Expand Down Expand Up @@ -211,7 +211,7 @@ TEST_F_S(Schedule, Execution, ImmediateWithSleep) {
int first_call_delay {-1};
int second_call_delay {-1};
auto prev = std::chrono::high_resolution_clock::now();
m_impl.schedule([&](auto, auto &stop_token) {
m_impl.schedule([&first_call_delay, &first_call_scheduler_thread_id, &prev, &second_call_delay, &second_call_scheduler_thread_id](auto, auto &stop_token) {
const auto now = std::chrono::high_resolution_clock::now();
const auto duration = static_cast<int>(std::chrono::duration_cast<std::chrono::milliseconds>(now - prev).count());
prev = now;
Expand Down Expand Up @@ -253,7 +253,7 @@ TEST_F_S(Schedule, Execution, ScheduledOnly) {
int first_call_delay {-1};
int second_call_delay {-1};
auto prev = std::chrono::high_resolution_clock::now();
m_impl.schedule([&](auto, auto &stop_token) {
m_impl.schedule([&first_call_delay, &first_call_scheduler_thread_id, &prev, &second_call_delay, &second_call_scheduler_thread_id](auto, auto &stop_token) {
const auto now = std::chrono::high_resolution_clock::now();
const auto duration = static_cast<int>(std::chrono::duration_cast<std::chrono::milliseconds>(now - prev).count());
prev = now;
Expand Down Expand Up @@ -290,7 +290,7 @@ TEST_F_S(Schedule, ExceptionThrown, DuringImmediateCall) {
auto &logger {display_device::Logger::get()};

int counter_a {0};
m_impl.schedule([&](auto, auto &) {
m_impl.schedule([&counter_a](auto, auto &) {
counter_a++;
},
{.m_sleep_durations = {1ms}});
Expand All @@ -304,7 +304,7 @@ TEST_F_S(Schedule, ExceptionThrown, DuringImmediateCall) {
});

EXPECT_TRUE(m_impl.isScheduled());
m_impl.schedule([&](auto, auto &) {
m_impl.schedule([](auto, auto &) {
throw std::runtime_error("Get rekt!");
},
{.m_sleep_durations = {1ms}});
Expand All @@ -313,7 +313,7 @@ TEST_F_S(Schedule, ExceptionThrown, DuringImmediateCall) {

// Verify that scheduler still works
int counter_b {0};
m_impl.schedule([&](auto, auto &) {
m_impl.schedule([&counter_b](auto, auto &) {
counter_b++;
},
{.m_sleep_durations = {1ms}});
Expand All @@ -335,7 +335,7 @@ TEST_F_S(Schedule, ExceptionThrown, DuringScheduledCall) {

bool first_call {true};
EXPECT_EQ(output, "");
m_impl.schedule([&](auto, auto &) {
m_impl.schedule([&first_call](auto, auto &) {
if (!first_call) {
throw std::runtime_error("Get rekt!");
}
Expand All @@ -350,7 +350,7 @@ TEST_F_S(Schedule, ExceptionThrown, DuringScheduledCall) {

// Verify that scheduler still works
int counter {0};
m_impl.schedule([&](auto, auto &) {
m_impl.schedule([&counter](auto, auto &) {
counter++;
},
{.m_sleep_durations = {1ms}});
Expand Down Expand Up @@ -381,7 +381,7 @@ TEST_F_S(Execute, Const, NullptrCallbackProvided) {

TEST_F_S(Execute, SchedulerNotStopped) {
int counter {0};
m_impl.schedule([&](auto, auto &) {
m_impl.schedule([&counter](auto, auto &) {
counter++;
},
{.m_sleep_durations = {1ms}});
Expand All @@ -391,7 +391,7 @@ TEST_F_S(Execute, SchedulerNotStopped) {

int counter_before_sleep {0};
int counter_after_sleep {0};
m_impl.execute([&](auto, auto &) {
m_impl.execute([&counter, &counter_after_sleep, &counter_before_sleep](auto, auto &) {
counter_before_sleep = counter;
std::this_thread::sleep_for(15ms);
counter_after_sleep = counter;
Expand All @@ -410,7 +410,7 @@ TEST_F_S(Execute, SchedulerNotStopped) {

TEST_F_S(Execute, SchedulerStopped) {
int counter {0};
m_impl.schedule([&](auto, auto &) {
m_impl.schedule([&counter](auto, auto &) {
counter++;
},
{.m_sleep_durations = {1ms}});
Expand All @@ -420,7 +420,7 @@ TEST_F_S(Execute, SchedulerStopped) {

int counter_before_sleep {0};
int counter_after_sleep {0};
m_impl.execute([&](auto, auto &stop_token) {
m_impl.execute([&counter, &counter_after_sleep, &counter_before_sleep](auto, auto &stop_token) {
counter_before_sleep = counter;
std::this_thread::sleep_for(15ms);
counter_after_sleep = counter;
Expand All @@ -440,7 +440,7 @@ TEST_F_S(Execute, SchedulerStopped, ExceptThatItWasNotRunning) {
EXPECT_FALSE(m_impl.isScheduled());

int counter {0};
m_impl.schedule([&](auto, auto &) {
m_impl.schedule([&counter](auto, auto &) {
counter++;
},
{.m_sleep_durations = {1ms}});
Expand All @@ -454,7 +454,7 @@ TEST_F_S(Execute, SchedulerStopped, ExceptThatItWasNotRunning) {

TEST_F_S(Execute, ExceptionThrown) {
int counter {0};
m_impl.schedule([&](auto, auto &) {
m_impl.schedule([&counter](auto, auto &) {
counter++;
},
{.m_sleep_durations = {1ms}});
Expand All @@ -477,7 +477,7 @@ TEST_F_S(Execute, ExceptionThrown) {

TEST_F_S(Execute, ExceptionThrown, BeforeStopToken) {
int counter {0};
m_impl.schedule([&](auto, auto &) {
m_impl.schedule([&counter](auto, auto &) {
counter++;
},
{.m_sleep_durations = {1ms}});
Expand All @@ -501,7 +501,7 @@ TEST_F_S(Execute, ExceptionThrown, BeforeStopToken) {

TEST_F_S(Execute, ExceptionThrown, AfterStopToken) {
int counter {0};
m_impl.schedule([&](auto, auto &) {
m_impl.schedule([&counter](auto, auto &) {
counter++;
},
{.m_sleep_durations = {1ms}});
Expand Down Expand Up @@ -612,7 +612,7 @@ TEST_F_S(Stop) {
EXPECT_FALSE(m_impl.isScheduled());

int counter {0};
m_impl.schedule([&](auto, auto &) {
m_impl.schedule([&counter](auto, auto &) {
counter++;
},
{.m_sleep_durations = {1ms}});
Expand All @@ -630,7 +630,7 @@ TEST_F_S(ThreadCleanupInDestructor) {
{
display_device::RetryScheduler<TestIface> scheduler {std::make_unique<TestIface>()};

scheduler.schedule([&](auto, auto &) {
scheduler.schedule([&counter](auto, auto &) {
counter++;
},
{.m_sleep_durations = {1ms}});
Expand Down
Loading