OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/loader/resource_scheduler.h" | 5 #include "content/browser/loader/resource_scheduler.h" |
6 | 6 |
7 #include "base/memory/scoped_vector.h" | 7 #include "base/memory/scoped_vector.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/run_loop.h" | |
9 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
10 #include "base/timer/mock_timer.h" | 11 #include "base/timer/mock_timer.h" |
11 #include "base/timer/timer.h" | 12 #include "base/timer/timer.h" |
12 #include "content/browser/browser_thread_impl.h" | 13 #include "content/browser/browser_thread_impl.h" |
13 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 14 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
14 #include "content/browser/loader/resource_message_filter.h" | 15 #include "content/browser/loader/resource_message_filter.h" |
15 #include "content/browser/loader/resource_request_info_impl.h" | 16 #include "content/browser/loader/resource_request_info_impl.h" |
16 #include "content/common/resource_messages.h" | 17 #include "content/common/resource_messages.h" |
17 #include "content/public/browser/resource_context.h" | 18 #include "content/public/browser/resource_context.h" |
18 #include "content/public/browser/resource_controller.h" | 19 #include "content/public/browser/resource_controller.h" |
19 #include "content/public/browser/resource_throttle.h" | 20 #include "content/public/browser/resource_throttle.h" |
20 #include "content/public/common/process_type.h" | 21 #include "content/public/common/process_type.h" |
21 #include "content/public/common/resource_type.h" | 22 #include "content/public/common/resource_type.h" |
23 #include "content/public/test/mock_render_process_host.h" | |
24 #include "content/public/test/test_browser_context.h" | |
25 #include "content/test/test_web_contents.h" | |
22 #include "net/base/host_port_pair.h" | 26 #include "net/base/host_port_pair.h" |
23 #include "net/base/request_priority.h" | 27 #include "net/base/request_priority.h" |
24 #include "net/http/http_server_properties_impl.h" | 28 #include "net/http/http_server_properties_impl.h" |
25 #include "net/url_request/url_request.h" | 29 #include "net/url_request/url_request.h" |
26 #include "net/url_request/url_request_test_util.h" | 30 #include "net/url_request/url_request_test_util.h" |
27 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
32 #include "ui/events/latency_info.h" | |
28 | 33 |
29 namespace content { | 34 namespace content { |
30 | 35 |
31 namespace { | 36 namespace { |
32 | 37 |
33 class TestRequestFactory; | 38 class TestRequestFactory; |
34 | 39 |
35 const int kChildId = 30; | 40 const int kChildId = 30; |
36 const int kRouteId = 75; | 41 const int kRouteId = 75; |
37 const int kChildId2 = 43; | 42 const int kChildId2 = 43; |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
139 : next_request_id_(0), | 144 : next_request_id_(0), |
140 ui_thread_(BrowserThread::UI, &message_loop_), | 145 ui_thread_(BrowserThread::UI, &message_loop_), |
141 io_thread_(BrowserThread::IO, &message_loop_), | 146 io_thread_(BrowserThread::IO, &message_loop_), |
142 mock_timer_(new base::MockTimer(true, true)) { | 147 mock_timer_(new base::MockTimer(true, true)) { |
143 scheduler_.set_timer_for_testing(scoped_ptr<base::Timer>(mock_timer_)); | 148 scheduler_.set_timer_for_testing(scoped_ptr<base::Timer>(mock_timer_)); |
144 | 149 |
145 // TODO(aiolos): Remove when throttling and coalescing have both landed. | 150 // TODO(aiolos): Remove when throttling and coalescing have both landed. |
146 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 151 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
147 false /* should_coalesce */); | 152 false /* should_coalesce */); |
148 | 153 |
149 scheduler_.OnClientCreated(kChildId, kRouteId); | 154 scheduler_.OnClientCreated(kChildId, kRouteId, true); |
150 scheduler_.OnVisibilityChanged(kChildId, kRouteId, true); | 155 scheduler_.OnClientCreated(kBackgroundChildId, kBackgroundRouteId, false); |
151 scheduler_.OnClientCreated(kBackgroundChildId, kBackgroundRouteId); | |
152 context_.set_http_server_properties(http_server_properties_.GetWeakPtr()); | 156 context_.set_http_server_properties(http_server_properties_.GetWeakPtr()); |
153 } | 157 } |
154 | 158 |
155 virtual ~ResourceSchedulerTest() { | 159 virtual ~ResourceSchedulerTest() { |
156 scheduler_.OnClientDeleted(kChildId, kRouteId); | 160 scheduler_.OnClientDeleted(kChildId, kRouteId); |
157 scheduler_.OnClientDeleted(kBackgroundChildId, kBackgroundRouteId); | 161 scheduler_.OnClientDeleted(kBackgroundChildId, kBackgroundRouteId); |
158 } | 162 } |
159 | 163 |
160 scoped_ptr<net::URLRequest> NewURLRequestWithChildAndRoute( | 164 scoped_ptr<net::URLRequest> NewURLRequestWithChildAndRoute( |
161 const char* url, | 165 const char* url, |
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
632 ChangeRequestPriority(low2_spdy.get(), net::LOWEST); | 636 ChangeRequestPriority(low2_spdy.get(), net::LOWEST); |
633 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); | 637 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); |
634 EXPECT_TRUE(low2->started()); | 638 EXPECT_TRUE(low2->started()); |
635 } | 639 } |
636 | 640 |
637 TEST_F(ResourceSchedulerTest, ThrottledClientCreation) { | 641 TEST_F(ResourceSchedulerTest, ThrottledClientCreation) { |
638 // TODO(aiolos): remove when throttling and coalescing have both landed | 642 // TODO(aiolos): remove when throttling and coalescing have both landed |
639 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 643 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
640 false /* should_coalesce */); | 644 false /* should_coalesce */); |
641 EXPECT_TRUE(scheduler_.should_throttle()); | 645 EXPECT_TRUE(scheduler_.should_throttle()); |
642 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 646 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
643 | 647 |
644 EXPECT_EQ(ResourceScheduler::THROTTLED, | 648 EXPECT_EQ(ResourceScheduler::THROTTLED, |
645 scheduler_.GetClientStateForTesting(kBackgroundChildId2, | 649 scheduler_.GetClientStateForTesting(kBackgroundChildId2, |
646 kBackgroundRouteId2)); | 650 kBackgroundRouteId2)); |
647 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 651 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
648 } | 652 } |
649 | 653 |
650 TEST_F(ResourceSchedulerTest, ActiveClientThrottleUpdateOnLoadingChange) { | 654 TEST_F(ResourceSchedulerTest, ActiveClientThrottleUpdateOnLoadingChange) { |
651 // TODO(aiolos): remove when throttling and coalescing have both landed | 655 // TODO(aiolos): remove when throttling and coalescing have both landed |
652 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 656 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1016 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, | 1020 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, |
1017 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1021 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1018 kBackgroundRouteId)); | 1022 kBackgroundRouteId)); |
1019 } | 1023 } |
1020 | 1024 |
1021 TEST_F(ResourceSchedulerTest, | 1025 TEST_F(ResourceSchedulerTest, |
1022 UnloadedClientVisibilityChangedCorrectlyUnthrottles) { | 1026 UnloadedClientVisibilityChangedCorrectlyUnthrottles) { |
1023 // TODO(aiolos): remove when throttling and coalescing have both landed | 1027 // TODO(aiolos): remove when throttling and coalescing have both landed |
1024 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1028 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
1025 false /* should_coalesce */); | 1029 false /* should_coalesce */); |
1026 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1030 scheduler_.OnClientCreated(kChildId2, kRouteId2, false); |
1027 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1031 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
1028 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); | 1032 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
1029 scheduler_.OnLoadingStateChanged( | 1033 scheduler_.OnLoadingStateChanged( |
1030 kBackgroundChildId2, kBackgroundRouteId2, true); | 1034 kBackgroundChildId2, kBackgroundRouteId2, true); |
1031 | 1035 |
1032 // 1 visible, 3 hidden | 1036 // 1 visible, 3 hidden |
1033 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1037 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
1034 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1038 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1035 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1039 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1036 kBackgroundRouteId)); | 1040 kBackgroundRouteId)); |
1037 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1041 EXPECT_EQ(ResourceScheduler::THROTTLED, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1072 | 1076 |
1073 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1077 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
1074 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1078 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
1075 } | 1079 } |
1076 | 1080 |
1077 TEST_F(ResourceSchedulerTest, | 1081 TEST_F(ResourceSchedulerTest, |
1078 UnloadedClientAudibilityChangedCorrectlyUnthrottles) { | 1082 UnloadedClientAudibilityChangedCorrectlyUnthrottles) { |
1079 // TODO(aiolos): remove when throttling and coalescing have both landed | 1083 // TODO(aiolos): remove when throttling and coalescing have both landed |
1080 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1084 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
1081 false /* should_coalesce */); | 1085 false /* should_coalesce */); |
1082 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1086 scheduler_.OnClientCreated(kChildId2, kRouteId2, false); |
1083 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1087 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
1084 scheduler_.OnLoadingStateChanged( | 1088 scheduler_.OnLoadingStateChanged( |
1085 kBackgroundChildId2, kBackgroundRouteId2, true); | 1089 kBackgroundChildId2, kBackgroundRouteId2, true); |
1086 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); | 1090 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
1087 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); | 1091 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); |
1088 | 1092 |
1089 // 1 audible, 3 hidden | 1093 // 1 audible, 3 hidden |
1090 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1094 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
1091 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1095 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1092 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1096 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1093 kBackgroundRouteId)); | 1097 kBackgroundRouteId)); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1129 | 1133 |
1130 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1134 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
1131 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1135 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
1132 } | 1136 } |
1133 | 1137 |
1134 TEST_F(ResourceSchedulerTest, | 1138 TEST_F(ResourceSchedulerTest, |
1135 LoadedClientVisibilityChangedCorrectlyUnthrottles) { | 1139 LoadedClientVisibilityChangedCorrectlyUnthrottles) { |
1136 // TODO(aiolos): remove when throttling and coalescing have both landed | 1140 // TODO(aiolos): remove when throttling and coalescing have both landed |
1137 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1141 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
1138 false /* should_coalesce */); | 1142 false /* should_coalesce */); |
1139 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1143 scheduler_.OnClientCreated(kChildId2, kRouteId2, false); |
1140 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1144 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
1141 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); | 1145 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
1142 scheduler_.OnLoadingStateChanged( | 1146 scheduler_.OnLoadingStateChanged( |
1143 kBackgroundChildId2, kBackgroundRouteId2, true); | 1147 kBackgroundChildId2, kBackgroundRouteId2, true); |
1144 // 1 visible, 3 hidden | 1148 // 1 visible, 3 hidden |
1145 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1149 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
1146 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1150 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1147 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1151 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1148 kBackgroundRouteId)); | 1152 kBackgroundRouteId)); |
1149 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1153 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1150 scheduler_.GetClientStateForTesting(kBackgroundChildId2, | 1154 scheduler_.GetClientStateForTesting(kBackgroundChildId2, |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1184 | 1188 |
1185 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1189 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
1186 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1190 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
1187 } | 1191 } |
1188 | 1192 |
1189 TEST_F(ResourceSchedulerTest, | 1193 TEST_F(ResourceSchedulerTest, |
1190 LoadedClientAudibilityChangedCorrectlyUnthrottles) { | 1194 LoadedClientAudibilityChangedCorrectlyUnthrottles) { |
1191 // TODO(aiolos): remove when throttling and coalescing have both landed | 1195 // TODO(aiolos): remove when throttling and coalescing have both landed |
1192 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1196 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
1193 false /* should_coalesce */); | 1197 false /* should_coalesce */); |
1194 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1198 scheduler_.OnClientCreated(kChildId2, kRouteId2, false); |
1195 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1199 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
1196 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); | 1200 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
1197 scheduler_.OnLoadingStateChanged( | 1201 scheduler_.OnLoadingStateChanged( |
1198 kBackgroundChildId2, kBackgroundRouteId2, true); | 1202 kBackgroundChildId2, kBackgroundRouteId2, true); |
1199 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); | 1203 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
1200 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); | 1204 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); |
1201 // 1 audible, 3 hidden | 1205 // 1 audible, 3 hidden |
1202 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1206 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
1203 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1207 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1204 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1208 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1205 kBackgroundRouteId)); | 1209 kBackgroundRouteId)); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1240 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); | 1244 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
1241 | 1245 |
1242 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1246 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
1243 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1247 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
1244 } | 1248 } |
1245 | 1249 |
1246 TEST_F(ResourceSchedulerTest, UnloadedClientBecomesHiddenCorrectlyUnthrottles) { | 1250 TEST_F(ResourceSchedulerTest, UnloadedClientBecomesHiddenCorrectlyUnthrottles) { |
1247 // TODO(aiolos): remove when throttling and coalescing have both landed | 1251 // TODO(aiolos): remove when throttling and coalescing have both landed |
1248 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1252 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
1249 false /* should_coalesce */); | 1253 false /* should_coalesce */); |
1250 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1254 scheduler_.OnClientCreated(kChildId2, kRouteId2, true); |
1251 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1255 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
1252 scheduler_.OnLoadingStateChanged( | 1256 scheduler_.OnLoadingStateChanged( |
1253 kBackgroundChildId2, kBackgroundRouteId2, true); | 1257 kBackgroundChildId2, kBackgroundRouteId2, true); |
1254 | 1258 |
1255 // 2 visible, 2 hidden | 1259 // 2 visible, 2 hidden |
1256 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); | |
1257 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1260 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
1258 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1261 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1259 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1262 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1260 kBackgroundRouteId)); | 1263 kBackgroundRouteId)); |
1261 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1264 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1262 scheduler_.GetClientStateForTesting(kBackgroundChildId2, | 1265 scheduler_.GetClientStateForTesting(kBackgroundChildId2, |
1263 kBackgroundRouteId2)); | 1266 kBackgroundRouteId2)); |
1264 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, | 1267 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, |
1265 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); | 1268 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); |
1266 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, | 1269 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1309 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); | 1312 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
1310 | 1313 |
1311 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1314 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
1312 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1315 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
1313 } | 1316 } |
1314 | 1317 |
1315 TEST_F(ResourceSchedulerTest, UnloadedClientBecomesSilentCorrectlyUnthrottles) { | 1318 TEST_F(ResourceSchedulerTest, UnloadedClientBecomesSilentCorrectlyUnthrottles) { |
1316 // TODO(aiolos): remove when throttling and coalescing have both landed | 1319 // TODO(aiolos): remove when throttling and coalescing have both landed |
1317 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1320 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
1318 false /* should_coalesce */); | 1321 false /* should_coalesce */); |
1319 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1322 scheduler_.OnClientCreated(kChildId2, kRouteId2, false); |
1320 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1323 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
1321 scheduler_.OnLoadingStateChanged( | 1324 scheduler_.OnLoadingStateChanged( |
1322 kBackgroundChildId2, kBackgroundRouteId2, true); | 1325 kBackgroundChildId2, kBackgroundRouteId2, true); |
1323 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); | 1326 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); |
1324 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); | 1327 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
1325 scheduler_.OnAudibilityChanged(kChildId2, kRouteId2, true); | 1328 scheduler_.OnAudibilityChanged(kChildId2, kRouteId2, true); |
1326 // 2 audible, 2 hidden | 1329 // 2 audible, 2 hidden |
1327 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1330 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
1328 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1331 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1329 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1332 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1330 kBackgroundRouteId)); | 1333 kBackgroundRouteId)); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1379 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); | 1382 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
1380 | 1383 |
1381 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1384 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
1382 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1385 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
1383 } | 1386 } |
1384 | 1387 |
1385 TEST_F(ResourceSchedulerTest, LoadedClientBecomesHiddenCorrectlyThrottles) { | 1388 TEST_F(ResourceSchedulerTest, LoadedClientBecomesHiddenCorrectlyThrottles) { |
1386 // TODO(aiolos): remove when throttling and coalescing have both landed | 1389 // TODO(aiolos): remove when throttling and coalescing have both landed |
1387 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1390 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
1388 false /* should_coalesce */); | 1391 false /* should_coalesce */); |
1389 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1392 scheduler_.OnClientCreated(kChildId2, kRouteId2, true); |
1390 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1393 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
1391 scheduler_.OnLoadingStateChanged( | 1394 scheduler_.OnLoadingStateChanged( |
1392 kBackgroundChildId2, kBackgroundRouteId2, true); | 1395 kBackgroundChildId2, kBackgroundRouteId2, true); |
1393 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); | 1396 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
1394 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); | |
1395 // 2 visible, 2 hidden | 1397 // 2 visible, 2 hidden |
1396 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1398 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
1397 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1399 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1398 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1400 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1399 kBackgroundRouteId)); | 1401 kBackgroundRouteId)); |
1400 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1402 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1401 scheduler_.GetClientStateForTesting(kBackgroundChildId2, | 1403 scheduler_.GetClientStateForTesting(kBackgroundChildId2, |
1402 kBackgroundRouteId2)); | 1404 kBackgroundRouteId2)); |
1403 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, | 1405 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, |
1404 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); | 1406 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1448 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); | 1450 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
1449 | 1451 |
1450 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1452 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
1451 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1453 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
1452 } | 1454 } |
1453 | 1455 |
1454 TEST_F(ResourceSchedulerTest, LoadedClientBecomesSilentCorrectlyThrottles) { | 1456 TEST_F(ResourceSchedulerTest, LoadedClientBecomesSilentCorrectlyThrottles) { |
1455 // TODO(aiolos): remove when throttling and coalescing have both landed | 1457 // TODO(aiolos): remove when throttling and coalescing have both landed |
1456 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1458 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
1457 false /* should_coalesce */); | 1459 false /* should_coalesce */); |
1458 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1460 scheduler_.OnClientCreated(kChildId2, kRouteId2, false); |
1459 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1461 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
1460 scheduler_.OnLoadingStateChanged( | 1462 scheduler_.OnLoadingStateChanged( |
1461 kBackgroundChildId2, kBackgroundRouteId2, true); | 1463 kBackgroundChildId2, kBackgroundRouteId2, true); |
1462 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); | 1464 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
1463 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); | 1465 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
1464 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); | 1466 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); |
1465 scheduler_.OnAudibilityChanged(kChildId2, kRouteId2, true); | 1467 scheduler_.OnAudibilityChanged(kChildId2, kRouteId2, true); |
1466 // 2 audible, 2 hidden | 1468 // 2 audible, 2 hidden |
1467 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1469 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
1468 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1470 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1469 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1471 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1519 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); | 1521 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
1520 | 1522 |
1521 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1523 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
1522 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1524 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
1523 } | 1525 } |
1524 | 1526 |
1525 TEST_F(ResourceSchedulerTest, HiddenLoadedChangesCorrectlyStayThrottled) { | 1527 TEST_F(ResourceSchedulerTest, HiddenLoadedChangesCorrectlyStayThrottled) { |
1526 // TODO(aiolos): remove when throttling and coalescing have both landed | 1528 // TODO(aiolos): remove when throttling and coalescing have both landed |
1527 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1529 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
1528 false /* should_coalesce */); | 1530 false /* should_coalesce */); |
1529 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1531 scheduler_.OnClientCreated(kChildId2, kRouteId2, true); |
1530 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1532 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
1531 | 1533 |
1532 // 1 visible and 2 hidden loading, 1 visible loaded | 1534 // 1 visible and 2 hidden loading, 1 visible loaded |
1533 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); | |
1534 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); | 1535 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); |
1535 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1536 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
1536 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1537 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1537 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1538 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1538 kBackgroundRouteId)); | 1539 kBackgroundRouteId)); |
1539 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1540 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1540 scheduler_.GetClientStateForTesting(kBackgroundChildId2, | 1541 scheduler_.GetClientStateForTesting(kBackgroundChildId2, |
1541 kBackgroundRouteId2)); | 1542 kBackgroundRouteId2)); |
1542 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, | 1543 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, |
1543 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); | 1544 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1590 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); | 1591 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
1591 | 1592 |
1592 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1593 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
1593 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1594 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
1594 } | 1595 } |
1595 | 1596 |
1596 TEST_F(ResourceSchedulerTest, PartialVisibleClientLoadedDoesNotUnthrottle) { | 1597 TEST_F(ResourceSchedulerTest, PartialVisibleClientLoadedDoesNotUnthrottle) { |
1597 // TODO(aiolos): remove when throttling and coalescing have both landed | 1598 // TODO(aiolos): remove when throttling and coalescing have both landed |
1598 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1599 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
1599 false /* should_coalesce */); | 1600 false /* should_coalesce */); |
1600 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1601 scheduler_.OnClientCreated(kChildId2, kRouteId2, true); |
1601 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1602 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
1602 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); | |
1603 | 1603 |
1604 // 2 visible loading, 1 hidden loading, 1 hidden loaded | 1604 // 2 visible loading, 1 hidden loading, 1 hidden loaded |
1605 scheduler_.OnLoadingStateChanged( | 1605 scheduler_.OnLoadingStateChanged( |
1606 kBackgroundChildId2, kBackgroundRouteId2, true); | 1606 kBackgroundChildId2, kBackgroundRouteId2, true); |
1607 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1607 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
1608 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1608 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1609 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1609 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1610 kBackgroundRouteId)); | 1610 kBackgroundRouteId)); |
1611 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1611 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1612 scheduler_.GetClientStateForTesting(kBackgroundChildId2, | 1612 scheduler_.GetClientStateForTesting(kBackgroundChildId2, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1645 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); | 1645 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
1646 | 1646 |
1647 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1647 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
1648 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1648 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
1649 } | 1649 } |
1650 | 1650 |
1651 TEST_F(ResourceSchedulerTest, FullVisibleLoadedCorrectlyUnthrottle) { | 1651 TEST_F(ResourceSchedulerTest, FullVisibleLoadedCorrectlyUnthrottle) { |
1652 // TODO(aiolos): remove when throttling and coalescing have both landed | 1652 // TODO(aiolos): remove when throttling and coalescing have both landed |
1653 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1653 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
1654 false /* should_coalesce */); | 1654 false /* should_coalesce */); |
1655 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1655 scheduler_.OnClientCreated(kChildId2, kRouteId2, true); |
1656 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1656 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
1657 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); | |
1658 | 1657 |
1659 // 1 visible and 1 hidden loaded, 1 visible and 1 hidden loading | 1658 // 1 visible and 1 hidden loaded, 1 visible and 1 hidden loading |
1660 scheduler_.OnLoadingStateChanged( | 1659 scheduler_.OnLoadingStateChanged( |
1661 kBackgroundChildId2, kBackgroundRouteId2, true); | 1660 kBackgroundChildId2, kBackgroundRouteId2, true); |
1662 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); | 1661 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
1663 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1662 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
1664 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1663 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1665 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1664 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1666 kBackgroundRouteId)); | 1665 kBackgroundRouteId)); |
1667 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1666 EXPECT_EQ(ResourceScheduler::THROTTLED, |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1712 | 1711 |
1713 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1712 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
1714 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1713 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
1715 } | 1714 } |
1716 | 1715 |
1717 TEST_F(ResourceSchedulerTest, | 1716 TEST_F(ResourceSchedulerTest, |
1718 ActiveAndLoadingClientDeletedCorrectlyUnthrottle) { | 1717 ActiveAndLoadingClientDeletedCorrectlyUnthrottle) { |
1719 // TODO(aiolos): remove when throttling and coalescing have both landed | 1718 // TODO(aiolos): remove when throttling and coalescing have both landed |
1720 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1719 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
1721 false /* should_coalesce */); | 1720 false /* should_coalesce */); |
1722 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1721 scheduler_.OnClientCreated(kChildId2, kRouteId2, true); |
1723 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1722 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
1724 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); | |
1725 | 1723 |
1726 // 1 visible and 1 hidden loaded, 1 visible and 1 hidden loading | 1724 // 1 visible and 1 hidden loaded, 1 visible and 1 hidden loading |
1727 scheduler_.OnLoadingStateChanged( | 1725 scheduler_.OnLoadingStateChanged( |
1728 kBackgroundChildId2, kBackgroundRouteId2, true); | 1726 kBackgroundChildId2, kBackgroundRouteId2, true); |
1729 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); | 1727 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); |
1730 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1728 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
1731 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1729 EXPECT_EQ(ResourceScheduler::THROTTLED, |
1732 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1730 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1733 kBackgroundRouteId)); | 1731 kBackgroundRouteId)); |
1734 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1732 EXPECT_EQ(ResourceScheduler::THROTTLED, |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1850 scheduler_.OnAudibilityChanged(kBackgroundChildId, kBackgroundRouteId, true); | 1848 scheduler_.OnAudibilityChanged(kBackgroundChildId, kBackgroundRouteId, true); |
1851 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, | 1849 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, |
1852 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1850 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1853 kBackgroundRouteId)); | 1851 kBackgroundRouteId)); |
1854 EXPECT_FALSE(mock_timer_->IsRunning()); | 1852 EXPECT_FALSE(mock_timer_->IsRunning()); |
1855 } | 1853 } |
1856 | 1854 |
1857 TEST_F(ResourceSchedulerTest, LastCoalescedClientDeletionStopsTimer) { | 1855 TEST_F(ResourceSchedulerTest, LastCoalescedClientDeletionStopsTimer) { |
1858 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1856 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
1859 true /* should_coalesce */); | 1857 true /* should_coalesce */); |
1860 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1858 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
1861 EXPECT_FALSE(mock_timer_->IsRunning()); | 1859 EXPECT_FALSE(mock_timer_->IsRunning()); |
1862 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); | 1860 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); |
1863 EXPECT_FALSE(mock_timer_->IsRunning()); | 1861 EXPECT_FALSE(mock_timer_->IsRunning()); |
1864 scheduler_.OnLoadingStateChanged( | 1862 scheduler_.OnLoadingStateChanged( |
1865 kBackgroundChildId, kBackgroundRouteId, true); | 1863 kBackgroundChildId, kBackgroundRouteId, true); |
1866 EXPECT_EQ(ResourceScheduler::COALESCED, | 1864 EXPECT_EQ(ResourceScheduler::COALESCED, |
1867 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1865 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1868 kBackgroundRouteId)); | 1866 kBackgroundRouteId)); |
1869 scheduler_.OnLoadingStateChanged( | 1867 scheduler_.OnLoadingStateChanged( |
1870 kBackgroundChildId2, kBackgroundRouteId2, true); | 1868 kBackgroundChildId2, kBackgroundRouteId2, true); |
1871 EXPECT_EQ(ResourceScheduler::COALESCED, | 1869 EXPECT_EQ(ResourceScheduler::COALESCED, |
1872 scheduler_.GetClientStateForTesting(kBackgroundChildId2, | 1870 scheduler_.GetClientStateForTesting(kBackgroundChildId2, |
1873 kBackgroundRouteId2)); | 1871 kBackgroundRouteId2)); |
1874 EXPECT_TRUE(mock_timer_->IsRunning()); | 1872 EXPECT_TRUE(mock_timer_->IsRunning()); |
1875 | 1873 |
1876 scheduler_.OnClientDeleted(kBackgroundChildId, kBackgroundRouteId); | 1874 scheduler_.OnClientDeleted(kBackgroundChildId, kBackgroundRouteId); |
1877 EXPECT_TRUE(mock_timer_->IsRunning()); | 1875 EXPECT_TRUE(mock_timer_->IsRunning()); |
1878 | 1876 |
1879 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1877 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
1880 EXPECT_FALSE(mock_timer_->IsRunning()); | 1878 EXPECT_FALSE(mock_timer_->IsRunning()); |
1881 | 1879 |
1882 // To avoid errors on test tear down. | 1880 // To avoid errors on test tear down. |
1883 scheduler_.OnClientCreated(kBackgroundChildId, kBackgroundRouteId); | 1881 scheduler_.OnClientCreated(kBackgroundChildId, kBackgroundRouteId, false); |
1884 } | 1882 } |
1885 | 1883 |
1886 TEST_F(ResourceSchedulerTest, LastCoalescedClientStartsLoadingStopsTimer) { | 1884 TEST_F(ResourceSchedulerTest, LastCoalescedClientStartsLoadingStopsTimer) { |
1887 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1885 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
1888 true /* should_coalesce */); | 1886 true /* should_coalesce */); |
1889 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1887 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
1890 EXPECT_FALSE(mock_timer_->IsRunning()); | 1888 EXPECT_FALSE(mock_timer_->IsRunning()); |
1891 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); | 1889 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); |
1892 EXPECT_FALSE(mock_timer_->IsRunning()); | 1890 EXPECT_FALSE(mock_timer_->IsRunning()); |
1893 scheduler_.OnLoadingStateChanged( | 1891 scheduler_.OnLoadingStateChanged( |
1894 kBackgroundChildId, kBackgroundRouteId, true); | 1892 kBackgroundChildId, kBackgroundRouteId, true); |
1895 EXPECT_EQ(ResourceScheduler::COALESCED, | 1893 EXPECT_EQ(ResourceScheduler::COALESCED, |
1896 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1894 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1897 kBackgroundRouteId)); | 1895 kBackgroundRouteId)); |
1898 scheduler_.OnLoadingStateChanged( | 1896 scheduler_.OnLoadingStateChanged( |
1899 kBackgroundChildId2, kBackgroundRouteId2, true); | 1897 kBackgroundChildId2, kBackgroundRouteId2, true); |
(...skipping 10 matching lines...) Expand all Loading... | |
1910 kBackgroundChildId2, kBackgroundRouteId2, false); | 1908 kBackgroundChildId2, kBackgroundRouteId2, false); |
1911 EXPECT_FALSE(mock_timer_->IsRunning()); | 1909 EXPECT_FALSE(mock_timer_->IsRunning()); |
1912 | 1910 |
1913 // This is needed to avoid errors on test tear down. | 1911 // This is needed to avoid errors on test tear down. |
1914 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1912 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
1915 } | 1913 } |
1916 | 1914 |
1917 TEST_F(ResourceSchedulerTest, LastCoalescedClientBecomesVisibleStopsTimer) { | 1915 TEST_F(ResourceSchedulerTest, LastCoalescedClientBecomesVisibleStopsTimer) { |
1918 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1916 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
1919 true /* should_coalesce */); | 1917 true /* should_coalesce */); |
1920 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1918 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2, false); |
1921 EXPECT_FALSE(mock_timer_->IsRunning()); | 1919 EXPECT_FALSE(mock_timer_->IsRunning()); |
1922 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); | 1920 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); |
1923 EXPECT_FALSE(mock_timer_->IsRunning()); | 1921 EXPECT_FALSE(mock_timer_->IsRunning()); |
1924 scheduler_.OnLoadingStateChanged( | 1922 scheduler_.OnLoadingStateChanged( |
1925 kBackgroundChildId, kBackgroundRouteId, true); | 1923 kBackgroundChildId, kBackgroundRouteId, true); |
1926 EXPECT_EQ(ResourceScheduler::COALESCED, | 1924 EXPECT_EQ(ResourceScheduler::COALESCED, |
1927 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1925 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
1928 kBackgroundRouteId)); | 1926 kBackgroundRouteId)); |
1929 scheduler_.OnLoadingStateChanged( | 1927 scheduler_.OnLoadingStateChanged( |
1930 kBackgroundChildId2, kBackgroundRouteId2, true); | 1928 kBackgroundChildId2, kBackgroundRouteId2, true); |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2091 EXPECT_FALSE(high2->started()); | 2089 EXPECT_FALSE(high2->started()); |
2092 EXPECT_FALSE(low->started()); | 2090 EXPECT_FALSE(low->started()); |
2093 | 2091 |
2094 FireCoalescingTimer(); | 2092 FireCoalescingTimer(); |
2095 | 2093 |
2096 EXPECT_TRUE(high->started()); | 2094 EXPECT_TRUE(high->started()); |
2097 EXPECT_TRUE(high2->started()); | 2095 EXPECT_TRUE(high2->started()); |
2098 EXPECT_TRUE(low->started()); | 2096 EXPECT_TRUE(low->started()); |
2099 } | 2097 } |
2100 | 2098 |
2099 TEST_F(ResourceSchedulerTest, GetVisualSignalFromRenderViewHost) { | |
2100 scoped_ptr<MockRenderProcessHostFactory> render_process_host_factory; | |
2101 scoped_ptr<TestBrowserContext> browser_context; | |
2102 scoped_ptr<TestWebContents> web_contents_1; | |
2103 scoped_ptr<TestWebContents> web_contents_2; | |
2104 | |
2105 render_process_host_factory.reset(new MockRenderProcessHostFactory()); | |
2106 browser_context.reset(new TestBrowserContext()); | |
2107 scoped_refptr<SiteInstance> site_instance_1 = | |
2108 SiteInstance::Create(browser_context.get()); | |
2109 scoped_refptr<SiteInstance> site_instance_2 = | |
2110 SiteInstance::Create(browser_context.get()); | |
2111 SiteInstanceImpl::set_render_process_host_factory( | |
2112 render_process_host_factory.get()); | |
2113 | |
2114 web_contents_1.reset( | |
2115 TestWebContents::Create(browser_context.get(), site_instance_1.get())); | |
2116 web_contents_2.reset( | |
2117 TestWebContents::Create(browser_context.get(), site_instance_2.get())); | |
2118 base::RunLoop().RunUntilIdle(); | |
2119 | |
2120 RenderViewHostImpl* rvh1 = web_contents_1->GetRenderViewHost(); | |
2121 RenderViewHostImpl* rvh2 = web_contents_2->GetRenderViewHost(); | |
2122 | |
2123 rvh1->WasShown(ui::LatencyInfo()); | |
2124 rvh2->WasHidden(); | |
2125 base::RunLoop().RunUntilIdle(); | |
2126 | |
2127 ResourceScheduler* scheduler = ResourceDispatcherHostImpl::Get()->scheduler(); | |
2128 | |
2129 // Check initial visibility | |
mmenke
2014/08/20 20:21:43
This isn't initial visibility, since you've alread
Zhen Wang
2014/08/21 03:34:48
Done.
| |
2130 EXPECT_TRUE(scheduler->IsClientVisibleForTesting(rvh1->GetProcess()->GetID(), | |
2131 rvh1->GetRoutingID())); | |
2132 EXPECT_FALSE(scheduler->IsClientVisibleForTesting(rvh2->GetProcess()->GetID(), | |
2133 rvh2->GetRoutingID())); | |
2134 | |
2135 // Flip the visibility and check again | |
mmenke
2014/08/20 20:21:43
nit: End comments that are sentences (Or at least
Zhen Wang
2014/08/21 03:34:48
Done.
| |
2136 rvh1->WasHidden(); | |
2137 rvh2->WasShown(ui::LatencyInfo()); | |
2138 base::RunLoop().RunUntilIdle(); | |
2139 | |
2140 EXPECT_FALSE(scheduler->IsClientVisibleForTesting(rvh1->GetProcess()->GetID(), | |
2141 rvh1->GetRoutingID())); | |
2142 EXPECT_TRUE(scheduler->IsClientVisibleForTesting(rvh2->GetProcess()->GetID(), | |
2143 rvh2->GetRoutingID())); | |
2144 // Clean up | |
2145 web_contents_1.reset(); | |
2146 web_contents_2.reset(); | |
2147 base::RunLoop().RunUntilIdle(); | |
2148 | |
2149 browser_context.reset(); | |
2150 render_process_host_factory.reset(); | |
2151 } | |
2152 | |
2101 } // unnamed namespace | 2153 } // unnamed namespace |
2102 | 2154 |
2103 } // namespace content | 2155 } // namespace content |
OLD | NEW |