summaryrefslogtreecommitdiff
path: root/layout-inspector/src
diff options
context:
space:
mode:
authorJoe Baker-Malone <jbakermalone@google.com>2022-01-12 17:56:29 -0800
committerTreeHugger Robot <treehugger-gerrit@google.com>2022-01-19 20:54:48 +0000
commit655f41c7082a33d9079b8fa12643880f2c006ae8 (patch)
tree75571633db2a3e3ee2749b974e8c2efd55b6e0d7 /layout-inspector/src
parent0e5ab46320029961817c99485be8bbb52f8a62e6 (diff)
downloadidea-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')
-rw-r--r--layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/AbstractInspectorClient.kt15
-rw-r--r--layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/InspectorClient.kt5
-rw-r--r--layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/InspectorClientLauncher.kt2
-rw-r--r--layout-inspector/src/com/android/tools/idea/layoutinspector/pipeline/appinspection/AppInspectionInspectorClient.kt5
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)