latency_info_unittest.cc revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
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),
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                     1,
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                     true);
192385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  info.AddLatencyNumberWithTimestamp(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
202385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     1,
212385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     5,
222385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     base::TimeTicks::FromInternalValue(1000),
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                     2,
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                     true);
252385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
262385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(info.latency_components.size(), 2u);
272385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  LatencyInfo::LatencyComponent component;
282385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_FALSE(
292385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      info.FindLatency(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, &component));
302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_FALSE(
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      info.FindLatency(INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 1, &component));
322385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_TRUE(
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      info.FindLatency(INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, &component));
342385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.sequence_number, 1);
352385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_count, 1u);
362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_time.ToInternalValue(), 100);
372385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_TRUE(
382385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      info.FindLatency(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 1, &component));
392385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.sequence_number, 5);
402385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_count, 2u);
412385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_time.ToInternalValue(), 1000);
422385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
432385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
442385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen MurdochTEST(LatencyInfoTest, AddTwoSameEvent) {
452385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  LatencyInfo info;
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  info.AddLatencyNumberWithTimestamp(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
472385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     0,
482385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     30,
492385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     base::TimeTicks::FromInternalValue(100),
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                     2,
514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                     true);
524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  info.AddLatencyNumberWithTimestamp(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
532385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     0,
542385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     13,
552385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     base::TimeTicks::FromInternalValue(200),
564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                     3,
574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                     true);
582385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
592385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(info.latency_components.size(), 1u);
602385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  LatencyInfo::LatencyComponent component;
612385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_FALSE(
622385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      info.FindLatency(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, &component));
632385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_FALSE(
644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      info.FindLatency(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 1, &component));
652385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_TRUE(
664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      info.FindLatency(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, &component));
672385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.sequence_number, 30);
682385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_count, 5u);
692385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_time.ToInternalValue(), (100 * 2 + 200 * 3) / 5);
702385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
712385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
722385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen MurdochTEST(LatencyInfoTest, MergeTwoSeparateEvent) {
732385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  LatencyInfo info1;
742385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  LatencyInfo info2;
754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  info1.AddLatencyNumberWithTimestamp(INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT,
762385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                      0,
772385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                      1,
782385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                      base::TimeTicks::FromInternalValue(100),
794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                      1,
804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                      true);
812385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  info2.AddLatencyNumberWithTimestamp(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
822385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                      1,
832385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                      5,
842385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                      base::TimeTicks::FromInternalValue(1000),
854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                      2,
864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                      true);
872385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  info1.MergeWith(info2);
882385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
892385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(info1.latency_components.size(), 2u);
902385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  LatencyInfo::LatencyComponent component;
912385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_FALSE(
922385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      info1.FindLatency(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, &component));
934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_FALSE(info1.FindLatency(
944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 1, &component));
954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_TRUE(info1.FindLatency(
964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, &component));
972385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.sequence_number, 1);
982385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_count, 1u);
992385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_time.ToInternalValue(), 100);
1002385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_TRUE(
1012385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      info1.FindLatency(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 1, &component));
1022385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.sequence_number, 5);
1032385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_count, 2u);
1042385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_time.ToInternalValue(), 1000);
1052385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
1062385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1072385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen MurdochTEST(LatencyInfoTest, MergeTwoSameEvent) {
1082385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  LatencyInfo info1;
1092385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  LatencyInfo info2;
1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  info1.AddLatencyNumberWithTimestamp(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
1112385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                      0,
1122385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                      30,
1132385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                      base::TimeTicks::FromInternalValue(100),
1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                      2,
1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                      true);
1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  info2.AddLatencyNumberWithTimestamp(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
1172385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                      0,
1182385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                      13,
1192385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                      base::TimeTicks::FromInternalValue(200),
1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                      3,
1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                      true);
1222385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  info1.MergeWith(info2);
1232385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1242385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(info1.latency_components.size(), 1u);
1252385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  LatencyInfo::LatencyComponent component;
1262385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_FALSE(
1272385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      info1.FindLatency(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, &component));
1282385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_FALSE(
1294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      info1.FindLatency(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 1, &component));
1302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_TRUE(
1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      info1.FindLatency(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, &component));
1322385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.sequence_number, 30);
1332385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_count, 5u);
1342385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(component.event_time.ToInternalValue(), (100 * 2 + 200 * 3) / 5);
1352385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
1362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1372385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen MurdochTEST(LatencyInfoTest, ClearEvents) {
1382385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  LatencyInfo info;
1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  info.AddLatencyNumberWithTimestamp(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
1402385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     0,
1412385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     30,
1422385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                                     base::TimeTicks::FromInternalValue(100),
1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                     2,
1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                     true);
1452385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1462385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(info.latency_components.size(), 1u);
1472385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  info.Clear();
1482385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  EXPECT_EQ(info.latency_components.size(), 0u);
1492385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
1502385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1512385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}  // namespace ui
152