mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	requestAnimationFrame callbacks are supposed to be synchronized with the vsync events into the refresh driver for the window. This patch adds an IPDL actor implementation for workers to subscribe as necessary to vsync events. Differential Revision: https://phabricator.services.mozilla.com/D130265
		
			
				
	
	
		
			52 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			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_dom_ipc_VsyncWorkerChild_h
 | 
						|
#define mozilla_dom_ipc_VsyncWorkerChild_h
 | 
						|
 | 
						|
#include "mozilla/dom/VsyncChild.h"
 | 
						|
#include "mozilla/RefPtr.h"
 | 
						|
#include "nsISupportsImpl.h"
 | 
						|
 | 
						|
namespace mozilla::dom {
 | 
						|
class DedicatedWorkerGlobalScope;
 | 
						|
class IPCWorkerRef;
 | 
						|
class WorkerPrivate;
 | 
						|
 | 
						|
// The PVsyncWorkerChild actor receives a vsync event from the main process and
 | 
						|
// delivers it to the child process. This is specific for workers which wish to
 | 
						|
// subscribe to vsync events to drive requestAnimationFrame callbacks.
 | 
						|
class VsyncWorkerChild final : public VsyncChild {
 | 
						|
  NS_INLINE_DECL_REFCOUNTING(VsyncWorkerChild, override)
 | 
						|
 | 
						|
  friend class PVsyncChild;
 | 
						|
 | 
						|
 public:
 | 
						|
  VsyncWorkerChild();
 | 
						|
 | 
						|
  bool Initialize(WorkerPrivate* aWorkerPrivate);
 | 
						|
 | 
						|
  void Destroy();
 | 
						|
 | 
						|
  void TryObserve();
 | 
						|
 | 
						|
  void TryUnobserve();
 | 
						|
 | 
						|
 private:
 | 
						|
  ~VsyncWorkerChild() override;
 | 
						|
 | 
						|
  mozilla::ipc::IPCResult RecvNotify(const VsyncEvent& aVsync,
 | 
						|
                                     const float& aVsyncRate) override;
 | 
						|
 | 
						|
  void ActorDestroy(ActorDestroyReason aActorDestroyReason) override;
 | 
						|
 | 
						|
  RefPtr<IPCWorkerRef> mWorkerRef;
 | 
						|
  bool mObserving = false;
 | 
						|
};
 | 
						|
 | 
						|
}  // namespace mozilla::dom
 | 
						|
 | 
						|
#endif  // mozilla_dom_ipc_VsyncWorkerChild_h
 |