ClientImpl

public class ClientImpl
extends JdwpAgent implements Client

java.lang.Object
   ↳ com.android.tradefed.device.server.jdwp.JdwpAgent
     ↳ com.android.tradefed.device.server.ClientImpl


Bu, genellikle bir Dalvik VM işlemi olan tek bir istemciyi temsil eder.

Bu sınıf, temel istemci bilgilerine erişimin yanı sıra istemci üzerinde işlem yapma yöntemlerini de sağlar.

Genellikle gerçek zamanlı olarak güncellenen daha ayrıntılı bilgilere ClientData sınıfı üzerinden erişilebilir. Her Client nesnesinin, getClientData() üzerinden erişilen kendi ClientData'u vardır.

Özet

Herkese açık oluşturucular

ClientImpl(DeviceImpl device, SocketChannel chan, int pid)

Yeni bir istemci bağlantısı için nesne oluşturun.

Herkese açık yöntemler

void captureView(String viewRoot, String view, DebugViewDumpHandler handler)
void close(boolean notify)

İstemci soketi kanalını kapatın.

boolean ddmSeen()

MonitorThread, bir DDM isteği veya yanıtı gördüğünde bunu çağırır.

void dumpDisplayList(String viewRoot, String view)
void dumpViewHierarchy(String viewRoot, boolean skipChildren, boolean includeProperties, boolean useV2, DebugViewDumpHandler handler)
void enableAllocationTracker(boolean enable)

Bu müşteri için tahsis izleyiciyi etkinleştirir veya devre dışı bırakır.

void executeGarbageCollector()

İstemcinin çöp toplayıcısını yürütmeye zorlar.

ClientData getClientData()

Bu istemci bilgilerini içeren ClientData nesnesini döndürür.

int getDebuggerListenPort()

Bu istemcinin hata ayıklayıcı bağlantı noktasını döndürür.

IDevice getDevice()

Bu istemcinin üzerinde çalıştığı IDevice değerini döndürür.

DeviceImpl getDeviceImpl()

Bu istemcinin üzerinde çalıştığı DeviceImpl değerini döndürür.

JdwpPacket getJdwpPacket()

Arabellekteki ilk tam JDWP paketi için bilgileri döndürür.

void initializeHeapUpdateStatus()
boolean isDdmAware()

İstemci VM DDM'ye duyarlıysa true değerini döndürür.

boolean isDebuggerAttached()

Bir hata ayıklayıcı şu anda istemciye bağlıysa true değerini döndürür.

boolean isHeapUpdateEnabled()

Yığın güncellemesinin etkin olup olmadığını döndürür.

boolean isThreadUpdateEnabled()

İş parçacığı güncellemesinin etkin olup olmadığını döndürür.

boolean isValid()

Bu ClientImpl öğesinin uygulama sanal makinesiyle geçerli bir bağlantısı olup olmadığını döndürür.

void kill()

Sanal makineye sonlandırma mesajı gönderir.

void listViewRoots(DebugViewDumpHandler replyHandler)
void notifyVmMirrorExited()

Hata ayıklayıcı VM yansıtıcıları, DDMLib'in arkasından çıkabilir ve bu da çeşitli yarış veya kalıcı Client kaybı koşullarına yol açar.

void packetFailed(JdwpPacket reply)

Daha önceki bir istek başarısız oldu.

void read()

Kanalımızdaki verileri okur. Yalnızca tek bir iş parçacığından çağrılmalıdır.

void register(Selector sel)

İstemciyi bir seçiciyle kaydeder. İstemci oluşturulduktan hemen sonra çağrılmalıdır.

void requestAllocationDetails()

enableAllocationTracker(boolean) ile yapılan çağrıdan bu yana gerçekleşen tüm ayırmalarla ilgili bilgileri enable değeri null olarak ayarlanmış şekilde göndermesi için sanal makineye istek gönderir.

void requestAllocationStatus()

