Skip to content

Commit

Permalink
Don't check for debugDidSendFirstFrameEvent when adding service exten…
Browse files Browse the repository at this point in the history
…sions for Dart VM apps. (#1670)

* Don't check for debugDidSendFirstFrameEvent when adding service extensions for Dart VM apps.
  • Loading branch information
kenzieschmoll authored Feb 26, 2020
1 parent 378dec5 commit 11da325
Showing 1 changed file with 40 additions and 32 deletions.
72 changes: 40 additions & 32 deletions packages/devtools_app/lib/src/service_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ class ServiceConnectionManager {
serviceAvailable.complete();

connectedApp = ConnectedApp();
serviceExtensionManager.connectedApp = connectedApp;

unawaited(onClosed.then((_) => vmServiceClosed()));

Expand Down Expand Up @@ -205,6 +206,7 @@ class ServiceConnectionManager {
vm = null;
sdkVersion = null;
connectedApp = null;
serviceExtensionManager.connectedApp = null;

_stateController.add(false);
_connectionClosedController.add(null);
Expand Down Expand Up @@ -446,6 +448,8 @@ class ServiceExtensionManager {

var extensionStatesUpdated = Completer<void>();

ConnectedApp connectedApp;

Future<void> _handleExtensionEvent(Event event) async {
switch (event.extensionKind) {
case 'Flutter.FirstFrame':
Expand Down Expand Up @@ -513,42 +517,46 @@ class ServiceExtensionManager {
}
final Isolate isolate = await _service.getIsolate(isolateRef.id);
if (isolate.extensionRPCs != null) {
for (String extension in isolate.extensionRPCs) {
await _maybeAddServiceExtension(extension);
}
if (await connectedApp.isAnyFlutterApp) {
for (String extension in isolate.extensionRPCs) {
await _maybeAddServiceExtension(extension);
}

if (_pendingServiceExtensions.isEmpty) {
extensionStatesUpdated.complete();
}
if (_pendingServiceExtensions.isEmpty) {
extensionStatesUpdated.complete();
}

if (!_firstFrameEventReceived) {
bool didSendFirstFrameEvent = false;
if (isServiceExtensionAvailable(extensions.didSendFirstFrameEvent)) {
final value = await _service.callServiceExtension(
extensions.didSendFirstFrameEvent,
isolateId: _isolateManager.selectedIsolate.id,
);
didSendFirstFrameEvent =
value != null && value.json['enabled'] == 'true';
} else {
final EvalOnDartLibrary flutterLibrary = EvalOnDartLibrary(
[
'package:flutter/src/widgets/binding.dart',
'package:flutter_web/src/widgets/binding.dart',
],
_service,
);
final InstanceRef value = await flutterLibrary.eval(
'WidgetsBinding.instance.debugDidSendFirstFrameEvent',
isAlive: null,
);
if (!_firstFrameEventReceived) {
bool didSendFirstFrameEvent = false;
if (isServiceExtensionAvailable(extensions.didSendFirstFrameEvent)) {
final value = await _service.callServiceExtension(
extensions.didSendFirstFrameEvent,
isolateId: _isolateManager.selectedIsolate.id,
);
didSendFirstFrameEvent = value?.json['enabled'] == 'true';
} else {
final EvalOnDartLibrary flutterLibrary = EvalOnDartLibrary(
[
'package:flutter/src/widgets/binding.dart',
],
_service,
);
final InstanceRef value = await flutterLibrary.eval(
'WidgetsBinding.instance.debugDidSendFirstFrameEvent',
isAlive: null,
);

didSendFirstFrameEvent =
value != null && value.valueAsString == 'true';
}

didSendFirstFrameEvent =
value != null && value.valueAsString == 'true';
if (didSendFirstFrameEvent) {
await _onFrameEventReceived();
}
}

if (didSendFirstFrameEvent) {
await _onFrameEventReceived();
} else {
for (String extension in isolate.extensionRPCs) {
await _addServiceExtension(extension);
}
}
}
Expand Down

0 comments on commit 11da325

Please sign in to comment.