Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(681)

Unified Diff: mojo/edk/system/awakable_list_unittest.cc

Issue 2088833003: Add different behavior to AwakableList for "persistent" vs "one-shot" awakables. (Closed) Base URL: https://github.com/domokit/mojo.git@work793_wait_set_4.5
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/edk/system/awakable_list.cc ('k') | mojo/edk/system/core_test_base.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/edk/system/awakable_list_unittest.cc
diff --git a/mojo/edk/system/awakable_list_unittest.cc b/mojo/edk/system/awakable_list_unittest.cc
index 2f8c619e8c6e4c5bccaef7f978dbb8f430326924..497478c7cfda20862728756d3947d1ecfdb42f7e 100644
--- a/mojo/edk/system/awakable_list_unittest.cc
+++ b/mojo/edk/system/awakable_list_unittest.cc
@@ -30,9 +30,9 @@ TEST(AwakableListTest, BasicCancel) {
{
AwakableList awakable_list;
test::SimpleWaiterThread thread(&result, &context);
- awakable_list.Add(thread.waiter(), 1, MOJO_HANDLE_SIGNAL_READABLE);
+ awakable_list.Add(thread.waiter(), 1, false, MOJO_HANDLE_SIGNAL_READABLE);
thread.Start();
- awakable_list.CancelAll();
+ awakable_list.CancelAndRemoveAll();
// Double-remove okay:
awakable_list.Remove(false, thread.waiter(), 0);
} // Join |thread|.
@@ -43,8 +43,8 @@ TEST(AwakableListTest, BasicCancel) {
{
AwakableList awakable_list;
test::SimpleWaiterThread thread(&result, &context);
- awakable_list.Add(thread.waiter(), 2, MOJO_HANDLE_SIGNAL_WRITABLE);
- awakable_list.CancelAll();
+ awakable_list.Add(thread.waiter(), 2, false, MOJO_HANDLE_SIGNAL_WRITABLE);
+ awakable_list.CancelAndRemoveAll();
thread.Start();
} // Join |thread|.
EXPECT_EQ(MOJO_RESULT_CANCELLED, result);
@@ -54,10 +54,10 @@ TEST(AwakableListTest, BasicCancel) {
{
AwakableList awakable_list;
test::SimpleWaiterThread thread(&result, &context);
- awakable_list.Add(thread.waiter(), 3, MOJO_HANDLE_SIGNAL_READABLE);
+ awakable_list.Add(thread.waiter(), 3, false, MOJO_HANDLE_SIGNAL_READABLE);
thread.Start();
ThreadSleep(2 * test::EpsilonTimeout());
- awakable_list.CancelAll();
+ awakable_list.CancelAndRemoveAll();
} // Join |thread|.
EXPECT_EQ(MOJO_RESULT_CANCELLED, result);
EXPECT_EQ(3u, context);
@@ -71,7 +71,7 @@ TEST(AwakableListTest, BasicAwakeSatisfied) {
{
AwakableList awakable_list;
test::SimpleWaiterThread thread(&result, &context);
- awakable_list.Add(thread.waiter(), 1, MOJO_HANDLE_SIGNAL_READABLE);
+ awakable_list.Add(thread.waiter(), 1, false, MOJO_HANDLE_SIGNAL_READABLE);
thread.Start();
awakable_list.OnStateChange(
HandleSignalsState(
@@ -89,7 +89,7 @@ TEST(AwakableListTest, BasicAwakeSatisfied) {
{
AwakableList awakable_list;
test::SimpleWaiterThread thread(&result, &context);
- awakable_list.Add(thread.waiter(), 2, MOJO_HANDLE_SIGNAL_WRITABLE);
+ awakable_list.Add(thread.waiter(), 2, false, MOJO_HANDLE_SIGNAL_WRITABLE);
awakable_list.OnStateChange(
HandleSignalsState(
MOJO_HANDLE_SIGNAL_NONE,
@@ -109,7 +109,7 @@ TEST(AwakableListTest, BasicAwakeSatisfied) {
{
AwakableList awakable_list;
test::SimpleWaiterThread thread(&result, &context);
- awakable_list.Add(thread.waiter(), 3, MOJO_HANDLE_SIGNAL_READABLE);
+ awakable_list.Add(thread.waiter(), 3, false, MOJO_HANDLE_SIGNAL_READABLE);
thread.Start();
ThreadSleep(2 * test::EpsilonTimeout());
awakable_list.OnStateChange(
@@ -133,7 +133,7 @@ TEST(AwakableListTest, BasicAwakeUnsatisfiable) {
{
AwakableList awakable_list;
test::SimpleWaiterThread thread(&result, &context);
- awakable_list.Add(thread.waiter(), 1, MOJO_HANDLE_SIGNAL_READABLE);
+ awakable_list.Add(thread.waiter(), 1, false, MOJO_HANDLE_SIGNAL_READABLE);
thread.Start();
awakable_list.OnStateChange(
HandleSignalsState(
@@ -150,7 +150,7 @@ TEST(AwakableListTest, BasicAwakeUnsatisfiable) {
{
AwakableList awakable_list;
test::SimpleWaiterThread thread(&result, &context);
- awakable_list.Add(thread.waiter(), 2, MOJO_HANDLE_SIGNAL_WRITABLE);
+ awakable_list.Add(thread.waiter(), 2, false, MOJO_HANDLE_SIGNAL_WRITABLE);
awakable_list.OnStateChange(
HandleSignalsState(
MOJO_HANDLE_SIGNAL_NONE,
@@ -167,7 +167,7 @@ TEST(AwakableListTest, BasicAwakeUnsatisfiable) {
{
AwakableList awakable_list;
test::SimpleWaiterThread thread(&result, &context);
- awakable_list.Add(thread.waiter(), 3, MOJO_HANDLE_SIGNAL_READABLE);
+ awakable_list.Add(thread.waiter(), 3, false, MOJO_HANDLE_SIGNAL_READABLE);
thread.Start();
ThreadSleep(2 * test::EpsilonTimeout());
awakable_list.OnStateChange(
@@ -198,13 +198,13 @@ TEST(AwakableListTest, MultipleAwakables) {
{
AwakableList awakable_list;
test::SimpleWaiterThread thread1(&result1, &context1);
- awakable_list.Add(thread1.waiter(), 1, MOJO_HANDLE_SIGNAL_READABLE);
+ awakable_list.Add(thread1.waiter(), 1, false, MOJO_HANDLE_SIGNAL_READABLE);
thread1.Start();
test::SimpleWaiterThread thread2(&result2, &context2);
- awakable_list.Add(thread2.waiter(), 2, MOJO_HANDLE_SIGNAL_WRITABLE);
+ awakable_list.Add(thread2.waiter(), 2, false, MOJO_HANDLE_SIGNAL_WRITABLE);
thread2.Start();
ThreadSleep(2 * test::EpsilonTimeout());
- awakable_list.CancelAll();
+ awakable_list.CancelAndRemoveAll();
} // Join threads.
EXPECT_EQ(MOJO_RESULT_CANCELLED, result1);
EXPECT_EQ(1u, context1);
@@ -215,10 +215,10 @@ TEST(AwakableListTest, MultipleAwakables) {
{
AwakableList awakable_list;
test::SimpleWaiterThread thread1(&result1, &context1);
- awakable_list.Add(thread1.waiter(), 3, MOJO_HANDLE_SIGNAL_READABLE);
+ awakable_list.Add(thread1.waiter(), 3, false, MOJO_HANDLE_SIGNAL_READABLE);
thread1.Start();
test::SimpleWaiterThread thread2(&result2, &context2);
- awakable_list.Add(thread2.waiter(), 4, MOJO_HANDLE_SIGNAL_WRITABLE);
+ awakable_list.Add(thread2.waiter(), 4, false, MOJO_HANDLE_SIGNAL_WRITABLE);
thread2.Start();
ThreadSleep(2 * test::EpsilonTimeout());
awakable_list.OnStateChange(
@@ -229,7 +229,7 @@ TEST(AwakableListTest, MultipleAwakables) {
MOJO_HANDLE_SIGNAL_READABLE,
MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE));
awakable_list.Remove(false, thread1.waiter(), 0);
- awakable_list.CancelAll();
+ awakable_list.CancelAndRemoveAll();
} // Join threads.
EXPECT_EQ(MOJO_RESULT_OK, result1);
EXPECT_EQ(3u, context1);
@@ -240,10 +240,10 @@ TEST(AwakableListTest, MultipleAwakables) {
{
AwakableList awakable_list;
test::SimpleWaiterThread thread1(&result1, &context1);
- awakable_list.Add(thread1.waiter(), 5, MOJO_HANDLE_SIGNAL_READABLE);
+ awakable_list.Add(thread1.waiter(), 5, false, MOJO_HANDLE_SIGNAL_READABLE);
thread1.Start();
test::SimpleWaiterThread thread2(&result2, &context2);
- awakable_list.Add(thread2.waiter(), 6, MOJO_HANDLE_SIGNAL_WRITABLE);
+ awakable_list.Add(thread2.waiter(), 6, false, MOJO_HANDLE_SIGNAL_WRITABLE);
thread2.Start();
ThreadSleep(2 * test::EpsilonTimeout());
awakable_list.OnStateChange(
@@ -253,7 +253,7 @@ TEST(AwakableListTest, MultipleAwakables) {
HandleSignalsState(MOJO_HANDLE_SIGNAL_NONE,
MOJO_HANDLE_SIGNAL_READABLE));
awakable_list.Remove(false, thread2.waiter(), 0);
- awakable_list.CancelAll();
+ awakable_list.CancelAndRemoveAll();
} // Join threads.
EXPECT_EQ(MOJO_RESULT_CANCELLED, result1);
EXPECT_EQ(5u, context1);
@@ -264,7 +264,7 @@ TEST(AwakableListTest, MultipleAwakables) {
{
AwakableList awakable_list;
test::SimpleWaiterThread thread1(&result1, &context1);
- awakable_list.Add(thread1.waiter(), 7, MOJO_HANDLE_SIGNAL_READABLE);
+ awakable_list.Add(thread1.waiter(), 7, false, MOJO_HANDLE_SIGNAL_READABLE);
thread1.Start();
ThreadSleep(1 * test::EpsilonTimeout());
@@ -279,7 +279,7 @@ TEST(AwakableListTest, MultipleAwakables) {
MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE));
test::SimpleWaiterThread thread2(&result2, &context2);
- awakable_list.Add(thread2.waiter(), 8, MOJO_HANDLE_SIGNAL_WRITABLE);
+ awakable_list.Add(thread2.waiter(), 8, false, MOJO_HANDLE_SIGNAL_WRITABLE);
thread2.Start();
ThreadSleep(1 * test::EpsilonTimeout());
@@ -297,11 +297,11 @@ TEST(AwakableListTest, MultipleAwakables) {
ThreadSleep(1 * test::EpsilonTimeout());
test::SimpleWaiterThread thread3(&result3, &context3);
- awakable_list.Add(thread3.waiter(), 9, MOJO_HANDLE_SIGNAL_WRITABLE);
+ awakable_list.Add(thread3.waiter(), 9, false, MOJO_HANDLE_SIGNAL_WRITABLE);
thread3.Start();
test::SimpleWaiterThread thread4(&result4, &context4);
- awakable_list.Add(thread4.waiter(), 10, MOJO_HANDLE_SIGNAL_READABLE);
+ awakable_list.Add(thread4.waiter(), 10, false, MOJO_HANDLE_SIGNAL_READABLE);
thread4.Start();
ThreadSleep(1 * test::EpsilonTimeout());
@@ -317,7 +317,7 @@ TEST(AwakableListTest, MultipleAwakables) {
awakable_list.Remove(false, thread3.waiter(), 0);
// Cancel #4.
- awakable_list.CancelAll();
+ awakable_list.CancelAndRemoveAll();
} // Join threads.
EXPECT_EQ(MOJO_RESULT_OK, result1);
EXPECT_EQ(7u, context1);
@@ -336,8 +336,8 @@ TEST(AwakableListTest, RemoveMatchContext) {
{
AwakableList awakable_list;
test::SimpleWaiterThread thread(&result, &context);
- awakable_list.Add(thread.waiter(), 1, MOJO_HANDLE_SIGNAL_READABLE);
- awakable_list.Add(thread.waiter(), 2, MOJO_HANDLE_SIGNAL_READABLE);
+ awakable_list.Add(thread.waiter(), 1, false, MOJO_HANDLE_SIGNAL_READABLE);
+ awakable_list.Add(thread.waiter(), 2, false, MOJO_HANDLE_SIGNAL_READABLE);
thread.Start();
awakable_list.Remove(true, thread.waiter(), 2);
awakable_list.OnStateChange(
@@ -358,8 +358,8 @@ TEST(AwakableListTest, RemoveMatchContext) {
{
AwakableList awakable_list;
test::SimpleWaiterThread thread(&result, &context);
- awakable_list.Add(thread.waiter(), 1, MOJO_HANDLE_SIGNAL_READABLE);
- awakable_list.Add(thread.waiter(), 2, MOJO_HANDLE_SIGNAL_READABLE);
+ awakable_list.Add(thread.waiter(), 1, false, MOJO_HANDLE_SIGNAL_READABLE);
+ awakable_list.Add(thread.waiter(), 2, false, MOJO_HANDLE_SIGNAL_READABLE);
thread.Start();
awakable_list.Remove(true, thread.waiter(), 1);
awakable_list.OnStateChange(
@@ -375,86 +375,69 @@ TEST(AwakableListTest, RemoveMatchContext) {
EXPECT_EQ(2u, context);
}
-class KeepAwakable : public Awakable {
+class TestAwakable : public Awakable {
public:
- KeepAwakable() : awake_count(0) {}
+ TestAwakable() {}
- bool Awake(uint64_t context,
- AwakeReason reason,
- const HandleSignalsState& signals_state) override {
- awake_count++;
- return true;
- }
-
- int awake_count;
-
- MOJO_DISALLOW_COPY_AND_ASSIGN(KeepAwakable);
-};
-
-class RemoveAwakable : public Awakable {
- public:
- RemoveAwakable() : awake_count(0) {}
-
- bool Awake(uint64_t /*context*/,
+ void Awake(uint64_t /*context*/,
AwakeReason /*reason*/,
const HandleSignalsState& /*signals_state*/) override {
awake_count++;
- return false;
}
- int awake_count;
+ unsigned awake_count = 0;
- MOJO_DISALLOW_COPY_AND_ASSIGN(RemoveAwakable);
+ MOJO_DISALLOW_COPY_AND_ASSIGN(TestAwakable);
};
-TEST(AwakableListTest, KeepAwakablesReturningTrue) {
- KeepAwakable keep0;
- KeepAwakable keep1;
- RemoveAwakable remove0;
- RemoveAwakable remove1;
- RemoveAwakable remove2;
+TEST(AwakableListTest, PersistentVsNonPersistent) {
+ TestAwakable persistent0;
+ TestAwakable persistent1;
+ TestAwakable oneshot0;
+ TestAwakable oneshot1;
+ TestAwakable oneshot2;
AwakableList remove_all;
- remove_all.Add(&remove0, 0, MOJO_HANDLE_SIGNAL_WRITABLE);
- remove_all.Add(&remove1, 0, MOJO_HANDLE_SIGNAL_WRITABLE);
+ remove_all.Add(&oneshot0, 0, false, MOJO_HANDLE_SIGNAL_WRITABLE);
+ remove_all.Add(&oneshot1, 0, false, MOJO_HANDLE_SIGNAL_WRITABLE);
remove_all.OnStateChange(
HandleSignalsState(MOJO_HANDLE_SIGNAL_NONE, MOJO_HANDLE_SIGNAL_WRITABLE),
HandleSignalsState(MOJO_HANDLE_SIGNAL_WRITABLE,
MOJO_HANDLE_SIGNAL_WRITABLE));
- EXPECT_EQ(remove0.awake_count, 1);
- EXPECT_EQ(remove1.awake_count, 1);
+ EXPECT_EQ(oneshot0.awake_count, 1u);
+ EXPECT_EQ(oneshot1.awake_count, 1u);
remove_all.OnStateChange(
HandleSignalsState(MOJO_HANDLE_SIGNAL_NONE, MOJO_HANDLE_SIGNAL_WRITABLE),
HandleSignalsState(MOJO_HANDLE_SIGNAL_WRITABLE,
MOJO_HANDLE_SIGNAL_WRITABLE));
- EXPECT_EQ(remove0.awake_count, 1);
- EXPECT_EQ(remove1.awake_count, 1);
+ EXPECT_EQ(oneshot0.awake_count, 1u);
+ EXPECT_EQ(oneshot1.awake_count, 1u);
AwakableList remove_first;
- remove_first.Add(&remove2, 0, MOJO_HANDLE_SIGNAL_WRITABLE);
- remove_first.Add(&keep0, 0, MOJO_HANDLE_SIGNAL_WRITABLE);
- remove_first.Add(&keep1, 0, MOJO_HANDLE_SIGNAL_WRITABLE);
+ remove_first.Add(&oneshot2, 0, false, MOJO_HANDLE_SIGNAL_WRITABLE);
+ remove_first.Add(&persistent0, 0, true, MOJO_HANDLE_SIGNAL_WRITABLE);
+ remove_first.Add(&persistent1, 0, true, MOJO_HANDLE_SIGNAL_WRITABLE);
remove_first.OnStateChange(
HandleSignalsState(MOJO_HANDLE_SIGNAL_NONE, MOJO_HANDLE_SIGNAL_WRITABLE),
HandleSignalsState(MOJO_HANDLE_SIGNAL_WRITABLE,
MOJO_HANDLE_SIGNAL_WRITABLE));
- EXPECT_EQ(keep0.awake_count, 1);
- EXPECT_EQ(keep1.awake_count, 1);
- EXPECT_EQ(remove2.awake_count, 1);
+ EXPECT_EQ(persistent0.awake_count, 1u);
+ EXPECT_EQ(persistent1.awake_count, 1u);
+ EXPECT_EQ(oneshot2.awake_count, 1u);
remove_first.OnStateChange(
HandleSignalsState(MOJO_HANDLE_SIGNAL_NONE, MOJO_HANDLE_SIGNAL_WRITABLE),
HandleSignalsState(MOJO_HANDLE_SIGNAL_WRITABLE,
MOJO_HANDLE_SIGNAL_WRITABLE));
- EXPECT_EQ(keep0.awake_count, 2);
- EXPECT_EQ(keep1.awake_count, 2);
- EXPECT_EQ(remove2.awake_count, 1);
+ EXPECT_EQ(persistent0.awake_count, 2u);
+ EXPECT_EQ(persistent1.awake_count, 2u);
+ EXPECT_EQ(oneshot2.awake_count, 1u);
- remove_first.Remove(false, &keep0, 0);
- remove_first.Remove(false, &keep1, 0);
+ remove_first.Remove(false, &persistent0, 0);
+ remove_first.Remove(false, &persistent1, 0);
}
} // namespace
« no previous file with comments | « mojo/edk/system/awakable_list.cc ('k') | mojo/edk/system/core_test_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698