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

Side by Side Diff: chrome/renderer/page_load_metrics/metrics_render_frame_observer_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
OLDNEW
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/metrics_render_frame_observer.h" 5 #include "chrome/renderer/page_load_metrics/metrics_render_frame_observer.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 23 matching lines...) Expand all
34 // IPC messages get sent. 34 // IPC messages get sent.
35 bool Send(IPC::Message* message) override { 35 bool Send(IPC::Message* message) override {
36 return fake_timing_ipc_sender_.Send(message); 36 return fake_timing_ipc_sender_.Send(message);
37 } 37 }
38 38
39 void set_mock_timer(std::unique_ptr<base::Timer> timer) { 39 void set_mock_timer(std::unique_ptr<base::Timer> timer) {
40 ASSERT_EQ(nullptr, mock_timer_); 40 ASSERT_EQ(nullptr, mock_timer_);
41 mock_timer_ = std::move(timer); 41 mock_timer_ = std::move(timer);
42 } 42 }
43 43
44 bool WasFakeTimingConsumed() const { return fake_timing_.IsEmpty(); } 44 void ExpectPageLoadTiming(const mojom::PageLoadTiming& timing) {
45
46 void ExpectPageLoadTiming(const PageLoadTiming& timing) {
47 SetFakePageLoadTiming(timing); 45 SetFakePageLoadTiming(timing);
48 fake_timing_ipc_sender_.ExpectPageLoadTiming(timing); 46 fake_timing_ipc_sender_.ExpectPageLoadTiming(timing);
49 } 47 }
50 48
51 void SetFakePageLoadTiming(const PageLoadTiming& timing) { 49 void SetFakePageLoadTiming(const mojom::PageLoadTiming& timing) {
52 EXPECT_TRUE(fake_timing_.IsEmpty()); 50 EXPECT_EQ(nullptr, fake_timing_.get());
53 fake_timing_ = timing; 51 fake_timing_ = timing.Clone();
54 } 52 }
55 53
56 PageLoadTiming GetTiming() const override { 54 mojom::PageLoadTimingPtr GetTiming() const override {
57 PageLoadTiming tmp = fake_timing_; 55 EXPECT_NE(nullptr, fake_timing_.get());
58 fake_timing_ = PageLoadTiming(); 56 return std::move(fake_timing_);
59 return tmp;
60 } 57 }
61 58
62 void VerifyExpectedTimings() const { 59 void VerifyExpectedTimings() const {
63 EXPECT_TRUE(fake_timing_.IsEmpty()); 60 EXPECT_EQ(nullptr, fake_timing_.get());
64 fake_timing_ipc_sender_.VerifyExpectedTimings(); 61 fake_timing_ipc_sender_.VerifyExpectedTimings();
65 } 62 }
66 63
67 bool ShouldSendMetrics() const override { return true; } 64 bool ShouldSendMetrics() const override { return true; }
68 bool HasNoRenderFrame() const override { return false; } 65 bool HasNoRenderFrame() const override { return false; }
69 66
70 private: 67 private:
71 FakePageTimingMetricsIPCSender fake_timing_ipc_sender_; 68 FakePageTimingMetricsIPCSender fake_timing_ipc_sender_;
72 mutable PageLoadTiming fake_timing_; 69 mutable mojom::PageLoadTimingPtr fake_timing_;
73 mutable std::unique_ptr<base::Timer> mock_timer_; 70 mutable std::unique_ptr<base::Timer> mock_timer_;
74 }; 71 };
75 72
76 typedef testing::Test MetricsRenderFrameObserverTest; 73 typedef testing::Test MetricsRenderFrameObserverTest;
77 74
78 TEST_F(MetricsRenderFrameObserverTest, NoMetrics) { 75 TEST_F(MetricsRenderFrameObserverTest, NoMetrics) {
79 TestMetricsRenderFrameObserver observer; 76 TestMetricsRenderFrameObserver observer;
80 base::MockTimer* mock_timer = new base::MockTimer(false, false); 77 base::MockTimer* mock_timer = new base::MockTimer(false, false);
81 observer.set_mock_timer(base::WrapUnique(mock_timer)); 78 observer.set_mock_timer(base::WrapUnique(mock_timer));
82 79
83 observer.DidChangePerformanceTiming(); 80 observer.DidChangePerformanceTiming();
84 ASSERT_FALSE(mock_timer->IsRunning()); 81 ASSERT_FALSE(mock_timer->IsRunning());
85 } 82 }
86 83
87 TEST_F(MetricsRenderFrameObserverTest, SingleMetric) { 84 TEST_F(MetricsRenderFrameObserverTest, SingleMetric) {
88 base::Time nav_start = base::Time::FromDoubleT(10); 85 base::Time nav_start = base::Time::FromDoubleT(10);
89 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(10); 86 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(10);
90 87
91 TestMetricsRenderFrameObserver observer; 88 TestMetricsRenderFrameObserver observer;
92 base::MockTimer* mock_timer = new base::MockTimer(false, false); 89 base::MockTimer* mock_timer = new base::MockTimer(false, false);
93 observer.set_mock_timer(base::WrapUnique(mock_timer)); 90 observer.set_mock_timer(base::WrapUnique(mock_timer));
94 91
95 PageLoadTiming timing; 92 mojom::PageLoadTiming timing;
93 page_load_metrics::InitPageLoadTimingForTest(&timing);
96 timing.navigation_start = nav_start; 94 timing.navigation_start = nav_start;
97 observer.ExpectPageLoadTiming(timing); 95 observer.ExpectPageLoadTiming(timing);
98 observer.DidCommitProvisionalLoad(true, false); 96 observer.DidCommitProvisionalLoad(true, false);
99 mock_timer->Fire(); 97 mock_timer->Fire();
100 98
101 timing.document_timing.first_layout = first_layout; 99 timing.document_timing->first_layout = first_layout;
102 observer.ExpectPageLoadTiming(timing); 100 observer.ExpectPageLoadTiming(timing);
103 101
104 observer.DidChangePerformanceTiming(); 102 observer.DidChangePerformanceTiming();
105 mock_timer->Fire(); 103 mock_timer->Fire();
106 } 104 }
107 105
108 TEST_F(MetricsRenderFrameObserverTest, MultipleMetrics) { 106 TEST_F(MetricsRenderFrameObserverTest, MultipleMetrics) {
109 base::Time nav_start = base::Time::FromDoubleT(10); 107 base::Time nav_start = base::Time::FromDoubleT(10);
110 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); 108 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2);
111 base::TimeDelta dom_event = base::TimeDelta::FromMillisecondsD(2); 109 base::TimeDelta dom_event = base::TimeDelta::FromMillisecondsD(2);
112 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(2); 110 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(2);
113 111
114 TestMetricsRenderFrameObserver observer; 112 TestMetricsRenderFrameObserver observer;
115 base::MockTimer* mock_timer = new base::MockTimer(false, false); 113 base::MockTimer* mock_timer = new base::MockTimer(false, false);
116 observer.set_mock_timer(base::WrapUnique(mock_timer)); 114 observer.set_mock_timer(base::WrapUnique(mock_timer));
117 115
118 PageLoadTiming timing; 116 mojom::PageLoadTiming timing;
117 page_load_metrics::InitPageLoadTimingForTest(&timing);
119 timing.navigation_start = nav_start; 118 timing.navigation_start = nav_start;
120 observer.ExpectPageLoadTiming(timing); 119 observer.ExpectPageLoadTiming(timing);
121 observer.DidCommitProvisionalLoad(true, false); 120 observer.DidCommitProvisionalLoad(true, false);
122 mock_timer->Fire(); 121 mock_timer->Fire();
123 122
124 timing.document_timing.first_layout = first_layout; 123 timing.document_timing->first_layout = first_layout;
125 timing.document_timing.dom_content_loaded_event_start = dom_event; 124 timing.document_timing->dom_content_loaded_event_start = dom_event;
126 observer.ExpectPageLoadTiming(timing); 125 observer.ExpectPageLoadTiming(timing);
127 126
128 observer.DidChangePerformanceTiming(); 127 observer.DidChangePerformanceTiming();
129 mock_timer->Fire(); 128 mock_timer->Fire();
130 129
131 // At this point, we should have triggered the generation of two metrics. 130 // At this point, we should have triggered the generation of two metrics.
132 // Verify and reset the observer's expectations before moving on to the next 131 // Verify and reset the observer's expectations before moving on to the next
133 // part of the test. 132 // part of the test.
134 observer.VerifyExpectedTimings(); 133 observer.VerifyExpectedTimings();
135 134
136 timing.document_timing.load_event_start = load_event; 135 timing.document_timing->load_event_start = load_event;
137 observer.ExpectPageLoadTiming(timing); 136 observer.ExpectPageLoadTiming(timing);
138 137
139 observer.DidChangePerformanceTiming(); 138 observer.DidChangePerformanceTiming();
140 mock_timer->Fire(); 139 mock_timer->Fire();
141 140
142 // Verify and reset the observer's expectations before moving on to the next 141 // Verify and reset the observer's expectations before moving on to the next
143 // part of the test. 142 // part of the test.
144 observer.VerifyExpectedTimings(); 143 observer.VerifyExpectedTimings();
145 144
146 // The PageLoadTiming above includes timing information for the first layout, 145 // The PageLoadTiming above includes timing information for the first layout,
147 // dom content, and load metrics. However, since we've already generated 146 // dom content, and load metrics. However, since we've already generated
148 // timing information for all of these metrics previously, we do not expect 147 // timing information for all of these metrics previously, we do not expect
149 // this invocation to generate any additional metrics. 148 // this invocation to generate any additional metrics.
149 observer.SetFakePageLoadTiming(timing);
150 observer.DidChangePerformanceTiming(); 150 observer.DidChangePerformanceTiming();
151 ASSERT_FALSE(mock_timer->IsRunning()); 151 ASSERT_FALSE(mock_timer->IsRunning());
152 } 152 }
153 153
154 TEST_F(MetricsRenderFrameObserverTest, MultipleNavigations) { 154 TEST_F(MetricsRenderFrameObserverTest, MultipleNavigations) {
155 base::Time nav_start = base::Time::FromDoubleT(10); 155 base::Time nav_start = base::Time::FromDoubleT(10);
156 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2); 156 base::TimeDelta first_layout = base::TimeDelta::FromMillisecondsD(2);
157 base::TimeDelta dom_event = base::TimeDelta::FromMillisecondsD(2); 157 base::TimeDelta dom_event = base::TimeDelta::FromMillisecondsD(2);
158 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(2); 158 base::TimeDelta load_event = base::TimeDelta::FromMillisecondsD(2);
159 159
160 TestMetricsRenderFrameObserver observer; 160 TestMetricsRenderFrameObserver observer;
161 base::MockTimer* mock_timer = new base::MockTimer(false, false); 161 base::MockTimer* mock_timer = new base::MockTimer(false, false);
162 observer.set_mock_timer(base::WrapUnique(mock_timer)); 162 observer.set_mock_timer(base::WrapUnique(mock_timer));
163 163
164 PageLoadTiming timing; 164 mojom::PageLoadTiming timing;
165 page_load_metrics::InitPageLoadTimingForTest(&timing);
165 timing.navigation_start = nav_start; 166 timing.navigation_start = nav_start;
166 observer.ExpectPageLoadTiming(timing); 167 observer.ExpectPageLoadTiming(timing);
167 observer.DidCommitProvisionalLoad(true, false); 168 observer.DidCommitProvisionalLoad(true, false);
168 mock_timer->Fire(); 169 mock_timer->Fire();
169 170
170 timing.document_timing.first_layout = first_layout; 171 timing.document_timing->first_layout = first_layout;
171 timing.document_timing.dom_content_loaded_event_start = dom_event; 172 timing.document_timing->dom_content_loaded_event_start = dom_event;
172 timing.document_timing.load_event_start = load_event; 173 timing.document_timing->load_event_start = load_event;
173 observer.ExpectPageLoadTiming(timing); 174 observer.ExpectPageLoadTiming(timing);
174 observer.DidChangePerformanceTiming(); 175 observer.DidChangePerformanceTiming();
175 mock_timer->Fire(); 176 mock_timer->Fire();
176 177
177 // At this point, we should have triggered the generation of two metrics. 178 // At this point, we should have triggered the generation of two metrics.
178 // Verify and reset the observer's expectations before moving on to the next 179 // Verify and reset the observer's expectations before moving on to the next
179 // part of the test. 180 // part of the test.
180 observer.VerifyExpectedTimings(); 181 observer.VerifyExpectedTimings();
181 182
182 base::Time nav_start_2 = base::Time::FromDoubleT(100); 183 base::Time nav_start_2 = base::Time::FromDoubleT(100);
183 base::TimeDelta first_layout_2 = base::TimeDelta::FromMillisecondsD(20); 184 base::TimeDelta first_layout_2 = base::TimeDelta::FromMillisecondsD(20);
184 base::TimeDelta dom_event_2 = base::TimeDelta::FromMillisecondsD(20); 185 base::TimeDelta dom_event_2 = base::TimeDelta::FromMillisecondsD(20);
185 base::TimeDelta load_event_2 = base::TimeDelta::FromMillisecondsD(20); 186 base::TimeDelta load_event_2 = base::TimeDelta::FromMillisecondsD(20);
186 PageLoadTiming timing_2; 187 mojom::PageLoadTiming timing_2;
188 page_load_metrics::InitPageLoadTimingForTest(&timing_2);
187 timing_2.navigation_start = nav_start_2; 189 timing_2.navigation_start = nav_start_2;
188 190
189 base::MockTimer* mock_timer2 = new base::MockTimer(false, false); 191 base::MockTimer* mock_timer2 = new base::MockTimer(false, false);
190 observer.set_mock_timer(base::WrapUnique(mock_timer2)); 192 observer.set_mock_timer(base::WrapUnique(mock_timer2));
191 193
192 observer.ExpectPageLoadTiming(timing_2); 194 observer.ExpectPageLoadTiming(timing_2);
193 observer.DidCommitProvisionalLoad(true, false); 195 observer.DidCommitProvisionalLoad(true, false);
194 mock_timer2->Fire(); 196 mock_timer2->Fire();
195 197
196 timing_2.document_timing.first_layout = first_layout_2; 198 timing_2.document_timing->first_layout = first_layout_2;
197 timing_2.document_timing.dom_content_loaded_event_start = dom_event_2; 199 timing_2.document_timing->dom_content_loaded_event_start = dom_event_2;
198 timing_2.document_timing.load_event_start = load_event_2; 200 timing_2.document_timing->load_event_start = load_event_2;
199 observer.ExpectPageLoadTiming(timing_2); 201 observer.ExpectPageLoadTiming(timing_2);
200 202
201 observer.DidChangePerformanceTiming(); 203 observer.DidChangePerformanceTiming();
202 mock_timer2->Fire(); 204 mock_timer2->Fire();
203 } 205 }
204 206
205 } // namespace page_load_metrics 207 } // namespace page_load_metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698