ClientImpl
public
class
ClientImpl
extends JdwpAgent
implements
Client
| java.lang.Object | ||
| ↳ | com.android.tradefed.device.server.jdwp.JdwpAgent | |
| ↳ | com.android.tradefed.device.server.ClientImpl | |
Ini mewakili satu klien, biasanya proses VM Dalvik.
Class ini memberikan akses ke informasi klien dasar, serta metode untuk melakukan tindakan pada klien.
Informasi yang lebih mendetail, yang biasanya diperbarui secara real time, dapat diakses melalui class ClientData. Setiap objek Client memiliki ClientData-nya sendiri yang diakses melalui getClientData().
Ringkasan
Konstruktor publik | |
|---|---|
ClientImpl(DeviceImpl device, SocketChannel chan, int pid)
Buat objek untuk koneksi klien baru. |
|
Metode publik | |
|---|---|
void
|
captureView(String viewRoot, String view, DebugViewDumpHandler handler)
|
void
|
close(boolean notify)
Tutup saluran soket klien. |
boolean
|
ddmSeen()
MonitorThread memanggil ini saat melihat permintaan atau respons DDM. |
void
|
dumpDisplayList(String viewRoot, String view)
|
void
|
dumpViewHierarchy(String viewRoot, boolean skipChildren, boolean includeProperties, boolean useV2, DebugViewDumpHandler handler)
|
void
|
enableAllocationTracker(boolean enable)
Mengaktifkan atau menonaktifkan Pelacak alokasi untuk klien ini. |
void
|
executeGarbageCollector()
Memaksa klien untuk menjalankan pengumpul sampah. |
ClientData
|
getClientData()
Menampilkan objek |
int
|
getDebuggerListenPort()
Menampilkan port debugger untuk klien ini. |
IDevice
|
getDevice()
Menampilkan |
DeviceImpl
|
getDeviceImpl()
Menampilkan |
JdwpPacket
|
getJdwpPacket()
Menampilkan informasi untuk paket JDWP lengkap pertama dalam buffer. |
void
|
initializeHeapUpdateStatus()
|
boolean
|
isDdmAware()
Menampilkan |
boolean
|
isDebuggerAttached()
Menampilkan |
boolean
|
isHeapUpdateEnabled()
Menampilkan apakah ada update heap yang diaktifkan. |
boolean
|
isThreadUpdateEnabled()
Menampilkan apakah update thread diaktifkan. |
boolean
|
isValid()
Menampilkan apakah |
void
|
kill()
Mengirim pesan penonaktifan ke VM. |
void
|
listViewRoots(DebugViewDumpHandler replyHandler)
|
void
|
notifyVmMirrorExited()
Duplikat VM debugger dapat keluar di belakang DDMLib, sehingga menyebabkan berbagai kondisi kehilangan perma- |
void
|
packetFailed(JdwpPacket reply)
Permintaan sebelumnya mengalami kegagalan. |
void
|
read()
Membaca data dari channel kami, hanya boleh dipanggil dari satu thread. |
void
|
register(Selector sel)
Mendaftarkan klien dengan Pemilih, harus dipanggil segera setelah pembuatan klien. |
void
|
requestAllocationDetails()
Mengirim permintaan ke VM untuk mengirim informasi tentang semua alokasi yang telah terjadi sejak panggilan ke |
void
|
requestAllocationStatus()
Mengirim permintaan ke VM untuk mengirim status aktif pelacakan alokasi. |
void
|
requestMethodProfilingStatus()
Mengirim permintaan ke VM untuk mengirim status aktif profil metode. |
boolean
|
requestNativeHeapInformation()
Mengirim permintaan update heap native. |
void
|
requestThreadStackTrace(int threadId)
Mengirim permintaan pembaruan rekaman aktivitas stack thread. |
void
|
requestThreadUpdate()
Mengirim permintaan update thread. |
void
|
setHeapInfoUpdateEnabled(boolean enabled)
|
void
|
setHeapSegmentUpdateEnabled(boolean enabled)
|
void
|
setHeapUpdateEnabled(boolean enabled)
Mengaktifkan atau menonaktifkan update heap. |
void
|
setThreadUpdateEnabled(boolean enabled)
Mengaktifkan atau menonaktifkan pembaruan rangkaian pesan. |
void
|
startMethodTracer()
|
boolean
|
startOpenGlTracing()
|
void
|
startSamplingProfiler(int samplingInterval, TimeUnit timeUnit)
|
void
|
stopMethodTracer()
|
boolean
|
stopOpenGlTracing()
|
void
|
stopSamplingProfiler()
|
String
|
toString()
Menampilkan representasi string dari objek |
void
|
toggleMethodProfiling()
Metode ini tidak digunakan lagi.
Sebagai gantinya, gunakan |
void
|
update(int changeMask)
|
void
|
updateHeapInfo()
Mengirimkan satu update heap. |
Metode yang dilindungi | |
|---|---|
void
|
send(JdwpPacket packet)
Kirim paket DDM ke klien. |
Konstruktor publik
ClientImpl
public ClientImpl (DeviceImpl device, SocketChannel chan, int pid)
Buat objek untuk koneksi klien baru.
| Parameter | |
|---|---|
device |
DeviceImpl: perangkat tempat klien ini berada |
chan |
SocketChannel: ERROR(/SocketChannel) yang terhubung. |
pid |
int: pid klien. |
Metode publik
captureView
public void captureView (String viewRoot,
String view,
DebugViewDumpHandler handler)| Parameter | |
|---|---|
viewRoot |
String |
view |
String |
handler |
DebugViewDumpHandler |
tutup
public void close (boolean notify)
Tutup saluran socket klien. Jika ada debugger yang terkait dengan kami, tutup juga.
Menutup channel akan otomatis membatalkan pendaftarannya dari pemilih. Namun, kita harus melakukan iterasi melalui loop pemilih sebelum benar-benar melepaskannya dan memungkinkan deskriptor file ditutup. Penelepon diharapkan mengelolanya.
| Parameter | |
|---|---|
notify |
boolean: Apakah akan memberi tahu pemroses tentang perubahan atau tidak. |
ddmSeen
public boolean ddmSeen ()
MonitorThread memanggil ini saat melihat permintaan atau respons DDM. Jika belum pernah melihat paket DDM sebelumnya, kita akan mengubah status ke ST_READY dan menampilkan "false". Jika tidak, cukup tampilkan benar (true).
Idenya adalah memberi tahu MonitorThread saat kita pertama kali melihat paket DDM, sehingga kita dapat mengirim siaran ke handler saat koneksi klien dibuat. Metode ini disinkronkan sehingga kita hanya mengirim siaran satu kali.
| Hasil | |
|---|---|
boolean |
|
dumpDisplayList
public void dumpDisplayList (String viewRoot,
String view)| Parameter | |
|---|---|
viewRoot |
String |
view |
String |
dumpViewHierarchy
public void dumpViewHierarchy (String viewRoot,
boolean skipChildren,
boolean includeProperties,
boolean useV2,
DebugViewDumpHandler handler)| Parameter | |
|---|---|
viewRoot |
String |
skipChildren |
boolean |
includeProperties |
boolean |
useV2 |
boolean |
handler |
DebugViewDumpHandler |
enableAllocationTracker
public void enableAllocationTracker (boolean enable)
Mengaktifkan atau menonaktifkan Pelacak alokasi untuk klien ini.
Jika diaktifkan, VM akan mulai melacak informasi alokasi. Panggilan ke requestAllocationDetails() akan membuat VM mengirimkan informasi tentang semua alokasi yang terjadi antara pengaktifan dan permintaan.
| Parameter | |
|---|---|
enable |
boolean |
executeGarbageCollector
public void executeGarbageCollector ()
Memaksa klien untuk menjalankan pengumpul sampah.
getClientData
public ClientData getClientData ()
Menampilkan objek ClientData yang berisi informasi klien ini.
| Hasil | |
|---|---|
ClientData |
|
getDebuggerListenPort
public int getDebuggerListenPort ()
Menampilkan port debugger untuk klien ini.
| Hasil | |
|---|---|
int |
|
getDeviceImpl
public DeviceImpl getDeviceImpl ()
Menampilkan DeviceImpl tempat Klien ini berjalan.
| Hasil | |
|---|---|
DeviceImpl |
|
getJdwpPacket
public JdwpPacket getJdwpPacket ()
Menampilkan informasi untuk paket JDWP lengkap pertama dalam buffer.
Jika kita belum memiliki paket lengkap, tampilkan null.
Jika kami belum menerima handshake JDWP, kami akan memantaunya di sini dan menggunakannya tanpa mengakui telah melakukannya. Setelah menerima, kami akan mengirim pesan "HELO", yang dapat memunculkan IOException.
Perhatikan urutan operasi saat membuat koneksi adalah:
Sisi host: 1) adb track-jdwp 2) Menerima daftar PID yang diperbarui yang berisi proses aplikasi. 3) Buka/terus kirim port debugger dan hubungkan ke perangkat. 4) Lakukan handshake. 5) Kirim HELO dan tunggu respons.
Sisi perangkat/proses: a) Fork zygote dan perbarui ADB dengan PID. b) Kirim APNM jika port debugger terhubung ("<pre-initialize>"). c) Ikat proses ke aplikasi dan paket sebenarnya. d) Kirim APNM yang diperbarui jika port debugger terhubung.
Dua urutan eksekusi di atas berjalan sepenuhnya secara paralel, dengan satu-satunya batasan adalah a) terjadi sebelum 2).
| Hasil | |
|---|---|
JdwpPacket |
|
initializeHeapUpdateStatus
public void initializeHeapUpdateStatus ()
isDdmAware
public boolean isDdmAware ()
Menampilkan true jika VM klien kompatibel dengan DDM.
Panggilan di sini hanya diizinkan setelah koneksi dibuat.
| Hasil | |
|---|---|
boolean |
|
isDebuggerAttached
public boolean isDebuggerAttached ()
Menampilkan true jika debugger saat ini terhubung ke klien.
| Hasil | |
|---|---|
boolean |
|
isHeapUpdateEnabled
public boolean isHeapUpdateEnabled ()
Menampilkan apakah ada update heap yang diaktifkan.
| Hasil | |
|---|---|
boolean |
|
Lihat juga:
isThreadUpdateEnabled
public boolean isThreadUpdateEnabled ()
Menampilkan apakah update thread diaktifkan.
| Hasil | |
|---|---|
boolean |
|
isValid
public boolean isValid ()
Menampilkan apakah ClientImpl ini memiliki koneksi yang valid ke VM aplikasi.
| Hasil | |
|---|---|
boolean |
|
membunuh
public void kill ()
Mengirim pesan penonaktifan ke VM. Tindakan ini belum tentu berfungsi jika VM dalam status error.
listViewRoots
public void listViewRoots (DebugViewDumpHandler replyHandler)
| Parameter | |
|---|---|
replyHandler |
DebugViewDumpHandler |
notifyVmMirrorExited
public void notifyVmMirrorExited ()
Duplikat VM debugger dapat keluar di belakang DDMLib, sehingga menyebabkan berbagai kondisi kehilangan perma-Client atau race. Kita perlu memberi tahu DDMLib bahwa debugger yang saat ini terlampir sedang keluar dan menghentikan koneksi mirror VM-nya.
packetFailed
public void packetFailed (JdwpPacket reply)
Permintaan sebelumnya mengalami kegagalan. Ini adalah respons yang diharapkan terhadap pesan HELO saat berkomunikasi dengan klien non-DDM.
| Parameter | |
|---|---|
reply |
JdwpPacket |
baca
public void read ()
Membaca data dari channel kami, hanya boleh dipanggil dari satu thread.
Fungsi ini dipanggil saat data diketahui tersedia, dan kita belum memiliki paket lengkap dalam buffer. Jika buffer sudah penuh, perluas buffer.
mendaftar
public void register (Selector sel)
Mendaftarkan klien dengan Pemilih, harus dipanggil segera setelah pembuatan klien.
| Parameter | |
|---|---|
sel |
Selector |
requestAllocationDetails
public void requestAllocationDetails ()
Mengirim permintaan ke VM untuk mengirim informasi tentang semua alokasi yang telah terjadi sejak panggilan ke enableAllocationTracker(boolean) dengan enable
disetel ke null. Tindakan ini bersifat asinkron.
Informasi alokasi dapat diakses oleh ClientData.getAllocations(). Notifikasi bahwa data baru tersedia akan diterima melalui AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) dengan changeMask
yang berisi mask Client.CHANGE_HEAP_ALLOCATIONS.
requestAllocationStatus
public void requestAllocationStatus ()
Mengirim permintaan ke VM untuk mengirim status aktif pelacakan alokasi. Ini bersifat asinkron.
Status alokasi dapat diakses oleh ClientData.getAllocationStatus(). Notifikasi bahwa status baru tersedia akan diterima melalui AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) dengan changeMask
yang berisi mask Client.CHANGE_HEAP_ALLOCATION_STATUS.
requestMethodProfilingStatus
public void requestMethodProfilingStatus ()
Mengirim permintaan ke VM untuk mengirim status aktif profil metode. Ini bersifat asinkron.
Status alokasi dapat diakses oleh ClientData.getAllocationStatus(). Notifikasi bahwa status baru tersedia akan diterima melalui AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) dengan changeMask
yang berisi mask Client.CHANGE_HEAP_ALLOCATION_STATUS.
requestNativeHeapInformation
public boolean requestNativeHeapInformation ()
Mengirim permintaan update heap native. Ini bersifat asinkron.
Info heap native dapat diakses oleh ClientData.getNativeAllocationList(). Notifikasi bahwa data baru tersedia akan diterima melalui AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) dengan changeMask
yang berisi mask Client.CHANGE_NATIVE_HEAP_DATA.
| Hasil | |
|---|---|
boolean |
|
requestThreadStackTrace
public void requestThreadStackTrace (int threadId)
Mengirim permintaan pembaruan rekaman aktivitas stack thread. Tindakan ini bersifat asinkron.
Info thread dapat diakses oleh ClientData.getThreads() dan ThreadInfo.getStackTrace().
Notifikasi bahwa data baru tersedia akan diterima melalui AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) dengan changeMask
yang berisi mask Client.CHANGE_THREAD_STACKTRACE.
| Parameter | |
|---|---|
threadId |
int |
requestThreadUpdate
public void requestThreadUpdate ()
Mengirim permintaan update thread. Tindakan ini bersifat asinkron.
Info thread dapat diakses oleh ClientData.getThreads(). Notifikasi bahwa data baru tersedia akan diterima melalui AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) dengan changeMask
yang berisi mask Client.CHANGE_THREAD_DATA.
setHeapInfoUpdateEnabled
public void setHeapInfoUpdateEnabled (boolean enabled)
| Parameter | |
|---|---|
enabled |
boolean |
setHeapSegmentUpdateEnabled
public void setHeapSegmentUpdateEnabled (boolean enabled)
| Parameter | |
|---|---|
enabled |
boolean |
setHeapUpdateEnabled
public void setHeapUpdateEnabled (boolean enabled)
Mengaktifkan atau menonaktifkan pembaruan heap.
Jika true, GC apa pun akan menyebabkan klien mengirimkan informasi heap-nya.
Informasi heap dapat diakses oleh ClientData.getVmHeapData().
Notifikasi bahwa data baru tersedia akan diterima melalui AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) dengan changeMask
yang berisi nilai Client.CHANGE_HEAP_DATA.
| Parameter | |
|---|---|
enabled |
boolean: flag aktifkan |
setThreadUpdateEnabled
public void setThreadUpdateEnabled (boolean enabled)
Mengaktifkan atau menonaktifkan pembaruan rangkaian pesan.
Jika true, VM akan dapat mengirimkan informasi thread. Informasi thread
harus diminta dengan requestThreadUpdate().
| Parameter | |
|---|---|
enabled |
boolean: flag aktifkan. |
startMethodTracer
public void startMethodTracer ()
startOpenGlTracing
public boolean startOpenGlTracing ()
| Hasil | |
|---|---|
boolean |
|
startSamplingProfiler
public void startSamplingProfiler (int samplingInterval,
TimeUnit timeUnit)| Parameter | |
|---|---|
samplingInterval |
int |
timeUnit |
TimeUnit |
stopMethodTracer
public void stopMethodTracer ()
stopOpenGlTracing
public boolean stopOpenGlTracing ()
| Hasil | |
|---|---|
boolean |
|
stopSamplingProfiler
public void stopSamplingProfiler ()
toString
public String toString ()
Menampilkan representasi string dari objek ClientImpl.
| Hasil | |
|---|---|
String |
|
toggleMethodProfiling
public void toggleMethodProfiling ()
Metode ini tidak digunakan lagi.
Sebagai gantinya, gunakan startMethodTracer(), stopMethodTracer(), startSamplingProfiler(int, TimeUnit), atau stopSamplingProfiler().
Mengalihkan status pembuatan profil metode.
update
public void update (int changeMask)
| Parameter | |
|---|---|
changeMask |
int |
updateHeapInfo
public void updateHeapInfo ()
Memicu satu update heap.
Metode yang dilindungi
kirim
protected void send (JdwpPacket packet)
Kirim paket DDM ke klien.
Idealnya, kita dapat melakukannya dengan penulisan satu channel. Jika hal itu tidak terjadi, kita harus mencegah orang lain menulis ke saluran hingga paket ini selesai, jadi kita menyinkronkan saluran.
Tujuan lainnya adalah menghindari salinan buffer yang tidak perlu, jadi kita menulis langsung dari ByteBuffer JdwpPacket.
| Parameter | |
|---|---|
packet |
JdwpPacket |