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 ClientData yang berisi informasi klien ini.

int getDebuggerListenPort()

Menampilkan port debugger untuk klien ini.

IDevice getDevice()

Menampilkan IDevice tempat Klien ini berjalan.

DeviceImpl getDeviceImpl()

Menampilkan DeviceImpl tempat Klien ini berjalan.

JdwpPacket getJdwpPacket()

Menampilkan informasi untuk paket JDWP lengkap pertama dalam buffer.

void initializeHeapUpdateStatus()
boolean isDdmAware()

Menampilkan true jika VM klien kompatibel dengan DDM.

boolean isDebuggerAttached()

Menampilkan true jika debugger saat ini terhubung ke klien.

boolean isHeapUpdateEnabled()

Menampilkan apakah ada update heap yang diaktifkan.

boolean isThreadUpdateEnabled()

Menampilkan apakah update thread diaktifkan.

boolean isValid()

Menampilkan apakah ClientImpl ini memiliki koneksi yang valid ke VM aplikasi.

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-Client atau race.

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 enableAllocationTracker(boolean) dengan enable disetel ke null.

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 ClientImpl.

void toggleMethodProfiling()

Metode ini tidak digunakan lagi. Sebagai gantinya, gunakan startMethodTracer(), stopMethodTracer(), startSamplingProfiler(int, TimeUnit), atau stopSamplingProfiler().

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

getDevice

public IDevice getDevice ()

Menampilkan IDevice tempat Klien ini berjalan.

Hasil
IDevice

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

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