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 |
int
|
getDebuggerListenPort()
Bu istemcinin hata ayıklayıcı bağlantı noktasını döndürür. |
IDevice
|
getDevice()
Bu istemcinin üzerinde çalıştığı |
DeviceImpl
|
getDeviceImpl()
Bu istemcinin üzerinde çalıştığı |
JdwpPacket
|
getJdwpPacket()
Arabellekteki ilk tam JDWP paketi için bilgileri döndürür. |
void
|
initializeHeapUpdateStatus()
|
boolean
|
isDdmAware()
İstemci VM DDM'ye duyarlıysa |
boolean
|
isDebuggerAttached()
Bir hata ayıklayıcı şu anda istemciye bağlıysa |
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 |
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ı |
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()
|
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()
|
void
|
toggleMethodProfiling()
Bu yöntem kullanımdan kaldırılmıştır.
Bunun yerine |
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 |
|
Ayrıca:
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 |