VM'ye, ayırma izlemenin etkinleştirme durumunu göndermesi için bir istek gönderir.

void requestMethodProfilingStatus()

Yöntem profil oluşturmanın etkinleştirme durumunu göndermesi için VM'ye bir istek gönderir.

boolean requestNativeHeapInformation()

Yerel yığın güncelleme isteği gönderir.

void requestThreadStackTrace(int threadId)

İş parçacığı yığını izleme güncelleme isteği gönderir.

void requestThreadUpdate()

İş parçacığı güncelleme isteği gönderir.

void setHeapInfoUpdateEnabled(boolean enabled)
void setHeapSegmentUpdateEnabled(boolean enabled)
void setHeapUpdateEnabled(boolean enabled)

Yığın güncellemesini etkinleştirir veya devre dışı bırakır.

void setThreadUpdateEnabled(boolean enabled)

İleti dizisi güncellemelerini etkinleştirir veya devre dışı bırakır.

void startMethodTracer()
boolean startOpenGlTracing()
void startSamplingProfiler(int samplingInterval, TimeUnit timeUnit)
void stopMethodTracer()
boolean stopOpenGlTracing()
void stopSamplingProfiler()
String toString()

ClientImpl nesnesinin dize gösterimini döndürür.

void toggleMethodProfiling()

Bu yöntem kullanımdan kaldırılmıştır. Bunun yerine startMethodTracer(), stopMethodTracer(), startSamplingProfiler(int, TimeUnit) veya stopSamplingProfiler() kullanın.

void update(int changeMask)
void updateHeapInfo()

Tek bir yığın güncellemesi tetikler.

Korunan yöntemler

void send(JdwpPacket packet)

İstemciye bir DDM paketi gönderin.

Herkese açık oluşturucular

ClientImpl

public ClientImpl (DeviceImpl device, 
                SocketChannel chan, 
                int pid)

Yeni bir istemci bağlantısı için nesne oluşturun.

Parametreler
device DeviceImpl: Bu istemcinin ait olduğu cihaz

chan SocketChannel: bağlı ERROR(/SocketChannel).

pid int: istemci pid'si.

Herkese açık yöntemler

captureView

public void captureView (String viewRoot, 
                String view, 
                DebugViewDumpHandler handler)

Parametreler
viewRoot String

view String

handler DebugViewDumpHandler

kapat

public void close (boolean notify)

İstemci soketi kanalını kapatın. Bizimle ilişkili bir hata ayıklayıcı varsa onu da kapatın.

Bir kanal kapatıldığında seçiciden otomatik olarak kaydı silinir. Ancak, bu işlemlerin gerçekleşmesi ve dosya tanımlayıcılarının kapatılması için seçici döngüsünde yineleme yapmamız gerekir. Arayanın bunu yönetmesi beklenir.

Parametreler
notify boolean: Dinleyicilere değişiklik bildirilip bildirilmeyeceği.

ddmSeen

public boolean ddmSeen ()

MonitorThread, bir DDM isteği veya yanıtı gördüğünde bunu çağırır. Daha önce bir DDM paketi görmediysek durumu ST_READY'ye ilerletir ve "false" değerini döndürürüz. Aksi takdirde, yalnızca true değerini döndürün.

Buradaki amaç, bir DDM paketi ilk kez görüldüğünde MonitorThread'e bildirim göndermektir. Böylece, bir istemci bağlantısı oluşturulduğunda işleyicilere yayın gönderebiliriz. Bu yöntem, yayını yalnızca bir kez gönderecek şekilde senkronize edilir.

İlerlemeler
boolean

dumpDisplayList

public void dumpDisplayList (String viewRoot, 
                String view)

Parametreler
viewRoot String

view String

dumpViewHierarchy

public void dumpViewHierarchy (String viewRoot, 
                boolean skipChildren, 
                boolean includeProperties, 
                boolean useV2, 
                DebugViewDumpHandler handler)

