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

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

Issue 2480793002: clang-format runtime/bin (Closed)
Patch Set: Created 4 years, 1 month 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
« no previous file with comments | « runtime/bin/eventhandler_fuchsia.h ('k') | runtime/bin/eventhandler_linux.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 #if !defined(DART_IO_DISABLED) 5 #if !defined(DART_IO_DISABLED)
6 6
7 #include "platform/globals.h" 7 #include "platform/globals.h"
8 #if defined(TARGET_OS_FUCHSIA) 8 #if defined(TARGET_OS_FUCHSIA)
9 9
10 #include "bin/eventhandler.h" 10 #include "bin/eventhandler.h"
(...skipping 11 matching lines...) Expand all
22 #define LOG_INFO(msg, ...) Log::Print(msg, ##__VA_ARGS__) 22 #define LOG_INFO(msg, ...) Log::Print(msg, ##__VA_ARGS__)
23 #else 23 #else
24 #define LOG_ERR(msg, ...) 24 #define LOG_ERR(msg, ...)
25 #define LOG_INFO(msg, ...) 25 #define LOG_INFO(msg, ...)
26 #endif // defined(EVENTHANDLER_LOGGING) 26 #endif // defined(EVENTHANDLER_LOGGING)
27 27
28 namespace dart { 28 namespace dart {
29 namespace bin { 29 namespace bin {
30 30
31 MagentaWaitManyInfo::MagentaWaitManyInfo() 31 MagentaWaitManyInfo::MagentaWaitManyInfo()
32 : capacity_(kInitialCapacity), 32 : capacity_(kInitialCapacity), size_(0) {
33 size_(0) {
34 descriptor_infos_ = static_cast<DescriptorInfo**>( 33 descriptor_infos_ = static_cast<DescriptorInfo**>(
35 malloc(kInitialCapacity * sizeof(*descriptor_infos_))); 34 malloc(kInitialCapacity * sizeof(*descriptor_infos_)));
36 if (descriptor_infos_ == NULL) { 35 if (descriptor_infos_ == NULL) {
37 FATAL("Failed to allocate descriptor_infos array"); 36 FATAL("Failed to allocate descriptor_infos array");
38 } 37 }
39 items_ = static_cast<mx_wait_item_t*>( 38 items_ =
40 malloc(kInitialCapacity * sizeof(*items_))); 39 static_cast<mx_wait_item_t*>(malloc(kInitialCapacity * sizeof(*items_)));
41 if (items_ == NULL) { 40 if (items_ == NULL) {
42 FATAL("Failed to allocate items array"); 41 FATAL("Failed to allocate items array");
43 } 42 }
44 } 43 }
45 44
46 45
47 MagentaWaitManyInfo::~MagentaWaitManyInfo() { 46 MagentaWaitManyInfo::~MagentaWaitManyInfo() {
48 free(descriptor_infos_); 47 free(descriptor_infos_);
49 free(items_); 48 free(items_);
50 } 49 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 realloc(descriptor_infos_, new_capacity * sizeof(*descriptor_infos_))); 102 realloc(descriptor_infos_, new_capacity * sizeof(*descriptor_infos_)));
104 if (descriptor_infos_ == NULL) { 103 if (descriptor_infos_ == NULL) {
105 FATAL("Failed to grow descriptor_infos array"); 104 FATAL("Failed to grow descriptor_infos array");
106 } 105 }
107 items_ = static_cast<mx_wait_item_t*>( 106 items_ = static_cast<mx_wait_item_t*>(
108 realloc(items_, new_capacity * sizeof(*items_))); 107 realloc(items_, new_capacity * sizeof(*items_)));
109 if (items_ == NULL) { 108 if (items_ == NULL) {
110 FATAL("Failed to grow items array"); 109 FATAL("Failed to grow items array");
111 } 110 }
112 capacity_ = new_capacity; 111 capacity_ = new_capacity;
113 LOG_INFO("GrowArraysIfNeeded(%ld), capacity = %ld\n", 112 LOG_INFO("GrowArraysIfNeeded(%ld), capacity = %ld\n", desired_size,
114 desired_size, capacity_); 113 capacity_);
115 } 114 }
116 115
117 116
118 EventHandlerImplementation::EventHandlerImplementation() { 117 EventHandlerImplementation::EventHandlerImplementation() {
119 mx_status_t status = mx_channel_create(0, &interrupt_handles_[0], 118 mx_status_t status =
120 &interrupt_handles_[1]); 119 mx_channel_create(0, &interrupt_handles_[0], &interrupt_handles_[1]);
121 if (status != NO_ERROR) { 120 if (status != NO_ERROR) {
122 FATAL1("mx_channel_create failed: %s\n", mx_status_get_string(status)); 121 FATAL1("mx_channel_create failed: %s\n", mx_status_get_string(status));
123 } 122 }
124 shutdown_ = false; 123 shutdown_ = false;
125 info_.AddHandle(interrupt_handles_[0], 124 info_.AddHandle(interrupt_handles_[0],
126 MX_SIGNAL_READABLE | MX_SIGNAL_PEER_CLOSED, 125 MX_SIGNAL_READABLE | MX_SIGNAL_PEER_CLOSED, NULL);
127 NULL);
128 LOG_INFO("EventHandlerImplementation initialized\n"); 126 LOG_INFO("EventHandlerImplementation initialized\n");
129 } 127 }
130 128
131 129
132 EventHandlerImplementation::~EventHandlerImplementation() { 130 EventHandlerImplementation::~EventHandlerImplementation() {
133 mx_status_t status = mx_handle_close(interrupt_handles_[0]); 131 mx_status_t status = mx_handle_close(interrupt_handles_[0]);
134 if (status != NO_ERROR) { 132 if (status != NO_ERROR) {
135 FATAL1("mx_handle_close failed: %s\n", mx_status_get_string(status)); 133 FATAL1("mx_handle_close failed: %s\n", mx_status_get_string(status));
136 } 134 }
137 status = mx_handle_close(interrupt_handles_[1]); 135 status = mx_handle_close(interrupt_handles_[1]);
138 if (status != NO_ERROR) { 136 if (status != NO_ERROR) {
139 FATAL1("mx_handle_close failed: %s\n", mx_status_get_string(status)); 137 FATAL1("mx_handle_close failed: %s\n", mx_status_get_string(status));
140 } 138 }
141 LOG_INFO("EventHandlerImplementation destroyed\n"); 139 LOG_INFO("EventHandlerImplementation destroyed\n");
142 } 140 }
143 141
144 142
145 void EventHandlerImplementation::WakeupHandler(intptr_t id, 143 void EventHandlerImplementation::WakeupHandler(intptr_t id,
146 Dart_Port dart_port, 144 Dart_Port dart_port,
147 int64_t data) { 145 int64_t data) {
148 InterruptMessage msg; 146 InterruptMessage msg;
149 msg.id = id; 147 msg.id = id;
150 msg.dart_port = dart_port; 148 msg.dart_port = dart_port;
151 msg.data = data; 149 msg.data = data;
152 150
153 mx_status_t status = 151 mx_status_t status =
154 mx_channel_write(interrupt_handles_[1], 0, &msg, sizeof(msg), NULL, 0); 152 mx_channel_write(interrupt_handles_[1], 0, &msg, sizeof(msg), NULL, 0);
155 if (status != NO_ERROR) { 153 if (status != NO_ERROR) {
156 FATAL1("mx_channel_write failed: %s\n", mx_status_get_string(status)); 154 FATAL1("mx_channel_write failed: %s\n", mx_status_get_string(status));
157 } 155 }
158 LOG_INFO("WakeupHandler(%ld, %ld, %lld)\n", id, dart_port, data); 156 LOG_INFO("WakeupHandler(%ld, %ld, %lld)\n", id, dart_port, data);
159 } 157 }
160 158
161 159
162 void EventHandlerImplementation::HandleInterruptFd() { 160 void EventHandlerImplementation::HandleInterruptFd() {
163 LOG_INFO("HandleInterruptFd entry\n"); 161 LOG_INFO("HandleInterruptFd entry\n");
164 InterruptMessage msg; 162 InterruptMessage msg;
165 uint32_t bytes = kInterruptMessageSize; 163 uint32_t bytes = kInterruptMessageSize;
166 mx_status_t status; 164 mx_status_t status;
167 while (true) { 165 while (true) {
168 status = mx_channel_read( 166 status = mx_channel_read(interrupt_handles_[0], 0, &msg, bytes, &bytes,
169 interrupt_handles_[0], 0, &msg, bytes, &bytes, NULL, 0, NULL); 167 NULL, 0, NULL);
170 if (status != NO_ERROR) { 168 if (status != NO_ERROR) {
171 break; 169 break;
172 } 170 }
173 ASSERT(bytes == kInterruptMessageSize); 171 ASSERT(bytes == kInterruptMessageSize);
174 if (msg.id == kTimerId) { 172 if (msg.id == kTimerId) {
175 LOG_INFO("HandleInterruptFd read timer update\n"); 173 LOG_INFO("HandleInterruptFd read timer update\n");
176 timeout_queue_.UpdateTimeout(msg.dart_port, msg.data); 174 timeout_queue_.UpdateTimeout(msg.dart_port, msg.data);
177 } else if (msg.id == kShutdownId) { 175 } else if (msg.id == kShutdownId) {
178 LOG_INFO("HandleInterruptFd read shutdown\n"); 176 LOG_INFO("HandleInterruptFd read shutdown\n");
179 shutdown_ = true; 177 shutdown_ = true;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 } else { 213 } else {
216 LOG_INFO("HandleEvents interrupt_handles_[0] not readable\n"); 214 LOG_INFO("HandleEvents interrupt_handles_[0] not readable\n");
217 } 215 }
218 } 216 }
219 217
220 218
221 int64_t EventHandlerImplementation::GetTimeout() const { 219 int64_t EventHandlerImplementation::GetTimeout() const {
222 if (!timeout_queue_.HasTimeout()) { 220 if (!timeout_queue_.HasTimeout()) {
223 return kInfinityTimeout; 221 return kInfinityTimeout;
224 } 222 }
225 int64_t millis = timeout_queue_.CurrentTimeout() - 223 int64_t millis =
226 TimerUtils::GetCurrentMonotonicMillis(); 224 timeout_queue_.CurrentTimeout() - TimerUtils::GetCurrentMonotonicMillis();
227 return (millis < 0) ? 0 : millis; 225 return (millis < 0) ? 0 : millis;
228 } 226 }
229 227
230 228
231 void EventHandlerImplementation::HandleTimeout() { 229 void EventHandlerImplementation::HandleTimeout() {
232 if (timeout_queue_.HasTimeout()) { 230 if (timeout_queue_.HasTimeout()) {
233 int64_t millis = timeout_queue_.CurrentTimeout() - 231 int64_t millis = timeout_queue_.CurrentTimeout() -
234 TimerUtils::GetCurrentMonotonicMillis(); 232 TimerUtils::GetCurrentMonotonicMillis();
235 if (millis <= 0) { 233 if (millis <= 0) {
236 DartUtils::PostNull(timeout_queue_.CurrentPort()); 234 DartUtils::PostNull(timeout_queue_.CurrentPort());
237 timeout_queue_.RemoveCurrent(); 235 timeout_queue_.RemoveCurrent();
238 } 236 }
239 } 237 }
240 } 238 }
241 239
242 240
243 void EventHandlerImplementation::Poll(uword args) { 241 void EventHandlerImplementation::Poll(uword args) {
244 EventHandler* handler = reinterpret_cast<EventHandler*>(args); 242 EventHandler* handler = reinterpret_cast<EventHandler*>(args);
245 EventHandlerImplementation* handler_impl = &handler->delegate_; 243 EventHandlerImplementation* handler_impl = &handler->delegate_;
246 ASSERT(handler_impl != NULL); 244 ASSERT(handler_impl != NULL);
247 245
248 while (!handler_impl->shutdown_) { 246 while (!handler_impl->shutdown_) {
249 int64_t millis = handler_impl->GetTimeout(); 247 int64_t millis = handler_impl->GetTimeout();
250 ASSERT((millis == kInfinityTimeout) || (millis >= 0)); 248 ASSERT((millis == kInfinityTimeout) || (millis >= 0));
251 mx_time_t timeout = 249 mx_time_t timeout =
252 millis * kMicrosecondsPerMillisecond * kNanosecondsPerMicrosecond; 250 millis * kMicrosecondsPerMillisecond * kNanosecondsPerMicrosecond;
253 const MagentaWaitManyInfo& info = handler_impl->info(); 251 const MagentaWaitManyInfo& info = handler_impl->info();
254 LOG_INFO("mx_handle_wait_many(%p, %ld, %lld)\n", 252 LOG_INFO("mx_handle_wait_many(%p, %ld, %lld)\n", info.items(), info.size(),
255 info.items(), info.size(), timeout); 253 timeout);
256 mx_status_t status = mx_handle_wait_many( 254 mx_status_t status =
257 info.items(), 255 mx_handle_wait_many(info.items(), info.size(), timeout);
258 info.size(),
259 timeout);
260 if ((status != NO_ERROR) && (status != ERR_TIMED_OUT)) { 256 if ((status != NO_ERROR) && (status != ERR_TIMED_OUT)) {
261 FATAL1("mx_handle_wait_many failed: %s\n", mx_status_get_string(status)); 257 FATAL1("mx_handle_wait_many failed: %s\n", mx_status_get_string(status));
262 } else { 258 } else {
263 LOG_INFO("mx_handle_wait_many returned: %ld\n", status); 259 LOG_INFO("mx_handle_wait_many returned: %ld\n", status);
264 handler_impl->HandleTimeout(); 260 handler_impl->HandleTimeout();
265 handler_impl->HandleEvents(); 261 handler_impl->HandleEvents();
266 } 262 }
267 } 263 }
268 handler->NotifyShutdownDone(); 264 handler->NotifyShutdownDone();
269 LOG_INFO("EventHandlerImplementation notifying about shutdown\n"); 265 LOG_INFO("EventHandlerImplementation notifying about shutdown\n");
(...skipping 19 matching lines...) Expand all
289 int64_t data) { 285 int64_t data) {
290 WakeupHandler(id, dart_port, data); 286 WakeupHandler(id, dart_port, data);
291 } 287 }
292 288
293 } // namespace bin 289 } // namespace bin
294 } // namespace dart 290 } // namespace dart
295 291
296 #endif // defined(TARGET_OS_FUCHSIA) 292 #endif // defined(TARGET_OS_FUCHSIA)
297 293
298 #endif // !defined(DART_IO_DISABLED) 294 #endif // !defined(DART_IO_DISABLED)
OLDNEW
« no previous file with comments | « runtime/bin/eventhandler_fuchsia.h ('k') | runtime/bin/eventhandler_linux.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698