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 12 namespace blink { 13 class WebGestureEvent; 14 class WebMouseEvent; 15 class WebMouseWheelEvent; 16 class WebTouchEvent; 17 } 18 19 namespace content { 20 21 template <typename T> 22 class EventWithLatencyInfo { 23 public: 24 T event; 25 ui::LatencyInfo latency; 26 EventWithLatencyInfo(const T & e,const ui::LatencyInfo & l)27 EventWithLatencyInfo(const T& e, const ui::LatencyInfo& l) 28 : event(e), latency(l) {} 29 EventWithLatencyInfo()30 EventWithLatencyInfo() {} 31 CanCoalesceWith(const EventWithLatencyInfo & other)32 bool CanCoalesceWith(const EventWithLatencyInfo& other) 33 const WARN_UNUSED_RESULT { 34 return WebInputEventTraits::CanCoalesce(other.event, event); 35 } 36 CoalesceWith(const EventWithLatencyInfo & other)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 48 typedef EventWithLatencyInfo<blink::WebGestureEvent> 49 GestureEventWithLatencyInfo; 50 typedef EventWithLatencyInfo<blink::WebMouseWheelEvent> 51 MouseWheelEventWithLatencyInfo; 52 typedef EventWithLatencyInfo<blink::WebMouseEvent> 53 MouseEventWithLatencyInfo; 54 typedef EventWithLatencyInfo<blink::WebTouchEvent> 55 TouchEventWithLatencyInfo; 56 57 } // namespace content 58 59 #endif // CONTENT_BROWSER_RENDERER_HOST_EVENT_WITH_LATENCY_INFO_H_ 60