| Index: runtime/vm/message_test.cc
|
| ===================================================================
|
| --- runtime/vm/message_test.cc (revision 4842)
|
| +++ runtime/vm/message_test.cc (working copy)
|
| @@ -15,8 +15,12 @@
|
| explicit MessageQueueTestPeer(MessageQueue* queue) : queue_(queue) {}
|
|
|
| bool HasMessage() const {
|
| + // We don't really need to grab the monitor during the unit test,
|
| + // but it doesn't hurt.
|
| + queue_->monitor_.Enter();
|
| bool result = (queue_->head_[Message::kNormalPriority] != NULL ||
|
| queue_->head_[Message::kOOBPriority] != NULL);
|
| + queue_->monitor_.Exit();
|
| return result;
|
| }
|
|
|
| @@ -25,18 +29,6 @@
|
| };
|
|
|
|
|
| -class MessageHandlerTestPeer {
|
| - public:
|
| - explicit MessageHandlerTestPeer(MessageHandler* handler)
|
| - : handler_(handler) {}
|
| -
|
| - MessageQueue* queue() { return handler_->queue_; }
|
| -
|
| - private:
|
| - MessageHandler* handler_;
|
| -};
|
| -
|
| -
|
| static uint8_t* AllocMsg(const char* str) {
|
| return reinterpret_cast<uint8_t*>(strdup(str));
|
| }
|
| @@ -62,12 +54,12 @@
|
| EXPECT(queue_peer.HasMessage());
|
|
|
| // Remove two messages.
|
| - Message* msg = queue.Dequeue();
|
| + Message* msg = queue.Dequeue(0);
|
| EXPECT(msg != NULL);
|
| EXPECT_STREQ("msg1", reinterpret_cast<char*>(msg->data()));
|
| EXPECT(queue_peer.HasMessage());
|
|
|
| - msg = queue.Dequeue();
|
| + msg = queue.Dequeue(0);
|
| EXPECT(msg != NULL);
|
| EXPECT_STREQ("msg2", reinterpret_cast<char*>(msg->data()));
|
| EXPECT(!queue_peer.HasMessage());
|
| @@ -97,12 +89,12 @@
|
| EXPECT(queue_peer.HasMessage());
|
|
|
| // The higher priority message is delivered first.
|
| - Message* msg = queue.Dequeue();
|
| + Message* msg = queue.Dequeue(0);
|
| EXPECT(msg != NULL);
|
| EXPECT_STREQ("msg2", reinterpret_cast<char*>(msg->data()));
|
| EXPECT(queue_peer.HasMessage());
|
|
|
| - msg = queue.Dequeue();
|
| + msg = queue.Dequeue(0);
|
| EXPECT(msg != NULL);
|
| EXPECT_STREQ("msg1", reinterpret_cast<char*>(msg->data()));
|
| EXPECT(!queue_peer.HasMessage());
|
| @@ -114,18 +106,17 @@
|
|
|
| // A thread which receives an expected sequence of messages.
|
| static Monitor* sync = NULL;
|
| -static MessageHandler* shared_handler = NULL;
|
| +static MessageQueue* shared_queue = NULL;
|
| void MessageReceiver_start(uword unused) {
|
| // We only need an isolate here because the MonitorLocker in the
|
| // MessageQueue expects it, we don't need to initialize the isolate
|
| // as it does not run any dart code.
|
| Dart::CreateIsolate(NULL);
|
|
|
| - // Create a message handler and share it.
|
| - MessageHandler* handler = new MessageHandler();
|
| - MessageHandlerTestPeer handler_peer(handler);
|
| - MessageQueueTestPeer queue_peer(handler_peer.queue());
|
| - shared_handler = handler;
|
| + // Create a message queue and share it.
|
| + MessageQueue* queue = new MessageQueue();
|
| + MessageQueueTestPeer peer(queue);
|
| + shared_queue = queue;
|
|
|
| // Tell the other thread that the shared queue is ready.
|
| {
|
| @@ -134,13 +125,13 @@
|
| }
|
|
|
| // Wait for the other thread to fill the queue a bit.
|
| - while (!queue_peer.HasMessage()) {
|
| + while (!peer.HasMessage()) {
|
| MonitorLocker ml(sync);
|
| ml.Wait(5);
|
| }
|
|
|
| for (int i = 0; i < 3; i++) {
|
| - Message* msg = handler->Dequeue(0);
|
| + Message* msg = queue->Dequeue(0);
|
| EXPECT(msg != NULL);
|
| EXPECT_EQ(i + 10, msg->dest_port());
|
| EXPECT_EQ(i + 100, msg->reply_port());
|
| @@ -148,31 +139,31 @@
|
| delete msg;
|
| }
|
| for (int i = 0; i < 3; i++) {
|
| - Message* msg = handler->Dequeue(0);
|
| + Message* msg = queue->Dequeue(0);
|
| EXPECT(msg != NULL);
|
| EXPECT_EQ(i + 20, msg->dest_port());
|
| EXPECT_EQ(i + 200, msg->reply_port());
|
| EXPECT_EQ(i + 2000, *(reinterpret_cast<int*>(msg->data())));
|
| delete msg;
|
| }
|
| - shared_handler = NULL;
|
| - delete handler;
|
| + shared_queue = NULL;
|
| + delete queue;
|
| Dart::ShutdownIsolate();
|
| }
|
|
|
|
|
| -TEST_CASE(MessageHandler_WaitNotify) {
|
| +TEST_CASE(MessageQueue_WaitNotify) {
|
| sync = new Monitor();
|
|
|
| int result = Thread::Start(MessageReceiver_start, 0);
|
| EXPECT_EQ(0, result);
|
|
|
| - // Wait for the shared handler to be created.
|
| - while (shared_handler == NULL) {
|
| + // Wait for the shared queue to be created.
|
| + while (shared_queue == NULL) {
|
| MonitorLocker ml(sync);
|
| ml.Wait(5);
|
| }
|
| - ASSERT(shared_handler != NULL);
|
| + ASSERT(shared_queue != NULL);
|
|
|
| // Pile up three messages before the other thread runs.
|
| for (int i = 0; i < 3; i++) {
|
| @@ -181,7 +172,7 @@
|
| Message* msg =
|
| new Message(i + 10, i + 100, reinterpret_cast<uint8_t*>(data),
|
| Message::kNormalPriority);
|
| - shared_handler->PostMessage(msg);
|
| + shared_queue->Enqueue(msg);
|
| }
|
|
|
| // Wake the other thread and have it start consuming messages.
|
| @@ -199,7 +190,7 @@
|
| Message* msg =
|
| new Message(i + 20, i + 200, reinterpret_cast<uint8_t*>(data),
|
| Message::kNormalPriority);
|
| - shared_handler->PostMessage(msg);
|
| + shared_queue->Enqueue(msg);
|
| }
|
|
|
| sync = NULL;
|
| @@ -251,7 +242,7 @@
|
|
|
| // One message is left in the queue.
|
| EXPECT(queue_peer.HasMessage());
|
| - Message* msg = queue.Dequeue();
|
| + Message* msg = queue.Dequeue(0);
|
| EXPECT(msg != NULL);
|
| EXPECT_STREQ("msg2", reinterpret_cast<char*>(msg->data()));
|
|
|
|
|