forked from mirrors/gecko-dev
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
25 lines
788 B
C++
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
|