Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 part of dart.io; | 5 part of dart.io; |
| 6 | 6 |
| 7 const String TCP_STRING = 'TCP'; | |
| 8 const String UDP_STRING = 'UDP'; | |
| 9 | |
| 10 | |
| 11 abstract class _IOResourceInfo { | 7 abstract class _IOResourceInfo { |
| 12 final String type; | 8 final String type; |
| 13 final int id; | 9 final int id; |
| 14 String get name; | 10 String get name; |
| 15 static int _count = 0; | 11 static int _count = 0; |
| 16 | 12 |
| 17 _IOResourceInfo(this.type) : id = _IOResourceInfo.getNextID(); | 13 _IOResourceInfo(this.type) : id = _IOResourceInfo.getNextID(); |
| 18 | 14 |
| 19 String toJSON(); | 15 String toJSON(); |
| 20 | 16 |
| 21 /// Get the full set of values for a specific implementation. This is normally | 17 /// Get the full set of values for a specific implementation. This is normally |
| 22 /// looked up based on an id from a referenceValueMap. | 18 /// looked up based on an id from a referenceValueMap. |
| 23 Map<String, String> get fullValueMap; | 19 Map<String, String> get fullValueMap; |
| 24 | 20 |
| 25 /// The reference map, used to return a list of values, e.g., getting | 21 /// The reference map, used to return a list of values, e.g., getting |
| 26 /// all open sockets. The structure of this is shared among all subclasses. | 22 /// all open sockets. The structure of this is shared among all subclasses. |
| 27 Map<String, String> get referenceValueMap => | 23 Map<String, String> get referenceValueMap => |
| 28 { | 24 { |
| 29 // The type for a reference object is prefixed with @ in observatory. | 25 // The type for a reference object is prefixed with @ in observatory. |
| 30 'type': '@$type', | 26 'type': '@$type', |
| 31 'id': id, | 27 'id': id, |
| 32 'name': name, | 28 'name': name, |
| 33 }; | 29 }; |
| 34 | 30 |
| 35 static int getNextID() => _count++; | 31 static int getNextID() => _count++; |
| 36 } | 32 } |
| 37 | 33 |
| 34 // TODO(ricow): Move stopwatch into this class and use it for both files | |
|
Ivan Posva
2015/09/08 18:06:36
Can you please explain what you mean by moving sto
ricow1
2015/09/08 18:33:39
Correct. You can see the follow up here: https://c
| |
| 35 // and sockets (by using setters on totalRead/totalWritten). Also, consider | |
| 36 // setting readCount and writeCount in those setters. | |
| 38 abstract class _ReadWriteResourceInfo extends _IOResourceInfo { | 37 abstract class _ReadWriteResourceInfo extends _IOResourceInfo { |
| 39 int totalRead; | 38 int totalRead; |
| 40 int totalWritten; | 39 int totalWritten; |
| 41 int readCount; | 40 int readCount; |
| 42 int writeCount; | 41 int writeCount; |
| 43 double lastRead; | 42 double lastRead; |
| 44 double lastWrite; | 43 double lastWrite; |
| 45 | 44 |
| 46 _ReadWriteResourceInfo(String type) : | 45 _ReadWriteResourceInfo(String type) : |
| 47 totalRead = 0, | 46 totalRead = 0, |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 63 'write_count': writeCount, | 62 'write_count': writeCount, |
| 64 'last_read': lastRead, | 63 'last_read': lastRead, |
| 65 'last_write': lastWrite | 64 'last_write': lastWrite |
| 66 }; | 65 }; |
| 67 | 66 |
| 68 String toJSON() { | 67 String toJSON() { |
| 69 return JSON.encode(fullValueMap); | 68 return JSON.encode(fullValueMap); |
| 70 } | 69 } |
| 71 } | 70 } |
| 72 | 71 |
| 72 class _FileResourceInfo extends _ReadWriteResourceInfo { | |
| 73 static const String TYPE = '_file'; | |
| 74 | |
| 75 final file; | |
| 76 | |
| 77 static Map<int, _FileResourceInfo> openFiles = | |
| 78 new Map<int, _FileResourceInfo>(); | |
| 79 | |
| 80 _FileResourceInfo(this.file) : super(TYPE) { | |
| 81 FileOpened(this); | |
| 82 } | |
| 83 | |
| 84 static FileOpened(_FileResourceInfo info) { | |
| 85 assert(!openFiles.containsKey(info.id)); | |
| 86 openFiles[info.id] = info; | |
| 87 } | |
| 88 | |
| 89 static FileClosed(_FileResourceInfo info) { | |
| 90 assert(openFiles.containsKey(info.id)); | |
| 91 openFiles.remove(info.id); | |
| 92 } | |
| 93 | |
| 94 static Iterable<Map<String, String>> getOpenFilesList() { | |
| 95 return new List.from(openFiles.values.map((e) => e.referenceValueMap)); | |
| 96 } | |
| 97 | |
| 98 static Future<ServiceExtensionResponse> getOpenFiles(function, params) { | |
| 99 assert(function == '__getOpenFiles'); | |
| 100 var data = {'type': '_openfiles', 'data': getOpenFilesList()}; | |
| 101 var json = JSON.encode(data); | |
| 102 return new Future.value(new ServiceExtensionResponse.result(json)); | |
| 103 } | |
| 104 | |
| 105 Map<String, String> getFileInfoMap() { | |
| 106 var result = fullValueMap; | |
| 107 return result; | |
| 108 } | |
| 109 | |
| 110 static Future<ServiceExtensionResponse> getFileInfoMapByID(function, params) { | |
| 111 assert(params.containsKey('id')); | |
| 112 var id = int.parse(params['id']); | |
| 113 var result = | |
| 114 openFiles.containsKey(id) ? openFiles[id].getFileInfoMap() : {}; | |
| 115 var json = JSON.encode(result); | |
| 116 return new Future.value(new ServiceExtensionResponse.result(json)); | |
| 117 } | |
| 118 | |
| 119 String get name { | |
| 120 return '${file.path}'; | |
| 121 } | |
| 122 } | |
| 123 | |
| 73 class _SocketResourceInfo extends _ReadWriteResourceInfo { | 124 class _SocketResourceInfo extends _ReadWriteResourceInfo { |
| 125 static const String TCP_STRING = 'TCP'; | |
| 126 static const String UDP_STRING = 'UDP'; | |
| 127 static const String TYPE = '_socket'; | |
| 128 | |
| 74 final socket; | 129 final socket; |
| 75 | 130 |
| 76 static Map<int, _SocketResourceInfo> openSockets = | 131 static Map<int, _SocketResourceInfo> openSockets = |
| 77 new Map<int, _SocketResourceInfo>(); | 132 new Map<int, _SocketResourceInfo>(); |
| 78 | 133 |
| 79 _SocketResourceInfo(this.socket) : super('_socket') { | 134 _SocketResourceInfo(this.socket) : super(TYPE) { |
| 80 SocketOpened(this); | 135 SocketOpened(this); |
| 81 } | 136 } |
| 82 | 137 |
| 83 String get name { | 138 String get name { |
| 84 if (socket.isListening) { | 139 if (socket.isListening) { |
| 85 return 'listening:${socket.address.host}:${socket.port}'; | 140 return 'listening:${socket.address.host}:${socket.port}'; |
| 86 } | 141 } |
| 87 var remote = ''; | 142 var remote = ''; |
| 88 try { | 143 try { |
| 89 var remoteHost = socket.remoteAddress.host; | 144 var remoteHost = socket.remoteAddress.host; |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 141 assert(!openSockets.containsKey(info.id)); | 196 assert(!openSockets.containsKey(info.id)); |
| 142 openSockets[info.id] = info; | 197 openSockets[info.id] = info; |
| 143 } | 198 } |
| 144 | 199 |
| 145 static SocketClosed(_SocketResourceInfo info) { | 200 static SocketClosed(_SocketResourceInfo info) { |
| 146 assert(openSockets.containsKey(info.id)); | 201 assert(openSockets.containsKey(info.id)); |
| 147 openSockets.remove(info.id); | 202 openSockets.remove(info.id); |
| 148 } | 203 } |
| 149 | 204 |
| 150 } | 205 } |
| OLD | NEW |