diff options
author | jrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-04 00:58:39 +0000 |
---|---|---|
committer | jrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-04 00:58:39 +0000 |
commit | 9e51af9018550b6b23802f66469310f5d1790ab9 (patch) | |
tree | 9ab6f3e0532f6d23c2af1d0acc5605ad00876418 /base/stats_table_unittest.cc | |
parent | 4c7ca4b8c2ceb6f823474744f035672c8501d23b (diff) | |
download | chromium_src-9e51af9018550b6b23802f66469310f5d1790ab9.zip chromium_src-9e51af9018550b6b23802f66469310f5d1790ab9.tar.gz chromium_src-9e51af9018550b6b23802f66469310f5d1790ab9.tar.bz2 |
Properly honor base::SharedMemory semantics for name="" to mean
new/private shared memory on POSIX. Transition base::SharedMemory
implementation to file/mmap() to prevent leaking of wired kernel
resources and allow easier cleanup. Enable one more shared_memory
unit test for POSIX. Enable stats_table_unittest.cc for Mac, and
modify it so it cleans up.
Review URL: http://codereview.chromium.org/19724
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9114 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/stats_table_unittest.cc')
-rw-r--r-- | base/stats_table_unittest.cc | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/base/stats_table_unittest.cc b/base/stats_table_unittest.cc index 59b1215..7c4c4f6 100644 --- a/base/stats_table_unittest.cc +++ b/base/stats_table_unittest.cc @@ -5,6 +5,7 @@ #include "base/multiprocess_test.h" #include "base/platform_thread.h" #include "base/simple_thread.h" +#include "base/shared_memory.h" #include "base/stats_table.h" #include "base/stats_counters.h" #include "base/string_util.h" @@ -19,6 +20,11 @@ namespace base { class StatsTableTest : public MultiProcessTest { + public: + void DeleteShmem(std::string name) { + base::SharedMemory mem; + mem.Delete(UTF8ToWide(name)); + } }; // Open a StatsTable and verify that we can write to each of the @@ -27,6 +33,7 @@ TEST_F(StatsTableTest, VerifySlots) { const std::string kTableName = "VerifySlotsStatTable"; const int kMaxThreads = 1; const int kMaxCounter = 5; + DeleteShmem(kTableName); StatsTable table(kTableName, kMaxThreads, kMaxCounter); // Register a single thread. @@ -50,6 +57,8 @@ TEST_F(StatsTableTest, VerifySlots) { // Try to allocate an additional counter. Verify it fails. int counter_id = table.FindCounter(counter_base_name); EXPECT_EQ(counter_id, 0); + + DeleteShmem(kTableName); } // CounterZero will continually be set to 0. @@ -104,6 +113,7 @@ TEST_F(StatsTableTest, MultipleThreads) { const std::string kTableName = "MultipleThreadStatTable"; const int kMaxThreads = 20; const int kMaxCounter = 5; + DeleteShmem(kTableName); StatsTable table(kTableName, kMaxThreads, kMaxCounter); StatsTable::set_current(&table); @@ -149,16 +159,18 @@ TEST_F(StatsTableTest, MultipleThreads) { EXPECT_EQ((kMaxThreads % 2) * kThreadLoops, table.GetCounterValue(name)); EXPECT_EQ(0, table.CountThreadsRegistered()); + + DeleteShmem(kTableName); } -const std::string kTableName = "MultipleProcessStatTable"; +const std::string kMPTableName = "MultipleProcessStatTable"; MULTIPROCESS_TEST_MAIN(StatsTableMultipleProcessMain) { // Each process will open the shared memory and set counters // concurrently in a loop. We'll use some pauses to // mixup the scheduling. - StatsTable table(kTableName, 0, 0); + StatsTable table(kMPTableName, 0, 0); StatsTable::set_current(&table); StatsCounter zero_counter(kCounterZero); StatsCounter lucky13_counter(kCounter1313); @@ -177,12 +189,11 @@ MULTIPROCESS_TEST_MAIN(StatsTableMultipleProcessMain) { // Create a few processes and have them poke on their counters. TEST_F(StatsTableTest, MultipleProcesses) { // Create a stats table. - const std::string kTableName = "MultipleProcessStatTable"; const int kMaxProcs = 20; const int kMaxCounter = 5; - StatsTable table(kTableName, kMaxProcs, kMaxCounter); + DeleteShmem(kMPTableName); + StatsTable table(kMPTableName, kMaxProcs, kMaxCounter); StatsTable::set_current(&table); - EXPECT_EQ(0, table.CountThreadsRegistered()); // Spin up a set of processes to go bang on the various counters. @@ -220,6 +231,8 @@ TEST_F(StatsTableTest, MultipleProcesses) { EXPECT_EQ(-kMaxProcs * kThreadLoops, table.GetCounterValue(name)); EXPECT_EQ(0, table.CountThreadsRegistered()); + + DeleteShmem(kMPTableName); } class MockStatsCounter : public StatsCounter { @@ -235,6 +248,7 @@ TEST_F(StatsTableTest, StatsCounter) { const std::string kTableName = "StatTable"; const int kMaxThreads = 20; const int kMaxCounter = 5; + DeleteShmem(kTableName); StatsTable table(kTableName, kMaxThreads, kMaxCounter); StatsTable::set_current(&table); @@ -271,6 +285,8 @@ TEST_F(StatsTableTest, StatsCounter) { EXPECT_EQ(-1, table.GetCounterValue("c:foo")); foo.Decrement(-1); EXPECT_EQ(0, table.GetCounterValue("c:foo")); + + DeleteShmem(kTableName); } class MockStatsCounterTimer : public StatsCounterTimer { @@ -348,6 +364,7 @@ TEST_F(StatsTableTest, StatsScope) { const std::string kTableName = "StatTable"; const int kMaxThreads = 20; const int kMaxCounter = 5; + DeleteShmem(kTableName); StatsTable table(kTableName, kMaxThreads, kMaxCounter); StatsTable::set_current(&table); @@ -378,6 +395,8 @@ TEST_F(StatsTableTest, StatsScope) { EXPECT_LE(1000, table.GetCounterValue("t:foo")); EXPECT_LE(1000, table.GetCounterValue("t:bar")); EXPECT_EQ(2, table.GetCounterValue("c:bar")); + + DeleteShmem(kTableName); } } // namespace base |