fune/xpcom/threads/VsyncTaskManager.cpp
Sean Feng 53d05dfbc0 Bug 1708070 - Use VsyncTaskManager::WillRunTask to change InputVsyncState r=smaug
Currently, we use `VsyncTaskManager::DidRunTask` to change state from
`RunVsync` to `NoPendingVsync`, however, the issue is that if the vsync
starts an event loop (for instance, by using requestAnimationFrame), and
the event loop starts another input task, Firefox crashes because input
tasks don't expect the state to be `RunVsync`.

So instead of using `DidRunTask`, we start to use `WillRunTask` to fix
it.

Differential Revision: https://phabricator.services.mozilla.com/D113613
2021-04-29 16:39:30 +00:00

25 lines
788 B
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "VsyncTaskManager.h"
#include "InputTaskManager.h"
namespace mozilla {
StaticRefPtr<VsyncTaskManager> VsyncTaskManager::gHighPriorityTaskManager;
void VsyncTaskManager::Init() {
gHighPriorityTaskManager = new VsyncTaskManager();
}
void VsyncTaskManager::WillRunTask() {
TaskManager::WillRunTask();
if (StaticPrefs::dom_input_events_strict_input_vsync_alignment()) {
InputTaskManager::Get()->NotifyVsync();
}
};
} // namespace mozilla