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

Side by Side Diff: runtime/bin/eventhandler.h

Issue 1800863002: Cleanup in //runtime/bin (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 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
« no previous file with comments | « runtime/bin/embedded_dart_io.h ('k') | runtime/bin/eventhandler.cc » ('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) 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 #ifndef BIN_EVENTHANDLER_H_ 5 #ifndef BIN_EVENTHANDLER_H_
6 #define BIN_EVENTHANDLER_H_ 6 #define BIN_EVENTHANDLER_H_
7 7
8 #include "bin/builtin.h" 8 #include "bin/builtin.h"
9 #include "bin/dartutils.h" 9 #include "bin/dartutils.h"
10 #include "bin/isolate_data.h" 10 #include "bin/isolate_data.h"
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 101
102 void RemoveCurrent() { 102 void RemoveCurrent() {
103 UpdateTimeout(CurrentPort(), -1); 103 UpdateTimeout(CurrentPort(), -1);
104 } 104 }
105 105
106 void UpdateTimeout(Dart_Port port, int64_t timeout); 106 void UpdateTimeout(Dart_Port port, int64_t timeout);
107 107
108 private: 108 private:
109 Timeout* next_timeout_; 109 Timeout* next_timeout_;
110 Timeout* timeouts_; 110 Timeout* timeouts_;
111
112 DISALLOW_COPY_AND_ASSIGN(TimeoutQueue);
111 }; 113 };
112 114
113 115
114 class InterruptMessage { 116 class InterruptMessage {
115 public: 117 public:
116 intptr_t id; 118 intptr_t id;
117 Dart_Port dart_port; 119 Dart_Port dart_port;
118 int64_t data; 120 int64_t data;
119 }; 121 };
120 122
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 216
215 private: 217 private:
216 struct Entry { 218 struct Entry {
217 explicit Entry(const T& t) : t(t), next_(NULL), prev_(NULL) {} 219 explicit Entry(const T& t) : t(t), next_(NULL), prev_(NULL) {}
218 const T t; 220 const T t;
219 Entry* next_; 221 Entry* next_;
220 Entry* prev_; 222 Entry* prev_;
221 }; 223 };
222 224
223 Entry* head_; 225 Entry* head_;
226
227 DISALLOW_COPY_AND_ASSIGN(CircularLinkedList);
224 }; 228 };
225 229
226 230
227 class DescriptorInfoBase { 231 class DescriptorInfoBase {
228 public: 232 public:
229 explicit DescriptorInfoBase(intptr_t fd) : fd_(fd) { 233 explicit DescriptorInfoBase(intptr_t fd) : fd_(fd) {
230 ASSERT(fd_ != -1); 234 ASSERT(fd_ != -1);
231 } 235 }
232 236
233 virtual ~DescriptorInfoBase() {} 237 virtual ~DescriptorInfoBase() {}
(...skipping 27 matching lines...) Expand all
261 265
262 // Returns the union of event masks of all ports. If a port has a non-positive 266 // Returns the union of event masks of all ports. If a port has a non-positive
263 // token count it's mask is assumed to be 0. 267 // token count it's mask is assumed to be 0.
264 virtual intptr_t Mask() = 0; 268 virtual intptr_t Mask() = 0;
265 269
266 // Closes this descriptor. 270 // Closes this descriptor.
267 virtual void Close() = 0; 271 virtual void Close() = 0;
268 272
269 protected: 273 protected:
270 intptr_t fd_; 274 intptr_t fd_;
275
276 private:
277 DISALLOW_COPY_AND_ASSIGN(DescriptorInfoBase);
271 }; 278 };
272 279
273 280
274 // Describes a OS descriptor (e.g. file descriptor on linux or HANDLE on 281 // Describes a OS descriptor (e.g. file descriptor on linux or HANDLE on
275 // windows) which is connected to a single Dart_Port. 282 // windows) which is connected to a single Dart_Port.
276 // 283 //
277 // Subclasses of this class can be e.g. connected tcp sockets. 284 // Subclasses of this class can be e.g. connected tcp sockets.
278 template<typename DI> 285 template<typename DI>
279 class DescriptorInfoSingleMixin : public DI { 286 class DescriptorInfoSingleMixin : public DI {
280 private: 287 private:
281 static const int kTokenCount = 16; 288 static const int kTokenCount = 16;
282 289
283 public: 290 public:
284 explicit DescriptorInfoSingleMixin(intptr_t fd, bool disable_tokens) 291 DescriptorInfoSingleMixin(intptr_t fd, bool disable_tokens)
285 : DI(fd), port_(0), tokens_(kTokenCount), mask_(0), 292 : DI(fd), port_(0), tokens_(kTokenCount), mask_(0),
286 disable_tokens_(disable_tokens) {} 293 disable_tokens_(disable_tokens) {}
287 294
288 virtual ~DescriptorInfoSingleMixin() { } 295 virtual ~DescriptorInfoSingleMixin() { }
289 296
290 virtual bool IsListeningSocket() const { return false; } 297 virtual bool IsListeningSocket() const { return false; }
291 298
292 virtual void SetPortAndMask(Dart_Port port, intptr_t mask) { 299 virtual void SetPortAndMask(Dart_Port port, intptr_t mask) {
293 ASSERT(port_ == 0 || port == port_); 300 ASSERT(port_ == 0 || port == port_);
294 port_ = port; 301 port_ = port;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 356
350 virtual void Close() { 357 virtual void Close() {
351 DI::Close(); 358 DI::Close();
352 } 359 }
353 360
354 private: 361 private:
355 Dart_Port port_; 362 Dart_Port port_;
356 int tokens_; 363 int tokens_;
357 intptr_t mask_; 364 intptr_t mask_;
358 bool disable_tokens_; 365 bool disable_tokens_;
366
367 DISALLOW_COPY_AND_ASSIGN(DescriptorInfoSingleMixin);
359 }; 368 };
360 369
361 370
362 // Describes a OS descriptor (e.g. file descriptor on linux or HANDLE on 371 // Describes a OS descriptor (e.g. file descriptor on linux or HANDLE on
363 // windows) which is connected to multiple Dart_Port's. 372 // windows) which is connected to multiple Dart_Port's.
364 // 373 //
365 // Subclasses of this class can be e.g. a listening socket which multiple 374 // Subclasses of this class can be e.g. a listening socket which multiple
366 // isolates are listening on. 375 // isolates are listening on.
367 template<typename DI> 376 template<typename DI>
368 class DescriptorInfoMultipleMixin : public DI { 377 class DescriptorInfoMultipleMixin : public DI {
(...skipping 24 matching lines...) Expand all
393 402
394 struct PortEntry { 403 struct PortEntry {
395 Dart_Port dart_port; 404 Dart_Port dart_port;
396 intptr_t is_reading; 405 intptr_t is_reading;
397 intptr_t token_count; 406 intptr_t token_count;
398 407
399 bool IsReady() { return token_count > 0 && is_reading; } 408 bool IsReady() { return token_count > 0 && is_reading; }
400 }; 409 };
401 410
402 public: 411 public:
403 explicit DescriptorInfoMultipleMixin(intptr_t fd, bool disable_tokens) 412 DescriptorInfoMultipleMixin(intptr_t fd, bool disable_tokens)
404 : DI(fd), tokens_map_(&SamePortValue, kTokenCount), 413 : DI(fd), tokens_map_(&SamePortValue, kTokenCount),
405 disable_tokens_(disable_tokens) {} 414 disable_tokens_(disable_tokens) {}
406 415
407 virtual ~DescriptorInfoMultipleMixin() {} 416 virtual ~DescriptorInfoMultipleMixin() {}
408 417
409 virtual bool IsListeningSocket() const { return true; } 418 virtual bool IsListeningSocket() const { return true; }
410 419
411 virtual void SetPortAndMask(Dart_Port port, intptr_t mask) { 420 virtual void SetPortAndMask(Dart_Port port, intptr_t mask) {
412 HashMap::Entry* entry = tokens_map_.Lookup( 421 HashMap::Entry* entry = tokens_map_.Lookup(
413 GetHashmapKeyFromPort(port), GetHashmapHashFromPort(port), true); 422 GetHashmapKeyFromPort(port), GetHashmapHashFromPort(port), true);
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 entry = tokens_map_.Next(entry)) { 543 entry = tokens_map_.Next(entry)) {
535 PortEntry* pentry = reinterpret_cast<PortEntry*>(entry->value); 544 PortEntry* pentry = reinterpret_cast<PortEntry*>(entry->value);
536 DartUtils::PostInt32(pentry->dart_port, events); 545 DartUtils::PostInt32(pentry->dart_port, events);
537 546
538 // Update token count. 547 // Update token count.
539 bool was_ready = pentry->IsReady(); 548 bool was_ready = pentry->IsReady();
540 if (!disable_tokens_) { 549 if (!disable_tokens_) {
541 pentry->token_count--; 550 pentry->token_count--;
542 } 551 }
543 552
544 if (was_ready && pentry->token_count <= 0) { 553 if (was_ready && (pentry->token_count <= 0)) {
545 active_readers_.Remove(pentry); 554 active_readers_.Remove(pentry);
546 } 555 }
547 } 556 }
548 } 557 }
549 558
550 virtual void ReturnTokens(Dart_Port port, int count) { 559 virtual void ReturnTokens(Dart_Port port, int count) {
551 HashMap::Entry* entry = tokens_map_.Lookup( 560 HashMap::Entry* entry = tokens_map_.Lookup(
552 GetHashmapKeyFromPort(port), GetHashmapHashFromPort(port), false); 561 GetHashmapKeyFromPort(port), GetHashmapHashFromPort(port), false);
553 ASSERT(entry != NULL); 562 ASSERT(entry != NULL);
554 563
(...skipping 24 matching lines...) Expand all
579 // The [Dart_Port]s which are not paused (i.e. are interested in read events, 588 // The [Dart_Port]s which are not paused (i.e. are interested in read events,
580 // i.e. `mask == (1 << kInEvent)`) and we have enough tokens to communicate 589 // i.e. `mask == (1 << kInEvent)`) and we have enough tokens to communicate
581 // with them. 590 // with them.
582 CircularLinkedList<PortEntry *> active_readers_; 591 CircularLinkedList<PortEntry *> active_readers_;
583 592
584 // A convenience mapping: 593 // A convenience mapping:
585 // Dart_Port -> struct PortEntry { dart_port, mask, token_count } 594 // Dart_Port -> struct PortEntry { dart_port, mask, token_count }
586 HashMap tokens_map_; 595 HashMap tokens_map_;
587 596
588 bool disable_tokens_; 597 bool disable_tokens_;
598
599 DISALLOW_COPY_AND_ASSIGN(DescriptorInfoMultipleMixin);
589 }; 600 };
590 601
591
592 } // namespace bin 602 } // namespace bin
593 } // namespace dart 603 } // namespace dart
594 604
595 // The event handler delegation class is OS specific. 605 // The event handler delegation class is OS specific.
596 #if defined(TARGET_OS_ANDROID) 606 #if defined(TARGET_OS_ANDROID)
597 #include "bin/eventhandler_android.h" 607 #include "bin/eventhandler_android.h"
598 #elif defined(TARGET_OS_LINUX) 608 #elif defined(TARGET_OS_LINUX)
599 #include "bin/eventhandler_linux.h" 609 #include "bin/eventhandler_linux.h"
600 #elif defined(TARGET_OS_MACOS) 610 #elif defined(TARGET_OS_MACOS)
601 #include "bin/eventhandler_macos.h" 611 #include "bin/eventhandler_macos.h"
602 #elif defined(TARGET_OS_WINDOWS) 612 #elif defined(TARGET_OS_WINDOWS)
603 #include "bin/eventhandler_win.h" 613 #include "bin/eventhandler_win.h"
604 #else 614 #else
605 #error Unknown target os. 615 #error Unknown target os.
606 #endif 616 #endif
607 617
608 namespace dart { 618 namespace dart {
609 namespace bin { 619 namespace bin {
610 620
611 class EventHandler { 621 class EventHandler {
612 public: 622 public:
623 EventHandler() {}
613 void SendData(intptr_t id, Dart_Port dart_port, int64_t data) { 624 void SendData(intptr_t id, Dart_Port dart_port, int64_t data) {
614 delegate_.SendData(id, dart_port, data); 625 delegate_.SendData(id, dart_port, data);
615 } 626 }
616 627
617 /** 628 /**
618 * Signal to main thread that event handler is done. 629 * Signal to main thread that event handler is done.
619 */ 630 */
620 void NotifyShutdownDone(); 631 void NotifyShutdownDone();
621 632
622 /** 633 /**
623 * Start the event-handler. 634 * Start the event-handler.
624 */ 635 */
625 static void Start(); 636 static void Start();
626 637
627 /** 638 /**
628 * Stop the event-handler. It's expected that there will be no further calls 639 * Stop the event-handler. It's expected that there will be no further calls
629 * to SendData after a call to Stop. 640 * to SendData after a call to Stop.
630 */ 641 */
631 static void Stop(); 642 static void Stop();
632 643
633 static EventHandlerImplementation* delegate(); 644 static EventHandlerImplementation* delegate();
634 645
635 private: 646 private:
636 friend class EventHandlerImplementation; 647 friend class EventHandlerImplementation;
637 EventHandlerImplementation delegate_; 648 EventHandlerImplementation delegate_;
649
650 DISALLOW_COPY_AND_ASSIGN(EventHandler);
638 }; 651 };
639 652
640 } // namespace bin 653 } // namespace bin
641 } // namespace dart 654 } // namespace dart
642 655
643 #endif // BIN_EVENTHANDLER_H_ 656 #endif // BIN_EVENTHANDLER_H_
OLDNEW
« no previous file with comments | « runtime/bin/embedded_dart_io.h ('k') | runtime/bin/eventhandler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698