Parametreler
viewRoot String

skipChildren boolean

includeProperties boolean

useV2 boolean

handler DebugViewDumpHandler

enableAllocationTracker

public void enableAllocationTracker (boolean enable)

Bu müşteri için tahsis izleyiciyi etkinleştirir veya devre dışı bırakır.

Etkinleştirilirse VM, ayırma bilgilerini izlemeye başlar. requestAllocationDetails() çağrısı, sanal makinenin etkinleştirme ile istek arasında gerçekleşen tüm ayırmalarla ilgili bilgileri göndermesini sağlar.

Parametreler
enable boolean

executeGarbageCollector

public void executeGarbageCollector ()

İstemcinin çöp toplayıcısını yürütmeye zorlar.

getClientData

public ClientData getClientData ()

Bu istemci bilgilerini içeren ClientData nesnesini döndürür.

İlerlemeler
ClientData

getDebuggerListenPort

public int getDebuggerListenPort ()

Bu istemcinin hata ayıklayıcı bağlantı noktasını döndürür.

İlerlemeler
int

getDevice

public IDevice getDevice ()

Bu istemcinin üzerinde çalıştığı IDevice değerini döndürür.

İlerlemeler
IDevice

getDeviceImpl

public DeviceImpl getDeviceImpl ()

Bu istemcinin üzerinde çalıştığı DeviceImpl değerini döndürür.

İlerlemeler
DeviceImpl

getJdwpPacket

public JdwpPacket getJdwpPacket ()

Arabellekteki ilk tam JDWP paketi için bilgileri döndürür.

Henüz tam bir paketimiz yoksa null değerini döndürün.

JDWP el sıkışması henüz alınmadıysa burada izlenir ve yapıldığı kabul edilmeden tüketilir. Alındığında "HELO" mesajı gönderilir. Bu nedenle IOException oluşabilir.

Bağlantı oluşturma işlemlerinin sırası şöyledir:

Ana makine tarafı: 1) adb track-jdwp 2) Uygulama sürecini içeren PID'lerin güncellenmiş listesini alın. 3) Hata ayıklayıcı bağlantı noktasını açın/yönlendirin ve cihaza bağlanın. 4) El sıkışma işlemini gerçekleştirin. 5) HELO gönderin ve yanıt bekleyin.

Cihaz/işlem tarafı: a) Zygote'u çatallayın ve ADB'yi PID ile güncelleyin. b) Hata ayıklayıcı bağlantı noktası bağlıysa APNM gönderin ("<pre-initialize>"). c) İşlemi gerçek uygulamaya ve pakete bağlayın. d) Hata ayıklayıcı bağlantı noktası bağlıysa güncellenmiş APNM'yi gönderin.

Yukarıdaki iki yürütme sırası tamamen paralel olarak çalışır. Tek kısıtlama, a) öğesinin 2) öğesinden önce gerçekleşmesidir.

İlerlemeler
JdwpPacket

initializeHeapUpdateStatus

public void initializeHeapUpdateStatus ()

isDdmAware

public boolean isDdmAware ()

İstemci VM DDM'ye duyarlıysa true değerini döndürür.

Burada arama yapılmasına yalnızca bağlantı kurulduktan sonra izin verilir.

İlerlemeler
boolean

isDebuggerAttached

public boolean isDebuggerAttached ()

Bir hata ayıklayıcı şu anda istemciye bağlıysa true değerini döndürür.

İlerlemeler
boolean

isHeapUpdateEnabled

public boolean isHeapUpdateEnabled ()

Yığın güncellemesinin etkin olup olmadığını döndürür.

İlerlemeler
boolean

isThreadUpdateEnabled

public boolean isThreadUpdateEnabled ()

İş parçacığı güncellemesinin etkin olup olmadığını döndürür.

İlerlemeler
boolean

isValid

public boolean isValid ()

