1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CONTENT_BROWSER_RENDERER_HOST_EVENT_WITH_LATENCY_INFO_H_ 6#define CONTENT_BROWSER_RENDERER_HOST_EVENT_WITH_LATENCY_INFO_H_ 7 8#include "ui/events/latency_info.h" 9 10#include "content/common/input/web_input_event_traits.h" 11 12namespace blink { 13class WebGestureEvent; 14class WebMouseEvent; 15class WebMouseWheelEvent; 16class WebTouchEvent; 17} 18 19namespace content { 20 21template <typename T> 22class EventWithLatencyInfo { 23 public: 24 T event; 25 ui::LatencyInfo latency; 26 27 EventWithLatencyInfo(const T& e, const ui::LatencyInfo& l) 28 : event(e), latency(l) {} 29 30 EventWithLatencyInfo() {} 31 32 bool CanCoalesceWith(const EventWithLatencyInfo& other) 33 const WARN_UNUSED_RESULT { 34 return WebInputEventTraits::CanCoalesce(other.event, event); 35 } 36 37 void CoalesceWith(const EventWithLatencyInfo& other) { 38 WebInputEventTraits::Coalesce(other.event, &event); 39 // When coalescing two input events, we keep the oldest LatencyInfo 40 // for Telemetry latency test since it will represent the longest 41 // latency. 42 if (other.latency.trace_id >= 0 && 43 (latency.trace_id < 0 || other.latency.trace_id < latency.trace_id)) 44 latency = other.latency; 45 } 46}; 47 48typedef EventWithLatencyInfo<blink::WebGestureEvent> 49 GestureEventWithLatencyInfo; 50typedef EventWithLatencyInfo<blink::WebMouseWheelEvent> 51 MouseWheelEventWithLatencyInfo; 52typedef EventWithLatencyInfo<blink::WebMouseEvent> 53 MouseEventWithLatencyInfo; 54typedef EventWithLatencyInfo<blink::WebTouchEvent> 55 TouchEventWithLatencyInfo; 56 57} // namespace content 58 59#endif // CONTENT_BROWSER_RENDERER_HOST_EVENT_WITH_LATENCY_INFO_H_ 60