Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(722)

Side by Side Diff: components/page_load_metrics/renderer/page_timing_metrics_sender_unittest.cc

Issue 2056153002: Convert PageLoadMetrics to Mojo (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/page_load_metrics/renderer/page_timing_metrics_sender.h" 5 #include "components/page_load_metrics/renderer/page_timing_metrics_sender.h"
6 6
7 #include "base/time/time.h" 7 #include "base/time/time.h"
8 #include "base/timer/mock_timer.h" 8 #include "base/timer/mock_timer.h"
9 #include "components/page_load_metrics/common/page_load_timing.h" 9 #include "components/page_load_metrics/common/page_load_timing.h"
10 #include "components/page_load_metrics/renderer/fake_page_timing_metrics_ipc_sen der.h" 10 #include "components/page_load_metrics/renderer/fake_page_load_metrics.h"
11 #include "ipc/ipc_message.h" 11 #include "ipc/ipc_message.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 13
14 namespace page_load_metrics { 14 namespace page_load_metrics {
15 15
16 // Thin wrapper around PageTimingMetricsSender that provides access to the 16 // Thin wrapper around PageTimingMetricsSender that provides access to the
17 // MockTimer instance. 17 // MockTimer instance.
18 class TestPageTimingMetricsSender : public PageTimingMetricsSender { 18 class TestPageTimingMetricsSender : public PageTimingMetricsSender {
19 public: 19 public:
20 explicit TestPageTimingMetricsSender(IPC::Sender* ipc_sender, 20 explicit TestPageTimingMetricsSender(
21 const PageLoadTiming& initial_timing) 21 mojom::PageLoadMetrics* page_load_metrics,
22 const PageLoadTiming& initial_timing)
22 : PageTimingMetricsSender( 23 : PageTimingMetricsSender(
23 ipc_sender, 24 page_load_metrics,
24 MSG_ROUTING_NONE,
25 std::unique_ptr<base::Timer>(new base::MockTimer(false, false)), 25 std::unique_ptr<base::Timer>(new base::MockTimer(false, false)),
26 initial_timing) {} 26 initial_timing) {}
27 27
28 base::MockTimer* mock_timer() const { 28 base::MockTimer* mock_timer() const {
29 return reinterpret_cast<base::MockTimer*>(timer()); 29 return reinterpret_cast<base::MockTimer*>(timer());
30 } 30 }
31 }; 31 };
32 32
33 class PageTimingMetricsSenderTest : public testing::Test { 33 class PageTimingMetricsSenderTest : public testing::Test {
34 public: 34 public:
35 PageTimingMetricsSenderTest() 35 PageTimingMetricsSenderTest()
36 : metrics_sender_(new TestPageTimingMetricsSender(&fake_ipc_sender_, 36 : metrics_sender_(
37 PageLoadTiming())) {} 37 new TestPageTimingMetricsSender(&fake_page_load_metrics_,
38 PageLoadTiming())) {}
38 39
39 protected: 40 protected:
40 FakePageTimingMetricsIPCSender fake_ipc_sender_; 41 FakePageLoadMetrics fake_page_load_metrics_;
41 std::unique_ptr<TestPageTimingMetricsSender> metrics_sender_; 42 std::unique_ptr<TestPageTimingMetricsSender> metrics_sender_;
42 }; 43 };
43 44
44 TEST_F(PageTimingMetricsSenderTest, Basic) { 45 TEST_F(PageTimingMetricsSenderTest, Basic) {
45 base::Time nav_start = base::Time::FromDoubleT(10); 46 base::Time nav_start = base::Time::FromDoubleT(10);
46 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); 47 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2);
47 48
48 PageLoadTiming timing; 49 PageLoadTiming timing;
49 timing.navigation_start = nav_start; 50 timing.navigation_start = nav_start;
50 timing.first_layout = first_layout; 51 timing.first_layout = first_layout;
51 52
52 metrics_sender_->Send(timing); 53 metrics_sender_->Send(timing);
53 54
54 // Firing the timer should trigger sending of an OnTimingUpdated IPC. 55 // Firing the timer should trigger sending of an OnTimingUpdated IPC.
55 fake_ipc_sender_.ExpectPageLoadTiming(timing); 56 fake_page_load_metrics_.ExpectPageLoadTiming(timing);
56 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning()); 57 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
57 metrics_sender_->mock_timer()->Fire(); 58 metrics_sender_->mock_timer()->Fire();
58 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning()); 59 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
59 60
60 // At this point, we should have triggered the send of the PageLoadTiming IPC. 61 // At this point, we should have triggered the send of the PageLoadTiming IPC.
61 fake_ipc_sender_.VerifyExpectedTimings(); 62 fake_page_load_metrics_.VerifyExpectedTimings();
62 63
63 // Attempt to send the same timing instance again. The send should be 64 // Attempt to send the same timing instance again. The send should be
64 // suppressed, since the timing instance hasn't changed since the last send. 65 // suppressed, since the timing instance hasn't changed since the last send.
65 metrics_sender_->Send(timing); 66 metrics_sender_->Send(timing);
66 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning()); 67 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
67 } 68 }
68 69
69 TEST_F(PageTimingMetricsSenderTest, CoalesceMultipleIPCs) { 70 TEST_F(PageTimingMetricsSenderTest, CoalesceMultipleIPCs) {
70 base::Time nav_start = base::Time::FromDoubleT(10); 71 base::Time nav_start = base::Time::FromDoubleT(10);
71 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); 72 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2);
72 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(4); 73 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(4);
73 74
74 PageLoadTiming timing; 75 PageLoadTiming timing;
75 timing.navigation_start = nav_start; 76 timing.navigation_start = nav_start;
76 timing.first_layout = first_layout; 77 timing.first_layout = first_layout;
77 78
78 metrics_sender_->Send(timing); 79 metrics_sender_->Send(timing);
79 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning()); 80 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
80 81
81 // Send an updated PageLoadTiming before the timer has fired. When the timer 82 // Send an updated PageLoadTiming before the timer has fired. When the timer
82 // fires, the updated PageLoadTiming should be sent. 83 // fires, the updated PageLoadTiming should be sent.
83 timing.load_event_start = load_event; 84 timing.load_event_start = load_event;
84 metrics_sender_->Send(timing); 85 metrics_sender_->Send(timing);
85 86
86 // Firing the timer should trigger sending of the OnTimingUpdated IPC with 87 // Firing the timer should trigger sending of the OnTimingUpdated IPC with
87 // the most recently provided PageLoadTiming instance. 88 // the most recently provided PageLoadTiming instance.
88 fake_ipc_sender_.ExpectPageLoadTiming(timing); 89 fake_page_load_metrics_.ExpectPageLoadTiming(timing);
89 metrics_sender_->mock_timer()->Fire(); 90 metrics_sender_->mock_timer()->Fire();
90 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning()); 91 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
91 } 92 }
92 93
93 TEST_F(PageTimingMetricsSenderTest, MultipleIPCs) { 94 TEST_F(PageTimingMetricsSenderTest, MultipleIPCs) {
94 base::Time nav_start = base::Time::FromDoubleT(10); 95 base::Time nav_start = base::Time::FromDoubleT(10);
95 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); 96 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2);
96 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(4); 97 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(4);
97 98
98 PageLoadTiming timing; 99 PageLoadTiming timing;
99 timing.navigation_start = nav_start; 100 timing.navigation_start = nav_start;
100 timing.first_layout = first_layout; 101 timing.first_layout = first_layout;
101 102
102 metrics_sender_->Send(timing); 103 metrics_sender_->Send(timing);
103 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning()); 104 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
104 fake_ipc_sender_.ExpectPageLoadTiming(timing); 105 fake_page_load_metrics_.ExpectPageLoadTiming(timing);
105 metrics_sender_->mock_timer()->Fire(); 106 metrics_sender_->mock_timer()->Fire();
106 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning()); 107 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
107 fake_ipc_sender_.VerifyExpectedTimings(); 108 fake_page_load_metrics_.VerifyExpectedTimings();
108 109
109 // Send an updated PageLoadTiming after the timer for the first send request 110 // Send an updated PageLoadTiming after the timer for the first send request
110 // has fired, and verify that a second IPC is sent. 111 // has fired, and verify that a second IPC is sent.
111 timing.load_event_start = load_event; 112 timing.load_event_start = load_event;
112 metrics_sender_->Send(timing); 113 metrics_sender_->Send(timing);
113 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning()); 114 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
114 fake_ipc_sender_.ExpectPageLoadTiming(timing); 115 fake_page_load_metrics_.ExpectPageLoadTiming(timing);
115 metrics_sender_->mock_timer()->Fire(); 116 metrics_sender_->mock_timer()->Fire();
116 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning()); 117 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
117 } 118 }
118 119
119 TEST_F(PageTimingMetricsSenderTest, SendIPCOnDestructor) { 120 TEST_F(PageTimingMetricsSenderTest, SendIPCOnDestructor) {
120 PageLoadTiming timing; 121 PageLoadTiming timing;
121 timing.navigation_start = base::Time::FromDoubleT(10); 122 timing.navigation_start = base::Time::FromDoubleT(10);
122 timing.first_layout = base::TimeDelta::FromMilliseconds(10); 123 timing.first_layout = base::TimeDelta::FromMilliseconds(10);
123 124
124 // This test wants to verify behavior in the PageTimingMetricsSender 125 // This test wants to verify behavior in the PageTimingMetricsSender
125 // destructor. The EXPECT_CALL will be satisfied when the |metrics_sender_| 126 // destructor. The EXPECT_CALL will be satisfied when the |metrics_sender_|
126 // is destroyed below. 127 // is destroyed below.
127 metrics_sender_->Send(timing); 128 metrics_sender_->Send(timing);
128 fake_ipc_sender_.ExpectPageLoadTiming(timing); 129 fake_page_load_metrics_.ExpectPageLoadTiming(timing);
129 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning()); 130 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
130 131
131 // Destroy |metrics_sender_|, in order to force its destructor to run. 132 // Destroy |metrics_sender_|, in order to force its destructor to run.
132 metrics_sender_.reset(); 133 metrics_sender_.reset();
133 } 134 }
134 135
135 } // namespace page_load_metrics 136 } // namespace page_load_metrics
OLDNEW
« no previous file with comments | « components/page_load_metrics/renderer/page_timing_metrics_sender.cc ('k') | components/typemaps.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698