Index: mojo/edk/system/simple_dispatcher_unittest.cc |
diff --git a/mojo/edk/system/simple_dispatcher_unittest.cc b/mojo/edk/system/simple_dispatcher_unittest.cc |
index 099f8f9bf1ecac59e2aaa6b6bb55f9b5c41809b0..8b5fb5c198946ee8d335cd87470cc7f9c320af99 100644 |
--- a/mojo/edk/system/simple_dispatcher_unittest.cc |
+++ b/mojo/edk/system/simple_dispatcher_unittest.cc |
@@ -13,8 +13,9 @@ |
#include <vector> |
#include "base/logging.h" |
-#include "base/memory/ref_counted.h" |
+#include "mojo/edk/system/ref_ptr.h" |
#include "mojo/edk/system/test_utils.h" |
+#include "mojo/edk/system/thread_annotations.h" |
#include "mojo/edk/system/waiter.h" |
#include "mojo/edk/system/waiter_test_utils.h" |
#include "mojo/edk/util/make_unique.h" |
@@ -27,11 +28,7 @@ namespace { |
class MockSimpleDispatcher final : public SimpleDispatcher { |
public: |
- MockSimpleDispatcher() |
- : state_(MOJO_HANDLE_SIGNAL_NONE, |
- MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE) {} |
- explicit MockSimpleDispatcher(const HandleSignalsState& state) |
- : state_(state) {} |
+ // Note: Use |MakeRefCounted<MockSimpleDispatcher>()|. |
void SetSatisfiedSignals(MojoHandleSignals new_satisfied_signals) { |
MutexLocker locker(&mutex()); |
@@ -65,12 +62,18 @@ class MockSimpleDispatcher final : public SimpleDispatcher { |
Type GetType() const override { return Type::UNKNOWN; } |
private: |
+ FRIEND_MAKE_REF_COUNTED(MockSimpleDispatcher); |
+ |
+ MockSimpleDispatcher() |
+ : state_(MOJO_HANDLE_SIGNAL_NONE, |
+ MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE) {} |
+ explicit MockSimpleDispatcher(const HandleSignalsState& state) |
+ : state_(state) {} |
~MockSimpleDispatcher() override {} |
- scoped_refptr<Dispatcher> CreateEquivalentDispatcherAndCloseImplNoLock() |
- override { |
- scoped_refptr<MockSimpleDispatcher> rv(new MockSimpleDispatcher(state_)); |
- return scoped_refptr<Dispatcher>(rv.get()); |
+ RefPtr<Dispatcher> CreateEquivalentDispatcherAndCloseImplNoLock() override |
+ MOJO_NO_THREAD_SAFETY_ANALYSIS { |
+ return MakeRefCounted<MockSimpleDispatcher>(state_); |
} |
// |Dispatcher| override: |
@@ -87,7 +90,7 @@ class MockSimpleDispatcher final : public SimpleDispatcher { |
TEST(SimpleDispatcherTest, Basic) { |
test::Stopwatch stopwatch; |
- scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); |
+ auto d = MakeRefCounted<MockSimpleDispatcher>(); |
Waiter w; |
uint32_t context = 0; |
HandleSignalsState hss; |
@@ -189,7 +192,7 @@ TEST(SimpleDispatcherTest, Basic) { |
TEST(SimpleDispatcherTest, BasicUnsatisfiable) { |
test::Stopwatch stopwatch; |
- scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); |
+ auto d = MakeRefCounted<MockSimpleDispatcher>(); |
Waiter w; |
uint32_t context = 0; |
HandleSignalsState hss; |
@@ -262,13 +265,13 @@ TEST(SimpleDispatcherTest, BasicUnsatisfiable) { |
TEST(SimpleDispatcherTest, BasicClosed) { |
test::Stopwatch stopwatch; |
- scoped_refptr<MockSimpleDispatcher> d; |
+ RefPtr<MockSimpleDispatcher> d; |
Waiter w; |
uint32_t context = 0; |
HandleSignalsState hss; |
// Try adding a writable waiter when the dispatcher has been closed. |
- d = new MockSimpleDispatcher(); |
+ d = MakeRefCounted<MockSimpleDispatcher>(); |
w.Init(); |
EXPECT_EQ(MOJO_RESULT_OK, d->Close()); |
hss = HandleSignalsState(); |
@@ -279,7 +282,7 @@ TEST(SimpleDispatcherTest, BasicClosed) { |
// Shouldn't need to remove the waiter (it was not added). |
// Wait (forever) for writable and then the dispatcher is closed. |
- d = new MockSimpleDispatcher(); |
+ d = MakeRefCounted<MockSimpleDispatcher>(); |
w.Init(); |
ASSERT_EQ(MOJO_RESULT_OK, |
d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 2, nullptr)); |
@@ -291,7 +294,7 @@ TEST(SimpleDispatcherTest, BasicClosed) { |
// Don't need to remove waiters from closed dispatchers. |
// Wait for zero time for writable and then the dispatcher is closed. |
- d = new MockSimpleDispatcher(); |
+ d = MakeRefCounted<MockSimpleDispatcher>(); |
w.Init(); |
ASSERT_EQ(MOJO_RESULT_OK, |
d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 3, nullptr)); |
@@ -304,7 +307,7 @@ TEST(SimpleDispatcherTest, BasicClosed) { |
// Wait for non-zero, finite time for writable and then the dispatcher is |
// closed. |
- d = new MockSimpleDispatcher(); |
+ d = MakeRefCounted<MockSimpleDispatcher>(); |
w.Init(); |
ASSERT_EQ(MOJO_RESULT_OK, |
d->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 4, nullptr)); |
@@ -326,7 +329,7 @@ TEST(SimpleDispatcherTest, BasicThreaded) { |
// Wait for readable (already readable). |
{ |
- scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); |
+ auto d = MakeRefCounted<MockSimpleDispatcher>(); |
{ |
d->SetSatisfiedSignals(MOJO_HANDLE_SIGNAL_READABLE); |
test::WaiterThread thread(d, MOJO_HANDLE_SIGNAL_READABLE, |
@@ -347,7 +350,7 @@ TEST(SimpleDispatcherTest, BasicThreaded) { |
// Wait for readable and becomes readable after some time. |
{ |
- scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); |
+ auto d = MakeRefCounted<MockSimpleDispatcher>(); |
{ |
test::WaiterThread thread(d, MOJO_HANDLE_SIGNAL_READABLE, |
MOJO_DEADLINE_INDEFINITE, 2, &did_wait, &result, |
@@ -371,7 +374,7 @@ TEST(SimpleDispatcherTest, BasicThreaded) { |
// Wait for readable and becomes never-readable after some time. |
{ |
- scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); |
+ auto d = MakeRefCounted<MockSimpleDispatcher>(); |
{ |
test::WaiterThread thread(d, MOJO_HANDLE_SIGNAL_READABLE, |
MOJO_DEADLINE_INDEFINITE, 3, &did_wait, &result, |
@@ -394,7 +397,7 @@ TEST(SimpleDispatcherTest, BasicThreaded) { |
// Wait for readable and dispatcher gets closed. |
{ |
- scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); |
+ auto d = MakeRefCounted<MockSimpleDispatcher>(); |
test::WaiterThread thread(d, MOJO_HANDLE_SIGNAL_READABLE, |
MOJO_DEADLINE_INDEFINITE, 4, &did_wait, &result, |
&context, &hss); |
@@ -414,7 +417,7 @@ TEST(SimpleDispatcherTest, BasicThreaded) { |
// Wait for readable and times out. |
{ |
- scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); |
+ auto d = MakeRefCounted<MockSimpleDispatcher>(); |
{ |
test::WaiterThread thread(d, MOJO_HANDLE_SIGNAL_READABLE, |
2 * test::EpsilonDeadline(), 5, &did_wait, |
@@ -448,7 +451,7 @@ TEST(SimpleDispatcherTest, MultipleWaiters) { |
// All wait for readable and becomes readable after some time. |
{ |
- scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); |
+ auto d = MakeRefCounted<MockSimpleDispatcher>(); |
std::vector<std::unique_ptr<test::WaiterThread>> threads; |
for (uint32_t i = 0; i < kNumWaiters; i++) { |
threads.push_back(util::MakeUnique<test::WaiterThread>( |
@@ -471,7 +474,7 @@ TEST(SimpleDispatcherTest, MultipleWaiters) { |
// Some wait for readable, some for writable, and becomes readable after some |
// time. |
{ |
- scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); |
+ auto d = MakeRefCounted<MockSimpleDispatcher>(); |
std::vector<std::unique_ptr<test::WaiterThread>> threads; |
for (uint32_t i = 0; i < kNumWaiters / 2; i++) { |
threads.push_back(util::MakeUnique<test::WaiterThread>( |
@@ -508,7 +511,7 @@ TEST(SimpleDispatcherTest, MultipleWaiters) { |
// Some wait for readable, some for writable, and becomes readable and |
// never-writable after some time. |
{ |
- scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); |
+ auto d = MakeRefCounted<MockSimpleDispatcher>(); |
std::vector<std::unique_ptr<test::WaiterThread>> threads; |
for (uint32_t i = 0; i < kNumWaiters / 2; i++) { |
threads.push_back(util::MakeUnique<test::WaiterThread>( |
@@ -546,7 +549,7 @@ TEST(SimpleDispatcherTest, MultipleWaiters) { |
// Some wait for readable, some for writable, and becomes readable after some |
// time. |
{ |
- scoped_refptr<MockSimpleDispatcher> d(new MockSimpleDispatcher()); |
+ auto d = MakeRefCounted<MockSimpleDispatcher>(); |
std::vector<std::unique_ptr<test::WaiterThread>> threads; |
for (uint32_t i = 0; i < kNumWaiters / 2; i++) { |
threads.push_back(util::MakeUnique<test::WaiterThread>( |