ClientImpl
public
class
ClientImpl
extends JdwpAgent
implements
Client
| java.lang.Object | ||
| ↳ | com.android.tradefed.device.server.jdwp.JdwpAgent | |
| ↳ | com.android.tradefed.device.server.ClientImpl | |
Cela représente un seul client, généralement un processus de VM Dalvik.
Cette classe donne accès aux informations de base sur le client, ainsi qu'aux méthodes permettant d'effectuer des actions sur le client.
Pour obtenir des informations plus détaillées, généralement mises à jour en temps réel, vous pouvez accéder à la classe ClientData. Chaque objet Client possède son propre ClientData, accessible via getClientData().
Résumé
Constructeurs publics | |
|---|---|
ClientImpl(DeviceImpl device, SocketChannel chan, int pid)
Créez un objet pour une nouvelle connexion client. |
|
Méthodes publiques | |
|---|---|
void
|
captureView(String viewRoot, String view, DebugViewDumpHandler handler)
|
void
|
close(boolean notify)
Fermez le canal du socket client. |
boolean
|
ddmSeen()
MonitorThread appelle cette méthode lorsqu'il détecte une requête ou une réponse DDM. |
void
|
dumpDisplayList(String viewRoot, String view)
|
void
|
dumpViewHierarchy(String viewRoot, boolean skipChildren, boolean includeProperties, boolean useV2, DebugViewDumpHandler handler)
|
void
|
enableAllocationTracker(boolean enable)
Active ou désactive le suivi de l'allocation pour ce client. |
void
|
executeGarbageCollector()
Force le client à exécuter son récupérateur de mémoire. |
ClientData
|
getClientData()
Renvoie l'objet |
int
|
getDebuggerListenPort()
Renvoie le port du débogueur pour ce client. |
IDevice
|
getDevice()
Renvoie le |
DeviceImpl
|
getDeviceImpl()
Renvoie le |
JdwpPacket
|
getJdwpPacket()
Renvoie des informations sur le premier paquet JDWP complet du tampon. |
void
|
initializeHeapUpdateStatus()
|
boolean
|
isDdmAware()
Renvoie |
boolean
|
isDebuggerAttached()
Renvoie |
boolean
|
isHeapUpdateEnabled()
Indique si une mise à jour du tas est activée. |
boolean
|
isThreadUpdateEnabled()
Indique si la mise à jour du thread est activée. |
boolean
|
isValid()
Indique si cette |
void
|
kill()
Envoie un message d'arrêt à la VM. |
void
|
listViewRoots(DebugViewDumpHandler replyHandler)
|
void
|
notifyVmMirrorExited()
Les clones de VM du débogueur peuvent se fermer à l'insu de DDMLib, ce qui entraîne diverses conditions de perte de course ou permanente de |
void
|
packetFailed(JdwpPacket reply)
Une demande précédente a échoué. |
void
|
read()
Lire les données de notre canal. Ne doit être appelé que depuis un seul thread. |
void
|
register(Selector sel)
Enregistre le client auprès d'un sélecteur. Cette méthode doit être appelée immédiatement après la création du client. |
void
|
requestAllocationDetails()
Envoie une requête à la VM pour qu'elle envoie les informations sur toutes les allocations qui ont eu lieu depuis l'appel à |
void
|
requestAllocationStatus()
Envoie une requête à la VM pour qu'elle envoie l'état d'activation du suivi de l'allocation. |
void
|
requestMethodProfilingStatus()
Envoie une requête à la VM pour qu'elle envoie l'état d'activation du profilage de méthode. |
boolean
|
requestNativeHeapInformation()
Envoie une demande de mise à jour du tas natif. |
void
|
requestThreadStackTrace(int threadId)
Envoie une demande de mise à jour de la trace de pile de threads. |
void
|
requestThreadUpdate()
Envoie une demande de mise à jour du thread. |
void
|
setHeapInfoUpdateEnabled(boolean enabled)
|
void
|
setHeapSegmentUpdateEnabled(boolean enabled)
|
void
|
setHeapUpdateEnabled(boolean enabled)
Active ou désactive la mise à jour du tas. |
void
|
setThreadUpdateEnabled(boolean enabled)
Active ou désactive la mise à jour du thread. |
void
|
startMethodTracer()
|
boolean
|
startOpenGlTracing()
|
void
|
startSamplingProfiler(int samplingInterval, TimeUnit timeUnit)
|
void
|
stopMethodTracer()
|
boolean
|
stopOpenGlTracing()
|
void
|
stopSamplingProfiler()
|
String
|
toString()
Renvoie une représentation sous forme de chaîne de l'objet |
void
|
toggleMethodProfiling()
Cette méthode est obsolète.
Utilisez plutôt |
void
|
update(int changeMask)
|
void
|
updateHeapInfo()
Déclenche une seule mise à jour du tas. |
Méthodes protégées | |
|---|---|
void
|
send(JdwpPacket packet)
Envoyez un paquet DDM au client. |
Constructeurs publics
ClientImpl
public ClientImpl (DeviceImpl device, SocketChannel chan, int pid)
Créez un objet pour une nouvelle connexion client.
| Paramètres | |
|---|---|
device |
DeviceImpl : appareil auquel appartient ce client |
chan |
SocketChannel : ERROR(/SocketChannel) connecté. |
pid |
int : PID du client. |
Méthodes publiques
captureView
public void captureView (String viewRoot,
String view,
DebugViewDumpHandler handler)| Paramètres | |
|---|---|
viewRoot |
String |
view |
String |
handler |
DebugViewDumpHandler |
fermer
public void close (boolean notify)
Fermez le canal du socket client. Si un débogueur est associé à nous, fermez-le également.
La fermeture d'un canal le désinscrit automatiquement du sélecteur. Cependant, nous devons parcourir la boucle du sélecteur avant qu'elle ne les libère et ne permette la fermeture des descripteurs de fichiers. L'appelant est censé gérer cela.
| Paramètres | |
|---|---|
notify |
boolean : indique si les écouteurs doivent être informés d'un changement. |
ddmSeen
public boolean ddmSeen ()
MonitorThread appelle cette méthode lorsqu'il détecte une requête ou une réponse DDM. Si nous n'avons jamais vu de paquet DDM auparavant, nous faisons passer l'état à ST_READY et renvoyons "false". Sinon, renvoie simplement "true".
L'idée est d'informer MonitorThread lorsque nous voyons un paquet DDM pour la première fois, afin que nous puissions envoyer une diffusion aux gestionnaires lorsqu'une connexion client est établie. Cette méthode est synchronisée afin que nous n'envoyions la diffusion qu'une seule fois.
| Renvoie | |
|---|---|
boolean |
|
dumpDisplayList
public void dumpDisplayList (String viewRoot,
String view)| Paramètres | |
|---|---|
viewRoot |
String |
view |
String |
dumpViewHierarchy
public void dumpViewHierarchy (String viewRoot,
boolean skipChildren,
boolean includeProperties,
boolean useV2,
DebugViewDumpHandler handler)| Paramètres | |
|---|---|
viewRoot |
String |
skipChildren |
boolean |
includeProperties |
boolean |
useV2 |
boolean |
handler |
DebugViewDumpHandler |
enableAllocationTracker
public void enableAllocationTracker (boolean enable)
Active ou désactive le suivi de l'allocation pour ce client.
Si cette option est activée, la VM commence à suivre les informations d'allocation. Un appel à requestAllocationDetails() permet à la VM d'envoyer des informations sur toutes les allocations qui ont eu lieu entre l'activation et la demande.
| Paramètres | |
|---|---|
enable |
boolean |
executeGarbageCollector
public void executeGarbageCollector ()
Force le client à exécuter son récupérateur de mémoire.
getClientData
public ClientData getClientData ()
Renvoie l'objet ClientData contenant ces informations sur le client.
| Renvoie | |
|---|---|
ClientData |
|
getDebuggerListenPort
public int getDebuggerListenPort ()
Renvoie le port du débogueur pour ce client.
| Renvoie | |
|---|---|
int |
|
getDevice
public IDevice getDevice ()
Renvoie le IDevice sur lequel ce client est exécuté.
| Renvoie | |
|---|---|
IDevice |
|
getDeviceImpl
public DeviceImpl getDeviceImpl ()
Renvoie le DeviceImpl sur lequel ce client est exécuté.
| Renvoie | |
|---|---|
DeviceImpl |
|
getJdwpPacket
public JdwpPacket getJdwpPacket ()
Renvoie des informations sur le premier paquet JDWP complet du tampon.
Si nous n'avons pas encore de paquet complet, renvoyez la valeur "null".
Si nous n'avons pas encore reçu l'établissement de liaison JDWP, nous le recherchons ici et le consommons sans l'admettre. Dès réception, nous envoyons le message "HELO", ce qui peut entraîner une IOException.
Notez que l'ordre des opérations pour établir une connexion est le suivant :
Côté hôte : 1) adb track-jdwp ; 2) recevoir la liste mise à jour des PID contenant le processus de l'application. 3) Ouvrez/transférez le port du débogueur et connectez-vous à l'appareil. 4) Effectuez le handshake. 5) Envoyez HELO et attendez la réponse.
Côté appareil/processus : a) Fork zygote et mise à jour d'ADB avec le PID. b) Envoi d'APNM si le port du débogueur est connecté ("<pre-initialize>"). c) Liaison du processus à l'application et au package réels. d) Envoi d'APNM mis à jour si le port du débogueur est connecté.
Les deux séquences d'exécution ci-dessus s'exécutent entièrement en parallèle, la seule contrainte étant que a) se produit avant 2).
| Renvoie | |
|---|---|
JdwpPacket |
|
initializeHeapUpdateStatus
public void initializeHeapUpdateStatus ()
isDdmAware
public boolean isDdmAware ()
Renvoie true si la VM cliente est compatible avec DDM.
L'appel n'est autorisé qu'une fois la connexion établie.
| Renvoie | |
|---|---|
boolean |
|
isDebuggerAttached
public boolean isDebuggerAttached ()
Renvoie true si un débogueur est actuellement associé au client.
| Renvoie | |
|---|---|
boolean |
|
isHeapUpdateEnabled
public boolean isHeapUpdateEnabled ()
Indique si une mise à jour du tas est activée.
| Renvoie | |
|---|---|
boolean |
|
Voir aussi :
isThreadUpdateEnabled
public boolean isThreadUpdateEnabled ()
Indique si la mise à jour du thread est activée.
| Renvoie | |
|---|---|
boolean |
|
isValid
public boolean isValid ()
Indique si cette ClientImpl dispose d'une connexion valide à la VM de l'application.
| Renvoie | |
|---|---|
boolean |
|
arrête
public void kill ()
Envoie un message d'arrêt à la VM. Cette méthode ne fonctionne pas nécessairement si la VM est dans un état d'échec.
listViewRoots
public void listViewRoots (DebugViewDumpHandler replyHandler)
| Paramètres | |
|---|---|
replyHandler |
DebugViewDumpHandler |
notifyVmMirrorExited
public void notifyVmMirrorExited ()
Les clones de VM du débogueur peuvent se fermer à l'insu de DDMLib, ce qui entraîne diverses conditions de perte de course ou permanente de Client. Nous devons informer DDMLib que le débogueur actuellement associé est en train de se fermer et de mettre fin à sa connexion miroir de VM.
packetFailed (échec du paquet)
public void packetFailed (JdwpPacket reply)
Une demande précédente a échoué. Il s'agit de la réponse attendue à un message HELO lorsque vous communiquez avec un client non DDM.
| Paramètres | |
|---|---|
reply |
JdwpPacket |
lire
public void read ()
Lire les données de notre canal. Ne doit être appelé que depuis un seul thread.
Cette méthode est appelée lorsque les données sont disponibles, mais que nous n'avons pas encore de paquet complet dans le tampon. Si le tampon est plein, développez-le.
s'inscrire
public void register (Selector sel)
Enregistre le client auprès d'un sélecteur. Cette méthode doit être appelée immédiatement après la création du client.
| Paramètres | |
|---|---|
sel |
Selector |
requestAllocationDetails
public void requestAllocationDetails ()
Envoie une requête à la VM pour qu'elle envoie les informations sur toutes les allocations qui ont eu lieu depuis l'appel à enableAllocationTracker(boolean) avec enable défini sur null. Il s'agit d'une opération asynchrone.
Vous pouvez accéder aux informations sur l'allocation via ClientData.getAllocations(). La notification indiquant que les nouvelles données sont disponibles sera reçue via AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) avec un changeMask contenant le masque Client.CHANGE_HEAP_ALLOCATIONS.
requestAllocationStatus
public void requestAllocationStatus ()
Envoie une requête à la VM pour qu'elle envoie l'état d'activation du suivi de l'allocation. Il s'agit d'une opération asynchrone.
L'état de l'allocation est accessible via ClientData.getAllocationStatus(). La notification indiquant que le nouvel état est disponible sera reçue via AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) avec un changeMask contenant le masque Client.CHANGE_HEAP_ALLOCATION_STATUS.
requestMethodProfilingStatus
public void requestMethodProfilingStatus ()
Envoie une requête à la VM pour qu'elle envoie l'état d'activation du profilage de méthode. Il s'agit d'une opération asynchrone.
L'état de l'allocation est accessible via ClientData.getAllocationStatus(). La notification indiquant que le nouvel état est disponible sera reçue via AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) avec un changeMask contenant le masque Client.CHANGE_HEAP_ALLOCATION_STATUS.
requestNativeHeapInformation
public boolean requestNativeHeapInformation ()
Envoie une requête de mise à jour du tas natif. Cette opération est asynchrone.
Les informations sur le tas natif sont accessibles via ClientData.getNativeAllocationList(). La notification indiquant que les nouvelles données sont disponibles sera reçue via AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) avec un changeMask contenant le masque Client.CHANGE_NATIVE_HEAP_DATA.
| Renvoie | |
|---|---|
boolean |
|
requestThreadStackTrace
public void requestThreadStackTrace (int threadId)
Envoie une demande de mise à jour de la trace de pile de threads. Il s'agit d'une opération asynchrone.
Les informations sur le fil de discussion sont accessibles par ClientData.getThreads() et ThreadInfo.getStackTrace().
Vous recevrez une notification indiquant que les nouvelles données sont disponibles via AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) avec un changeMask contenant le masque Client.CHANGE_THREAD_STACKTRACE.
| Paramètres | |
|---|---|
threadId |
int |
requestThreadUpdate
public void requestThreadUpdate ()
Envoie une demande de mise à jour du thread. Il s'agit d'une opération asynchrone.
Les informations sur le thread sont accessibles via ClientData.getThreads(). La notification indiquant que les nouvelles données sont disponibles sera reçue via AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) avec un changeMask contenant le masque Client.CHANGE_THREAD_DATA.
setHeapInfoUpdateEnabled
public void setHeapInfoUpdateEnabled (boolean enabled)
| Paramètres | |
|---|---|
enabled |
boolean |
setHeapSegmentUpdateEnabled
public void setHeapSegmentUpdateEnabled (boolean enabled)
| Paramètres | |
|---|---|
enabled |
boolean |
setHeapUpdateEnabled
public void setHeapUpdateEnabled (boolean enabled)
Active ou désactive la mise à jour du tas.
Si la valeur est true, tout GC entraînera l'envoi des informations de tas par le client.
Les informations sur le tas sont accessibles via ClientData.getVmHeapData().
Vous recevrez une notification indiquant que les nouvelles données sont disponibles via AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) avec un changeMask contenant la valeur Client.CHANGE_HEAP_DATA.
| Paramètres | |
|---|---|
enabled |
boolean : indicateur d'activation |
setThreadUpdateEnabled
public void setThreadUpdateEnabled (boolean enabled)
Active ou désactive la mise à jour du thread.
Si la valeur est true, la VM pourra envoyer des informations sur les threads. Les informations sur les threads doivent être demandées avec requestThreadUpdate().
| Paramètres | |
|---|---|
enabled |
boolean : indicateur d'activation. |
startMethodTracer
public void startMethodTracer ()
startOpenGlTracing
public boolean startOpenGlTracing ()
| Renvoie | |
|---|---|
boolean |
|
startSamplingProfiler
public void startSamplingProfiler (int samplingInterval,
TimeUnit timeUnit)| Paramètres | |
|---|---|
samplingInterval |
int |
timeUnit |
TimeUnit |
stopMethodTracer
public void stopMethodTracer ()
stopOpenGlTracing
public boolean stopOpenGlTracing ()
| Renvoie | |
|---|---|
boolean |
|
stopSamplingProfiler
public void stopSamplingProfiler ()
toString
public String toString ()
Renvoie une représentation sous forme de chaîne de l'objet ClientImpl.
| Renvoie | |
|---|---|
String |
|
toggleMethodProfiling
public void toggleMethodProfiling ()
Cette méthode est obsolète.
Utilisez plutôt startMethodTracer(), stopMethodTracer(), startSamplingProfiler(int, TimeUnit) ou stopSamplingProfiler().
Active ou désactive l'état du profilage de la méthode.
update
public void update (int changeMask)
| Paramètres | |
|---|---|
changeMask |
int |
updateHeapInfo
public void updateHeapInfo ()
Déclenche une seule mise à jour du tas.
Méthodes protégées
envoyer
protected void send (JdwpPacket packet)
Envoyez un paquet DDM au client.
Idéalement, nous pouvons le faire avec une seule écriture de canal. Si cela ne se produit pas, nous devons empêcher toute autre personne d'écrire sur le canal jusqu'à ce que ce paquet soit terminé. Nous synchronisons donc le canal.
Un autre objectif est d'éviter les copies de tampon inutiles. Nous écrivons donc directement à partir du ByteBuffer de JdwpPacket.
| Paramètres | |
|---|---|
packet |
JdwpPacket |