Chromium Code Reviews| Index: content/browser/gpu/gpu_data_manager_impl_unittest.cc |
| diff --git a/content/browser/gpu/gpu_data_manager_impl_unittest.cc b/content/browser/gpu/gpu_data_manager_impl_unittest.cc |
| index 371f60721f4b5b041005c6e6795e6c30143d79d9..0700d3fa286dcff634b3535987ac5000553bcca2 100644 |
| --- a/content/browser/gpu/gpu_data_manager_impl_unittest.cc |
| +++ b/content/browser/gpu/gpu_data_manager_impl_unittest.cc |
| @@ -4,9 +4,11 @@ |
| #include "base/message_loop.h" |
| #include "base/run_loop.h" |
| +#include "base/time.h" |
| #include "content/browser/gpu/gpu_data_manager_impl.h" |
| #include "content/public/browser/gpu_data_manager_observer.h" |
| #include "content/public/common/gpu_info.h" |
| +#include "googleurl/src/gurl.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| namespace content { |
| @@ -39,6 +41,18 @@ class TestObserver : public GpuDataManagerObserver { |
| bool video_memory_usage_stats_updated_; |
| }; |
| +static base::Time GetTimeForTesting() { |
| + return base::Time::FromDoubleT(1000); |
| +} |
| + |
| +static GURL GetDomain1ForTesting() { |
| + return GURL("http://foo.com/"); |
| +} |
| + |
| +static GURL GetDomain2ForTesting() { |
| + return GURL("http://bar.com/"); |
| +} |
| + |
| } // namespace anonymous |
| class GpuDataManagerImplTest : public testing::Test { |
| @@ -54,6 +68,13 @@ class GpuDataManagerImplTest : public testing::Test { |
| void TearDown() { |
| } |
| + base::Time JustBeforeExpiration(GpuDataManagerImpl* manager); |
| + base::Time JustAfterExpiration(GpuDataManagerImpl* manager); |
| + void TestBlockingDomainFrom3DAPIs( |
| + GpuDataManager::DomainGuilt guilt_level); |
| + void TestUnblockingDomainFrom3DAPIs( |
| + GpuDataManager::DomainGuilt guilt_level); |
| + |
| MessageLoop message_loop_; |
| }; |
| @@ -299,4 +320,131 @@ TEST_F(GpuDataManagerImplTest, GPUVideoMemoryUsageStatsUpdate) { |
| delete manager; |
| } |
| +base::Time GpuDataManagerImplTest::JustBeforeExpiration( |
| + GpuDataManagerImpl* manager) { |
| + return GetTimeForTesting() + base::TimeDelta::FromMilliseconds( |
| + manager->GetBlockAllDomainsDurationInMs()) - |
| + base::TimeDelta::FromMilliseconds(3); |
| +} |
| + |
| +base::Time GpuDataManagerImplTest::JustAfterExpiration( |
| + GpuDataManagerImpl* manager) { |
| + return GetTimeForTesting() + base::TimeDelta::FromMilliseconds( |
| + manager->GetBlockAllDomainsDurationInMs()) + |
| + base::TimeDelta::FromMilliseconds(3); |
| +} |
| + |
| +void GpuDataManagerImplTest::TestBlockingDomainFrom3DAPIs( |
| + GpuDataManager::DomainGuilt guilt_level) { |
| + GpuDataManagerImpl* manager = new GpuDataManagerImpl(); |
|
Zhenyao Mo
2012/11/14 16:35:58
You need to manually delete this manager to avoid
Ken Russell (switch to Gerrit)
2012/11/14 19:09:14
I see. I don't think this is maintainable so I've
|
| + ASSERT_TRUE(manager); |
| + |
| + manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(), |
| + guilt_level, |
| + GetTimeForTesting()); |
| + |
| + // This domain should be blocked no matter what. |
| + EXPECT_EQ(GpuDataManager::kDomainBlocked, manager->Are3DAPIsBlockedAtTime( |
| + GetDomain1ForTesting(), |
| + GetTimeForTesting())); |
| + EXPECT_EQ(GpuDataManager::kDomainBlocked, manager->Are3DAPIsBlockedAtTime( |
| + GetDomain1ForTesting(), |
| + JustBeforeExpiration(manager))); |
| + EXPECT_EQ(GpuDataManager::kDomainBlocked, manager->Are3DAPIsBlockedAtTime( |
| + GetDomain1ForTesting(), |
| + JustAfterExpiration(manager))); |
| +} |
| + |
| +void GpuDataManagerImplTest::TestUnblockingDomainFrom3DAPIs( |
| + GpuDataManager::DomainGuilt guilt_level) { |
| + GpuDataManagerImpl* manager = new GpuDataManagerImpl(); |
|
Zhenyao Mo
2012/11/14 16:35:58
delete manager in the end
|
| + ASSERT_TRUE(manager); |
| + |
| + manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(), |
| + guilt_level, |
| + GetTimeForTesting()); |
| + |
| + // Unblocking the domain should work. |
| + manager->UnblockDomainFrom3DAPIs(GetDomain1ForTesting()); |
| + EXPECT_EQ(GpuDataManager::kNotBlocked, manager->Are3DAPIsBlockedAtTime( |
| + GetDomain1ForTesting(), |
| + GetTimeForTesting())); |
| + EXPECT_EQ(GpuDataManager::kNotBlocked, manager->Are3DAPIsBlockedAtTime( |
| + GetDomain1ForTesting(), |
| + JustBeforeExpiration(manager))); |
| + EXPECT_EQ(GpuDataManager::kNotBlocked, manager->Are3DAPIsBlockedAtTime( |
| + GetDomain1ForTesting(), |
| + JustAfterExpiration(manager))); |
| +} |
| + |
| +TEST_F(GpuDataManagerImplTest, BlockGuiltyDomainFrom3DAPIs) { |
| + TestBlockingDomainFrom3DAPIs(GpuDataManager::kKnownGuilty); |
| +} |
| + |
| +TEST_F(GpuDataManagerImplTest, BlockDomainOfUnknownGuiltFrom3DAPIs) { |
| + TestBlockingDomainFrom3DAPIs(GpuDataManager::kUnknownGuilt); |
| +} |
| + |
| +TEST_F(GpuDataManagerImplTest, BlockAllDomainsFrom3DAPIs) { |
| + GpuDataManagerImpl* manager = new GpuDataManagerImpl(); |
|
Zhenyao Mo
2012/11/14 16:35:58
delete manager in the end
|
| + ASSERT_TRUE(manager); |
| + |
| + manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(), |
| + GpuDataManager::kUnknownGuilt, |
| + GetTimeForTesting()); |
| + |
| + // Blocking of other domains should expire. |
| + EXPECT_EQ(GpuDataManager::kAllDomainsBlocked, manager->Are3DAPIsBlockedAtTime( |
| + GetDomain2ForTesting(), |
| + JustBeforeExpiration(manager))); |
| + EXPECT_EQ(GpuDataManager::kNotBlocked, manager->Are3DAPIsBlockedAtTime( |
| + GetDomain2ForTesting(), |
| + JustAfterExpiration(manager))); |
| +} |
| + |
| +TEST_F(GpuDataManagerImplTest, UnblockGuiltyDomainFrom3DAPIs) { |
| + TestUnblockingDomainFrom3DAPIs(GpuDataManager::kKnownGuilty); |
| +} |
| + |
| +TEST_F(GpuDataManagerImplTest, UnblockDomainOfUnknownGuiltFrom3DAPIs) { |
| + TestUnblockingDomainFrom3DAPIs(GpuDataManager::kUnknownGuilt); |
| +} |
| + |
| +TEST_F(GpuDataManagerImplTest, UnblockOtherDomainFrom3DAPIs) { |
| + GpuDataManagerImpl* manager = new GpuDataManagerImpl(); |
|
Zhenyao Mo
2012/11/14 16:35:58
delete manager in the end
|
| + ASSERT_TRUE(manager); |
| + |
| + manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(), |
| + GpuDataManager::kUnknownGuilt, |
| + GetTimeForTesting()); |
| + |
| + manager->UnblockDomainFrom3DAPIs(GetDomain2ForTesting()); |
| + |
| + EXPECT_EQ(GpuDataManager::kNotBlocked, manager->Are3DAPIsBlockedAtTime( |
| + GetDomain2ForTesting(), |
| + JustBeforeExpiration(manager))); |
| + |
| + // The original domain should still be blocked. |
| + EXPECT_EQ(GpuDataManager::kDomainBlocked, manager->Are3DAPIsBlockedAtTime( |
| + GetDomain1ForTesting(), |
| + JustBeforeExpiration(manager))); |
| +} |
| + |
| +TEST_F(GpuDataManagerImplTest, UnblockThisDomainFrom3DAPIs) { |
| + GpuDataManagerImpl* manager = new GpuDataManagerImpl(); |
| + ASSERT_TRUE(manager); |
| + |
| + manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(), |
| + GpuDataManager::kUnknownGuilt, |
| + GetTimeForTesting()); |
| + |
| + manager->UnblockDomainFrom3DAPIs(GetDomain1ForTesting()); |
| + |
| + // This behavior is debatable. Perhaps the GPU reset caused by |
| + // domain 1 should still cause other domains to be blocked. |
| + EXPECT_EQ(GpuDataManager::kNotBlocked, manager->Are3DAPIsBlockedAtTime( |
| + GetDomain2ForTesting(), |
| + JustBeforeExpiration(manager))); |
| +} |
| + |
| } // namespace content |