xpcom/threads/EventQueue.h
author Mike Hommey <mh+mozilla@glandium.org>
Thu, 17 Jan 2019 13:18:37 +0000
changeset 454388 c28522aaf3918c5f556c65432f8bf14a65bff65a
parent 453277 c9fcbe28afdadd45d371ba150ff9c1502a19c6e3
child 455541 0f5c896960f5147c3600c847209fb786dc6c1481
permissions -rw-r--r--
Bug 1520149 - Also disable the machine outliner on Android when LTO is enabled. r=dmajor Differential Revision: https://phabricator.services.mozilla.com/D16790

/* -*- 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_EventQueue_h
#define mozilla_EventQueue_h

#include "mozilla/AbstractEventQueue.h"
#include "mozilla/Queue.h"
#include "nsCOMPtr.h"

class nsIRunnable;

namespace mozilla {

class EventQueue final : public AbstractEventQueue {
 public:
  static const bool SupportsPrioritization = false;

  EventQueue() {}
  explicit EventQueue(EventPriority aPriority);

  void PutEvent(already_AddRefed<nsIRunnable>&& aEvent, EventPriority aPriority,
                const MutexAutoLock& aProofOfLock) final;
  already_AddRefed<nsIRunnable> GetEvent(
      EventPriority* aPriority, const MutexAutoLock& aProofOfLock) final;

  bool IsEmpty(const MutexAutoLock& aProofOfLock) final;
  bool HasReadyEvent(const MutexAutoLock& aProofOfLock) final;
  bool HasPendingHighPriorityEvents(const MutexAutoLock& aProofOfLock) final {
    // EventQueue doesn't support any prioritization.
    return false;
  }

  size_t Count(const MutexAutoLock& aProofOfLock) const final;
  already_AddRefed<nsIRunnable> PeekEvent(const MutexAutoLock& aProofOfLock);

  void EnableInputEventPrioritization(const MutexAutoLock& aProofOfLock) final {
  }
  void FlushInputEventPrioritization(const MutexAutoLock& aProofOfLock) final {}
  void SuspendInputEventPrioritization(
      const MutexAutoLock& aProofOfLock) final {}
  void ResumeInputEventPrioritization(const MutexAutoLock& aProofOfLock) final {
  }

  size_t SizeOfExcludingThis(
      mozilla::MallocSizeOf aMallocSizeOf) const override {
    return mQueue.ShallowSizeOfExcludingThis(aMallocSizeOf);
  }

 private:
  mozilla::Queue<nsCOMPtr<nsIRunnable>> mQueue;
};

}  // namespace mozilla

#endif  // mozilla_EventQueue_h