gecko-dev/xpcom/threads/VsyncTaskManager.h
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

26 lines
807 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/. */
#ifndef mozilla_VsyncTaskManager_h
#define mozilla_VsyncTaskManager_h
#include "TaskController.h"
namespace mozilla {
class VsyncTaskManager : public TaskManager {
public:
static VsyncTaskManager* Get() { return gHighPriorityTaskManager.get(); }
static void Cleanup() { gHighPriorityTaskManager = nullptr; }
static void Init();
void WillRunTask() override;
private:
static StaticRefPtr<VsyncTaskManager> gHighPriorityTaskManager;
};
} // namespace mozilla
#endif