blob: 6d9002154c117929e3d477071b01a9b8371cff31 [file] [log] [blame]
// Copyright 2016 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.
#include "content/common/input/event_with_latency_info.h"
using blink::WebInputEvent;
namespace content {
ScopedWebInputEventWithLatencyInfo::ScopedWebInputEventWithLatencyInfo(
ui::ScopedWebInputEvent event,
const ui::LatencyInfo& latency_info)
: event_(std::move(event)), latency_(latency_info) {
}
ScopedWebInputEventWithLatencyInfo::~ScopedWebInputEventWithLatencyInfo() {}
bool ScopedWebInputEventWithLatencyInfo::CanCoalesceWith(
const ScopedWebInputEventWithLatencyInfo& other) const {
return ui::CanCoalesce(other.event(), event());
}
void ScopedWebInputEventWithLatencyInfo::CoalesceWith(
const ScopedWebInputEventWithLatencyInfo& other) {
// |other| should be a newer event than |this|.
if (other.latency_.trace_id() >= 0 && latency_.trace_id() >= 0)
DCHECK_GT(other.latency_.trace_id(), latency_.trace_id());
// New events get coalesced into older events, and the newer timestamp
// should always be preserved.
const double time_stamp_seconds = other.event().timeStampSeconds;
ui::Coalesce(other.event(), event_.get());
event_->timeStampSeconds = time_stamp_seconds;
// When coalescing two input events, we keep the oldest LatencyInfo
// since it will represent the longest latency.
other.latency_ = latency_;
other.latency_.set_coalesced();
}
const blink::WebInputEvent& ScopedWebInputEventWithLatencyInfo::event() const {
return *event_;
}
blink::WebInputEvent& ScopedWebInputEventWithLatencyInfo::event() {
return *event_;
}
} // namespace content