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

Side by Side Diff: sdk/lib/isolate/isolate.dart

Issue 142703010: Add pause methods to Isolate. (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 | « no previous file | tests/isolate/isolate.status » ('j') | tests/isolate/pause_test.dart » ('J')
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 /** 5 /**
6 * Concurrent programming using _isolates_: 6 * Concurrent programming using _isolates_:
7 * independent workers that are similar to threads 7 * independent workers that are similar to threads
8 * but don't share memory, 8 * but don't share memory,
9 * communicating only via messages. 9 * communicating only via messages.
10 * 10 *
(...skipping 11 matching lines...) Expand all
22 * Thrown when an isolate cannot be created. 22 * Thrown when an isolate cannot be created.
23 */ 23 */
24 class IsolateSpawnException implements Exception { 24 class IsolateSpawnException implements Exception {
25 // TODO(floitsch): clean up spawn exception. 25 // TODO(floitsch): clean up spawn exception.
26 const IsolateSpawnException(String this._s); 26 const IsolateSpawnException(String this._s);
27 String toString() => "IsolateSpawnException: '$_s'"; 27 String toString() => "IsolateSpawnException: '$_s'";
28 final String _s; 28 final String _s;
29 } 29 }
30 30
31 class Isolate { 31 class Isolate {
32 /**
33 * Control port used to send control messages to the isolate.
34 *
35 * This class provides helper functions that work by sending messages
36 * to the control port.
37 *
38 * The accepted messages of a control port are all lists containing
floitsch 2014/02/04 12:39:25 I would prefer not to expose the protocol just yet
Lasse Reichstein Nielsen 2014/02/04 14:02:29 I thought we were going to expose the control port
floitsch 2014/02/04 16:57:49 If we are certain that this is the protocol we wan
39 * a string identifying the request, and optionally a number of parameters.
40 *
41 * NOTICE: The formats of these messages are tentative.
42 *
43 * * Pause: `["pause", pauseCapability, resumeCapability]`.
44 * * Resume: `["resume", resumeCapability]`.
45 *
46 */
47 final SendPort controlPort;
48 final Capability pauseCapability;
32 49
33 final SendPort _controlPort; 50 Isolate._fromControlPort(this.controlPort, [this.pauseCapability]);
Lasse Reichstein Nielsen 2014/02/04 14:02:29 Should eventually be public.
34
35 Isolate._fromControlPort(SendPort controlPort)
36 : this._controlPort = controlPort;
37 51
38 /** 52 /**
39 * Creates and spawns an isolate that shares the same code as the current 53 * Creates and spawns an isolate that shares the same code as the current
40 * isolate. 54 * isolate.
41 * 55 *
42 * The argument [entryPoint] specifies the entry point of the spawned 56 * The argument [entryPoint] specifies the entry point of the spawned
43 * isolate. It must be a top-level function or a static method that 57 * isolate. It must be a top-level function or a static method that
44 * takes one argument - that is, one-parameter functions that can be 58 * takes one argument - that is, one-parameter functions that can be
45 * compile-time constant function values. 59 * compile-time constant function values.
46 * It is not allowed to pass the value of function expressions or an instance 60 * It is not allowed to pass the value of function expressions or an instance
(...skipping 22 matching lines...) Expand all
69 * * `main(args, message)` 83 * * `main(args, message)`
70 * 84 *
71 * When present, the parameter `args` is set to the provided [args] list. 85 * When present, the parameter `args` is set to the provided [args] list.
72 * When present, the parameter `message` is set to the initial [message]. 86 * When present, the parameter `message` is set to the initial [message].
73 * 87 *
74 * Returns a future that will complete with an [Isolate] instance if the 88 * Returns a future that will complete with an [Isolate] instance if the
75 * spawning succeeded. It will complete with an error otherwise. 89 * spawning succeeded. It will complete with an error otherwise.
76 */ 90 */
77 external static Future<Isolate> spawnUri( 91 external static Future<Isolate> spawnUri(
78 Uri uri, List<String> args, var message); 92 Uri uri, List<String> args, var message);
93
94
95 /**
96 * Requests the isolate to pause.
97 *
98 * The isolate should stop handling events by pausing its event queue.
99 * The request will eventually make the isolate stop doing anything.
100 * It will be handled before any other messages sent to the isolate from
101 * the current isolate, but no other guarantees are provided.
102 *
103 * If [resumeCapability] is provided, it is used to identity the pause,
104 * and must be used again to end the pause using [resume].
105 * Otherwise a new capability is created and returned.
106 *
107 * If an isolate is paused more than once using the same capabilty,
108 * only one resume with that capability is needed to end the pause.
109 *
110 * If an isolate is paused using more than one capability,
111 * they must all be individully ended before the isolate resumes.
112 *
113 * Returns the capability that must be used to resume end the pause.
114 *
115 * WARNING: This method is not handled on any platform yet.
116 */
117 Capability pause([Capability resumeCapability]) {
118 if (resumeCapability == null) resumeCapability = new Capability();
119 var message = new List(3)
120 ..[0] = "pause"
121 ..[1] = pauseCapability
122 ..[2] = resumeCapability;
123 controlPort.send(message);
124 return resumeCapability;
125 }
126
127 /**
128 * Resumes a paused isolate.
129 *
130 * Sends a message to an isolate requresting that it ends a pause
floitsch 2014/02/04 12:39:25 requesting
131 * that was requested using the [resumeCapability].
132 * The resume will happen eventually, but not necessarily right away.
floitsch 2014/02/04 12:39:25 Remove that line.
133 *
134 * The capability must be one returned by a call to [pause] on this
135 * isolate, otherwise the resume call does nothing.
136 *
137 * WARNING: This method is not handled on any platform yet.
138 */
139 void resume(Capability resumeCapability) {
140 var message = new List(2)
141 ..[0] = "resume"
142 ..[1] = resumeCapability;
143 controlPort.send(message);
144 }
79 } 145 }
80 146
81 /** 147 /**
82 * Sends messages to its [ReceivePort]s. 148 * Sends messages to its [ReceivePort]s.
83 * 149 *
84 * [SendPort]s are created from [ReceivePort]s. Any message sent through 150 * [SendPort]s are created from [ReceivePort]s. Any message sent through
85 * a [SendPort] is delivered to its corresponding [ReceivePort]. There might be 151 * a [SendPort] is delivered to its corresponding [ReceivePort]. There might be
86 * many [SendPort]s for the same [ReceivePort]. 152 * many [SendPort]s for the same [ReceivePort].
87 * 153 *
88 * [SendPort]s can be transmitted to other isolates. 154 * [SendPort]s can be transmitted to other isolates.
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 const _IsolateUnhandledException(this.message, this.source, this.stackTrace); 300 const _IsolateUnhandledException(this.message, this.source, this.stackTrace);
235 301
236 String toString() { 302 String toString() {
237 return 'IsolateUnhandledException: exception while handling message: ' 303 return 'IsolateUnhandledException: exception while handling message: '
238 '${message} \n ' 304 '${message} \n '
239 '${source.toString().replaceAll("\n", "\n ")}\n' 305 '${source.toString().replaceAll("\n", "\n ")}\n'
240 'original stack trace:\n ' 306 'original stack trace:\n '
241 '${stackTrace.toString().replaceAll("\n","\n ")}'; 307 '${stackTrace.toString().replaceAll("\n","\n ")}';
242 } 308 }
243 } 309 }
OLDNEW
« no previous file with comments | « no previous file | tests/isolate/isolate.status » ('j') | tests/isolate/pause_test.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698