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

Side by Side Diff: runtime/bin/eventhandler_win.cc

Issue 9104041: Added API Dart_PostCMessage for posting a Dart_CMessage structure (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments from asiva@ 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "bin/eventhandler.h" 5 #include "bin/eventhandler.h"
6 6
7 #include <process.h> 7 #include <process.h>
8 #include <winsock2.h> 8 #include <winsock2.h>
9 #include <ws2tcpip.h> 9 #include <ws2tcpip.h>
10 #include <mswsock.h> 10 #include <mswsock.h>
11 11
12 #include "bin/builtin.h" 12 #include "bin/builtin.h"
13 #include "bin/dartutils.h"
13 #include "bin/socket.h" 14 #include "bin/socket.h"
14 15
15 16
16 static const int kInfinityTimeout = -1; 17 static const int kInfinityTimeout = -1;
17 18
18 19
19 int64_t GetCurrentTimeMilliseconds() { 20 int64_t GetCurrentTimeMilliseconds() {
20 static const int64_t kTimeEpoc = 116444736000000000LL; 21 static const int64_t kTimeEpoc = 116444736000000000LL;
21 22
22 // Although win32 uses 64-bit integers for representing timestamps, 23 // Although win32 uses 64-bit integers for representing timestamps,
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 handle->EnsureInitialized(this); 635 handle->EnsureInitialized(this);
635 636
636 Handle::ScopedLock lock(handle); 637 Handle::ScopedLock lock(handle);
637 638
638 // If the data available callback has been requested and data are 639 // If the data available callback has been requested and data are
639 // available post it immediately. Otherwise make sure that a pending 640 // available post it immediately. Otherwise make sure that a pending
640 // read is issued unless the socket is already closed for read. 641 // read is issued unless the socket is already closed for read.
641 if ((msg->data & (1 << kInEvent)) != 0) { 642 if ((msg->data & (1 << kInEvent)) != 0) {
642 if (handle->Available() > 0) { 643 if (handle->Available() > 0) {
643 int event_mask = (1 << kInEvent); 644 int event_mask = (1 << kInEvent);
644 Dart_PostIntArray(handle->port(), 1, &event_mask); 645 DartUtils::PostInteger(port, event_mask);
645 } else if (!handle->HasPendingRead() && 646 } else if (!handle->HasPendingRead() &&
646 !handle->IsClosedRead()) { 647 !handle->IsClosedRead()) {
647 handle->IssueRead(); 648 handle->IssueRead();
648 } 649 }
649 } 650 }
650 651
651 // If can send callback had been requested and there is no pending 652 // If can send callback had been requested and there is no pending
652 // send post it immediately. 653 // send post it immediately.
653 if ((msg->data & (1 << kOutEvent)) != 0) { 654 if ((msg->data & (1 << kOutEvent)) != 0) {
654 if (!handle->HasPendingWrite()) { 655 if (!handle->HasPendingWrite()) {
655 int event_mask = (1 << kOutEvent); 656 int event_mask = (1 << kOutEvent);
656 Dart_PostIntArray(handle->port(), 1, &event_mask); 657 DartUtils::PostInteger(port, event_mask);
657 } 658 }
658 } 659 }
659 660
660 if (handle->is_client_socket()) { 661 if (handle->is_client_socket()) {
661 ClientSocket* client_socket = reinterpret_cast<ClientSocket*>(handle); 662 ClientSocket* client_socket = reinterpret_cast<ClientSocket*>(handle);
662 if ((msg->data & (1 << kShutdownReadCommand)) != 0) { 663 if ((msg->data & (1 << kShutdownReadCommand)) != 0) {
663 client_socket->Shutdown(SD_RECEIVE); 664 client_socket->Shutdown(SD_RECEIVE);
664 } 665 }
665 666
666 if ((msg->data & (1 << kShutdownWriteCommand)) != 0) { 667 if ((msg->data & (1 << kShutdownWriteCommand)) != 0) {
(...skipping 15 matching lines...) Expand all
682 } 683 }
683 684
684 685
685 void EventHandlerImplementation::HandleAccept(ListenSocket* listen_socket, 686 void EventHandlerImplementation::HandleAccept(ListenSocket* listen_socket,
686 IOBuffer* buffer) { 687 IOBuffer* buffer) {
687 listen_socket->AcceptComplete(buffer, completion_port_); 688 listen_socket->AcceptComplete(buffer, completion_port_);
688 689
689 if (!listen_socket->IsClosing()) { 690 if (!listen_socket->IsClosing()) {
690 int event_mask = 1 << kInEvent; 691 int event_mask = 1 << kInEvent;
691 if ((listen_socket->mask() & event_mask) != 0) { 692 if ((listen_socket->mask() & event_mask) != 0) {
692 Dart_PostIntArray(listen_socket->port(), 1, &event_mask); 693 DartUtils::PostInteger(port, event_mask);
693 } 694 }
694 } 695 }
695 696
696 if (listen_socket->IsClosed()) { 697 if (listen_socket->IsClosed()) {
697 delete listen_socket; 698 delete listen_socket;
698 } 699 }
699 } 700 }
700 701
701 702
702 void EventHandlerImplementation::HandleClosed(Handle* handle) { 703 void EventHandlerImplementation::HandleClosed(Handle* handle) {
703 if (!handle->IsClosing()) { 704 if (!handle->IsClosing()) {
704 int event_mask = 1 << kCloseEvent; 705 int event_mask = 1 << kCloseEvent;
705 Dart_PostIntArray(handle->port(), 1, &event_mask); 706 DartUtils::PostInteger(port, event_mask);
706 } 707 }
707 } 708 }
708 709
709 710
710 void EventHandlerImplementation::HandleRead(Handle* handle, 711 void EventHandlerImplementation::HandleRead(Handle* handle,
711 int bytes, 712 int bytes,
712 IOBuffer* buffer) { 713 IOBuffer* buffer) {
713 buffer->set_data_length(bytes); 714 buffer->set_data_length(bytes);
714 handle->ReadComplete(buffer); 715 handle->ReadComplete(buffer);
715 if (bytes > 0) { 716 if (bytes > 0) {
716 if (!handle->IsClosing()) { 717 if (!handle->IsClosing()) {
717 int event_mask = 1 << kInEvent; 718 int event_mask = 1 << kInEvent;
718 if ((handle->mask() & event_mask) != 0) { 719 if ((handle->mask() & event_mask) != 0) {
719 Dart_PostIntArray(handle->port(), 1, &event_mask); 720 DartUtils::PostInteger(port, event_mask);
720 } 721 }
721 } 722 }
722 } else { 723 } else {
723 ASSERT(bytes == 0); 724 ASSERT(bytes == 0);
724 handle->MarkClosedRead(); 725 handle->MarkClosedRead();
725 HandleClosed(handle); 726 HandleClosed(handle);
726 } 727 }
727 728
728 if (handle->IsClosed()) { 729 if (handle->IsClosed()) {
729 delete handle; 730 delete handle;
730 } 731 }
731 } 732 }
732 733
733 734
734 void EventHandlerImplementation::HandleWrite(Handle* handle, 735 void EventHandlerImplementation::HandleWrite(Handle* handle,
735 int bytes, 736 int bytes,
736 IOBuffer* buffer) { 737 IOBuffer* buffer) {
737 handle->WriteComplete(buffer); 738 handle->WriteComplete(buffer);
738 739
739 if (bytes > 0) { 740 if (bytes > 0) {
740 if (!handle->IsClosing()) { 741 if (!handle->IsClosing()) {
741 int event_mask = 1 << kOutEvent; 742 int event_mask = 1 << kOutEvent;
742 if ((handle->mask() & event_mask) != 0) { 743 if ((handle->mask() & event_mask) != 0) {
743 Dart_PostIntArray(handle->port(), 1, &event_mask); 744 DartUtils::PostInteger(port, event_mask);
744 } 745 }
745 } 746 }
746 } else { 747 } else {
747 ASSERT(bytes == 0); 748 ASSERT(bytes == 0);
748 HandleClosed(handle); 749 HandleClosed(handle);
749 } 750 }
750 751
751 if (handle->IsClosed()) { 752 if (handle->IsClosed()) {
752 delete handle; 753 delete handle;
753 } 754 }
754 } 755 }
755 756
756 757
757 void EventHandlerImplementation::HandleTimeout() { 758 void EventHandlerImplementation::HandleTimeout() {
758 // TODO(sgjesse) check if there actually is a timeout. 759 // TODO(sgjesse) check if there actually is a timeout.
759 Dart_PostIntArray(timeout_port_, 0, NULL); 760 DartUtils::PostNull(timeout_port_);
760 timeout_ = kInfinityTimeout; 761 timeout_ = kInfinityTimeout;
761 timeout_port_ = 0; 762 timeout_port_ = 0;
762 } 763 }
763 764
764 765
765 void EventHandlerImplementation::HandleIOCompletion(DWORD bytes, 766 void EventHandlerImplementation::HandleIOCompletion(DWORD bytes,
766 ULONG_PTR key, 767 ULONG_PTR key,
767 OVERLAPPED* overlapped) { 768 OVERLAPPED* overlapped) {
768 IOBuffer* buffer = IOBuffer::GetFromOverlapped(overlapped); 769 IOBuffer* buffer = IOBuffer::GetFromOverlapped(overlapped);
769 switch (buffer->operation()) { 770 switch (buffer->operation()) {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 reinterpret_cast<uword>(this)); 884 reinterpret_cast<uword>(this));
884 if (result != 0) { 885 if (result != 0) {
885 FATAL1("Failed to start event handler thread %d", result); 886 FATAL1("Failed to start event handler thread %d", result);
886 } 887 }
887 888
888 // Initialize Winsock32 889 // Initialize Winsock32
889 if (!Socket::Initialize()) { 890 if (!Socket::Initialize()) {
890 FATAL("Failed to initialized Windows sockets"); 891 FATAL("Failed to initialized Windows sockets");
891 } 892 }
892 } 893 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698