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

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

Powered by Google App Engine
This is Rietveld 408576698