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

Side by Side Diff: runtime/bin/file_patch.dart

Issue 169383003: Make event-handlers edge-triggered and move socket-state to Dart. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 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
« no previous file with comments | « runtime/bin/eventhandler_win.cc ('k') | runtime/bin/file_system_watcher_linux.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 patch class _File { 5 patch class _File {
6 /* patch */ static _exists(String path) native "File_Exists"; 6 /* patch */ static _exists(String path) native "File_Exists";
7 /* patch */ static _create(String path) native "File_Create"; 7 /* patch */ static _create(String path) native "File_Create";
8 /* patch */ static _createLink(String path, String target) 8 /* patch */ static _createLink(String path, String target)
9 native "File_CreateLink"; 9 native "File_CreateLink";
10 /* patch */ static _linkTarget(String path) native "File_LinkTarget"; 10 /* patch */ static _linkTarget(String path) native "File_LinkTarget";
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 // Called when a new path is being watched. 143 // Called when a new path is being watched.
144 Stream _pathWatched() {} 144 Stream _pathWatched() {}
145 // Called when a path is no longer being watched. 145 // Called when a path is no longer being watched.
146 void _donePathWatched() {} 146 void _donePathWatched() {}
147 147
148 static _WatcherPath _pathFromPathId(int pathId) { 148 static _WatcherPath _pathFromPathId(int pathId) {
149 return _idMap[pathId]; 149 return _idMap[pathId];
150 } 150 }
151 151
152 static Stream _listenOnSocket(int socketId, int id, int pathId) { 152 static Stream _listenOnSocket(int socketId, int id, int pathId) {
153 var socket = new _RawSocket(new _NativeSocket.watch(socketId)); 153 var native = new _NativeSocket.watch(socketId);
154 var socket = new _RawSocket(native);
154 return socket.expand((event) { 155 return socket.expand((event) {
155 var stops = []; 156 var stops = [];
156 var events = []; 157 var events = [];
157 var pair = {}; 158 var pair = {};
158 if (event == RawSocketEvent.READ) { 159 if (event == RawSocketEvent.READ) {
159 String getPath(event) { 160 String getPath(event) {
160 var path = _pathFromPathId(event[4]).path; 161 var path = _pathFromPathId(event[4]).path;
161 if (event[2] != null && event[2].isNotEmpty) { 162 if (event[2] != null && event[2].isNotEmpty) {
162 path += Platform.pathSeparator; 163 path += Platform.pathSeparator;
163 path += event[2]; 164 path += event[2];
(...skipping 11 matching lines...) Expand all
175 if ((event.type & _pathFromPathId(id).events) == 0) return; 176 if ((event.type & _pathFromPathId(id).events) == 0) return;
176 events.add([id, event]); 177 events.add([id, event]);
177 } 178 }
178 void rewriteMove(event, isDir) { 179 void rewriteMove(event, isDir) {
179 if (event[3]) { 180 if (event[3]) {
180 add(event[4], new FileSystemCreateEvent._(getPath(event), isDir)); 181 add(event[4], new FileSystemCreateEvent._(getPath(event), isDir));
181 } else { 182 } else {
182 add(event[4], new FileSystemDeleteEvent._(getPath(event), isDir)); 183 add(event[4], new FileSystemDeleteEvent._(getPath(event), isDir));
183 } 184 }
184 } 185 }
185 while (socket.available() > 0) { 186 int eventCount;
187 do {
188 eventCount = 0;
186 for (var event in _readEvents(id, pathId)) { 189 for (var event in _readEvents(id, pathId)) {
187 if (event == null) continue; 190 if (event == null) continue;
191 eventCount++;
188 int pathId = event[4]; 192 int pathId = event[4];
189 bool isDir = getIsDir(event); 193 bool isDir = getIsDir(event);
190 var path = getPath(event); 194 var path = getPath(event);
191 if ((event[0] & FileSystemEvent.CREATE) != 0) { 195 if ((event[0] & FileSystemEvent.CREATE) != 0) {
192 add(event[4], new FileSystemCreateEvent._(path, isDir)); 196 add(event[4], new FileSystemCreateEvent._(path, isDir));
193 } 197 }
194 if ((event[0] & FileSystemEvent.MODIFY) != 0) { 198 if ((event[0] & FileSystemEvent.MODIFY) != 0) {
195 add(event[4], new FileSystemModifyEvent._(path, isDir, true)); 199 add(event[4], new FileSystemModifyEvent._(path, isDir, true));
196 } 200 }
197 if ((event[0] & FileSystemEvent._MODIFY_ATTRIBUTES) != 0) { 201 if ((event[0] & FileSystemEvent._MODIFY_ATTRIBUTES) != 0) {
(...skipping 17 matching lines...) Expand all
215 } 219 }
216 if ((event[0] & FileSystemEvent.DELETE) != 0) { 220 if ((event[0] & FileSystemEvent.DELETE) != 0) {
217 add(event[4], new FileSystemDeleteEvent._(path, isDir)); 221 add(event[4], new FileSystemDeleteEvent._(path, isDir));
218 } 222 }
219 if ((event[0] & FileSystemEvent._DELETE_SELF) != 0) { 223 if ((event[0] & FileSystemEvent._DELETE_SELF) != 0) {
220 add(event[4], new FileSystemDeleteEvent._(path, isDir)); 224 add(event[4], new FileSystemDeleteEvent._(path, isDir));
221 // Signal done event. 225 // Signal done event.
222 stops.add([event[4], null]); 226 stops.add([event[4], null]);
223 } 227 }
224 } 228 }
225 } 229 } while (eventCount > 0);
230 // Be sure to clear this manually, as the sockets are not read through
231 // the _NativeSocket interface.
232 native.available = 0;
226 for (var map in pair.values) { 233 for (var map in pair.values) {
227 for (var event in map.values) { 234 for (var event in map.values) {
228 rewriteMove(event, getIsDir(event)); 235 rewriteMove(event, getIsDir(event));
229 } 236 }
230 } 237 }
231 } else if (event == RawSocketEvent.CLOSED) { 238 } else if (event == RawSocketEvent.CLOSED) {
232 } else if (event == RawSocketEvent.READ_CLOSED) { 239 } else if (event == RawSocketEvent.READ_CLOSED) {
233 } else { 240 } else {
234 assert(false); 241 assert(false);
235 } 242 }
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 void _pathWatchedEnd() { 358 void _pathWatchedEnd() {
352 _subscription.cancel(); 359 _subscription.cancel();
353 _controller.close(); 360 _controller.close();
354 } 361 }
355 } 362 }
356 363
357 364
358 Uint8List _makeUint8ListView(Uint8List source, int offsetInBytes, int length) { 365 Uint8List _makeUint8ListView(Uint8List source, int offsetInBytes, int length) {
359 return new Uint8List.view(source.buffer, offsetInBytes, length); 366 return new Uint8List.view(source.buffer, offsetInBytes, length);
360 } 367 }
OLDNEW
« no previous file with comments | « runtime/bin/eventhandler_win.cc ('k') | runtime/bin/file_system_watcher_linux.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698