drm: don't schedule new frame events on disabled outputs (#52)

* drm: don't schedule new frame events on disabled outputs

* e

* test
This commit is contained in:
Vaxry 2024-08-18 19:24:52 +01:00 committed by GitHub
parent 2d29c86d69
commit 2bff4a4521
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 6 additions and 2 deletions

View file

@ -209,6 +209,8 @@ namespace Aquamarine {
Hyprutils::Math::Vector2D cursorPos; // without hotspot
Hyprutils::Math::Vector2D cursorHotspot;
bool enabledState = true; // actual enabled state. Should be synced with state->state().enabled after a new frame
private:
CDRMOutput(const std::string& name_, Hyprutils::Memory::CWeakPointer<CDRMBackend> backend_, Hyprutils::Memory::CSharedPointer<SDRMConnector> connector_);

View file

@ -822,7 +822,7 @@ static void handlePF(int fd, unsigned seq, unsigned tv_sec, unsigned tv_usec, un
.flags = flags,
});
if (BACKEND->sessionActive() && !pageFlip->connector->frameEventScheduled)
if (BACKEND->sessionActive() && !pageFlip->connector->frameEventScheduled && pageFlip->connector->output->enabledState)
pageFlip->connector->output->events.frame.emit();
}
@ -1322,6 +1322,8 @@ void Aquamarine::SDRMConnector::applyCommit(const SDRMConnectorCommitData& data)
if (output->state->state().committed & COutputState::AQ_OUTPUT_STATE_MODE)
refresh = calculateRefresh(data.modeInfo);
output->enabledState = output->state->state().enabled;
}
void Aquamarine::SDRMConnector::rollbackCommit(const SDRMConnectorCommitData& data) {
@ -1683,7 +1685,7 @@ void Aquamarine::CDRMOutput::scheduleFrame(const scheduleFrameReason reason) {
connector->isPageFlipPending, connector->frameEventScheduled)));
needsFrame = true;
if (connector->isPageFlipPending || connector->frameEventScheduled)
if (connector->isPageFlipPending || connector->frameEventScheduled || !enabledState)
return;
connector->frameEventScheduled = true;