| 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/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "base/timer/mock_timer.h" | 10 #include "base/timer/mock_timer.h" |
| 11 #include "base/timer/timer.h" | 11 #include "base/timer/timer.h" |
| 12 #include "content/browser/browser_thread_impl.h" | 12 #include "content/browser/browser_thread_impl.h" |
| 13 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 13 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
| 14 #include "content/browser/loader/resource_message_filter.h" | 14 #include "content/browser/loader/resource_message_filter.h" |
| 15 #include "content/browser/loader/resource_request_info_impl.h" | 15 #include "content/browser/loader/resource_request_info_impl.h" |
| 16 #include "content/common/resource_messages.h" | 16 #include "content/common/resource_messages.h" |
| 17 #include "content/public/browser/resource_context.h" | 17 #include "content/public/browser/resource_context.h" |
| 18 #include "content/public/browser/resource_controller.h" | 18 #include "content/public/browser/resource_controller.h" |
| 19 #include "content/public/browser/resource_throttle.h" | 19 #include "content/public/browser/resource_throttle.h" |
| 20 #include "content/public/common/process_type.h" | 20 #include "content/public/common/process_type.h" |
| 21 #include "content/public/common/resource_type.h" | 21 #include "content/public/common/resource_type.h" |
| 22 #include "content/public/test/mock_render_process_host.h" |
| 23 #include "content/public/test/test_browser_context.h" |
| 24 #include "content/test/test_web_contents.h" |
| 22 #include "net/base/host_port_pair.h" | 25 #include "net/base/host_port_pair.h" |
| 23 #include "net/base/request_priority.h" | 26 #include "net/base/request_priority.h" |
| 24 #include "net/http/http_server_properties_impl.h" | 27 #include "net/http/http_server_properties_impl.h" |
| 25 #include "net/url_request/url_request.h" | 28 #include "net/url_request/url_request.h" |
| 26 #include "net/url_request/url_request_test_util.h" | 29 #include "net/url_request/url_request_test_util.h" |
| 27 #include "testing/gtest/include/gtest/gtest.h" | 30 #include "testing/gtest/include/gtest/gtest.h" |
| 28 | 31 |
| 29 namespace content { | 32 namespace content { |
| 30 | 33 |
| 31 namespace { | 34 namespace { |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 FakeResourceContext context_; | 136 FakeResourceContext context_; |
| 134 }; | 137 }; |
| 135 | 138 |
| 136 class ResourceSchedulerTest : public testing::Test { | 139 class ResourceSchedulerTest : public testing::Test { |
| 137 protected: | 140 protected: |
| 138 ResourceSchedulerTest() | 141 ResourceSchedulerTest() |
| 139 : next_request_id_(0), | 142 : next_request_id_(0), |
| 140 ui_thread_(BrowserThread::UI, &message_loop_), | 143 ui_thread_(BrowserThread::UI, &message_loop_), |
| 141 io_thread_(BrowserThread::IO, &message_loop_), | 144 io_thread_(BrowserThread::IO, &message_loop_), |
| 142 mock_timer_(new base::MockTimer(true, true)) { | 145 mock_timer_(new base::MockTimer(true, true)) { |
| 146 // set up web contents |
| 147 render_process_host_factory_.reset(new MockRenderProcessHostFactory()); |
| 148 browser_context_.reset(new TestBrowserContext()); |
| 149 scoped_refptr<SiteInstance> site_instance = |
| 150 SiteInstance::Create(browser_context_.get()); |
| 151 scoped_refptr<SiteInstance> site_instance_background = |
| 152 SiteInstance::Create(browser_context_.get()); |
| 153 scoped_refptr<SiteInstance> site_instance_2 = |
| 154 SiteInstance::Create(browser_context_.get()); |
| 155 scoped_refptr<SiteInstance> site_instance_background_2 = |
| 156 SiteInstance::Create(browser_context_.get()); |
| 157 SiteInstanceImpl::set_render_process_host_factory( |
| 158 render_process_host_factory_.get()); |
| 159 |
| 160 web_contents_.reset( |
| 161 TestWebContents::Create(browser_context_.get(), site_instance.get())); |
| 162 web_contents_background_.reset( |
| 163 TestWebContents::Create(browser_context_.get(), |
| 164 site_instance_background.get())); |
| 165 web_contents_2_.reset( |
| 166 TestWebContents::Create(browser_context_.get(), site_instance_2.get())); |
| 167 web_contents_background_2_.reset( |
| 168 TestWebContents::Create(browser_context_.get(), |
| 169 site_instance_background_2.get())); |
| 170 |
| 171 web_contents_->WasShown(); |
| 172 web_contents_background_->WasHidden(); |
| 173 web_contents_2_->WasShown(); |
| 174 web_contents_background_2_->WasHidden(); |
| 175 |
| 176 // set up resource scheduler |
| 143 scheduler_.set_timer_for_testing(scoped_ptr<base::Timer>(mock_timer_)); | 177 scheduler_.set_timer_for_testing(scoped_ptr<base::Timer>(mock_timer_)); |
| 144 | 178 |
| 145 // TODO(aiolos): Remove when throttling and coalescing have both landed. | 179 // TODO(aiolos): Remove when throttling and coalescing have both landed. |
| 146 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 180 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 147 false /* should_coalesce */); | 181 false /* should_coalesce */); |
| 148 | 182 |
| 149 scheduler_.OnClientCreated(kChildId, kRouteId); | 183 scheduler_.OnClientCreated(kChildId, kRouteId, web_contents_.get()); |
| 150 scheduler_.OnVisibilityChanged(kChildId, kRouteId, true); | 184 scheduler_.OnVisibilityChanged(kChildId, kRouteId, true); |
| 151 scheduler_.OnClientCreated(kBackgroundChildId, kBackgroundRouteId); | 185 scheduler_.OnClientCreated(kBackgroundChildId, |
| 186 kBackgroundRouteId, |
| 187 web_contents_background_.get()); |
| 152 context_.set_http_server_properties(http_server_properties_.GetWeakPtr()); | 188 context_.set_http_server_properties(http_server_properties_.GetWeakPtr()); |
| 153 } | 189 } |
| 154 | 190 |
| 155 virtual ~ResourceSchedulerTest() { | 191 virtual ~ResourceSchedulerTest() { |
| 156 scheduler_.OnClientDeleted(kChildId, kRouteId); | 192 scheduler_.OnClientDeleted(kChildId, kRouteId); |
| 157 scheduler_.OnClientDeleted(kBackgroundChildId, kBackgroundRouteId); | 193 scheduler_.OnClientDeleted(kBackgroundChildId, kBackgroundRouteId); |
| 194 |
| 195 web_contents_.reset(); |
| 196 web_contents_background_.reset(); |
| 197 web_contents_2_.reset(); |
| 198 web_contents_background_2_.reset(); |
| 199 browser_context_.reset(); |
| 200 render_process_host_factory_.reset(); |
| 158 } | 201 } |
| 159 | 202 |
| 160 scoped_ptr<net::URLRequest> NewURLRequestWithChildAndRoute( | 203 scoped_ptr<net::URLRequest> NewURLRequestWithChildAndRoute( |
| 161 const char* url, | 204 const char* url, |
| 162 net::RequestPriority priority, | 205 net::RequestPriority priority, |
| 163 int child_id, | 206 int child_id, |
| 164 int route_id, | 207 int route_id, |
| 165 bool is_async) { | 208 bool is_async) { |
| 166 scoped_ptr<net::URLRequest> url_request( | 209 scoped_ptr<net::URLRequest> url_request( |
| 167 context_.CreateRequest(GURL(url), priority, NULL, NULL)); | 210 context_.CreateRequest(GURL(url), priority, NULL, NULL)); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 | 315 |
| 273 int next_request_id_; | 316 int next_request_id_; |
| 274 base::MessageLoopForIO message_loop_; | 317 base::MessageLoopForIO message_loop_; |
| 275 BrowserThreadImpl ui_thread_; | 318 BrowserThreadImpl ui_thread_; |
| 276 BrowserThreadImpl io_thread_; | 319 BrowserThreadImpl io_thread_; |
| 277 ResourceDispatcherHostImpl rdh_; | 320 ResourceDispatcherHostImpl rdh_; |
| 278 ResourceScheduler scheduler_; | 321 ResourceScheduler scheduler_; |
| 279 base::MockTimer* mock_timer_; | 322 base::MockTimer* mock_timer_; |
| 280 net::HttpServerPropertiesImpl http_server_properties_; | 323 net::HttpServerPropertiesImpl http_server_properties_; |
| 281 net::TestURLRequestContext context_; | 324 net::TestURLRequestContext context_; |
| 325 scoped_ptr<MockRenderProcessHostFactory> render_process_host_factory_; |
| 326 scoped_ptr<TestBrowserContext> browser_context_; |
| 327 scoped_ptr<WebContents> web_contents_; |
| 328 scoped_ptr<WebContents> web_contents_background_; |
| 329 scoped_ptr<WebContents> web_contents_2_; |
| 330 scoped_ptr<WebContents> web_contents_background_2_; |
| 282 }; | 331 }; |
| 283 | 332 |
| 284 TEST_F(ResourceSchedulerTest, OneIsolatedLowRequest) { | 333 TEST_F(ResourceSchedulerTest, OneIsolatedLowRequest) { |
| 285 scoped_ptr<TestRequest> request(NewRequest("http://host/1", net::LOWEST)); | 334 scoped_ptr<TestRequest> request(NewRequest("http://host/1", net::LOWEST)); |
| 286 EXPECT_TRUE(request->started()); | 335 EXPECT_TRUE(request->started()); |
| 287 } | 336 } |
| 288 | 337 |
| 289 TEST_F(ResourceSchedulerTest, OneLowLoadsUntilIdle) { | 338 TEST_F(ResourceSchedulerTest, OneLowLoadsUntilIdle) { |
| 290 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); | 339 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); |
| 291 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); | 340 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 ChangeRequestPriority(low2_spdy.get(), net::LOWEST); | 680 ChangeRequestPriority(low2_spdy.get(), net::LOWEST); |
| 632 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); | 681 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); |
| 633 EXPECT_TRUE(low2->started()); | 682 EXPECT_TRUE(low2->started()); |
| 634 } | 683 } |
| 635 | 684 |
| 636 TEST_F(ResourceSchedulerTest, ThrottledClientCreation) { | 685 TEST_F(ResourceSchedulerTest, ThrottledClientCreation) { |
| 637 // TODO(aiolos): remove when throttling and coalescing have both landed | 686 // TODO(aiolos): remove when throttling and coalescing have both landed |
| 638 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 687 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 639 false /* should_coalesce */); | 688 false /* should_coalesce */); |
| 640 EXPECT_TRUE(scheduler_.should_throttle()); | 689 EXPECT_TRUE(scheduler_.should_throttle()); |
| 641 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 690 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 691 kBackgroundRouteId2, |
| 692 web_contents_background_2_.get()); |
| 642 | 693 |
| 643 EXPECT_EQ(ResourceScheduler::THROTTLED, | 694 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| 644 scheduler_.GetClientStateForTesting(kBackgroundChildId2, | 695 scheduler_.GetClientStateForTesting(kBackgroundChildId2, |
| 645 kBackgroundRouteId2)); | 696 kBackgroundRouteId2)); |
| 646 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 697 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| 647 } | 698 } |
| 648 | 699 |
| 649 TEST_F(ResourceSchedulerTest, ActiveClientThrottleUpdateOnLoadingChange) { | 700 TEST_F(ResourceSchedulerTest, ActiveClientThrottleUpdateOnLoadingChange) { |
| 650 // TODO(aiolos): remove when throttling and coalescing have both landed | 701 // TODO(aiolos): remove when throttling and coalescing have both landed |
| 651 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 702 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| (...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1015 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, | 1066 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, |
| 1016 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1067 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1017 kBackgroundRouteId)); | 1068 kBackgroundRouteId)); |
| 1018 } | 1069 } |
| 1019 | 1070 |
| 1020 TEST_F(ResourceSchedulerTest, | 1071 TEST_F(ResourceSchedulerTest, |
| 1021 UnloadedClientVisibilityChangedCorrectlyUnthrottles) { | 1072 UnloadedClientVisibilityChangedCorrectlyUnthrottles) { |
| 1022 // TODO(aiolos): remove when throttling and coalescing have both landed | 1073 // TODO(aiolos): remove when throttling and coalescing have both landed |
| 1023 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1074 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 1024 false /* should_coalesce */); | 1075 false /* should_coalesce */); |
| 1025 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1076 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| 1026 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1077 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 1078 kBackgroundRouteId2, |
| 1079 web_contents_background_2_.get()); |
| 1027 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); | 1080 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
| 1028 scheduler_.OnLoadingStateChanged( | 1081 scheduler_.OnLoadingStateChanged( |
| 1029 kBackgroundChildId2, kBackgroundRouteId2, true); | 1082 kBackgroundChildId2, kBackgroundRouteId2, true); |
| 1030 | 1083 |
| 1031 // 1 visible, 3 hidden | 1084 // 1 visible, 3 hidden |
| 1032 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1085 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| 1033 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1086 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| 1034 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1087 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1035 kBackgroundRouteId)); | 1088 kBackgroundRouteId)); |
| 1036 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1089 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1071 | 1124 |
| 1072 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1125 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
| 1073 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1126 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| 1074 } | 1127 } |
| 1075 | 1128 |
| 1076 TEST_F(ResourceSchedulerTest, | 1129 TEST_F(ResourceSchedulerTest, |
| 1077 UnloadedClientAudibilityChangedCorrectlyUnthrottles) { | 1130 UnloadedClientAudibilityChangedCorrectlyUnthrottles) { |
| 1078 // TODO(aiolos): remove when throttling and coalescing have both landed | 1131 // TODO(aiolos): remove when throttling and coalescing have both landed |
| 1079 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1132 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 1080 false /* should_coalesce */); | 1133 false /* should_coalesce */); |
| 1081 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1134 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| 1082 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1135 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 1136 kBackgroundRouteId2, |
| 1137 web_contents_background_2_.get()); |
| 1083 scheduler_.OnLoadingStateChanged( | 1138 scheduler_.OnLoadingStateChanged( |
| 1084 kBackgroundChildId2, kBackgroundRouteId2, true); | 1139 kBackgroundChildId2, kBackgroundRouteId2, true); |
| 1085 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); | 1140 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
| 1086 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); | 1141 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); |
| 1087 | 1142 |
| 1088 // 1 audible, 3 hidden | 1143 // 1 audible, 3 hidden |
| 1089 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1144 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| 1090 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1145 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| 1091 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1146 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1092 kBackgroundRouteId)); | 1147 kBackgroundRouteId)); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1128 | 1183 |
| 1129 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1184 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
| 1130 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1185 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| 1131 } | 1186 } |
| 1132 | 1187 |
| 1133 TEST_F(ResourceSchedulerTest, | 1188 TEST_F(ResourceSchedulerTest, |
| 1134 LoadedClientVisibilityChangedCorrectlyUnthrottles) { | 1189 LoadedClientVisibilityChangedCorrectlyUnthrottles) { |
| 1135 // TODO(aiolos): remove when throttling and coalescing have both landed | 1190 // TODO(aiolos): remove when throttling and coalescing have both landed |
| 1136 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1191 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 1137 false /* should_coalesce */); | 1192 false /* should_coalesce */); |
| 1138 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1193 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| 1139 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1194 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 1195 kBackgroundRouteId2, |
| 1196 web_contents_background_2_.get()); |
| 1140 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); | 1197 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
| 1141 scheduler_.OnLoadingStateChanged( | 1198 scheduler_.OnLoadingStateChanged( |
| 1142 kBackgroundChildId2, kBackgroundRouteId2, true); | 1199 kBackgroundChildId2, kBackgroundRouteId2, true); |
| 1143 // 1 visible, 3 hidden | 1200 // 1 visible, 3 hidden |
| 1144 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1201 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| 1145 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1202 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| 1146 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1203 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1147 kBackgroundRouteId)); | 1204 kBackgroundRouteId)); |
| 1148 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1205 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| 1149 scheduler_.GetClientStateForTesting(kBackgroundChildId2, | 1206 scheduler_.GetClientStateForTesting(kBackgroundChildId2, |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1183 | 1240 |
| 1184 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1241 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
| 1185 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1242 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| 1186 } | 1243 } |
| 1187 | 1244 |
| 1188 TEST_F(ResourceSchedulerTest, | 1245 TEST_F(ResourceSchedulerTest, |
| 1189 LoadedClientAudibilityChangedCorrectlyUnthrottles) { | 1246 LoadedClientAudibilityChangedCorrectlyUnthrottles) { |
| 1190 // TODO(aiolos): remove when throttling and coalescing have both landed | 1247 // TODO(aiolos): remove when throttling and coalescing have both landed |
| 1191 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1248 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 1192 false /* should_coalesce */); | 1249 false /* should_coalesce */); |
| 1193 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1250 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| 1194 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1251 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 1252 kBackgroundRouteId2, |
| 1253 web_contents_background_2_.get()); |
| 1195 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); | 1254 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
| 1196 scheduler_.OnLoadingStateChanged( | 1255 scheduler_.OnLoadingStateChanged( |
| 1197 kBackgroundChildId2, kBackgroundRouteId2, true); | 1256 kBackgroundChildId2, kBackgroundRouteId2, true); |
| 1198 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); | 1257 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
| 1199 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); | 1258 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); |
| 1200 // 1 audible, 3 hidden | 1259 // 1 audible, 3 hidden |
| 1201 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1260 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| 1202 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1261 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| 1203 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1262 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1204 kBackgroundRouteId)); | 1263 kBackgroundRouteId)); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1239 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); | 1298 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| 1240 | 1299 |
| 1241 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1300 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
| 1242 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1301 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| 1243 } | 1302 } |
| 1244 | 1303 |
| 1245 TEST_F(ResourceSchedulerTest, UnloadedClientBecomesHiddenCorrectlyUnthrottles) { | 1304 TEST_F(ResourceSchedulerTest, UnloadedClientBecomesHiddenCorrectlyUnthrottles) { |
| 1246 // TODO(aiolos): remove when throttling and coalescing have both landed | 1305 // TODO(aiolos): remove when throttling and coalescing have both landed |
| 1247 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1306 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 1248 false /* should_coalesce */); | 1307 false /* should_coalesce */); |
| 1249 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1308 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| 1250 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1309 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 1310 kBackgroundRouteId2, |
| 1311 web_contents_background_2_.get()); |
| 1251 scheduler_.OnLoadingStateChanged( | 1312 scheduler_.OnLoadingStateChanged( |
| 1252 kBackgroundChildId2, kBackgroundRouteId2, true); | 1313 kBackgroundChildId2, kBackgroundRouteId2, true); |
| 1253 | 1314 |
| 1254 // 2 visible, 2 hidden | 1315 // 2 visible, 2 hidden |
| 1255 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); | 1316 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| 1256 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1317 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| 1257 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1318 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| 1258 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1319 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1259 kBackgroundRouteId)); | 1320 kBackgroundRouteId)); |
| 1260 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1321 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1308 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); | 1369 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| 1309 | 1370 |
| 1310 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1371 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
| 1311 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1372 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| 1312 } | 1373 } |
| 1313 | 1374 |
| 1314 TEST_F(ResourceSchedulerTest, UnloadedClientBecomesSilentCorrectlyUnthrottles) { | 1375 TEST_F(ResourceSchedulerTest, UnloadedClientBecomesSilentCorrectlyUnthrottles) { |
| 1315 // TODO(aiolos): remove when throttling and coalescing have both landed | 1376 // TODO(aiolos): remove when throttling and coalescing have both landed |
| 1316 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1377 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 1317 false /* should_coalesce */); | 1378 false /* should_coalesce */); |
| 1318 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1379 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| 1319 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1380 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 1381 kBackgroundRouteId2, |
| 1382 web_contents_background_2_.get()); |
| 1320 scheduler_.OnLoadingStateChanged( | 1383 scheduler_.OnLoadingStateChanged( |
| 1321 kBackgroundChildId2, kBackgroundRouteId2, true); | 1384 kBackgroundChildId2, kBackgroundRouteId2, true); |
| 1322 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); | 1385 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); |
| 1323 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); | 1386 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
| 1324 scheduler_.OnAudibilityChanged(kChildId2, kRouteId2, true); | 1387 scheduler_.OnAudibilityChanged(kChildId2, kRouteId2, true); |
| 1325 // 2 audible, 2 hidden | 1388 // 2 audible, 2 hidden |
| 1326 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1389 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| 1327 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1390 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| 1328 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1391 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1329 kBackgroundRouteId)); | 1392 kBackgroundRouteId)); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1378 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); | 1441 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| 1379 | 1442 |
| 1380 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1443 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
| 1381 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1444 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| 1382 } | 1445 } |
| 1383 | 1446 |
| 1384 TEST_F(ResourceSchedulerTest, LoadedClientBecomesHiddenCorrectlyThrottles) { | 1447 TEST_F(ResourceSchedulerTest, LoadedClientBecomesHiddenCorrectlyThrottles) { |
| 1385 // TODO(aiolos): remove when throttling and coalescing have both landed | 1448 // TODO(aiolos): remove when throttling and coalescing have both landed |
| 1386 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1449 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 1387 false /* should_coalesce */); | 1450 false /* should_coalesce */); |
| 1388 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1451 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| 1389 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1452 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 1453 kBackgroundRouteId2, |
| 1454 web_contents_background_2_.get()); |
| 1390 scheduler_.OnLoadingStateChanged( | 1455 scheduler_.OnLoadingStateChanged( |
| 1391 kBackgroundChildId2, kBackgroundRouteId2, true); | 1456 kBackgroundChildId2, kBackgroundRouteId2, true); |
| 1392 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); | 1457 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
| 1393 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); | 1458 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| 1394 // 2 visible, 2 hidden | 1459 // 2 visible, 2 hidden |
| 1395 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1460 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| 1396 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1461 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| 1397 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1462 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1398 kBackgroundRouteId)); | 1463 kBackgroundRouteId)); |
| 1399 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1464 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1447 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); | 1512 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| 1448 | 1513 |
| 1449 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1514 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
| 1450 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1515 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| 1451 } | 1516 } |
| 1452 | 1517 |
| 1453 TEST_F(ResourceSchedulerTest, LoadedClientBecomesSilentCorrectlyThrottles) { | 1518 TEST_F(ResourceSchedulerTest, LoadedClientBecomesSilentCorrectlyThrottles) { |
| 1454 // TODO(aiolos): remove when throttling and coalescing have both landed | 1519 // TODO(aiolos): remove when throttling and coalescing have both landed |
| 1455 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1520 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 1456 false /* should_coalesce */); | 1521 false /* should_coalesce */); |
| 1457 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1522 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| 1458 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1523 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 1524 kBackgroundRouteId2, |
| 1525 web_contents_background_2_.get()); |
| 1459 scheduler_.OnLoadingStateChanged( | 1526 scheduler_.OnLoadingStateChanged( |
| 1460 kBackgroundChildId2, kBackgroundRouteId2, true); | 1527 kBackgroundChildId2, kBackgroundRouteId2, true); |
| 1461 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); | 1528 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
| 1462 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); | 1529 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
| 1463 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); | 1530 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); |
| 1464 scheduler_.OnAudibilityChanged(kChildId2, kRouteId2, true); | 1531 scheduler_.OnAudibilityChanged(kChildId2, kRouteId2, true); |
| 1465 // 2 audible, 2 hidden | 1532 // 2 audible, 2 hidden |
| 1466 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1533 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| 1467 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1534 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| 1468 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1535 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1518 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); | 1585 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| 1519 | 1586 |
| 1520 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1587 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
| 1521 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1588 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| 1522 } | 1589 } |
| 1523 | 1590 |
| 1524 TEST_F(ResourceSchedulerTest, HiddenLoadedChangesCorrectlyStayThrottled) { | 1591 TEST_F(ResourceSchedulerTest, HiddenLoadedChangesCorrectlyStayThrottled) { |
| 1525 // TODO(aiolos): remove when throttling and coalescing have both landed | 1592 // TODO(aiolos): remove when throttling and coalescing have both landed |
| 1526 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1593 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 1527 false /* should_coalesce */); | 1594 false /* should_coalesce */); |
| 1528 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1595 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| 1529 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1596 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 1597 kBackgroundRouteId2, |
| 1598 web_contents_background_2_.get()); |
| 1530 | 1599 |
| 1531 // 1 visible and 2 hidden loading, 1 visible loaded | 1600 // 1 visible and 2 hidden loading, 1 visible loaded |
| 1532 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); | 1601 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| 1533 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); | 1602 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); |
| 1534 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1603 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| 1535 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1604 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| 1536 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1605 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1537 kBackgroundRouteId)); | 1606 kBackgroundRouteId)); |
| 1538 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1607 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| 1539 scheduler_.GetClientStateForTesting(kBackgroundChildId2, | 1608 scheduler_.GetClientStateForTesting(kBackgroundChildId2, |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1589 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); | 1658 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| 1590 | 1659 |
| 1591 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1660 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
| 1592 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1661 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| 1593 } | 1662 } |
| 1594 | 1663 |
| 1595 TEST_F(ResourceSchedulerTest, PartialVisibleClientLoadedDoesNotUnthrottle) { | 1664 TEST_F(ResourceSchedulerTest, PartialVisibleClientLoadedDoesNotUnthrottle) { |
| 1596 // TODO(aiolos): remove when throttling and coalescing have both landed | 1665 // TODO(aiolos): remove when throttling and coalescing have both landed |
| 1597 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1666 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 1598 false /* should_coalesce */); | 1667 false /* should_coalesce */); |
| 1599 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1668 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| 1600 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1669 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 1670 kBackgroundRouteId2, |
| 1671 web_contents_background_2_.get()); |
| 1601 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); | 1672 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| 1602 | 1673 |
| 1603 // 2 visible loading, 1 hidden loading, 1 hidden loaded | 1674 // 2 visible loading, 1 hidden loading, 1 hidden loaded |
| 1604 scheduler_.OnLoadingStateChanged( | 1675 scheduler_.OnLoadingStateChanged( |
| 1605 kBackgroundChildId2, kBackgroundRouteId2, true); | 1676 kBackgroundChildId2, kBackgroundRouteId2, true); |
| 1606 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1677 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| 1607 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1678 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| 1608 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1679 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1609 kBackgroundRouteId)); | 1680 kBackgroundRouteId)); |
| 1610 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1681 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1644 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); | 1715 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| 1645 | 1716 |
| 1646 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1717 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
| 1647 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1718 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| 1648 } | 1719 } |
| 1649 | 1720 |
| 1650 TEST_F(ResourceSchedulerTest, FullVisibleLoadedCorrectlyUnthrottle) { | 1721 TEST_F(ResourceSchedulerTest, FullVisibleLoadedCorrectlyUnthrottle) { |
| 1651 // TODO(aiolos): remove when throttling and coalescing have both landed | 1722 // TODO(aiolos): remove when throttling and coalescing have both landed |
| 1652 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1723 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 1653 false /* should_coalesce */); | 1724 false /* should_coalesce */); |
| 1654 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1725 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| 1655 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1726 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 1727 kBackgroundRouteId2, |
| 1728 web_contents_background_2_.get()); |
| 1656 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); | 1729 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| 1657 | 1730 |
| 1658 // 1 visible and 1 hidden loaded, 1 visible and 1 hidden loading | 1731 // 1 visible and 1 hidden loaded, 1 visible and 1 hidden loading |
| 1659 scheduler_.OnLoadingStateChanged( | 1732 scheduler_.OnLoadingStateChanged( |
| 1660 kBackgroundChildId2, kBackgroundRouteId2, true); | 1733 kBackgroundChildId2, kBackgroundRouteId2, true); |
| 1661 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); | 1734 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
| 1662 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1735 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| 1663 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1736 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| 1664 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1737 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1665 kBackgroundRouteId)); | 1738 kBackgroundRouteId)); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1711 | 1784 |
| 1712 scheduler_.OnClientDeleted(kChildId2, kRouteId2); | 1785 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
| 1713 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1786 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| 1714 } | 1787 } |
| 1715 | 1788 |
| 1716 TEST_F(ResourceSchedulerTest, | 1789 TEST_F(ResourceSchedulerTest, |
| 1717 ActiveAndLoadingClientDeletedCorrectlyUnthrottle) { | 1790 ActiveAndLoadingClientDeletedCorrectlyUnthrottle) { |
| 1718 // TODO(aiolos): remove when throttling and coalescing have both landed | 1791 // TODO(aiolos): remove when throttling and coalescing have both landed |
| 1719 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1792 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 1720 false /* should_coalesce */); | 1793 false /* should_coalesce */); |
| 1721 scheduler_.OnClientCreated(kChildId2, kRouteId2); | 1794 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| 1722 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1795 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 1796 kBackgroundRouteId2, |
| 1797 web_contents_background_2_.get()); |
| 1723 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); | 1798 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| 1724 | 1799 |
| 1725 // 1 visible and 1 hidden loaded, 1 visible and 1 hidden loading | 1800 // 1 visible and 1 hidden loaded, 1 visible and 1 hidden loading |
| 1726 scheduler_.OnLoadingStateChanged( | 1801 scheduler_.OnLoadingStateChanged( |
| 1727 kBackgroundChildId2, kBackgroundRouteId2, true); | 1802 kBackgroundChildId2, kBackgroundRouteId2, true); |
| 1728 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); | 1803 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); |
| 1729 EXPECT_FALSE(scheduler_.active_clients_loaded()); | 1804 EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| 1730 EXPECT_EQ(ResourceScheduler::THROTTLED, | 1805 EXPECT_EQ(ResourceScheduler::THROTTLED, |
| 1731 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1806 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1732 kBackgroundRouteId)); | 1807 kBackgroundRouteId)); |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1849 scheduler_.OnAudibilityChanged(kBackgroundChildId, kBackgroundRouteId, true); | 1924 scheduler_.OnAudibilityChanged(kBackgroundChildId, kBackgroundRouteId, true); |
| 1850 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, | 1925 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, |
| 1851 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1926 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1852 kBackgroundRouteId)); | 1927 kBackgroundRouteId)); |
| 1853 EXPECT_FALSE(mock_timer_->IsRunning()); | 1928 EXPECT_FALSE(mock_timer_->IsRunning()); |
| 1854 } | 1929 } |
| 1855 | 1930 |
| 1856 TEST_F(ResourceSchedulerTest, LastCoalescedClientDeletionStopsTimer) { | 1931 TEST_F(ResourceSchedulerTest, LastCoalescedClientDeletionStopsTimer) { |
| 1857 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1932 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 1858 true /* should_coalesce */); | 1933 true /* should_coalesce */); |
| 1859 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1934 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 1935 kBackgroundRouteId2, |
| 1936 web_contents_background_2_.get()); |
| 1860 EXPECT_FALSE(mock_timer_->IsRunning()); | 1937 EXPECT_FALSE(mock_timer_->IsRunning()); |
| 1861 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); | 1938 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); |
| 1862 EXPECT_FALSE(mock_timer_->IsRunning()); | 1939 EXPECT_FALSE(mock_timer_->IsRunning()); |
| 1863 scheduler_.OnLoadingStateChanged( | 1940 scheduler_.OnLoadingStateChanged( |
| 1864 kBackgroundChildId, kBackgroundRouteId, true); | 1941 kBackgroundChildId, kBackgroundRouteId, true); |
| 1865 EXPECT_EQ(ResourceScheduler::COALESCED, | 1942 EXPECT_EQ(ResourceScheduler::COALESCED, |
| 1866 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1943 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1867 kBackgroundRouteId)); | 1944 kBackgroundRouteId)); |
| 1868 scheduler_.OnLoadingStateChanged( | 1945 scheduler_.OnLoadingStateChanged( |
| 1869 kBackgroundChildId2, kBackgroundRouteId2, true); | 1946 kBackgroundChildId2, kBackgroundRouteId2, true); |
| 1870 EXPECT_EQ(ResourceScheduler::COALESCED, | 1947 EXPECT_EQ(ResourceScheduler::COALESCED, |
| 1871 scheduler_.GetClientStateForTesting(kBackgroundChildId2, | 1948 scheduler_.GetClientStateForTesting(kBackgroundChildId2, |
| 1872 kBackgroundRouteId2)); | 1949 kBackgroundRouteId2)); |
| 1873 EXPECT_TRUE(mock_timer_->IsRunning()); | 1950 EXPECT_TRUE(mock_timer_->IsRunning()); |
| 1874 | 1951 |
| 1875 scheduler_.OnClientDeleted(kBackgroundChildId, kBackgroundRouteId); | 1952 scheduler_.OnClientDeleted(kBackgroundChildId, kBackgroundRouteId); |
| 1876 EXPECT_TRUE(mock_timer_->IsRunning()); | 1953 EXPECT_TRUE(mock_timer_->IsRunning()); |
| 1877 | 1954 |
| 1878 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1955 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| 1879 EXPECT_FALSE(mock_timer_->IsRunning()); | 1956 EXPECT_FALSE(mock_timer_->IsRunning()); |
| 1880 | 1957 |
| 1881 // To avoid errors on test tear down. | 1958 // To avoid errors on test tear down. |
| 1882 scheduler_.OnClientCreated(kBackgroundChildId, kBackgroundRouteId); | 1959 scheduler_.OnClientCreated(kBackgroundChildId, |
| 1960 kBackgroundRouteId, |
| 1961 web_contents_background_.get()); |
| 1883 } | 1962 } |
| 1884 | 1963 |
| 1885 TEST_F(ResourceSchedulerTest, LastCoalescedClientStartsLoadingStopsTimer) { | 1964 TEST_F(ResourceSchedulerTest, LastCoalescedClientStartsLoadingStopsTimer) { |
| 1886 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1965 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 1887 true /* should_coalesce */); | 1966 true /* should_coalesce */); |
| 1888 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 1967 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 1968 kBackgroundRouteId2, |
| 1969 web_contents_background_2_.get()); |
| 1889 EXPECT_FALSE(mock_timer_->IsRunning()); | 1970 EXPECT_FALSE(mock_timer_->IsRunning()); |
| 1890 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); | 1971 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); |
| 1891 EXPECT_FALSE(mock_timer_->IsRunning()); | 1972 EXPECT_FALSE(mock_timer_->IsRunning()); |
| 1892 scheduler_.OnLoadingStateChanged( | 1973 scheduler_.OnLoadingStateChanged( |
| 1893 kBackgroundChildId, kBackgroundRouteId, true); | 1974 kBackgroundChildId, kBackgroundRouteId, true); |
| 1894 EXPECT_EQ(ResourceScheduler::COALESCED, | 1975 EXPECT_EQ(ResourceScheduler::COALESCED, |
| 1895 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 1976 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1896 kBackgroundRouteId)); | 1977 kBackgroundRouteId)); |
| 1897 scheduler_.OnLoadingStateChanged( | 1978 scheduler_.OnLoadingStateChanged( |
| 1898 kBackgroundChildId2, kBackgroundRouteId2, true); | 1979 kBackgroundChildId2, kBackgroundRouteId2, true); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1909 kBackgroundChildId2, kBackgroundRouteId2, false); | 1990 kBackgroundChildId2, kBackgroundRouteId2, false); |
| 1910 EXPECT_FALSE(mock_timer_->IsRunning()); | 1991 EXPECT_FALSE(mock_timer_->IsRunning()); |
| 1911 | 1992 |
| 1912 // This is needed to avoid errors on test tear down. | 1993 // This is needed to avoid errors on test tear down. |
| 1913 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); | 1994 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| 1914 } | 1995 } |
| 1915 | 1996 |
| 1916 TEST_F(ResourceSchedulerTest, LastCoalescedClientBecomesVisibleStopsTimer) { | 1997 TEST_F(ResourceSchedulerTest, LastCoalescedClientBecomesVisibleStopsTimer) { |
| 1917 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, | 1998 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| 1918 true /* should_coalesce */); | 1999 true /* should_coalesce */); |
| 1919 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); | 2000 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 2001 kBackgroundRouteId2, |
| 2002 web_contents_background_2_.get()); |
| 1920 EXPECT_FALSE(mock_timer_->IsRunning()); | 2003 EXPECT_FALSE(mock_timer_->IsRunning()); |
| 1921 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); | 2004 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); |
| 1922 EXPECT_FALSE(mock_timer_->IsRunning()); | 2005 EXPECT_FALSE(mock_timer_->IsRunning()); |
| 1923 scheduler_.OnLoadingStateChanged( | 2006 scheduler_.OnLoadingStateChanged( |
| 1924 kBackgroundChildId, kBackgroundRouteId, true); | 2007 kBackgroundChildId, kBackgroundRouteId, true); |
| 1925 EXPECT_EQ(ResourceScheduler::COALESCED, | 2008 EXPECT_EQ(ResourceScheduler::COALESCED, |
| 1926 scheduler_.GetClientStateForTesting(kBackgroundChildId, | 2009 scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| 1927 kBackgroundRouteId)); | 2010 kBackgroundRouteId)); |
| 1928 scheduler_.OnLoadingStateChanged( | 2011 scheduler_.OnLoadingStateChanged( |
| 1929 kBackgroundChildId2, kBackgroundRouteId2, true); | 2012 kBackgroundChildId2, kBackgroundRouteId2, true); |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2090 EXPECT_FALSE(high2->started()); | 2173 EXPECT_FALSE(high2->started()); |
| 2091 EXPECT_FALSE(low->started()); | 2174 EXPECT_FALSE(low->started()); |
| 2092 | 2175 |
| 2093 FireCoalescingTimer(); | 2176 FireCoalescingTimer(); |
| 2094 | 2177 |
| 2095 EXPECT_TRUE(high->started()); | 2178 EXPECT_TRUE(high->started()); |
| 2096 EXPECT_TRUE(high2->started()); | 2179 EXPECT_TRUE(high2->started()); |
| 2097 EXPECT_TRUE(low->started()); | 2180 EXPECT_TRUE(low->started()); |
| 2098 } | 2181 } |
| 2099 | 2182 |
| 2183 TEST_F(ResourceSchedulerTest, GetVisualSignalFromWebContents) { |
| 2184 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| 2185 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| 2186 scheduler_.OnClientCreated(kBackgroundChildId2, |
| 2187 kBackgroundRouteId2, |
| 2188 web_contents_background_2_.get()); |
| 2189 EXPECT_TRUE(scheduler_.ClientIsVisible(kChildId2, kRouteId2)); |
| 2190 EXPECT_FALSE(scheduler_.ClientIsVisible(kBackgroundChildId2, |
| 2191 kBackgroundRouteId2)); |
| 2192 |
| 2193 // Change visibility of web contents. |
| 2194 web_contents_2_->WasHidden(); |
| 2195 web_contents_background_2_->WasShown(); |
| 2196 |
| 2197 // The clients get the visual signal from web contents. |
| 2198 EXPECT_FALSE(scheduler_.ClientIsVisible(kChildId2, kRouteId2)); |
| 2199 EXPECT_TRUE(scheduler_.ClientIsVisible(kBackgroundChildId2, |
| 2200 kBackgroundRouteId2)); |
| 2201 |
| 2202 scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
| 2203 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| 2204 } |
| 2205 |
| 2100 } // unnamed namespace | 2206 } // unnamed namespace |
| 2101 | 2207 |
| 2102 } // namespace content | 2208 } // namespace content |
| OLD | NEW |