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

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

Issue 2874663005: [Page Load Metrics] Add mojom file to page load metrics. (Closed)
Patch Set: Remove unnecessary variable Created 3 years, 7 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
« no previous file with comments | « chrome/renderer/page_load_metrics/page_timing_metrics_sender.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "chrome/renderer/page_load_metrics/page_timing_metrics_sender.h" 5 #include "chrome/renderer/page_load_metrics/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 "chrome/common/page_load_metrics/page_load_timing.h" 9 #include "chrome/common/page_load_metrics/page_load_timing.h"
10 #include "chrome/renderer/page_load_metrics/fake_page_timing_metrics_ipc_sender. h" 10 #include "chrome/renderer/page_load_metrics/fake_page_timing_metrics_ipc_sender. 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(IPC::Sender* ipc_sender,
21 const PageLoadTiming& initial_timing) 21 mojom::PageLoadTimingPtr initial_timing)
22 : PageTimingMetricsSender( 22 : PageTimingMetricsSender(
23 ipc_sender, 23 ipc_sender,
24 MSG_ROUTING_NONE, 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 std::move(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_ipc_sender_,
38 mojom::PageLoadTiming::New())) {}
38 39
39 protected: 40 protected:
40 FakePageTimingMetricsIPCSender fake_ipc_sender_; 41 FakePageTimingMetricsIPCSender fake_ipc_sender_;
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 mojom::PageLoadTiming timing;
50 page_load_metrics::InitPageLoadTimingForTest(&timing);
49 timing.navigation_start = nav_start; 51 timing.navigation_start = nav_start;
50 timing.document_timing.first_layout = first_layout; 52 timing.document_timing->first_layout = first_layout;
51 53
52 metrics_sender_->Send(timing); 54 metrics_sender_->Send(timing.Clone());
53 55
54 // Firing the timer should trigger sending of an OnTimingUpdated IPC. 56 // Firing the timer should trigger sending of an OnTimingUpdated IPC.
55 fake_ipc_sender_.ExpectPageLoadTiming(timing); 57 fake_ipc_sender_.ExpectPageLoadTiming(timing);
56 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning()); 58 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
57 metrics_sender_->mock_timer()->Fire(); 59 metrics_sender_->mock_timer()->Fire();
58 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning()); 60 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
59 61
60 // At this point, we should have triggered the send of the PageLoadTiming IPC. 62 // At this point, we should have triggered the send of the PageLoadTiming IPC.
61 fake_ipc_sender_.VerifyExpectedTimings(); 63 fake_ipc_sender_.VerifyExpectedTimings();
62 64
63 // Attempt to send the same timing instance again. The send should be 65 // 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. 66 // suppressed, since the timing instance hasn't changed since the last send.
65 metrics_sender_->Send(timing); 67 metrics_sender_->Send(timing.Clone());
66 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning()); 68 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
67 } 69 }
68 70
69 TEST_F(PageTimingMetricsSenderTest, CoalesceMultipleIPCs) { 71 TEST_F(PageTimingMetricsSenderTest, CoalesceMultipleIPCs) {
70 base::Time nav_start = base::Time::FromDoubleT(10); 72 base::Time nav_start = base::Time::FromDoubleT(10);
71 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); 73 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2);
72 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(4); 74 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(4);
73 75
74 PageLoadTiming timing; 76 mojom::PageLoadTiming timing;
77 page_load_metrics::InitPageLoadTimingForTest(&timing);
75 timing.navigation_start = nav_start; 78 timing.navigation_start = nav_start;
76 timing.document_timing.first_layout = first_layout; 79 timing.document_timing->first_layout = first_layout;
77 80
78 metrics_sender_->Send(timing); 81 metrics_sender_->Send(timing.Clone());
79 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning()); 82 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
80 83
81 // Send an updated PageLoadTiming before the timer has fired. When the timer 84 // Send an updated PageLoadTiming before the timer has fired. When the timer
82 // fires, the updated PageLoadTiming should be sent. 85 // fires, the updated PageLoadTiming should be sent.
83 timing.document_timing.load_event_start = load_event; 86 timing.document_timing->load_event_start = load_event;
84 metrics_sender_->Send(timing); 87 metrics_sender_->Send(timing.Clone());
85 88
86 // Firing the timer should trigger sending of the OnTimingUpdated IPC with 89 // Firing the timer should trigger sending of the OnTimingUpdated IPC with
87 // the most recently provided PageLoadTiming instance. 90 // the most recently provided PageLoadTiming instance.
88 fake_ipc_sender_.ExpectPageLoadTiming(timing); 91 fake_ipc_sender_.ExpectPageLoadTiming(timing);
89 metrics_sender_->mock_timer()->Fire(); 92 metrics_sender_->mock_timer()->Fire();
90 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning()); 93 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
91 } 94 }
92 95
93 TEST_F(PageTimingMetricsSenderTest, MultipleIPCs) { 96 TEST_F(PageTimingMetricsSenderTest, MultipleIPCs) {
94 base::Time nav_start = base::Time::FromDoubleT(10); 97 base::Time nav_start = base::Time::FromDoubleT(10);
95 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); 98 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2);
96 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(4); 99 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(4);
97 100
98 PageLoadTiming timing; 101 mojom::PageLoadTiming timing;
102 page_load_metrics::InitPageLoadTimingForTest(&timing);
99 timing.navigation_start = nav_start; 103 timing.navigation_start = nav_start;
100 timing.document_timing.first_layout = first_layout; 104 timing.document_timing->first_layout = first_layout;
101 105
102 metrics_sender_->Send(timing); 106 metrics_sender_->Send(timing.Clone());
103 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning()); 107 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
104 fake_ipc_sender_.ExpectPageLoadTiming(timing); 108 fake_ipc_sender_.ExpectPageLoadTiming(timing);
105 metrics_sender_->mock_timer()->Fire(); 109 metrics_sender_->mock_timer()->Fire();
106 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning()); 110 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
107 fake_ipc_sender_.VerifyExpectedTimings(); 111 fake_ipc_sender_.VerifyExpectedTimings();
108 112
109 // Send an updated PageLoadTiming after the timer for the first send request 113 // Send an updated PageLoadTiming after the timer for the first send request
110 // has fired, and verify that a second IPC is sent. 114 // has fired, and verify that a second IPC is sent.
111 timing.document_timing.load_event_start = load_event; 115 timing.document_timing->load_event_start = load_event;
112 metrics_sender_->Send(timing); 116 metrics_sender_->Send(timing.Clone());
113 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning()); 117 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
114 fake_ipc_sender_.ExpectPageLoadTiming(timing); 118 fake_ipc_sender_.ExpectPageLoadTiming(timing);
115 metrics_sender_->mock_timer()->Fire(); 119 metrics_sender_->mock_timer()->Fire();
116 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning()); 120 EXPECT_FALSE(metrics_sender_->mock_timer()->IsRunning());
117 } 121 }
118 122
119 TEST_F(PageTimingMetricsSenderTest, SendIPCOnDestructor) { 123 TEST_F(PageTimingMetricsSenderTest, SendIPCOnDestructor) {
120 PageLoadTiming timing; 124 mojom::PageLoadTiming timing;
125 page_load_metrics::InitPageLoadTimingForTest(&timing);
121 timing.navigation_start = base::Time::FromDoubleT(10); 126 timing.navigation_start = base::Time::FromDoubleT(10);
122 timing.document_timing.first_layout = base::TimeDelta::FromMilliseconds(10); 127 timing.document_timing->first_layout = base::TimeDelta::FromMilliseconds(10);
123 128
124 // This test wants to verify behavior in the PageTimingMetricsSender 129 // This test wants to verify behavior in the PageTimingMetricsSender
125 // destructor. The EXPECT_CALL will be satisfied when the |metrics_sender_| 130 // destructor. The EXPECT_CALL will be satisfied when the |metrics_sender_|
126 // is destroyed below. 131 // is destroyed below.
127 metrics_sender_->Send(timing); 132 metrics_sender_->Send(timing.Clone());
128 fake_ipc_sender_.ExpectPageLoadTiming(timing); 133 fake_ipc_sender_.ExpectPageLoadTiming(timing);
129 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning()); 134 ASSERT_TRUE(metrics_sender_->mock_timer()->IsRunning());
130 135
131 // Destroy |metrics_sender_|, in order to force its destructor to run. 136 // Destroy |metrics_sender_|, in order to force its destructor to run.
132 metrics_sender_.reset(); 137 metrics_sender_.reset();
133 } 138 }
134 139
135 } // namespace page_load_metrics 140 } // namespace page_load_metrics
OLDNEW
« no previous file with comments | « chrome/renderer/page_load_metrics/page_timing_metrics_sender.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698