blob: 18106161e92684bbb784b3d3e3260bc920d54a13 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_SCHEDULER_WEB_THREAD_SCHEDULER_H_
#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_SCHEDULER_WEB_THREAD_SCHEDULER_H_
#include "base/macros.h"
#include "base/single_thread_task_runner.h"
#include "third_party/blink/public/platform/scheduler/single_thread_idle_task_runner.h"
#include "third_party/blink/public/platform/web_common.h"
namespace blink {
namespace scheduler {
class BLINK_PLATFORM_EXPORT WebThreadScheduler {
public:
virtual ~WebThreadScheduler() = default;
// Returns the default task runner.
virtual scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner() = 0;
// Returns the idle task runner. Tasks posted to this runner may be reordered
// relative to other task types and may be starved for an arbitrarily long
// time if no idle time is available.
virtual scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() = 0;
virtual scoped_refptr<base::SingleThreadTaskRunner> IPCTaskRunner() = 0;
// Returns true if there is high priority work pending on the main thread
// and the caller should yield to let the scheduler service that work. Note
// that this is a stricter condition than |IsHighPriorityWorkAnticipated|,
// restricted to the case where real work is pending.
// Must be called from the thread this scheduler was created on.
virtual bool ShouldYieldForHighPriorityWork() = 0;
// Returns true if a currently running idle task could exceed its deadline
// without impacting user experience too much. This should only be used if
// there is a task which cannot be pre-empted and is likely to take longer
// than the largest expected idle task deadline. It should NOT be polled to
// check whether more work can be performed on the current idle task after
// its deadline has expired - post a new idle task for the continuation of the
// work in this case.
// Must be called from the thread this scheduler was created on.
virtual bool CanExceedIdleDeadlineIfRequired() const = 0;
// Shuts down the scheduler by dropping any remaining pending work in the work
// queues. After this call any work posted to the task runners will be
// silently dropped.
virtual void Shutdown() = 0;
protected:
WebThreadScheduler() = default;
DISALLOW_COPY_AND_ASSIGN(WebThreadScheduler);
};
} // namespace scheduler
} // namespace blink
#endif // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_SCHEDULER_WEB_THREAD_SCHEDULER_H_