use of org.dartlang.vm.service.element.Sentinel in project flutter-intellij by flutter.
the class HeapMonitor method collectMemoryUsage.
private void collectMemoryUsage() {
final List<IsolateRef> isolateRefs = vmServiceWrapper.getExistingIsolates();
if (isolateRefs.isEmpty()) {
return;
}
final List<MemoryUsage> memoryUsage = new ArrayList<>();
final CountDownLatch latch = new CountDownLatch(isolateRefs.size());
for (IsolateRef isolateRef : isolateRefs) {
vmServiceWrapper.getVmService().getMemoryUsage(isolateRef.getId(), new GetMemoryUsageConsumer() {
@Override
public void received(MemoryUsage usage) {
memoryUsage.add(usage);
latch.countDown();
}
@Override
public void received(Sentinel sentinel) {
latch.countDown();
}
@Override
public void onError(RPCError error) {
// TODO(devoncarew): Remove rpcInternalError once https://github.com/dart-lang/webdev/issues/781
// lands and rolls into flutter.
final int rpcInternalError = -32603;
final int rpcMethodNotFound = -32601;
// {"jsonrpc":"2.0","error":{"code":-32603,"message":"UnimplementedError..."}}
if (error.getCode() == rpcInternalError || error.getCode() == rpcMethodNotFound) {
handleMemoryApiNotSupported();
}
latch.countDown();
}
});
}
try {
latch.await();
} catch (InterruptedException ignored) {
}
if (pollingScheduler != null) {
heapListeners.forEach(listener -> listener.handleMemoryUsage(memoryUsage));
}
}
use of org.dartlang.vm.service.element.Sentinel in project flutter-intellij by flutter.
the class CanonicalBreakpoint method addBreakpoint.
public void addBreakpoint(@NotNull final String isolateId, @Nullable final XSourcePosition position, @NotNull final VmServiceConsumers.BreakpointsConsumer consumer) {
if (position == null || position.getFile().getFileType() != DartFileType.INSTANCE) {
consumer.sourcePositionNotApplicable();
return;
}
addRequest(() -> {
final int line = position.getLine() + 1;
final Collection<String> scriptUris = myDebugProcess.getUrisForFile(position.getFile());
final CanonicalBreakpoint canonicalBreakpoint = new CanonicalBreakpoint(position.getFile().getName(), position.getFile().getCanonicalPath(), line);
canonicalBreakpoints.add(canonicalBreakpoint);
final List<Breakpoint> breakpointResponses = new ArrayList<>();
final List<RPCError> errorResponses = new ArrayList<>();
for (String uri : scriptUris) {
myVmService.addBreakpointWithScriptUri(isolateId, uri, line, new AddBreakpointWithScriptUriConsumer() {
@Override
public void received(Breakpoint response) {
breakpointResponses.add(response);
breakpointNumbersToCanonicalMap.put(response.getBreakpointNumber(), canonicalBreakpoint);
checkDone();
}
@Override
public void received(Sentinel response) {
checkDone();
}
@Override
public void onError(RPCError error) {
errorResponses.add(error);
checkDone();
}
private void checkDone() {
if (scriptUris.size() == breakpointResponses.size() + errorResponses.size()) {
consumer.received(breakpointResponses, errorResponses);
}
}
});
}
});
}
Aggregations