diff --git a/src/common/include/display_device/retry_scheduler.h b/src/common/include/display_device/retry_scheduler.h index a016770..0ba037a 100644 --- a/src/common/include/display_device/retry_scheduler.h +++ b/src/common/include/display_device/retry_scheduler.h @@ -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); @@ -232,7 +232,7 @@ namespace display_device { } std::lock_guard lock {m_mutex}; - SchedulerStopToken stop_token {[&]() { + SchedulerStopToken stop_token {[this]() { stopUnlocked(); }}; diff --git a/src/windows/settings_manager_apply.cpp b/src/windows/settings_manager_apply.cpp index 50c136b..ad1f19c 100644 --- a/src/windows/settings_manager_apply.cpp +++ b/src/windows/settings_manager_apply.cpp @@ -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 {[¤t_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; @@ -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 {[¤t_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; @@ -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); } } @@ -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 {[¤t_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; diff --git a/tests/unit/general/test_retry_scheduler.cpp b/tests/unit/general/test_retry_scheduler.cpp index e2fb7ce..3808841 100644 --- a/tests/unit/general/test_retry_scheduler.cpp +++ b/tests/unit/general/test_retry_scheduler.cpp @@ -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 &durations) { + const auto schedule_and_get_average_delays {[this](const std::vector &durations) { m_impl.execute([](TestIface &iface) { iface.m_durations.clear(); }); @@ -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}}); @@ -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(std::chrono::duration_cast(now - prev).count()); prev = now; @@ -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(std::chrono::duration_cast(now - prev).count()); prev = now; @@ -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(std::chrono::duration_cast(now - prev).count()); prev = now; @@ -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}}); @@ -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}}); @@ -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}}); @@ -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!"); } @@ -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}}); @@ -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}}); @@ -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; @@ -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}}); @@ -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; @@ -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}}); @@ -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}}); @@ -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}}); @@ -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}}); @@ -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}}); @@ -630,7 +630,7 @@ TEST_F_S(ThreadCleanupInDestructor) { { display_device::RetryScheduler scheduler {std::make_unique()}; - scheduler.schedule([&](auto, auto &) { + scheduler.schedule([&counter](auto, auto &) { counter++; }, {.m_sleep_durations = {1ms}});