ClientImpl
public class ClientImpl
extends JdwpAgent implements Client
| java.lang.Object | ||
| ↳ | com.android.tradefed.device.server.jdwp.JdwpAgent | |
| ↳ | com.android.tradefed.device.server.ClientImpl | |
Это представляет собой одного клиента, обычно процесс Dalvik VM.
Этот класс предоставляет доступ к базовой информации о клиенте, а также к методам выполнения действий на клиенте.
Более подробную информацию, обычно обновляемую в режиме реального времени, можно получить через класс ClientData . Каждый объект Client имеет собственный ClientData доступ к которому осуществляется через getClientData() .
Краткое содержание
Публичные конструкторы | |
|---|---|
ClientImpl ( DeviceImpl device, SocketChannel chan, int pid)Создайте объект для нового клиентского соединения. | |
Публичные методы | |
|---|---|
void | captureView (String viewRoot, String view, DebugViewDumpHandler handler) |
void | close (boolean notify)Закройте канал клиентского сокета. |
boolean | ddmSeen ()MonitorThread вызывает этот метод, когда видит запрос или ответ DDM. |
void | dumpDisplayList (String viewRoot, String view) |
void | dumpViewHierarchy (String viewRoot, boolean skipChildren, boolean includeProperties, boolean useV2, DebugViewDumpHandler handler) |
void | enableAllocationTracker (boolean enable)Включает или выключает средство отслеживания распределения для этого клиента. |
void | executeGarbageCollector ()Заставляет клиента запустить свой сборщик мусора. |
ClientData | getClientData () Возвращает объект |
int | getDebuggerListenPort ()Возвращает порт отладчика для этого клиента. |
IDevice | getDevice () Возвращает |
DeviceImpl | getDeviceImpl () Возвращает |
JdwpPacket | getJdwpPacket ()Возвращает информацию о первом полном пакете JDWP в буфере. |
void | initializeHeapUpdateStatus () |
boolean | isDdmAware () Возвращает |
boolean | isDebuggerAttached () Возвращает |
boolean | isHeapUpdateEnabled ()Возвращает информацию о том, включено ли обновление кучи. |
boolean | isThreadUpdateEnabled ()Возвращает, включено ли обновление потока. |
boolean | isValid () Возвращает, имеет ли данный |
void | kill ()Отправляет сообщение об уничтожении виртуальной машины. |
void | listViewRoots ( DebugViewDumpHandler replyHandler) |
void | notifyVmMirrorExited () Зеркала отладчика виртуальных машин могут выходить за пределы DDMLib, что приводит к различным состояниям гонки или постоянной потере |
void | packetFailed ( JdwpPacket reply)Предыдущий запрос завершился неудачей. |
void | read ()Чтение данных из нашего канала должно осуществляться только из одного потока. |
void | register (Selector sel)Регистрирует клиента с помощью селектора, должен вызываться сразу после создания клиента. |
void | requestAllocationDetails () Отправляет запрос виртуальной машине на отправку информации обо всех выделениях, которые произошли с момента вызова |
void | requestAllocationStatus ()Отправляет запрос виртуальной машине на отправку статуса включения отслеживания распределения. |
void | requestMethodProfilingStatus ()Отправляет запрос виртуальной машине на отправку статуса включения метода профилирования. |
boolean | requestNativeHeapInformation ()Отправляет запрос на обновление собственной кучи. |
void | requestThreadStackTrace (int threadId)Отправляет запрос на обновление трассировки стека потока. |
void | requestThreadUpdate ()Отправляет запрос на обновление потока. |
void | setHeapInfoUpdateEnabled (boolean enabled) |
void | setHeapSegmentUpdateEnabled (boolean enabled) |
void | setHeapUpdateEnabled (boolean enabled)Включает или отключает обновление кучи. |
void | setThreadUpdateEnabled (boolean enabled)Включает или выключает обновление потока. |
void | startMethodTracer () |
boolean | startOpenGlTracing () |
void | startSamplingProfiler (int samplingInterval, TimeUnit timeUnit) |
void | stopMethodTracer () |
boolean | stopOpenGlTracing () |
void | stopSamplingProfiler () |
String | toString () Возвращает строковое представление объекта |
void | toggleMethodProfiling () Этот метод устарел. Вместо него используйте |
void | update (int changeMask) |
void | updateHeapInfo ()Запускает одно обновление кучи. |
Защищенные методы | |
|---|---|
void | send ( JdwpPacket packet)Отправьте DDM-пакет клиенту. |
Публичные конструкторы
ClientImpl
public ClientImpl (DeviceImpl device, SocketChannel chan, int pid)
Создайте объект для нового клиентского соединения.
| Параметры | |
|---|---|
device | DeviceImpl : устройство, к которому принадлежит этот клиент |
chan | SocketChannel : ERROR(/SocketChannel) . |
pid | int : клиентский pid. |
Публичные методы
captureView
public void captureView (String viewRoot,
String view,
DebugViewDumpHandler handler)| Параметры | |
|---|---|
viewRoot | String |
view | String |
handler | DebugViewDumpHandler |
закрывать
public void close (boolean notify)
Закройте канал клиентского сокета. Если с нами связан отладчик, закройте и его.
Закрытие канала автоматически отменяет его регистрацию в селекторе. Однако нам необходимо пройти цикл селектора, прежде чем он фактически освободит их и позволит закрыть файловые дескрипторы. Ожидается, что вызывающий код сделает это сам.
| Параметры | |
|---|---|
notify | boolean : уведомлять ли слушателей об изменении. |
ddmSeen
public boolean ddmSeen ()
MonitorThread вызывает этот метод, когда получает запрос или ответ DDM. Если пакет DDM ещё не был получен, мы переводим состояние в состояние ST_READY и возвращаем «false». В противном случае просто возвращаем «true».
Идея состоит в том, чтобы сообщить MonitorThread о первом появлении DDM-пакета, чтобы мы могли отправить широковещательное сообщение обработчикам при установлении клиентского соединения. Этот метод синхронизирован, поэтому широковещательное сообщение отправляется только один раз.
| Возврат | |
|---|---|
boolean | |
dumpDisplayList
public void dumpDisplayList (String viewRoot,
String view)| Параметры | |
|---|---|
viewRoot | String |
view | String |
dumpViewHierarchy
public void dumpViewHierarchy (String viewRoot,
boolean skipChildren,
boolean includeProperties,
boolean useV2,
DebugViewDumpHandler handler)| Параметры | |
|---|---|
viewRoot | String |
skipChildren | boolean |
includeProperties | boolean |
useV2 | boolean |
handler | DebugViewDumpHandler |
enableAllocationTracker
public void enableAllocationTracker (boolean enable)
Включает или выключает средство отслеживания распределения для этого клиента.
Если эта функция включена, виртуальная машина начнёт отслеживать информацию о выделении памяти. Вызов requestAllocationDetails() заставит виртуальную машину отправить информацию обо всех выделениях, произошедших между включением и запросом.
| Параметры | |
|---|---|
enable | boolean |
выполнитьGarbageCollector
public void executeGarbageCollector ()
Заставляет клиента запустить свой сборщик мусора.
получитьКлиентскиеДанные
public ClientData getClientData ()
Возвращает объект ClientData , содержащий информацию о клиенте.
| Возврат | |
|---|---|
ClientData | |
getDebuggerListenPort
public int getDebuggerListenPort ()
Возвращает порт отладчика для этого клиента.
| Возврат | |
|---|---|
int | |
получить устройство
public IDevice getDevice ()
Возвращает IDevice , на котором работает этот клиент.
| Возврат | |
|---|---|
IDevice | |
getDeviceImpl
public DeviceImpl getDeviceImpl ()
Возвращает DeviceImpl на котором работает этот клиент.
| Возврат | |
|---|---|
DeviceImpl | |
getJdwpPacket
public JdwpPacket getJdwpPacket ()
Возвращает информацию о первом полном пакете JDWP в буфере.
Если у нас еще нет полного пакета, возвращаем null.
Если мы ещё не получили рукопожатие JDWP, мы отслеживаем его здесь и принимаем, не признавая этого. После получения мы отправляем сообщение «HELO», поэтому может возникнуть исключение IOException.
Обратите внимание на порядок операций по установлению соединения:
На стороне хоста: 1) adb track-jdwp 2) Получить обновленный список PID, содержащих процесс приложения. 3) Открыть/перенаправить порт отладчика и подключиться к устройству. 4) Выполнить рукопожатие. 5) Отправить HELO и дождаться ответа.
Сторона устройства/процесса: а) Создать зиготу и обновить ADB с помощью PID. б) Отправить APNM, если подключен порт отладчика («<pre-initialize>»). в) Привязать процесс к фактическому приложению и пакету. г) Отправить обновлённый APNM, если подключен порт отладчика.
Две указанные выше последовательности выполнения выполняются полностью параллельно, с единственным ограничением: а) происходит раньше 2).
| Возврат | |
|---|---|
JdwpPacket | |
initializeHeapUpdateStatus
public void initializeHeapUpdateStatus ()
isDdmAware
public boolean isDdmAware ()
Возвращает true если клиентская виртуальная машина поддерживает DDM.
Звонок сюда разрешен только после установления соединения.
| Возврат | |
|---|---|
boolean | |
isDebuggerAttached
public boolean isDebuggerAttached ()
Возвращает true если отладчик в данный момент подключен к клиенту.
| Возврат | |
|---|---|
boolean | |
isHeapUpdateEnabled
public boolean isHeapUpdateEnabled ()
Возвращает информацию о том, включено ли обновление кучи.
| Возврат | |
|---|---|
boolean | |
Смотрите также:
isThreadUpdateEnabled
public boolean isThreadUpdateEnabled ()
Возвращает, включено ли обновление потока.
| Возврат | |
|---|---|
boolean | |
isValid
public boolean isValid ()
Возвращает, имеет ли данный ClientImpl допустимое соединение с виртуальной машиной приложения.
| Возврат | |
|---|---|
boolean | |
убийство
public void kill ()
Отправляет сообщение об уничтожении виртуальной машины. Это не обязательно сработает, если виртуальная машина находится в аварийном состоянии.
listViewRoots
public void listViewRoots (DebugViewDumpHandler replyHandler)
| Параметры | |
|---|---|
replyHandler | DebugViewDumpHandler |
notifyVmMirrorExited
public void notifyVmMirrorExited ()
Зеркала виртуальных машин отладчика могут выходить из-за DDMLib, что приводит к различным состояниям гонки или постоянной потере Client . Необходимо уведомить DDMLib о том, что текущий подключенный отладчик завершает работу и разрывает соединение с зеркалом виртуальной машины.
packetFailed
public void packetFailed (JdwpPacket reply)
Предыдущий запрос завершился сбоем. Это ожидаемый ответ на сообщение HELO при обращении к клиенту, не использующему DDM.
| Параметры | |
|---|---|
reply | JdwpPacket |
читать
public void read ()
Чтение данных из нашего канала должно осуществляться только из одного потока.
Эта функция вызывается, когда известно, что данные доступны, но в буфере ещё нет полного пакета. Если буфер заполнен, его необходимо расширить.
регистр
public void register (Selector sel)
Регистрирует клиента с помощью селектора, должен вызываться сразу после создания клиента.
| Параметры | |
|---|---|
sel | Selector |
requestAllocationDetails
public void requestAllocationDetails ()
Отправляет запрос виртуальной машине на получение информации обо всех выделениях памяти, произошедших с момента вызова enableAllocationTracker(boolean) со значением enable , равным null . Этот процесс выполняется асинхронно.
Информацию о выделении ресурсов можно получить с помощью ClientData.getAllocations() . Уведомление о доступности новых данных будет получено через AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) с changeMask содержащим маску Client.CHANGE_HEAP_ALLOCATIONS .
requestAllocationStatus
public void requestAllocationStatus ()
Отправляет запрос виртуальной машине на отправку статуса включения отслеживания распределения. Это происходит асинхронно.
Статус распределения можно получить с помощью ClientData.getAllocationStatus() . Уведомление о доступности нового статуса будет получено через AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) с changeMask содержащим маску Client.CHANGE_HEAP_ALLOCATION_STATUS .
requestMethodProfilingStatus
public void requestMethodProfilingStatus ()
Отправляет запрос виртуальной машине на отправку статуса включения метода профилирования. Выполняется асинхронно.
Статус распределения можно получить с помощью ClientData.getAllocationStatus() . Уведомление о доступности нового статуса будет получено через AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) с changeMask содержащим маску Client.CHANGE_HEAP_ALLOCATION_STATUS .
requestNativeHeapInformation
public boolean requestNativeHeapInformation ()
Отправляет запрос на обновление собственной кучи. Это асинхронно.
Доступ к информации о собственной куче можно получить с помощью ClientData.getNativeAllocationList() . Уведомление о доступности новых данных будет получено через AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) с changeMask содержащим маску Client.CHANGE_NATIVE_HEAP_DATA .
| Возврат | |
|---|---|
boolean | |
requestThreadStackTrace
public void requestThreadStackTrace (int threadId)
Отправляет запрос на обновление трассировки стека потока. Это происходит асинхронно.
Доступ к информации о потоке можно получить с помощью ClientData.getThreads() и ThreadInfo.getStackTrace() .
Уведомление о доступности новых данных будет получено через AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) с changeMask содержащим маску Client.CHANGE_THREAD_STACKTRACE .
| Параметры | |
|---|---|
threadId | int |
requestThreadUpdate
public void requestThreadUpdate ()
Отправляет запрос на обновление потока. Это происходит асинхронно.
Доступ к информации о потоке можно получить с помощью ClientData.getThreads() . Уведомление о доступности новых данных будет получено через AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) с changeMask содержащим маску Client.CHANGE_THREAD_DATA .
setHeapInfoUpdateEnabled
public void setHeapInfoUpdateEnabled (boolean enabled)
| Параметры | |
|---|---|
enabled | boolean |
setHeapSegmentUpdateEnabled
public void setHeapSegmentUpdateEnabled (boolean enabled)
| Параметры | |
|---|---|
enabled | boolean |
setHeapUpdateEnabled
public void setHeapUpdateEnabled (boolean enabled)
Включает или отключает обновление кучи.
Если true , любой сборщик мусора заставит клиента отправить информацию о своей куче.
Доступ к информации о куче можно получить с помощью ClientData.getVmHeapData() .
Уведомление о доступности новых данных будет получено через AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) с changeMask содержащим значение Client.CHANGE_HEAP_DATA .
| Параметры | |
|---|---|
enabled | boolean : флаг включения |
setThreadUpdateEnabled
public void setThreadUpdateEnabled (boolean enabled)
Включает или выключает обновление потока.
Если true виртуальная машина сможет отправлять информацию о потоке. Информацию о потоке необходимо запрашивать с помощью requestThreadUpdate() .
| Параметры | |
|---|---|
enabled | boolean : флаг включения. |
startMethodTracer
public void startMethodTracer ()
startOpenGlTracing
public boolean startOpenGlTracing ()
| Возврат | |
|---|---|
boolean | |
startSamplingProfiler
public void startSamplingProfiler (int samplingInterval,
TimeUnit timeUnit)| Параметры | |
|---|---|
samplingInterval | int |
timeUnit | TimeUnit |
stopMethodTracer
public void stopMethodTracer ()
stopOpenGlTracing
public boolean stopOpenGlTracing ()
| Возврат | |
|---|---|
boolean | |
stopSamplingProfiler
public void stopSamplingProfiler ()
toString
public String toString ()
Возвращает строковое представление объекта ClientImpl .
| Возврат | |
|---|---|
String | |
toggleMethodProfiling
public void toggleMethodProfiling ()
Этот метод устарел.
Вместо этого используйте startMethodTracer() , stopMethodTracer() , startSamplingProfiler(int, TimeUnit) или stopSamplingProfiler() .
Переключает состояние профилирования метода.
обновлять
public void update (int changeMask)
| Параметры | |
|---|---|
changeMask | int |
updateHeapInfo
public void updateHeapInfo ()
Запускает одно обновление кучи.
Защищенные методы
отправлять
protected void send (JdwpPacket packet)
Отправьте DDM-пакет клиенту.
В идеале это можно сделать с помощью записи в один канал. Если этого не происходит, нам придётся запретить кому-либо ещё записывать данные в этот канал до завершения пакета, поэтому мы синхронизируемся на этом канале.
Другая цель — избежать ненужных копий буфера, поэтому мы записываем данные непосредственно из ByteBuffer JdwpPacket.
| Параметры | |
|---|---|
packet | JdwpPacket |