12385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
22385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// Use of this source code is governed by a BSD-style license that can be
32385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// found in the LICENSE file.
42385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ui/events/latency_info.h"
62385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
72385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
82385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
92385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochnamespace ui {
102385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
112385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen MurdochTEST(LatencyInfoTest, AddTwoSeparateEvent) {
122385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  LatencyInfo info;
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  info.AddLatencyNumberWithTimestamp(INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT,
142385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     0,
152385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     1,
162385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     base::TimeTicks::FromInternalValue(100),
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                     1);
182385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  info.AddLatencyNumberWithTimestamp(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
192385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     1,
202385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     5,
212385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     base::TimeTicks::FromInternalValue(1000),
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                     2);
232385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
242385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(info.latency_components.size(), 2u);
252385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  LatencyInfo::LatencyComponent component;
262385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_FALSE(
272385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      info.FindLatency(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, &component));
282385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_FALSE(
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      info.FindLatency(INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 1, &component));
302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_TRUE(
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      info.FindLatency(INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, &component));
322385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.sequence_number, 1);
332385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_count, 1u);
342385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_time.ToInternalValue(), 100);
352385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_TRUE(
362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      info.FindLatency(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 1, &component));
372385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.sequence_number, 5);
382385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_count, 2u);
392385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_time.ToInternalValue(), 1000);
402385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
412385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
422385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen MurdochTEST(LatencyInfoTest, AddTwoSameEvent) {
432385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  LatencyInfo info;
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  info.AddLatencyNumberWithTimestamp(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
452385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     0,
462385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     30,
472385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     base::TimeTicks::FromInternalValue(100),
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                     2);
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  info.AddLatencyNumberWithTimestamp(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
502385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     0,
512385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     13,
522385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     base::TimeTicks::FromInternalValue(200),
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                     3);
542385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
552385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(info.latency_components.size(), 1u);
562385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  LatencyInfo::LatencyComponent component;
572385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_FALSE(
582385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      info.FindLatency(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, &component));
592385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_FALSE(
604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      info.FindLatency(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 1, &component));
612385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_TRUE(
624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      info.FindLatency(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, &component));
632385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.sequence_number, 30);
642385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_count, 5u);
652385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_time.ToInternalValue(), (100 * 2 + 200 * 3) / 5);
662385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
672385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
682385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen MurdochTEST(LatencyInfoTest, ClearEvents) {
692385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  LatencyInfo info;
704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  info.AddLatencyNumberWithTimestamp(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
712385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     0,
722385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     30,
732385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     base::TimeTicks::FromInternalValue(100),
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                     2);
752385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
762385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(info.latency_components.size(), 1u);
772385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  info.Clear();
782385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(info.latency_components.size(), 0u);
792385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
802385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
812385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}  // namespace ui
82