author Sebastian Hengst <>
Fri, 11 Aug 2017 09:28:06 +0200
changeset 374260 dd34bd64de6a02be6860e14c23f90c8613e72c56
parent 322595 39ac4382a2c019178604b90acd816753fe142908
child 388790 905239391e05483e8fb221378dd2092c5a0df8b7
permissions -rw-r--r--
Backed out changeset 9158ca4292bb (bug 1380081)

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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 */

#ifndef mozilla_layout_ipc_VsyncParent_h
#define mozilla_layout_ipc_VsyncParent_h

#include "mozilla/layout/PVsyncParent.h"
#include "mozilla/VsyncDispatcher.h"
#include "nsCOMPtr.h"
#include "mozilla/RefPtr.h"

class nsIThread;

namespace mozilla {

namespace ipc {
class BackgroundParentImpl;
} // namespace ipc

namespace layout {

// Use PBackground thread in the main process to send vsync notifications to
// content process. This actor will be released when its parent protocol calls
// DeallocPVsyncParent().
class VsyncParent final : public PVsyncParent,
                          public VsyncObserver
  friend class mozilla::ipc::BackgroundParentImpl;

  static already_AddRefed<VsyncParent> Create();

  virtual ~VsyncParent();

  virtual bool NotifyVsync(TimeStamp aTimeStamp) override;
  virtual mozilla::ipc::IPCResult RecvRequestVsyncRate() override;

  virtual mozilla::ipc::IPCResult RecvObserve() override;
  virtual mozilla::ipc::IPCResult RecvUnobserve() override;
  virtual void ActorDestroy(ActorDestroyReason aActorDestroyReason) override;

  void DispatchVsyncEvent(TimeStamp aTimeStamp);

  bool mObservingVsync;
  bool mDestroyed;
  nsCOMPtr<nsIThread> mBackgroundThread;
  RefPtr<RefreshTimerVsyncDispatcher> mVsyncDispatcher;

} // namespace layout
} // namespace mozilla

#endif  //mozilla_layout_ipc_VsyncParent_h