blob: 4c4863cb99f16462d98f88578c8db7abb8fc6d37 [file] [log] [blame]
// Copyright 2019 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_RENDERER_PLATFORM_SCHEDULER_MAIN_THREAD_PENDING_USER_INPUT_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_MAIN_THREAD_PENDING_USER_INPUT_H_
#include "third_party/blink/public/common/input/web_input_event.h"
#include "third_party/blink/public/common/input/web_input_event_attribution.h"
#include "third_party/blink/renderer/platform/platform_export.h"
#include "third_party/blink/renderer/platform/scheduler/main_thread/attribution_group.h"
#include "third_party/blink/renderer/platform/wtf/hash_map.h"
#include "third_party/blink/renderer/platform/wtf/vector.h"
namespace blink {
namespace scheduler {
class PLATFORM_EXPORT PendingUserInput {
DISALLOW_NEW();
public:
// Handles the dispatch of WebInputEvents from the main thread scheduler,
// keeping track of the set of in-flight input events.
class PLATFORM_EXPORT Monitor {
DISALLOW_NEW();
public:
Monitor() = default;
void OnEnqueue(WebInputEvent::Type, const WebInputEventAttribution&);
void OnDequeue(WebInputEvent::Type, const WebInputEventAttribution&);
// Returns a list of all unique attributions that are marked for event
// dispatch. If |include_continuous| is true, include event types from
// "continuous" sources (see PendingUserInput::IsContinuousEventTypes).
Vector<WebInputEventAttribution> Info(bool include_continuous) const;
private:
struct EventCounter {
EventCounter() = default;
size_t num_discrete = 0;
size_t num_continuous = 0;
};
// A mapping between attributions to pending events.
HashMap<AttributionGroup, EventCounter> pending_events_;
DISALLOW_COPY_AND_ASSIGN(Monitor);
};
PendingUserInput() = delete;
// Returns true if the given blink event type is considered to be sampled
// from a continuous source.
// https://wicg.github.io/is-input-pending/#continuousevents
static bool IsContinuousEventType(WebInputEvent::Type);
DISALLOW_COPY_AND_ASSIGN(PendingUserInput);
};
} // namespace scheduler
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_MAIN_THREAD_PENDING_USER_INPUT_H_