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

Side by Side Diff: runtime/vm/message.h

Issue 1499853004: Adds a special case for sending an int over a port with the native API. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years 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
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 #ifndef VM_MESSAGE_H_ 5 #ifndef VM_MESSAGE_H_
6 #define VM_MESSAGE_H_ 6 #define VM_MESSAGE_H_
7 7
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/allocation.h" 9 #include "vm/allocation.h"
10 #include "vm/globals.h" 10 #include "vm/globals.h"
11 #include "vm/raw_object.h"
11 12
12 // Duplicated from dart_api.h to avoid including the whole header. 13 // Duplicated from dart_api.h to avoid including the whole header.
13 typedef int64_t Dart_Port; 14 typedef int64_t Dart_Port;
14 15
15 namespace dart { 16 namespace dart {
16 17
17 class JSONStream; 18 class JSONStream;
18 19
19 class Message { 20 class Message {
20 public: 21 public:
(...skipping 29 matching lines...) Expand all
50 Dart_Port delivery_failure_port = kIllegalPort) 51 Dart_Port delivery_failure_port = kIllegalPort)
51 : next_(NULL), 52 : next_(NULL),
52 dest_port_(dest_port), 53 dest_port_(dest_port),
53 delivery_failure_port_(delivery_failure_port), 54 delivery_failure_port_(delivery_failure_port),
54 data_(data), 55 data_(data),
55 len_(len), 56 len_(len),
56 priority_(priority) { 57 priority_(priority) {
57 ASSERT((priority == kNormalPriority) || 58 ASSERT((priority == kNormalPriority) ||
58 (delivery_failure_port == kIllegalPort)); 59 (delivery_failure_port == kIllegalPort));
59 } 60 }
61 Message(Dart_Port dest_port,
62 RawObject* raw_obj,
63 Priority priority,
64 Dart_Port delivery_failure_port = kIllegalPort)
65 : next_(NULL),
66 dest_port_(dest_port),
67 delivery_failure_port_(delivery_failure_port),
68 data_(reinterpret_cast<uint8_t*>(raw_obj)),
69 len_(0),
70 priority_(priority) {
71 ASSERT((priority == kNormalPriority) ||
Ivan Posva 2015/12/09 22:35:29 Also please assert that raw_obj is not a heap obje
zra 2015/12/10 00:07:29 Done.
72 (delivery_failure_port == kIllegalPort));
73 }
60 ~Message() { 74 ~Message() {
61 ASSERT(delivery_failure_port_ == kIllegalPort); 75 ASSERT(delivery_failure_port_ == kIllegalPort);
62 free(data_); 76 if (len_ > 0) {
77 free(data_);
78 }
63 } 79 }
64 80
65 Dart_Port dest_port() const { return dest_port_; } 81 Dart_Port dest_port() const { return dest_port_; }
66 uint8_t* data() const { return data_; } 82 uint8_t* data() const {
67 intptr_t len() const { return len_; } 83 ASSERT(len_ > 0);
84 return data_;
85 }
86 intptr_t len() const {
87 return len_;
88 }
89 RawObject* raw_obj() const {
90 ASSERT(len_ == 0);
91 return reinterpret_cast<RawObject*>(data_);
92 }
68 Priority priority() const { return priority_; } 93 Priority priority() const { return priority_; }
69 94
95 bool IsData() const { return len_ > 0; }
96 bool IsRawObject() const { return len_ == 0; }
97
70 bool IsOOB() const { return priority_ == Message::kOOBPriority; } 98 bool IsOOB() const { return priority_ == Message::kOOBPriority; }
71 99
72 bool RedirectToDeliveryFailurePort(); 100 bool RedirectToDeliveryFailurePort();
73 101
74 intptr_t Id() const; 102 intptr_t Id() const;
75 103
76 static const char* PriorityAsString(Priority priority); 104 static const char* PriorityAsString(Priority priority);
77 105
78 private: 106 private:
79 friend class MessageQueue; 107 friend class MessageQueue;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 private: 161 private:
134 Message* head_; 162 Message* head_;
135 Message* tail_; 163 Message* tail_;
136 164
137 DISALLOW_COPY_AND_ASSIGN(MessageQueue); 165 DISALLOW_COPY_AND_ASSIGN(MessageQueue);
138 }; 166 };
139 167
140 } // namespace dart 168 } // namespace dart
141 169
142 #endif // VM_MESSAGE_H_ 170 #endif // VM_MESSAGE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698