diff options
author | Joe Baker-Malone <jbakermalone@google.com> | 2022-01-12 17:56:29 -0800 |
---|---|---|
committer | TreeHugger Robot <treehugger-gerrit@google.com> | 2022-01-19 20:54:48 +0000 |
commit | 655f41c7082a33d9079b8fa12643880f2c006ae8 (patch) | |
tree | 75571633db2a3e3ee2749b974e8c2efd55b6e0d7 /layout-inspector/src | |
parent | 0e5ab46320029961817c99485be8bbb52f8a62e6 (diff) | |
download | idea-655f41c7082a33d9079b8fa12643880f2c006ae8.tar.gz |
Ping device and connect explicitly for metrics
- Ping the device we're trying to connect to over ADB to ensure the
connection is working. Update the current progress state after, so in
the metrics we can know that failed connections passed that point.
- Establish the app inspection connection explicitly, and then update
the progress state after. Previously this was done incidentally within
the compose inspector library version check.
Test: added/updated tests
Fixes: 213492618
Change-Id: Ic6e717829f845ea915f9bca04d82899f2bb98052
Diffstat (limited to 'layout-inspector/src')
4 files changed, 23 insertions, 4 deletions
diff --git a/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/AbstractInspectorClient.kt b/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/AbstractInspectorClient.kt index f68059e5a8c..b3740644305 100644 --- a/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/AbstractInspectorClient.kt +++ b/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/AbstractInspectorClient.kt @@ -18,6 +18,8 @@ package com.android.tools.idea.layoutinspector.pipeline import com.android.tools.idea.appinspection.inspector.api.process.ProcessDescriptor import com.android.tools.idea.concurrency.addCallback import com.android.tools.idea.flags.StudioFlags +import com.android.tools.idea.layoutinspector.pipeline.adb.AdbUtils +import com.android.tools.idea.layoutinspector.pipeline.adb.executeShellCommand import com.android.tools.idea.util.ListenerCollection import com.google.common.util.concurrent.FutureCallback import com.google.common.util.concurrent.ListenableFuture @@ -25,6 +27,7 @@ import com.google.common.util.concurrent.MoreExecutors import com.google.wireless.android.sdk.stats.DynamicLayoutInspectorErrorInfo import com.intellij.openapi.Disposable import com.intellij.openapi.diagnostic.Logger +import com.intellij.openapi.project.Project import com.intellij.openapi.util.Disposer import org.jetbrains.annotations.TestOnly @@ -92,10 +95,20 @@ abstract class AbstractInspectorClient( treeEventCallbacks.forEach { callback -> callback(event) } } - final override fun connect() { + final override fun connect(project: Project) { launchMonitor.start(this) assert(state == InspectorClient.State.INITIALIZED) state = InspectorClient.State.CONNECTING + + // Test that we can actually contact the device via ADB, and fail fast if we can't. + val adb = AdbUtils.getAdbFuture(project).get() ?: return + if (adb.executeShellCommand(process.device, "echo ok") != "ok") { + state = InspectorClient.State.DISCONNECTED + return + } + launchMonitor.updateProgress(DynamicLayoutInspectorErrorInfo.AttachErrorState.ADB_PING) + + doConnect().addCallback(MoreExecutors.directExecutor(), object : FutureCallback<Nothing> { override fun onSuccess(value: Nothing?) { state = InspectorClient.State.CONNECTED diff --git a/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/InspectorClient.kt b/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/InspectorClient.kt index 9fff5569a57..ce19845ba06 100644 --- a/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/InspectorClient.kt +++ b/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/InspectorClient.kt @@ -23,6 +23,7 @@ import com.android.tools.idea.layoutinspector.properties.PropertiesProvider import com.android.tools.idea.layoutinspector.resource.ResourceLookup import com.google.wireless.android.sdk.stats.DynamicLayoutInspectorErrorInfo import com.intellij.openapi.Disposable +import com.intellij.openapi.project.Project import java.nio.file.Path import java.util.EnumSet import java.util.concurrent.CompletableFuture @@ -95,7 +96,7 @@ interface InspectorClient: Disposable { * * You are only supposed to call this once. */ - fun connect() + fun connect(project: Project) fun updateProgress(state: DynamicLayoutInspectorErrorInfo.AttachErrorState) @@ -200,7 +201,7 @@ interface InspectorClient: Disposable { } object DisconnectedClient : InspectorClient { - override fun connect() {} + override fun connect(project: Project) {} override fun updateProgress(state: DynamicLayoutInspectorErrorInfo.AttachErrorState) {} override fun disconnect() {} diff --git a/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/InspectorClientLauncher.kt b/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/InspectorClientLauncher.kt index ff251b2a360..6af6e854d18 100644 --- a/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/InspectorClientLauncher.kt +++ b/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/InspectorClientLauncher.kt @@ -242,7 +242,7 @@ class InspectorClientLauncher( field = value } clientChangedCallbacks.forEach { callback -> callback(value) } - value.connect() + value.connect(project) } } diff --git a/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/appinspection/AppInspectionInspectorClient.kt b/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/appinspection/AppInspectionInspectorClient.kt index e8409e920d1..fc6f9dfd620 100644 --- a/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/appinspection/AppInspectionInspectorClient.kt +++ b/layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/appinspection/AppInspectionInspectorClient.kt @@ -53,6 +53,7 @@ import com.android.tools.idea.sdk.StudioSettingsController import com.android.tools.idea.sdk.wizard.SdkQuickfixUtils import com.google.common.util.concurrent.ListenableFuture import com.google.common.util.concurrent.SettableFuture +import com.google.wireless.android.sdk.stats.DynamicLayoutInspectorErrorInfo import com.google.wireless.android.sdk.stats.DynamicLayoutInspectorEvent.DynamicLayoutInspectorEventType import com.intellij.openapi.Disposable import com.intellij.openapi.actionSystem.AnAction @@ -165,6 +166,10 @@ class AppInspectionInspectorClient( scope.launch(exceptionHandler) { metrics.logEvent(DynamicLayoutInspectorEventType.ATTACH_REQUEST) + // Create the app inspection connection now, so we can log that it happened. + apiServices.attachToProcess(process, model.project.name) + launchMonitor.updateProgress(DynamicLayoutInspectorErrorInfo.AttachErrorState.ATTACH_SUCCESS) + composeInspector = ComposeLayoutInspectorClient.launch(apiServices, process, model, launchMonitor) val viewIns = ViewLayoutInspectorClient.launch(apiServices, process, model, scope, composeInspector, ::fireError, ::fireTreeEvent, launchMonitor) |