blob: 26eb250768f2fd86495755f24f69fb5b2c28b855 [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 WebViewScheduler_h
#define WebViewScheduler_h
#include "WebCommon.h"
#include "public/platform/BlameContext.h"
#include <memory>
namespace blink {
class WebFrameScheduler;
class BLINK_PLATFORM_EXPORT WebViewScheduler {
public:
virtual ~WebViewScheduler() {}
// The scheduler may throttle tasks associated with background pages.
virtual void setPageVisible(bool) = 0;
// Creates a new WebFrameScheduler. The caller is responsible for deleting
// it. All tasks executed by the frame scheduler will be attributed to
// |BlameContext|.
virtual std::unique_ptr<WebFrameScheduler> createFrameScheduler(
BlameContext*) = 0;
// Instructs this WebViewScheduler to use virtual time. When virtual time is
// enabled the system doesn't actually sleep for the delays between tasks
// before executing them. E.g: A-E are delayed tasks
//
// | A B C D E (normal)
// |-----------------------------> time
//
// |ABCDE (virtual time)
// |-----------------------------> time
virtual void enableVirtualTime() = 0;
// Returns true if virtual time is currently allowed to advance.
virtual bool virtualTimeAllowedToAdvance() const = 0;
enum class VirtualTimePolicy {
// In this policy virtual time is allowed to advance. If the blink scheduler
// runs out of immediate work, the virtual timebase will be incremented so
// that the next sceduled timer may fire. NOTE Tasks will be run in time
// order (as usual).
ADVANCE,
// In this policy virtual time is not allowed to advance. Delayed tasks
// posted to WebTaskRunners owned by any child WebFrameSchedulers will be
// paused, unless their scheduled run time is less than or equal to the
// current virtual time. Note non-delayed tasks will run as normal.
PAUSE,
// In this policy virtual time is allowed to advance unless there are
// pending network fetches associated any child WebFrameScheduler, or a
// document is being parsed on a background thread. Initially virtual time
// is not allowed to advance until we have seen at least one load. The aim
// being to try and make loading (more) deterministic.
DETERMINISTIC_LOADING
};
// Sets the virtual time policy, which is applied imemdiatly to all child
// WebFrameSchedulers.
virtual void setVirtualTimePolicy(VirtualTimePolicy) = 0;
};
} // namespace blink
#endif // WebViewScheduler