Bu ClientImpl öğesinin uygulama sanal makinesiyle geçerli bir bağlantısı olup olmadığını döndürür.

İlerlemeler
boolean

kill

public void kill ()

Sanal makineye sonlandırma mesajı gönderir. Sanal makine çökmüş durumdaysa bu yöntem her zaman işe yaramayabilir.

listViewRoots

public void listViewRoots (DebugViewDumpHandler replyHandler)

Parametreler
replyHandler DebugViewDumpHandler

notifyVmMirrorExited

public void notifyVmMirrorExited ()

Hata ayıklayıcı VM yansıtıcıları, DDMLib'in arkasından çıkabilir ve bu da çeşitli yarış veya kalıcı Client kaybı koşullarına yol açar. DDMLib'e, şu anda bağlı olan hata ayıklayıcının çıkış yaptığını ve VM yansıtma bağlantısını sonlandırdığını bildirmemiz gerekir.

packetFailed

public void packetFailed (JdwpPacket reply)

Daha önceki bir istek başarısız oldu. Bu, DDM olmayan bir istemciyle iletişim kurarken HELO mesajına verilen beklenen yanıttır.

Parametreler
reply JdwpPacket

okuma

public void read ()

Kanalımızdaki verileri okur. Yalnızca tek bir iş parçacığından çağrılmalıdır.

Bu işlev, verilerin kullanılabilir olduğu bilindiğinde ve arabellekte henüz tam bir paket olmadığında çağrılır. Arabellek kapasitesi dolmuşsa genişletin.

kayıt

public void register (Selector sel)

İstemciyi bir seçiciyle kaydeder. İstemci oluşturulduktan hemen sonra çağrılmalıdır.

Parametreler
sel Selector

requestAllocationDetails

public void requestAllocationDetails ()

enableAllocationTracker(boolean) ile yapılan çağrıdan bu yana gerçekleşen tüm ayırmalarla ilgili bilgileri enable değeri null olarak ayarlanmış şekilde göndermesi için sanal makineye istek gönderir. Bu işlem eşzamansızdır.

Tahsis bilgilerine ClientData.getAllocations() tarafından erişilebilir. Yeni verilerin kullanıma sunulduğu bildirimi, AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) üzerinden Client.CHANGE_HEAP_ALLOCATIONS maskesini içeren bir changeMask ile alınır.

requestAllocationStatus

public void requestAllocationStatus ()

VM'ye, ayırma izlemenin etkinleştirme durumunu göndermesi için bir istek gönderir. Bu işlem eşzamansızdır.

Ayrım durumuna ClientData.getAllocationStatus() tarafından erişilebilir. Yeni durumun kullanıma sunulduğu bildirimi, AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) üzerinden Client.CHANGE_HEAP_ALLOCATION_STATUS maskesini içeren bir changeMask ile alınır.

requestMethodProfilingStatus

public void requestMethodProfilingStatus ()

Yöntem profil oluşturmanın etkinleştirme durumunu göndermesi için VM'ye bir istek gönderir. Bu işlem eşzamansızdır.

Ayrım durumuna ClientData.getAllocationStatus() tarafından erişilebilir. Yeni durumun kullanıma sunulduğu bildirimi, AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) üzerinden Client.CHANGE_HEAP_ALLOCATION_STATUS maskesini içeren bir changeMask ile alınır.

requestNativeHeapInformation

public boolean requestNativeHeapInformation ()

Yerel yığın güncelleme isteği gönderir. Bu işlem eşzamansızdır.

Yerel yığın bilgilerine ClientData.getNativeAllocationList() tarafından erişilebilir. Yeni verilerin kullanıma sunulduğu bildirimi, AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) üzerinden Client.CHANGE_NATIVE_HEAP_DATA maskesini içeren bir changeMask ile alınır.

İlerlemeler
boolean

requestThreadStackTrace

public void requestThreadStackTrace (int threadId)

