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

Side by Side Diff: mojo/public/dart/src/handle.dart

Issue 1132063007: Rationalize Dart mojo and sky package structure (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 7 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 | « mojo/public/dart/src/event_stream.dart ('k') | mojo/public/dart/src/handle_watcher.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 part of core;
6
7 class _HandleCreationRecord {
8 final MojoHandle handle;
9 final StackTrace stack;
10 _HandleCreationRecord(this.handle, this.stack);
11 }
12
13 class MojoHandle {
14 static const int INVALID = 0;
15 static const int DEADLINE_INDEFINITE = -1;
16
17 int _h;
18 int get h => _h;
19
20 MojoHandle(this._h) {
21 assert(_addUnclosedHandle(this));
22 }
23
24 MojoHandle._internal(this._h);
25
26 MojoHandle.invalid() : this._internal(INVALID);
27
28 MojoResult close() {
29 assert(_removeUnclosedHandle(this));
30 int result = MojoHandleNatives.close(_h);
31 _h = INVALID;
32 return new MojoResult(result);
33 }
34
35 MojoHandle pass() {
36 assert(_removeUnclosedHandle(this));
37 return this;
38 }
39
40 MojoWaitResult wait(int signals, int deadline) {
41 List result = MojoHandleNatives.wait(h, signals, deadline);
42 var state = result[1] != null
43 ? new MojoHandleSignalsState(result[1][0], result[1][1])
44 : null;
45 return new MojoWaitResult(new MojoResult(result[0]), state);
46 }
47
48 bool _ready(MojoHandleSignals signal) {
49 MojoWaitResult mwr = wait(signal.value, 0);
50 switch (mwr.result) {
51 case MojoResult.OK:
52 return true;
53 case MojoResult.DEADLINE_EXCEEDED:
54 case MojoResult.CANCELLED:
55 case MojoResult.INVALID_ARGUMENT:
56 case MojoResult.FAILED_PRECONDITION:
57 return false;
58 default:
59 // Should be unreachable.
60 throw "Unexpected result $mwr for wait on $h";
61 }
62 }
63
64 void _set(int value) {
65 _h = value;
66 }
67
68 bool get readyRead => _ready(MojoHandleSignals.PEER_CLOSED_READABLE);
69 bool get readyWrite => _ready(MojoHandleSignals.WRITABLE);
70 bool get isValid => (_h != INVALID);
71
72 String toString() {
73 if (!isValid) {
74 return "MojoHandle(INVALID)";
75 }
76 var mwr = wait(MojoHandleSignals.kAll, 0);
77 return "MojoHandle(h: $h, status: $mwr)";
78 }
79
80 bool operator ==(MojoHandle other) {
81 return _h == other._h;
82 }
83
84 static MojoWaitManyResult waitMany(
85 List<int> handles, List<int> signals, int deadline) {
86 List result = MojoHandleNatives.waitMany(handles, signals, deadline);
87 List states = result[2] != null
88 ? result[2].map((l) => new MojoHandleSignalsState(l[0], l[1])).toList()
89 : null;
90 return new MojoWaitManyResult(new MojoResult(result[0]), result[1], states);
91 }
92
93 static MojoResult register(MojoEventStream eventStream) {
94 return new MojoResult(
95 MojoHandleNatives.register(eventStream, eventStream._handle.h));
96 }
97
98 static HashMap<int, _HandleCreationRecord> _unclosedHandles = new HashMap();
99
100 // _addUnclosedHandle(), _removeUnclosedHandle(), and dumpLeakedHandles()
101 // should only be used inside of assert() statements.
102 static bool _addUnclosedHandle(MojoHandle handle) {
103 var stack;
104 try {
105 assert(false);
106 } catch (_, s) {
107 stack = s;
108 }
109
110 var handleCreate = new _HandleCreationRecord(handle, stack);
111 _unclosedHandles[handle.h] = handleCreate;
112 return true;
113 }
114
115 static bool _removeUnclosedHandle(MojoHandle handle) {
116 _unclosedHandles.remove(handle._h);
117 return true;
118 }
119
120 static bool reportLeakedHandles() {
121 var noleaks = true;
122 for (var handle in MojoHandle._unclosedHandles.keys) {
123 var handleCreation = MojoHandle._unclosedHandles[handle];
124 if (handleCreation != null) {
125 print("HANDLE LEAK: handle: $handle, created at:");
126 print("${handleCreation.stack}");
127 noleaks = false;
128 }
129 }
130 return noleaks;
131 }
132 }
OLDNEW
« no previous file with comments | « mojo/public/dart/src/event_stream.dart ('k') | mojo/public/dart/src/handle_watcher.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698