Blame layout/ipc/VsyncChild.cpp

Packit f0b94e
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
Packit f0b94e
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
Packit f0b94e
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit f0b94e
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit f0b94e
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit f0b94e
Packit f0b94e
#include "VsyncChild.h"
Packit f0b94e
Packit f0b94e
#include "mozilla/SchedulerGroup.h"
Packit f0b94e
#include "mozilla/VsyncDispatcher.h"
Packit f0b94e
#include "nsThreadUtils.h"
Packit f0b94e
Packit f0b94e
namespace mozilla {
Packit f0b94e
namespace layout {
Packit f0b94e
Packit f0b94e
VsyncChild::VsyncChild()
Packit f0b94e
    : mObservingVsync(false),
Packit f0b94e
      mIsShutdown(false),
Packit f0b94e
      mVsyncRate(TimeDuration::Forever()) {
Packit f0b94e
  MOZ_ASSERT(NS_IsMainThread());
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
VsyncChild::~VsyncChild() { MOZ_ASSERT(NS_IsMainThread()); }
Packit f0b94e
Packit f0b94e
bool VsyncChild::SendObserve() {
Packit f0b94e
  MOZ_ASSERT(NS_IsMainThread());
Packit f0b94e
  if (!mObservingVsync && !mIsShutdown) {
Packit f0b94e
    mObservingVsync = true;
Packit f0b94e
    PVsyncChild::SendObserve();
Packit f0b94e
  }
Packit f0b94e
  return true;
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
bool VsyncChild::SendUnobserve() {
Packit f0b94e
  MOZ_ASSERT(NS_IsMainThread());
Packit f0b94e
  if (mObservingVsync && !mIsShutdown) {
Packit f0b94e
    mObservingVsync = false;
Packit f0b94e
    PVsyncChild::SendUnobserve();
Packit f0b94e
  }
Packit f0b94e
  return true;
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
void VsyncChild::ActorDestroy(ActorDestroyReason aActorDestroyReason) {
Packit f0b94e
  MOZ_ASSERT(NS_IsMainThread());
Packit f0b94e
  MOZ_ASSERT(!mIsShutdown);
Packit f0b94e
  mIsShutdown = true;
Packit f0b94e
  mObserver = nullptr;
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
mozilla::ipc::IPCResult VsyncChild::RecvNotify(
Packit f0b94e
    const TimeStamp& aVsyncTimestamp) {
Packit f0b94e
  MOZ_ASSERT(NS_IsMainThread());
Packit f0b94e
  MOZ_ASSERT(!mIsShutdown);
Packit f0b94e
Packit f0b94e
  SchedulerGroup::MarkVsyncRan();
Packit f0b94e
  if (mObservingVsync && mObserver) {
Packit f0b94e
    mObserver->NotifyVsync(aVsyncTimestamp);
Packit f0b94e
  }
Packit f0b94e
  return IPC_OK();
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
void VsyncChild::SetVsyncObserver(VsyncObserver* aVsyncObserver) {
Packit f0b94e
  MOZ_ASSERT(NS_IsMainThread());
Packit f0b94e
  mObserver = aVsyncObserver;
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
TimeDuration VsyncChild::GetVsyncRate() {
Packit f0b94e
  if (mVsyncRate == TimeDuration::Forever()) {
Packit f0b94e
    PVsyncChild::SendRequestVsyncRate();
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  return mVsyncRate;
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
TimeDuration VsyncChild::VsyncRate() { return mVsyncRate; }
Packit f0b94e
Packit f0b94e
mozilla::ipc::IPCResult VsyncChild::RecvVsyncRate(const float& aVsyncRate) {
Packit f0b94e
  mVsyncRate = TimeDuration::FromMilliseconds(aVsyncRate);
Packit f0b94e
  return IPC_OK();
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
}  // namespace layout
Packit f0b94e
}  // namespace mozilla