İş parçacığı yığını izleme güncelleme isteği gönderir. Bu işlem eşzamansızdır.

İş parçacığı bilgilerine ClientData.getThreads() ve ThreadInfo.getStackTrace() erişebilir.

Yeni verilerin kullanıma sunulduğu bildirimi, AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) üzerinden Client.CHANGE_THREAD_STACKTRACE maskesini içeren bir changeMask ile alınır.

Parametreler
threadId int

requestThreadUpdate

public void requestThreadUpdate ()

İş parçacığı güncelleme isteği gönderir. Bu işlem eşzamansızdır.

İş parçacığı bilgilerine ClientData.getThreads() tarafından erişilebilir. Yeni verilerin kullanıma sunulduğu bildirimi, AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) üzerinden Client.CHANGE_THREAD_DATA maskesini içeren bir changeMask ile alınır.

setHeapInfoUpdateEnabled

public void setHeapInfoUpdateEnabled (boolean enabled)

Parametreler
enabled boolean

setHeapSegmentUpdateEnabled

public void setHeapSegmentUpdateEnabled (boolean enabled)

Parametreler
enabled boolean

setHeapUpdateEnabled

public void setHeapUpdateEnabled (boolean enabled)

Yığın güncellemesini etkinleştirir veya devre dışı bırakır.

true ise herhangi bir GC, istemcinin yığın bilgilerini göndermesine neden olur.

Yığın bilgilerine ClientData.getVmHeapData() tarafından erişilebilir.

Yeni verilerin kullanıma sunulduğu bildirimi, AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) üzerinden Client.CHANGE_HEAP_DATA değerini içeren bir changeMask ile alınır.

Parametreler
enabled boolean: etkinleştirme işareti

setThreadUpdateEnabled

public void setThreadUpdateEnabled (boolean enabled)

İleti dizisi güncellemelerini etkinleştirir veya devre dışı bırakır.

true ise VM, ileti dizisi bilgilerini gönderebilir. İleti dizisi bilgileri requestThreadUpdate() ile istenmelidir.

Parametreler
enabled boolean: etkinleştirme işareti.

startMethodTracer

public void startMethodTracer ()

startOpenGlTracing

public boolean startOpenGlTracing ()

İlerlemeler
boolean

startSamplingProfiler

public void startSamplingProfiler (int samplingInterval, 
                TimeUnit timeUnit)

Parametreler
samplingInterval int

timeUnit TimeUnit

stopMethodTracer

public void stopMethodTracer ()

stopOpenGlTracing

public boolean stopOpenGlTracing ()

İlerlemeler
boolean

stopSamplingProfiler

public void stopSamplingProfiler ()

toString

public String toString ()

ClientImpl nesnesinin dize gösterimini döndürür.

İlerlemeler
String

toggleMethodProfiling

public void toggleMethodProfiling ()

Bu yöntem kullanımdan kaldırılmıştır.
Bunun yerine startMethodTracer(), stopMethodTracer(), startSamplingProfiler(int, TimeUnit) veya stopSamplingProfiler() kullanın.

Yöntem profil oluşturma durumunu değiştirir.

güncelleme

public void update (int changeMask)

Parametreler
changeMask int

updateHeapInfo

public void updateHeapInfo ()

Tek bir yığın güncellemesi tetikler.

Korunan yöntemler

gönder

protected void send (JdwpPacket packet)

İstemciye bir DDM paketi gönderin.

İdeal olarak, bunu tek bir kanal yazma işlemiyle yapabiliriz. Bu gerçekleşmezse bu paket tamamlanana kadar başka kimsenin kanala yazmasını engellememiz gerekir. Bu nedenle, kanalda senkronizasyon yaparız.

Bir diğer hedefimiz de gereksiz arabellek kopyalarından kaçınmaktır. Bu nedenle, doğrudan JdwpPacket'in ByteBuffer'ından yazarız.

Parametreler
packet JdwpPacket