| 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 "base/memory/scoped_ptr.h" |
| 5 #include "base/message_loop.h" | 6 #include "base/message_loop.h" |
| 6 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
| 8 #include "base/time.h" |
| 7 #include "content/browser/gpu/gpu_data_manager_impl.h" | 9 #include "content/browser/gpu/gpu_data_manager_impl.h" |
| 8 #include "content/public/browser/gpu_data_manager_observer.h" | 10 #include "content/public/browser/gpu_data_manager_observer.h" |
| 9 #include "content/public/common/gpu_info.h" | 11 #include "content/public/common/gpu_info.h" |
| 12 #include "googleurl/src/gurl.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 11 | 14 |
| 12 namespace content { | 15 namespace content { |
| 13 namespace { | 16 namespace { |
| 14 | 17 |
| 15 class TestObserver : public GpuDataManagerObserver { | 18 class TestObserver : public GpuDataManagerObserver { |
| 16 public: | 19 public: |
| 17 TestObserver() | 20 TestObserver() |
| 18 : gpu_info_updated_(false), | 21 : gpu_info_updated_(false), |
| 19 video_memory_usage_stats_updated_(false) { | 22 video_memory_usage_stats_updated_(false) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 32 virtual void OnVideoMemoryUsageStatsUpdate( | 35 virtual void OnVideoMemoryUsageStatsUpdate( |
| 33 const GPUVideoMemoryUsageStats& stats) OVERRIDE { | 36 const GPUVideoMemoryUsageStats& stats) OVERRIDE { |
| 34 video_memory_usage_stats_updated_ = true; | 37 video_memory_usage_stats_updated_ = true; |
| 35 } | 38 } |
| 36 | 39 |
| 37 private: | 40 private: |
| 38 bool gpu_info_updated_; | 41 bool gpu_info_updated_; |
| 39 bool video_memory_usage_stats_updated_; | 42 bool video_memory_usage_stats_updated_; |
| 40 }; | 43 }; |
| 41 | 44 |
| 45 static base::Time GetTimeForTesting() { |
| 46 return base::Time::FromDoubleT(1000); |
| 47 } |
| 48 |
| 49 static GURL GetDomain1ForTesting() { |
| 50 return GURL("http://foo.com/"); |
| 51 } |
| 52 |
| 53 static GURL GetDomain2ForTesting() { |
| 54 return GURL("http://bar.com/"); |
| 55 } |
| 56 |
| 42 } // namespace anonymous | 57 } // namespace anonymous |
| 43 | 58 |
| 44 class GpuDataManagerImplTest : public testing::Test { | 59 class GpuDataManagerImplTest : public testing::Test { |
| 45 public: | 60 public: |
| 46 GpuDataManagerImplTest() { } | 61 GpuDataManagerImplTest() { } |
| 47 | 62 |
| 48 virtual ~GpuDataManagerImplTest() { } | 63 virtual ~GpuDataManagerImplTest() { } |
| 49 | 64 |
| 50 protected: | 65 protected: |
| 66 // scoped_ptr doesn't work with GpuDataManagerImpl because its |
| 67 // destructor is private. GpuDataManagerImplTest is however a friend |
| 68 // so we can make a little helper class here. |
| 69 class ScopedGpuDataManagerImpl { |
| 70 public: |
| 71 ScopedGpuDataManagerImpl() : impl_(new GpuDataManagerImpl()) {} |
| 72 ~ScopedGpuDataManagerImpl() { delete impl_; } |
| 73 |
| 74 GpuDataManagerImpl* get() const { return impl_; } |
| 75 GpuDataManagerImpl* operator->() const { return impl_; } |
| 76 // Small violation of C++ style guide to avoid polluting several |
| 77 // tests with get() calls. |
| 78 operator GpuDataManagerImpl*() { return impl_; } |
| 79 |
| 80 private: |
| 81 GpuDataManagerImpl* impl_; |
| 82 DISALLOW_COPY_AND_ASSIGN(ScopedGpuDataManagerImpl); |
| 83 }; |
| 84 |
| 51 void SetUp() { | 85 void SetUp() { |
| 52 } | 86 } |
| 53 | 87 |
| 54 void TearDown() { | 88 void TearDown() { |
| 55 } | 89 } |
| 56 | 90 |
| 91 base::Time JustBeforeExpiration(GpuDataManagerImpl* manager); |
| 92 base::Time JustAfterExpiration(GpuDataManagerImpl* manager); |
| 93 void TestBlockingDomainFrom3DAPIs( |
| 94 GpuDataManager::DomainGuilt guilt_level); |
| 95 void TestUnblockingDomainFrom3DAPIs( |
| 96 GpuDataManager::DomainGuilt guilt_level); |
| 97 |
| 57 MessageLoop message_loop_; | 98 MessageLoop message_loop_; |
| 58 }; | 99 }; |
| 59 | 100 |
| 60 // We use new method instead of GetInstance() method because we want | 101 // We use new method instead of GetInstance() method because we want |
| 61 // each test to be independent of each other. | 102 // each test to be independent of each other. |
| 62 | 103 |
| 63 TEST_F(GpuDataManagerImplTest, GpuSideBlacklisting) { | 104 TEST_F(GpuDataManagerImplTest, GpuSideBlacklisting) { |
| 64 // If a feature is allowed in preliminary step (browser side), but | 105 // If a feature is allowed in preliminary step (browser side), but |
| 65 // disabled when GPU process launches and collects full GPU info, | 106 // disabled when GPU process launches and collects full GPU info, |
| 66 // it's too late to let renderer know, so we basically block all GPU | 107 // it's too late to let renderer know, so we basically block all GPU |
| 67 // access, to be on the safe side. | 108 // access, to be on the safe side. |
| 68 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); | 109 ScopedGpuDataManagerImpl manager; |
| 69 ASSERT_TRUE(manager); | 110 ASSERT_TRUE(manager.get()); |
| 70 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); | 111 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); |
| 71 EXPECT_TRUE(manager->GpuAccessAllowed()); | 112 EXPECT_TRUE(manager->GpuAccessAllowed()); |
| 72 | 113 |
| 73 const std::string blacklist_json = | 114 const std::string blacklist_json = |
| 74 "{\n" | 115 "{\n" |
| 75 " \"name\": \"gpu blacklist\",\n" | 116 " \"name\": \"gpu blacklist\",\n" |
| 76 " \"version\": \"0.1\",\n" | 117 " \"version\": \"0.1\",\n" |
| 77 " \"entries\": [\n" | 118 " \"entries\": [\n" |
| 78 " {\n" | 119 " {\n" |
| 79 " \"id\": 1,\n" | 120 " \"id\": 1,\n" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 101 | 142 |
| 102 EXPECT_TRUE(manager->GpuAccessAllowed()); | 143 EXPECT_TRUE(manager->GpuAccessAllowed()); |
| 103 EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, manager->GetBlacklistedFeatures()); | 144 EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, manager->GetBlacklistedFeatures()); |
| 104 | 145 |
| 105 gpu_info.gl_renderer = "NVIDIA GeForce GT 120"; | 146 gpu_info.gl_renderer = "NVIDIA GeForce GT 120"; |
| 106 manager->UpdateGpuInfo(gpu_info); | 147 manager->UpdateGpuInfo(gpu_info); |
| 107 EXPECT_FALSE(manager->GpuAccessAllowed()); | 148 EXPECT_FALSE(manager->GpuAccessAllowed()); |
| 108 EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL | | 149 EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL | |
| 109 GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, | 150 GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, |
| 110 manager->GetBlacklistedFeatures()); | 151 manager->GetBlacklistedFeatures()); |
| 111 | |
| 112 delete manager; | |
| 113 } | 152 } |
| 114 | 153 |
| 115 TEST_F(GpuDataManagerImplTest, GpuSideExceptions) { | 154 TEST_F(GpuDataManagerImplTest, GpuSideExceptions) { |
| 116 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); | 155 ScopedGpuDataManagerImpl manager; |
| 117 ASSERT_TRUE(manager); | 156 ASSERT_TRUE(manager.get()); |
| 118 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); | 157 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); |
| 119 EXPECT_TRUE(manager->GpuAccessAllowed()); | 158 EXPECT_TRUE(manager->GpuAccessAllowed()); |
| 120 | 159 |
| 121 const std::string blacklist_json = | 160 const std::string blacklist_json = |
| 122 "{\n" | 161 "{\n" |
| 123 " \"name\": \"gpu blacklist\",\n" | 162 " \"name\": \"gpu blacklist\",\n" |
| 124 " \"version\": \"0.1\",\n" | 163 " \"version\": \"0.1\",\n" |
| 125 " \"entries\": [\n" | 164 " \"entries\": [\n" |
| 126 " {\n" | 165 " {\n" |
| 127 " \"id\": 1,\n" | 166 " \"id\": 1,\n" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 146 manager->InitializeForTesting(blacklist_json, gpu_info); | 185 manager->InitializeForTesting(blacklist_json, gpu_info); |
| 147 | 186 |
| 148 EXPECT_TRUE(manager->GpuAccessAllowed()); | 187 EXPECT_TRUE(manager->GpuAccessAllowed()); |
| 149 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); | 188 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); |
| 150 | 189 |
| 151 // Now assue gpu process launches and full GPU info is collected. | 190 // Now assue gpu process launches and full GPU info is collected. |
| 152 gpu_info.gl_renderer = "NVIDIA GeForce GT 120"; | 191 gpu_info.gl_renderer = "NVIDIA GeForce GT 120"; |
| 153 manager->UpdateGpuInfo(gpu_info); | 192 manager->UpdateGpuInfo(gpu_info); |
| 154 EXPECT_TRUE(manager->GpuAccessAllowed()); | 193 EXPECT_TRUE(manager->GpuAccessAllowed()); |
| 155 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); | 194 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); |
| 156 | |
| 157 delete manager; | |
| 158 } | 195 } |
| 159 | 196 |
| 160 TEST_F(GpuDataManagerImplTest, BlacklistCard) { | 197 TEST_F(GpuDataManagerImplTest, BlacklistCard) { |
| 161 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); | 198 ScopedGpuDataManagerImpl manager; |
| 162 ASSERT_TRUE(manager); | 199 ASSERT_TRUE(manager.get()); |
| 163 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); | 200 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); |
| 164 EXPECT_TRUE(manager->GpuAccessAllowed()); | 201 EXPECT_TRUE(manager->GpuAccessAllowed()); |
| 165 | 202 |
| 166 manager->BlacklistCard(); | 203 manager->BlacklistCard(); |
| 167 EXPECT_FALSE(manager->GpuAccessAllowed()); | 204 EXPECT_FALSE(manager->GpuAccessAllowed()); |
| 168 EXPECT_EQ(GPU_FEATURE_TYPE_ALL, manager->GetBlacklistedFeatures()); | 205 EXPECT_EQ(GPU_FEATURE_TYPE_ALL, manager->GetBlacklistedFeatures()); |
| 169 | |
| 170 delete manager; | |
| 171 } | 206 } |
| 172 | 207 |
| 173 TEST_F(GpuDataManagerImplTest, SoftwareRendering) { | 208 TEST_F(GpuDataManagerImplTest, SoftwareRendering) { |
| 174 // Blacklist, then register SwiftShader. | 209 // Blacklist, then register SwiftShader. |
| 175 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); | 210 ScopedGpuDataManagerImpl manager; |
| 176 ASSERT_TRUE(manager); | 211 ASSERT_TRUE(manager.get()); |
| 177 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); | 212 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); |
| 178 EXPECT_TRUE(manager->GpuAccessAllowed()); | 213 EXPECT_TRUE(manager->GpuAccessAllowed()); |
| 179 EXPECT_FALSE(manager->ShouldUseSoftwareRendering()); | 214 EXPECT_FALSE(manager->ShouldUseSoftwareRendering()); |
| 180 | 215 |
| 181 manager->BlacklistCard(); | 216 manager->BlacklistCard(); |
| 182 EXPECT_FALSE(manager->GpuAccessAllowed()); | 217 EXPECT_FALSE(manager->GpuAccessAllowed()); |
| 183 EXPECT_FALSE(manager->ShouldUseSoftwareRendering()); | 218 EXPECT_FALSE(manager->ShouldUseSoftwareRendering()); |
| 184 | 219 |
| 185 // If software rendering is enabled, even if we blacklist GPU, | 220 // If software rendering is enabled, even if we blacklist GPU, |
| 186 // GPU process is still allowed. | 221 // GPU process is still allowed. |
| 187 const FilePath test_path(FILE_PATH_LITERAL("AnyPath")); | 222 const FilePath test_path(FILE_PATH_LITERAL("AnyPath")); |
| 188 manager->RegisterSwiftShaderPath(test_path); | 223 manager->RegisterSwiftShaderPath(test_path); |
| 189 EXPECT_TRUE(manager->ShouldUseSoftwareRendering()); | 224 EXPECT_TRUE(manager->ShouldUseSoftwareRendering()); |
| 190 EXPECT_TRUE(manager->GpuAccessAllowed()); | 225 EXPECT_TRUE(manager->GpuAccessAllowed()); |
| 191 EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, | 226 EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, |
| 192 manager->GetBlacklistedFeatures()); | 227 manager->GetBlacklistedFeatures()); |
| 193 | |
| 194 delete manager; | |
| 195 } | 228 } |
| 196 | 229 |
| 197 TEST_F(GpuDataManagerImplTest, SoftwareRendering2) { | 230 TEST_F(GpuDataManagerImplTest, SoftwareRendering2) { |
| 198 // Register SwiftShader, then blacklist. | 231 // Register SwiftShader, then blacklist. |
| 199 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); | 232 ScopedGpuDataManagerImpl manager; |
| 200 ASSERT_TRUE(manager); | 233 ASSERT_TRUE(manager.get()); |
| 201 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); | 234 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); |
| 202 EXPECT_TRUE(manager->GpuAccessAllowed()); | 235 EXPECT_TRUE(manager->GpuAccessAllowed()); |
| 203 EXPECT_FALSE(manager->ShouldUseSoftwareRendering()); | 236 EXPECT_FALSE(manager->ShouldUseSoftwareRendering()); |
| 204 | 237 |
| 205 const FilePath test_path(FILE_PATH_LITERAL("AnyPath")); | 238 const FilePath test_path(FILE_PATH_LITERAL("AnyPath")); |
| 206 manager->RegisterSwiftShaderPath(test_path); | 239 manager->RegisterSwiftShaderPath(test_path); |
| 207 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); | 240 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); |
| 208 EXPECT_TRUE(manager->GpuAccessAllowed()); | 241 EXPECT_TRUE(manager->GpuAccessAllowed()); |
| 209 EXPECT_FALSE(manager->ShouldUseSoftwareRendering()); | 242 EXPECT_FALSE(manager->ShouldUseSoftwareRendering()); |
| 210 | 243 |
| 211 manager->BlacklistCard(); | 244 manager->BlacklistCard(); |
| 212 EXPECT_TRUE(manager->GpuAccessAllowed()); | 245 EXPECT_TRUE(manager->GpuAccessAllowed()); |
| 213 EXPECT_TRUE(manager->ShouldUseSoftwareRendering()); | 246 EXPECT_TRUE(manager->ShouldUseSoftwareRendering()); |
| 214 EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, | 247 EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, |
| 215 manager->GetBlacklistedFeatures()); | 248 manager->GetBlacklistedFeatures()); |
| 216 | |
| 217 delete manager; | |
| 218 } | 249 } |
| 219 | 250 |
| 220 TEST_F(GpuDataManagerImplTest, GpuInfoUpdate) { | 251 TEST_F(GpuDataManagerImplTest, GpuInfoUpdate) { |
| 221 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); | 252 ScopedGpuDataManagerImpl manager; |
| 222 ASSERT_TRUE(manager); | 253 ASSERT_TRUE(manager.get()); |
| 223 | 254 |
| 224 TestObserver observer; | 255 TestObserver observer; |
| 225 manager->AddObserver(&observer); | 256 manager->AddObserver(&observer); |
| 226 | 257 |
| 227 { | 258 { |
| 228 base::RunLoop run_loop; | 259 base::RunLoop run_loop; |
| 229 run_loop.RunUntilIdle(); | 260 run_loop.RunUntilIdle(); |
| 230 } | 261 } |
| 231 EXPECT_FALSE(observer.gpu_info_updated()); | 262 EXPECT_FALSE(observer.gpu_info_updated()); |
| 232 | 263 |
| 233 GPUInfo gpu_info; | 264 GPUInfo gpu_info; |
| 234 manager->UpdateGpuInfo(gpu_info); | 265 manager->UpdateGpuInfo(gpu_info); |
| 235 { | 266 { |
| 236 base::RunLoop run_loop; | 267 base::RunLoop run_loop; |
| 237 run_loop.RunUntilIdle(); | 268 run_loop.RunUntilIdle(); |
| 238 } | 269 } |
| 239 EXPECT_TRUE(observer.gpu_info_updated()); | 270 EXPECT_TRUE(observer.gpu_info_updated()); |
| 240 | |
| 241 delete manager; | |
| 242 } | 271 } |
| 243 | 272 |
| 244 TEST_F(GpuDataManagerImplTest, NoGpuInfoUpdateWithSoftwareRendering) { | 273 TEST_F(GpuDataManagerImplTest, NoGpuInfoUpdateWithSoftwareRendering) { |
| 245 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); | 274 ScopedGpuDataManagerImpl manager; |
| 246 ASSERT_TRUE(manager); | 275 ASSERT_TRUE(manager.get()); |
| 247 | 276 |
| 248 manager->BlacklistCard(); | 277 manager->BlacklistCard(); |
| 249 const FilePath test_path(FILE_PATH_LITERAL("AnyPath")); | 278 const FilePath test_path(FILE_PATH_LITERAL("AnyPath")); |
| 250 manager->RegisterSwiftShaderPath(test_path); | 279 manager->RegisterSwiftShaderPath(test_path); |
| 251 EXPECT_TRUE(manager->ShouldUseSoftwareRendering()); | 280 EXPECT_TRUE(manager->ShouldUseSoftwareRendering()); |
| 252 EXPECT_TRUE(manager->GpuAccessAllowed()); | 281 EXPECT_TRUE(manager->GpuAccessAllowed()); |
| 253 | 282 |
| 254 { | 283 { |
| 255 base::RunLoop run_loop; | 284 base::RunLoop run_loop; |
| 256 run_loop.RunUntilIdle(); | 285 run_loop.RunUntilIdle(); |
| 257 } | 286 } |
| 258 | 287 |
| 259 TestObserver observer; | 288 TestObserver observer; |
| 260 manager->AddObserver(&observer); | 289 manager->AddObserver(&observer); |
| 261 { | 290 { |
| 262 base::RunLoop run_loop; | 291 base::RunLoop run_loop; |
| 263 run_loop.RunUntilIdle(); | 292 run_loop.RunUntilIdle(); |
| 264 } | 293 } |
| 265 EXPECT_FALSE(observer.gpu_info_updated()); | 294 EXPECT_FALSE(observer.gpu_info_updated()); |
| 266 | 295 |
| 267 GPUInfo gpu_info; | 296 GPUInfo gpu_info; |
| 268 manager->UpdateGpuInfo(gpu_info); | 297 manager->UpdateGpuInfo(gpu_info); |
| 269 { | 298 { |
| 270 base::RunLoop run_loop; | 299 base::RunLoop run_loop; |
| 271 run_loop.RunUntilIdle(); | 300 run_loop.RunUntilIdle(); |
| 272 } | 301 } |
| 273 EXPECT_FALSE(observer.gpu_info_updated()); | 302 EXPECT_FALSE(observer.gpu_info_updated()); |
| 274 | |
| 275 delete manager; | |
| 276 } | 303 } |
| 277 | 304 |
| 278 TEST_F(GpuDataManagerImplTest, GPUVideoMemoryUsageStatsUpdate) { | 305 TEST_F(GpuDataManagerImplTest, GPUVideoMemoryUsageStatsUpdate) { |
| 279 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); | 306 ScopedGpuDataManagerImpl manager; |
| 280 ASSERT_TRUE(manager); | 307 ASSERT_TRUE(manager.get()); |
| 281 | 308 |
| 282 TestObserver observer; | 309 TestObserver observer; |
| 283 manager->AddObserver(&observer); | 310 manager->AddObserver(&observer); |
| 284 | 311 |
| 285 { | 312 { |
| 286 base::RunLoop run_loop; | 313 base::RunLoop run_loop; |
| 287 run_loop.RunUntilIdle(); | 314 run_loop.RunUntilIdle(); |
| 288 } | 315 } |
| 289 EXPECT_FALSE(observer.video_memory_usage_stats_updated()); | 316 EXPECT_FALSE(observer.video_memory_usage_stats_updated()); |
| 290 | 317 |
| 291 GPUVideoMemoryUsageStats vram_stats; | 318 GPUVideoMemoryUsageStats vram_stats; |
| 292 manager->UpdateVideoMemoryUsageStats(vram_stats); | 319 manager->UpdateVideoMemoryUsageStats(vram_stats); |
| 293 { | 320 { |
| 294 base::RunLoop run_loop; | 321 base::RunLoop run_loop; |
| 295 run_loop.RunUntilIdle(); | 322 run_loop.RunUntilIdle(); |
| 296 } | 323 } |
| 297 EXPECT_TRUE(observer.video_memory_usage_stats_updated()); | 324 EXPECT_TRUE(observer.video_memory_usage_stats_updated()); |
| 325 } |
| 298 | 326 |
| 299 delete manager; | 327 base::Time GpuDataManagerImplTest::JustBeforeExpiration( |
| 328 GpuDataManagerImpl* manager) { |
| 329 return GetTimeForTesting() + base::TimeDelta::FromMilliseconds( |
| 330 manager->GetBlockAllDomainsDurationInMs()) - |
| 331 base::TimeDelta::FromMilliseconds(3); |
| 332 } |
| 333 |
| 334 base::Time GpuDataManagerImplTest::JustAfterExpiration( |
| 335 GpuDataManagerImpl* manager) { |
| 336 return GetTimeForTesting() + base::TimeDelta::FromMilliseconds( |
| 337 manager->GetBlockAllDomainsDurationInMs()) + |
| 338 base::TimeDelta::FromMilliseconds(3); |
| 339 } |
| 340 |
| 341 void GpuDataManagerImplTest::TestBlockingDomainFrom3DAPIs( |
| 342 GpuDataManager::DomainGuilt guilt_level) { |
| 343 ScopedGpuDataManagerImpl manager; |
| 344 ASSERT_TRUE(manager.get()); |
| 345 |
| 346 manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(), |
| 347 guilt_level, |
| 348 GetTimeForTesting()); |
| 349 |
| 350 // This domain should be blocked no matter what. |
| 351 EXPECT_EQ(GpuDataManager::DOMAIN_BLOCK_STATUS_BLOCKED, |
| 352 manager->Are3DAPIsBlockedAtTime(GetDomain1ForTesting(), |
| 353 GetTimeForTesting())); |
| 354 EXPECT_EQ(GpuDataManager::DOMAIN_BLOCK_STATUS_BLOCKED, |
| 355 manager->Are3DAPIsBlockedAtTime(GetDomain1ForTesting(), |
| 356 JustBeforeExpiration(manager))); |
| 357 EXPECT_EQ(GpuDataManager::DOMAIN_BLOCK_STATUS_BLOCKED, |
| 358 manager->Are3DAPIsBlockedAtTime(GetDomain1ForTesting(), |
| 359 JustAfterExpiration(manager))); |
| 360 } |
| 361 |
| 362 void GpuDataManagerImplTest::TestUnblockingDomainFrom3DAPIs( |
| 363 GpuDataManager::DomainGuilt guilt_level) { |
| 364 ScopedGpuDataManagerImpl manager; |
| 365 ASSERT_TRUE(manager.get()); |
| 366 |
| 367 manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(), |
| 368 guilt_level, |
| 369 GetTimeForTesting()); |
| 370 |
| 371 // Unblocking the domain should work. |
| 372 manager->UnblockDomainFrom3DAPIs(GetDomain1ForTesting()); |
| 373 EXPECT_EQ(GpuDataManager::DOMAIN_BLOCK_STATUS_NOT_BLOCKED, |
| 374 manager->Are3DAPIsBlockedAtTime(GetDomain1ForTesting(), |
| 375 GetTimeForTesting())); |
| 376 EXPECT_EQ(GpuDataManager::DOMAIN_BLOCK_STATUS_NOT_BLOCKED, |
| 377 manager->Are3DAPIsBlockedAtTime(GetDomain1ForTesting(), |
| 378 JustBeforeExpiration(manager))); |
| 379 EXPECT_EQ(GpuDataManager::DOMAIN_BLOCK_STATUS_NOT_BLOCKED, |
| 380 manager->Are3DAPIsBlockedAtTime(GetDomain1ForTesting(), |
| 381 JustAfterExpiration(manager))); |
| 382 } |
| 383 |
| 384 TEST_F(GpuDataManagerImplTest, BlockGuiltyDomainFrom3DAPIs) { |
| 385 TestBlockingDomainFrom3DAPIs(GpuDataManager::DOMAIN_GUILT_KNOWN); |
| 386 } |
| 387 |
| 388 TEST_F(GpuDataManagerImplTest, BlockDomainOfUnknownGuiltFrom3DAPIs) { |
| 389 TestBlockingDomainFrom3DAPIs(GpuDataManager::DOMAIN_GUILT_UNKNOWN); |
| 390 } |
| 391 |
| 392 TEST_F(GpuDataManagerImplTest, BlockAllDomainsFrom3DAPIs) { |
| 393 ScopedGpuDataManagerImpl manager; |
| 394 ASSERT_TRUE(manager.get()); |
| 395 |
| 396 manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(), |
| 397 GpuDataManager::DOMAIN_GUILT_UNKNOWN, |
| 398 GetTimeForTesting()); |
| 399 |
| 400 // Blocking of other domains should expire. |
| 401 EXPECT_EQ(GpuDataManager::DOMAIN_BLOCK_STATUS_ALL_DOMAINS_BLOCKED, |
| 402 manager->Are3DAPIsBlockedAtTime(GetDomain2ForTesting(), |
| 403 JustBeforeExpiration(manager))); |
| 404 EXPECT_EQ(GpuDataManager::DOMAIN_BLOCK_STATUS_NOT_BLOCKED, |
| 405 manager->Are3DAPIsBlockedAtTime(GetDomain2ForTesting(), |
| 406 JustAfterExpiration(manager))); |
| 407 } |
| 408 |
| 409 TEST_F(GpuDataManagerImplTest, UnblockGuiltyDomainFrom3DAPIs) { |
| 410 TestUnblockingDomainFrom3DAPIs(GpuDataManager::DOMAIN_GUILT_KNOWN); |
| 411 } |
| 412 |
| 413 TEST_F(GpuDataManagerImplTest, UnblockDomainOfUnknownGuiltFrom3DAPIs) { |
| 414 TestUnblockingDomainFrom3DAPIs(GpuDataManager::DOMAIN_GUILT_UNKNOWN); |
| 415 } |
| 416 |
| 417 TEST_F(GpuDataManagerImplTest, UnblockOtherDomainFrom3DAPIs) { |
| 418 ScopedGpuDataManagerImpl manager; |
| 419 ASSERT_TRUE(manager.get()); |
| 420 |
| 421 manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(), |
| 422 GpuDataManager::DOMAIN_GUILT_UNKNOWN, |
| 423 GetTimeForTesting()); |
| 424 |
| 425 manager->UnblockDomainFrom3DAPIs(GetDomain2ForTesting()); |
| 426 |
| 427 EXPECT_EQ(GpuDataManager::DOMAIN_BLOCK_STATUS_NOT_BLOCKED, |
| 428 manager->Are3DAPIsBlockedAtTime(GetDomain2ForTesting(), |
| 429 JustBeforeExpiration(manager))); |
| 430 |
| 431 // The original domain should still be blocked. |
| 432 EXPECT_EQ(GpuDataManager::DOMAIN_BLOCK_STATUS_BLOCKED, |
| 433 manager->Are3DAPIsBlockedAtTime(GetDomain1ForTesting(), |
| 434 JustBeforeExpiration(manager))); |
| 435 } |
| 436 |
| 437 TEST_F(GpuDataManagerImplTest, UnblockThisDomainFrom3DAPIs) { |
| 438 ScopedGpuDataManagerImpl manager; |
| 439 ASSERT_TRUE(manager.get()); |
| 440 |
| 441 manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(), |
| 442 GpuDataManager::DOMAIN_GUILT_UNKNOWN, |
| 443 GetTimeForTesting()); |
| 444 |
| 445 manager->UnblockDomainFrom3DAPIs(GetDomain1ForTesting()); |
| 446 |
| 447 // This behavior is debatable. Perhaps the GPU reset caused by |
| 448 // domain 1 should still cause other domains to be blocked. |
| 449 EXPECT_EQ(GpuDataManager::DOMAIN_BLOCK_STATUS_NOT_BLOCKED, |
| 450 manager->Are3DAPIsBlockedAtTime(GetDomain2ForTesting(), |
| 451 JustBeforeExpiration(manager))); |
| 300 } | 452 } |
| 301 | 453 |
| 302 } // namespace content | 454 } // namespace content |
| OLD | NEW |