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

Unified Diff: runtime/vm/message_test.cc

Issue 9570046: Make the message queue private in the message handler. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 10 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 | « runtime/vm/message.cc ('k') | runtime/vm/native_message_handler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/message_test.cc
===================================================================
--- runtime/vm/message_test.cc (revision 4816)
+++ runtime/vm/message_test.cc (working copy)
@@ -15,12 +15,8 @@
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;
}
@@ -29,6 +25,18 @@
};
+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));
}
@@ -54,12 +62,12 @@
EXPECT(queue_peer.HasMessage());
// Remove two messages.
- Message* msg = queue.Dequeue(0);
+ Message* msg = queue.Dequeue();
EXPECT(msg != NULL);
EXPECT_STREQ("msg1", reinterpret_cast<char*>(msg->data()));
EXPECT(queue_peer.HasMessage());
- msg = queue.Dequeue(0);
+ msg = queue.Dequeue();
EXPECT(msg != NULL);
EXPECT_STREQ("msg2", reinterpret_cast<char*>(msg->data()));
EXPECT(!queue_peer.HasMessage());
@@ -89,12 +97,12 @@
EXPECT(queue_peer.HasMessage());
// The higher priority message is delivered first.
- Message* msg = queue.Dequeue(0);
+ Message* msg = queue.Dequeue();
EXPECT(msg != NULL);
EXPECT_STREQ("msg2", reinterpret_cast<char*>(msg->data()));
EXPECT(queue_peer.HasMessage());
- msg = queue.Dequeue(0);
+ msg = queue.Dequeue();
EXPECT(msg != NULL);
EXPECT_STREQ("msg1", reinterpret_cast<char*>(msg->data()));
EXPECT(!queue_peer.HasMessage());
@@ -106,17 +114,18 @@
// A thread which receives an expected sequence of messages.
static Monitor* sync = NULL;
-static MessageQueue* shared_queue = NULL;
+static MessageHandler* shared_handler = 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 queue and share it.
- MessageQueue* queue = new MessageQueue();
- MessageQueueTestPeer peer(queue);
- shared_queue = queue;
+ // Create a message handler and share it.
+ MessageHandler* handler = new MessageHandler();
+ MessageHandlerTestPeer handler_peer(handler);
+ MessageQueueTestPeer queue_peer(handler_peer.queue());
+ shared_handler = handler;
// Tell the other thread that the shared queue is ready.
{
@@ -125,13 +134,13 @@
}
// Wait for the other thread to fill the queue a bit.
- while (!peer.HasMessage()) {
+ while (!queue_peer.HasMessage()) {
MonitorLocker ml(sync);
ml.Wait(5);
}
for (int i = 0; i < 3; i++) {
- Message* msg = queue->Dequeue(0);
+ Message* msg = handler->Dequeue(0);
EXPECT(msg != NULL);
EXPECT_EQ(i + 10, msg->dest_port());
EXPECT_EQ(i + 100, msg->reply_port());
@@ -139,31 +148,31 @@
delete msg;
}
for (int i = 0; i < 3; i++) {
- Message* msg = queue->Dequeue(0);
+ Message* msg = handler->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_queue = NULL;
- delete queue;
+ shared_handler = NULL;
+ delete handler;
Dart::ShutdownIsolate();
}
-TEST_CASE(MessageQueue_WaitNotify) {
+TEST_CASE(MessageHandler_WaitNotify) {
sync = new Monitor();
int result = Thread::Start(MessageReceiver_start, 0);
EXPECT_EQ(0, result);
- // Wait for the shared queue to be created.
- while (shared_queue == NULL) {
+ // Wait for the shared handler to be created.
+ while (shared_handler == NULL) {
MonitorLocker ml(sync);
ml.Wait(5);
}
- ASSERT(shared_queue != NULL);
+ ASSERT(shared_handler != NULL);
// Pile up three messages before the other thread runs.
for (int i = 0; i < 3; i++) {
@@ -172,7 +181,7 @@
Message* msg =
new Message(i + 10, i + 100, reinterpret_cast<uint8_t*>(data),
Message::kNormalPriority);
- shared_queue->Enqueue(msg);
+ shared_handler->PostMessage(msg);
}
// Wake the other thread and have it start consuming messages.
@@ -190,7 +199,7 @@
Message* msg =
new Message(i + 20, i + 200, reinterpret_cast<uint8_t*>(data),
Message::kNormalPriority);
- shared_queue->Enqueue(msg);
+ shared_handler->PostMessage(msg);
}
sync = NULL;
@@ -242,7 +251,7 @@
// One message is left in the queue.
EXPECT(queue_peer.HasMessage());
- Message* msg = queue.Dequeue(0);
+ Message* msg = queue.Dequeue();
EXPECT(msg != NULL);
EXPECT_STREQ("msg2", reinterpret_cast<char*>(msg->data()));
« no previous file with comments | « runtime/vm/message.cc ('k') | runtime/vm/native_message_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698