ClientImpl
public
class
ClientImpl
extends JdwpAgent
implements
Client
| java.lang.Object | ||
| ↳ | com.android.tradefed.device.server.jdwp.JdwpAgent | |
| ↳ | com.android.tradefed.device.server.ClientImpl | |
Đây là một ứng dụng duy nhất, thường là một quy trình VM Dalvik.
Lớp này cho phép truy cập vào thông tin cơ bản về ứng dụng, cũng như các phương thức để thực hiện hành động trên ứng dụng.
Bạn có thể truy cập vào thông tin chi tiết hơn (thường được cập nhật theo thời gian thực) thông qua lớp ClientData. Mỗi đối tượng Client đều có ClientData riêng được truy cập thông qua getClientData().
Tóm tắt
Hàm khởi tạo công khai | |
|---|---|
ClientImpl(DeviceImpl device, SocketChannel chan, int pid)
Tạo một đối tượng cho kết nối máy khách mới. |
|
Phương thức công khai | |
|---|---|
void
|
captureView(String viewRoot, String view, DebugViewDumpHandler handler)
|
void
|
close(boolean notify)
Đóng kênh ổ cắm máy khách. |
boolean
|
ddmSeen()
MonitorThread gọi phương thức này khi thấy yêu cầu hoặc phản hồi DDM. |
void
|
dumpDisplayList(String viewRoot, String view)
|
void
|
dumpViewHierarchy(String viewRoot, boolean skipChildren, boolean includeProperties, boolean useV2, DebugViewDumpHandler handler)
|
void
|
enableAllocationTracker(boolean enable)
Bật hoặc tắt Allocation tracker (Trình theo dõi việc phân bổ) cho khách hàng này. |
void
|
executeGarbageCollector()
Buộc ứng dụng khách thực thi trình thu gom rác. |
ClientData
|
getClientData()
Trả về đối tượng |
int
|
getDebuggerListenPort()
Trả về cổng gỡ lỗi cho ứng dụng này. |
IDevice
|
getDevice()
Trả về |
DeviceImpl
|
getDeviceImpl()
Trả về |
JdwpPacket
|
getJdwpPacket()
Trả về thông tin cho gói JDWP đầy đủ đầu tiên trong vùng đệm. |
void
|
initializeHeapUpdateStatus()
|
boolean
|
isDdmAware()
Trả về |
boolean
|
isDebuggerAttached()
Trả về |
boolean
|
isHeapUpdateEnabled()
Trả về xem có bật bất kỳ bản cập nhật nào cho vùng nhớ heap hay không. |
boolean
|
isThreadUpdateEnabled()
Trả về xem có bật tính năng cập nhật luồng hay không. |
boolean
|
isValid()
Trả về xem |
void
|
kill()
Gửi thông báo tắt đến máy ảo. |
void
|
listViewRoots(DebugViewDumpHandler replyHandler)
|
void
|
notifyVmMirrorExited()
Các bản sao VM gỡ lỗi có thể thoát ra sau DDMLib, dẫn đến nhiều điều kiện mất |
void
|
packetFailed(JdwpPacket reply)
Một yêu cầu trước đó đã không thành công. |
void
|
read()
Đọc dữ liệu từ kênh của chúng tôi, chỉ nên được gọi từ một luồng. |
void
|
register(Selector sel)
Đăng ký ứng dụng với một Bộ chọn, cần được gọi ngay sau khi tạo ứng dụng. |
void
|
requestAllocationDetails()
Gửi yêu cầu đến VM để gửi thông tin về tất cả các hoạt động phân bổ đã xảy ra kể từ khi gọi đến |
void
|
requestAllocationStatus()
Gửi yêu cầu đến VM để gửi trạng thái bật của tính năng theo dõi việc phân bổ. |
void
|
requestMethodProfilingStatus()
Gửi yêu cầu đến VM để gửi trạng thái bật của tính năng lập hồ sơ phương thức. |
boolean
|
requestNativeHeapInformation()
Gửi yêu cầu cập nhật heap gốc. |
void
|
requestThreadStackTrace(int threadId)
Gửi yêu cầu cập nhật dấu vết ngăn xếp luồng. |
void
|
requestThreadUpdate()
Gửi yêu cầu cập nhật luồng. |
void
|
setHeapInfoUpdateEnabled(boolean enabled)
|
void
|
setHeapSegmentUpdateEnabled(boolean enabled)
|
void
|
setHeapUpdateEnabled(boolean enabled)
Bật hoặc tắt tính năng cập nhật heap. |
void
|
setThreadUpdateEnabled(boolean enabled)
Bật hoặc tắt tính năng cập nhật chuỗi. |
void
|
startMethodTracer()
|
boolean
|
startOpenGlTracing()
|
void
|
startSamplingProfiler(int samplingInterval, TimeUnit timeUnit)
|
void
|
stopMethodTracer()
|
boolean
|
stopOpenGlTracing()
|
void
|
stopSamplingProfiler()
|
String
|
toString()
Trả về một chuỗi đại diện của đối tượng |
void
|
toggleMethodProfiling()
Phương thức này không được dùng nữa.
Thay vào đó, hãy dùng |
void
|
update(int changeMask)
|
void
|
updateHeapInfo()
Kích hoạt một bản cập nhật heap duy nhất. |
Phương thức được bảo vệ | |
|---|---|
void
|
send(JdwpPacket packet)
Gửi một gói DDM đến máy khách. |
Hàm khởi tạo công khai
ClientImpl
public ClientImpl (DeviceImpl device, SocketChannel chan, int pid)
Tạo một đối tượng cho kết nối máy khách mới.
| Tham số | |
|---|---|
device |
DeviceImpl: thiết bị mà ứng dụng này thuộc về |
chan |
SocketChannel: ERROR(/SocketChannel) được kết nối. |
pid |
int: pid của ứng dụng. |
Phương thức công khai
captureView
public void captureView (String viewRoot,
String view,
DebugViewDumpHandler handler)| Tham số | |
|---|---|
viewRoot |
String |
view |
String |
handler |
DebugViewDumpHandler |
đóng
public void close (boolean notify)
Đóng kênh ổ cắm máy khách. Nếu có trình gỡ lỗi liên kết với chúng tôi, hãy đóng trình gỡ lỗi đó.
Việc đóng một kênh sẽ tự động huỷ đăng ký kênh đó khỏi bộ chọn. Tuy nhiên, chúng ta phải lặp lại vòng lặp bộ chọn trước khi vòng lặp này thực sự cho phép các bộ chọn đi và cho phép các bộ mô tả tệp đóng. Người gọi dự kiến sẽ quản lý việc đó.
| Tham số | |
|---|---|
notify |
boolean: Có thông báo cho các trình nghe về một thay đổi hay không. |
ddmSeen
public boolean ddmSeen ()
MonitorThread gọi phương thức này khi thấy yêu cầu hoặc phản hồi DDM. Nếu chưa từng thấy gói DDM nào trước đây, chúng ta sẽ chuyển trạng thái thành ST_READY và trả về "false". Nếu không, chỉ cần trả về giá trị true.
Ý tưởng là cho MonitorThread biết thời điểm chúng ta thấy gói DDM lần đầu tiên, để chúng ta có thể gửi thông báo truyền tin đến các trình xử lý khi một kết nối máy khách được thực hiện. Phương thức này được đồng bộ hoá để chúng ta chỉ gửi thông báo một lần.
| Giá trị trả về | |
|---|---|
boolean |
|
dumpDisplayList
public void dumpDisplayList (String viewRoot,
String view)| Tham số | |
|---|---|
viewRoot |
String |
view |
String |
dumpViewHierarchy
public void dumpViewHierarchy (String viewRoot,
boolean skipChildren,
boolean includeProperties,
boolean useV2,
DebugViewDumpHandler handler)| Tham số | |
|---|---|
viewRoot |
String |
skipChildren |
boolean |
includeProperties |
boolean |
useV2 |
boolean |
handler |
DebugViewDumpHandler |
enableAllocationTracker
public void enableAllocationTracker (boolean enable)
Bật hoặc tắt Allocation tracker (Trình theo dõi việc phân bổ) cho khách hàng này.
Nếu được bật, VM sẽ bắt đầu theo dõi thông tin phân bổ. Lệnh gọi đến requestAllocationDetails() sẽ khiến VM gửi thông tin về tất cả các hoạt động phân bổ xảy ra giữa thời điểm bật và thời điểm yêu cầu.
| Tham số | |
|---|---|
enable |
boolean |
executeGarbageCollector
public void executeGarbageCollector ()
Buộc ứng dụng khách thực thi trình thu gom rác.
getClientData
public ClientData getClientData ()
Trả về đối tượng ClientData chứa thông tin về ứng dụng khách này.
| Giá trị trả về | |
|---|---|
ClientData |
|
getDebuggerListenPort
public int getDebuggerListenPort ()
Trả về cổng gỡ lỗi cho ứng dụng này.
| Giá trị trả về | |
|---|---|
int |
|
getDevice
public IDevice getDevice ()
Trả về IDevice mà Ứng dụng này đang chạy.
| Giá trị trả về | |
|---|---|
IDevice |
|
getDeviceImpl
public DeviceImpl getDeviceImpl ()
Trả về DeviceImpl mà Ứng dụng này đang chạy.
| Giá trị trả về | |
|---|---|
DeviceImpl |
|
getJdwpPacket
public JdwpPacket getJdwpPacket ()
Trả về thông tin cho gói JDWP đầy đủ đầu tiên trong vùng đệm.
Nếu chúng ta chưa có một gói đầy đủ, hãy trả về giá trị null.
Nếu chúng tôi chưa nhận được cái bắt tay JDWP, chúng tôi sẽ theo dõi nó ở đây và sử dụng nó mà không thừa nhận đã làm như vậy. Khi nhận được, chúng tôi sẽ gửi thông báo "HELO", đó là lý do tại sao điều này có thể gây ra một IOException.
Xin lưu ý rằng thứ tự các thao tác khi thiết lập một kết nối là:
Phía máy chủ lưu trữ: 1) adb track-jdwp 2) Nhận danh sách PID mới nhất chứa quy trình ứng dụng. 3) Mở/chuyển tiếp cổng gỡ lỗi và kết nối với thiết bị. 4) Thực hiện quy trình bắt tay. 5) Gửi HELO và chờ phản hồi.
Phía thiết bị/quy trình: a) Phân nhánh zygote và cập nhật ADB bằng PID. b) Gửi APNM nếu cổng gỡ lỗi được kết nối ("<pre-initialize>"). c) Liên kết quy trình với ứng dụng và gói thực tế. d) Gửi APNM đã cập nhật nếu cổng gỡ lỗi được kết nối.
Hai trình tự thực thi ở trên chạy hoàn toàn song song, với ràng buộc duy nhất là a) xảy ra trước 2).
| Giá trị trả về | |
|---|---|
JdwpPacket |
|
initializeHeapUpdateStatus
public void initializeHeapUpdateStatus ()
isDdmAware
public boolean isDdmAware ()
Trả về true nếu VM ứng dụng có nhận biết DDM.
Bạn chỉ có thể gọi ở đây sau khi thiết lập kết nối.
| Giá trị trả về | |
|---|---|
boolean |
|
isDebuggerAttached
public boolean isDebuggerAttached ()
Trả về true nếu một trình gỡ lỗi hiện được đính kèm vào ứng dụng.
| Giá trị trả về | |
|---|---|
boolean |
|
isHeapUpdateEnabled
public boolean isHeapUpdateEnabled ()
Trả về xem có bật bất kỳ bản cập nhật nào cho vùng nhớ heap hay không.
| Giá trị trả về | |
|---|---|
boolean |
|
Xem thêm:
isThreadUpdateEnabled
public boolean isThreadUpdateEnabled ()
Trả về xem có bật tính năng cập nhật luồng hay không.
| Giá trị trả về | |
|---|---|
boolean |
|
isValid
public boolean isValid ()
Trả về xem ClientImpl này có kết nối hợp lệ với VM ứng dụng hay không.
| Giá trị trả về | |
|---|---|
boolean |
|
kill
public void kill ()
Gửi thông báo tắt đến máy ảo. Cách này không nhất thiết hiệu quả nếu VM đang ở trạng thái gặp sự cố.
listViewRoots
public void listViewRoots (DebugViewDumpHandler replyHandler)
| Tham số | |
|---|---|
replyHandler |
DebugViewDumpHandler |
notifyVmMirrorExited
public void notifyVmMirrorExited ()
Các bản sao VM gỡ lỗi có thể thoát ra sau DDMLib, dẫn đến nhiều điều kiện mất Client vĩnh viễn hoặc điều kiện xung đột. Chúng ta cần thông báo cho DDMLib rằng trình gỡ lỗi hiện đang được đính kèm sẽ thoát và huỷ kết nối phản chiếu VM.
packetFailed
public void packetFailed (JdwpPacket reply)
Một yêu cầu trước đó đã không thành công. Đây là phản hồi dự kiến cho thông báo HELO khi trao đổi với một ứng dụng không phải DDM.
| Tham số | |
|---|---|
reply |
JdwpPacket |
đọc
public void read ()
Đọc dữ liệu từ kênh của chúng tôi, chỉ nên được gọi từ một luồng.
Hàm này được gọi khi dữ liệu được biết là có sẵn và chúng ta chưa có một gói đầy đủ trong vùng đệm. Nếu bộ nhớ đệm đã đầy, hãy mở rộng bộ nhớ đệm.
đăng ký
public void register (Selector sel)
Đăng ký ứng dụng với một Bộ chọn, cần được gọi ngay sau khi tạo ứng dụng.
| Tham số | |
|---|---|
sel |
Selector |
requestAllocationDetails
public void requestAllocationDetails ()
Gửi yêu cầu đến VM để gửi thông tin về tất cả các hoạt động phân bổ đã xảy ra kể từ khi gọi đến enableAllocationTracker(boolean) với enable được đặt thành null. Đây là thao tác không đồng bộ.
Bạn có thể truy cập thông tin phân bổ bằng ClientData.getAllocations(). Thông báo cho biết dữ liệu mới đã có sẽ được nhận thông qua AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) với changeMask chứa mặt nạ Client.CHANGE_HEAP_ALLOCATIONS.
requestAllocationStatus
public void requestAllocationStatus ()
Gửi yêu cầu đến VM để gửi trạng thái bật của tính năng theo dõi việc phân bổ. Đây là thao tác không đồng bộ.
Bạn có thể truy cập vào trạng thái phân bổ bằng ClientData.getAllocationStatus(). Thông báo cho biết trạng thái mới đã có sẽ được nhận qua AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) với changeMask chứa mặt nạ Client.CHANGE_HEAP_ALLOCATION_STATUS.
requestMethodProfilingStatus
public void requestMethodProfilingStatus ()
Gửi yêu cầu đến VM để gửi trạng thái bật của tính năng lập hồ sơ phương thức. Đây là thao tác không đồng bộ.
Bạn có thể truy cập vào trạng thái phân bổ bằng ClientData.getAllocationStatus(). Thông báo cho biết trạng thái mới đã có sẽ được nhận qua AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) với changeMask chứa mặt nạ Client.CHANGE_HEAP_ALLOCATION_STATUS.
requestNativeHeapInformation
public boolean requestNativeHeapInformation ()
Gửi yêu cầu cập nhật vùng nhớ heap gốc. Đây là yêu cầu không đồng bộ.
Bạn có thể truy cập vào thông tin về vùng nhớ heap gốc bằng ClientData.getNativeAllocationList(). Thông báo cho biết dữ liệu mới đã có sẽ được nhận thông qua AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) với changeMask chứa mặt nạ Client.CHANGE_NATIVE_HEAP_DATA.
| Giá trị trả về | |
|---|---|
boolean |
|
requestThreadStackTrace
public void requestThreadStackTrace (int threadId)
Gửi yêu cầu cập nhật dấu vết ngăn xếp luồng. Đây là thao tác không đồng bộ.
ClientData.getThreads() và ThreadInfo.getStackTrace() có thể truy cập vào thông tin về luồng.
Thông báo cho biết dữ liệu mới đã có sẽ được nhận thông qua AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) với một changeMask chứa mặt nạ Client.CHANGE_THREAD_STACKTRACE.
| Tham số | |
|---|---|
threadId |
int |
requestThreadUpdate
public void requestThreadUpdate ()
Gửi yêu cầu cập nhật luồng. Đây là thao tác không đồng bộ.
ClientData.getThreads() có thể truy cập vào thông tin về luồng. Thông báo cho biết dữ liệu mới có sẵn sẽ được nhận thông qua AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) với changeMask chứa mặt nạ Client.CHANGE_THREAD_DATA.
setHeapInfoUpdateEnabled
public void setHeapInfoUpdateEnabled (boolean enabled)
| Tham số | |
|---|---|
enabled |
boolean |
setHeapSegmentUpdateEnabled
public void setHeapSegmentUpdateEnabled (boolean enabled)
| Tham số | |
|---|---|
enabled |
boolean |
setHeapUpdateEnabled
public void setHeapUpdateEnabled (boolean enabled)
Bật hoặc tắt tính năng cập nhật heap.
Nếu giá trị là true, mọi GC sẽ khiến ứng dụng gửi thông tin về vùng nhớ của ứng dụng.
Bạn có thể truy cập thông tin về vùng nhớ đống bằng ClientData.getVmHeapData().
Thông báo cho biết dữ liệu mới có sẵn sẽ được nhận thông qua AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) với changeMask chứa giá trị Client.CHANGE_HEAP_DATA.
| Tham số | |
|---|---|
enabled |
boolean: cờ bật |
setThreadUpdateEnabled
public void setThreadUpdateEnabled (boolean enabled)
Bật hoặc tắt tính năng cập nhật chuỗi.
Nếu true, VM sẽ có thể gửi thông tin về luồng. Bạn phải yêu cầu thông tin về luồng bằng requestThreadUpdate().
| Tham số | |
|---|---|
enabled |
boolean: cờ bật. |
startMethodTracer
public void startMethodTracer ()
startOpenGlTracing
public boolean startOpenGlTracing ()
| Giá trị trả về | |
|---|---|
boolean |
|
startSamplingProfiler
public void startSamplingProfiler (int samplingInterval,
TimeUnit timeUnit)| Tham số | |
|---|---|
samplingInterval |
int |
timeUnit |
TimeUnit |
stopMethodTracer
public void stopMethodTracer ()
stopOpenGlTracing
public boolean stopOpenGlTracing ()
| Giá trị trả về | |
|---|---|
boolean |
|
stopSamplingProfiler
public void stopSamplingProfiler ()
toString
public String toString ()
Trả về một chuỗi đại diện của đối tượng ClientImpl.
| Giá trị trả về | |
|---|---|
String |
|
toggleMethodProfiling
public void toggleMethodProfiling ()
Phương thức này không được dùng nữa.
Thay vào đó, hãy sử dụng startMethodTracer(), stopMethodTracer(), startSamplingProfiler(int, TimeUnit) hoặc stopSamplingProfiler().
Chuyển đổi trạng thái lập hồ sơ phương thức.
cập nhật
public void update (int changeMask)
| Tham số | |
|---|---|
changeMask |
int |
updateHeapInfo
public void updateHeapInfo ()
Kích hoạt một bản cập nhật heap duy nhất.
Phương thức được bảo vệ
gửi
protected void send (JdwpPacket packet)
Gửi một gói DDM đến máy khách.
Lý tưởng nhất là chúng ta có thể thực hiện việc này bằng một thao tác ghi trên kênh duy nhất. Nếu điều đó không xảy ra, chúng ta phải ngăn mọi người khác ghi vào kênh cho đến khi gói này hoàn tất, vì vậy, chúng ta sẽ đồng bộ hoá trên kênh.
Một mục tiêu khác là tránh các bản sao đệm không cần thiết, vì vậy, chúng ta sẽ ghi trực tiếp từ ByteBuffer của JdwpPacket.
| Tham số | |
|---|---|
packet |
JdwpPacket |