ClientImpl
public
class
ClientImpl
extends JdwpAgent
implements
Client
| java.lang.Object | ||
| ↳ | com.android.tradefed.device.server.jdwp.JdwpAgent | |
| ↳ | com.android.tradefed.device.server.ClientImpl | |
これは単一のクライアント(通常は Dalvik VM プロセス)を表します。
このクラスは、基本的なクライアント情報と、クライアントに対してアクションを実行するメソッドへのアクセスを提供します。
通常はリアルタイムで更新される詳細情報には、ClientData クラスからアクセスできます。各 Client オブジェクトには、getClientData() を介してアクセスされる独自の ClientData があります。
概要
パブリック コンストラクタ | |
|---|---|
ClientImpl(DeviceImpl device, SocketChannel chan, int pid)
新しいクライアント接続のオブジェクトを作成します。 |
|
パブリック メソッド | |
|---|---|
void
|
captureView(String viewRoot, String view, DebugViewDumpHandler handler)
|
void
|
close(boolean notify)
クライアント ソケット チャネルを閉じます。 |
boolean
|
ddmSeen()
MonitorThread は、DDM リクエストまたはレスポンスを検出すると、これを呼び出します。 |
void
|
dumpDisplayList(String viewRoot, String view)
|
void
|
dumpViewHierarchy(String viewRoot, boolean skipChildren, boolean includeProperties, boolean useV2, DebugViewDumpHandler handler)
|
void
|
enableAllocationTracker(boolean enable)
このクライアントの割り当てトラッカーを有効または無効にします。 |
void
|
executeGarbageCollector()
クライアントにガベージ コレクタの実行を強制します。 |
ClientData
|
getClientData()
このクライアント情報を含む |
int
|
getDebuggerListenPort()
このクライアントのデバッガポートを返します。 |
IDevice
|
getDevice()
この Client が実行されている |
DeviceImpl
|
getDeviceImpl()
この Client が実行されている |
JdwpPacket
|
getJdwpPacket()
バッファ内の最初の完全な JDWP パケットの情報を返します。 |
void
|
initializeHeapUpdateStatus()
|
boolean
|
isDdmAware()
クライアント VM が DDM 対応の場合は |
boolean
|
isDebuggerAttached()
デバッガが現在クライアントにアタッチされている場合は |
boolean
|
isHeapUpdateEnabled()
ヒープの更新が有効かどうかを返します。 |
boolean
|
isThreadUpdateEnabled()
スレッドの更新が有効かどうかを返します。 |
boolean
|
isValid()
この |
void
|
kill()
VM に kill メッセージを送信します。 |
void
|
listViewRoots(DebugViewDumpHandler replyHandler)
|
void
|
notifyVmMirrorExited()
デバッガ VM ミラーが DDMLib の背後で終了し、さまざまな競合状態や永続的な |
void
|
packetFailed(JdwpPacket reply)
以前のリクエストでエラーが発生しました。 |
void
|
read()
チャンネルからデータを読み取ります。1 つのスレッドからのみ呼び出す必要があります。 |
void
|
register(Selector sel)
クライアントをセレクタに登録します。クライアントの作成直後に呼び出す必要があります。 |
void
|
requestAllocationDetails()
enable が |
void
|
requestAllocationStatus()
割り当てトラッキングの有効ステータスを送信するよう VM にリクエストを送信します。 |
void
|
requestMethodProfilingStatus()
メソッド プロファイリングの有効ステータスを送信するよう VM にリクエストを送信します。 |
boolean
|
requestNativeHeapInformation()
ネイティブ ヒープ更新リクエストを送信します。 |
void
|
requestThreadStackTrace(int threadId)
スレッド スタック トレースの更新リクエストを送信します。 |
void
|
requestThreadUpdate()
スレッド更新リクエストを送信します。 |
void
|
setHeapInfoUpdateEnabled(boolean enabled)
|
void
|
setHeapSegmentUpdateEnabled(boolean enabled)
|
void
|
setHeapUpdateEnabled(boolean enabled)
ヒープの更新を有効または無効にします。 |
void
|
setThreadUpdateEnabled(boolean enabled)
スレッドの更新を有効または無効にします。 |
void
|
startMethodTracer()
|
boolean
|
startOpenGlTracing()
|
void
|
startSamplingProfiler(int samplingInterval, TimeUnit timeUnit)
|
void
|
stopMethodTracer()
|
boolean
|
stopOpenGlTracing()
|
void
|
stopSamplingProfiler()
|
String
|
toString()
|
void
|
toggleMethodProfiling()
このメソッドは非推奨です。代わりに |
void
|
update(int changeMask)
|
void
|
updateHeapInfo()
単一のヒープ更新をトリガーします。 |
保護されたメソッド | |
|---|---|
void
|
send(JdwpPacket packet)
クライアントに DDM パケットを送信します。 |
パブリック コンストラクタ
ClientImpl
public ClientImpl (DeviceImpl device, SocketChannel chan, int pid)
新しいクライアント接続のオブジェクトを作成します。
| パラメータ | |
|---|---|
device |
DeviceImpl: このクライアントが属するデバイス |
chan |
SocketChannel: 接続された ERROR(/SocketChannel)。 |
pid |
int: クライアント PID。 |
パブリック メソッド
captureView
public void captureView (String viewRoot,
String view,
DebugViewDumpHandler handler)| パラメータ | |
|---|---|
viewRoot |
String |
view |
String |
handler |
DebugViewDumpHandler |
閉じる
public void close (boolean notify)
クライアント ソケット チャネルを閉じます。関連付けられているデバッガがある場合は、それも閉じます。
チャンネルを閉じると、セレクタから自動的に登録解除されます。ただし、実際に処理を続行してファイル記述子を閉じることができるようになる前に、セレクタ ループを反復処理する必要があります。呼び出し元がそれを管理することが想定されています。
| パラメータ | |
|---|---|
notify |
boolean: 変更をリスナーに通知するかどうか。 |
ddmSeen
public boolean ddmSeen ()
MonitorThread は、DDM リクエストまたはレスポンスを検出すると、このメソッドを呼び出します。DDM パケットをまだ受信していない場合は、状態を ST_READY に進めて「false」を返します。それ以外の場合は、true を返します。
このアイデアは、DDM パケットを最初に確認したときに MonitorThread に通知し、クライアント接続が確立されたときにハンドラにブロードキャストを送信できるようにすることです。このメソッドは同期されているため、ブロードキャストは 1 回だけ送信されます。
| 戻り値 | |
|---|---|
boolean |
|
dumpDisplayList
public void dumpDisplayList (String viewRoot,
String view)| パラメータ | |
|---|---|
viewRoot |
String |
view |
String |
dumpViewHierarchy
public void dumpViewHierarchy (String viewRoot,
boolean skipChildren,
boolean includeProperties,
boolean useV2,
DebugViewDumpHandler handler)| パラメータ | |
|---|---|
viewRoot |
String |
skipChildren |
boolean |
includeProperties |
boolean |
useV2 |
boolean |
handler |
DebugViewDumpHandler |
enableAllocationTracker
public void enableAllocationTracker (boolean enable)
このクライアントの割り当てトラッカーを有効または無効にします。
有効にすると、VM は割り当て情報のトラッキングを開始します。requestAllocationDetails() を呼び出すと、VM は有効化とリクエストの間に発生したすべての割り当てに関する情報を送信します。
| パラメータ | |
|---|---|
enable |
boolean |
executeGarbageCollector
public void executeGarbageCollector ()
クライアントにガベージ コレクタの実行を強制します。
getClientData
public ClientData getClientData ()
このクライアント情報を含む ClientData オブジェクトを返します。
| 戻り値 | |
|---|---|
ClientData |
|
getDebuggerListenPort
public int getDebuggerListenPort ()
このクライアントのデバッガポートを返します。
| 戻り値 | |
|---|---|
int |
|
getDeviceImpl
public DeviceImpl getDeviceImpl ()
この Client が実行されている DeviceImpl を返します。
| 戻り値 | |
|---|---|
DeviceImpl |
|
getJdwpPacket
public JdwpPacket getJdwpPacket ()
バッファ内の最初の完全な JDWP パケットの情報を返します。
完全なパケットがまだない場合は、null を返します。
JDWP ハンドシェイクをまだ受信していない場合は、ここでそれを監視し、受信したことを認めずに消費します。受信すると「HELO」メッセージを送信します。これが IOException をスローする理由です。
接続の確立に関するオペレーションの順序は次のとおりです。
ホスト側: 1) adb track-jdwp 2) アプリプロセスを含む PID の更新されたリストを受信します。3) デバッガポートを開いて転送し、デバイスに接続します。4)ハンドシェイクを実行します。5)HELO を送信し、応答を待ちます。
デバイス/プロセス側: a) 接合子をフォークし、PID で ADB を更新します。b) デバッガポートが接続されている場合は APNM を送信します(「<pre-initialize>」)。c) プロセスを実際のアプリとパッケージにバインドします。d) デバッガポートが接続されている場合は、更新された APNM を送信します。
上記の 2 つの実行シーケンスは完全に並行して実行されます。唯一の制約は、a) が 2) の前に発生することです。
| 戻り値 | |
|---|---|
JdwpPacket |
|
initializeHeapUpdateStatus
public void initializeHeapUpdateStatus ()
isDdmAware
public boolean isDdmAware ()
クライアント VM が DDM 対応の場合、true を返します。
ここで呼び出すことができるのは、接続が確立された後のみです。
| 戻り値 | |
|---|---|
boolean |
|
isDebuggerAttached
public boolean isDebuggerAttached ()
デバッガが現在クライアントにアタッチされている場合は true を返します。
| 戻り値 | |
|---|---|
boolean |
|
isHeapUpdateEnabled
public boolean isHeapUpdateEnabled ()
ヒープの更新が有効かどうかを返します。
| 戻り値 | |
|---|---|
boolean |
|
isThreadUpdateEnabled
public boolean isThreadUpdateEnabled ()
スレッドの更新が有効かどうかを返します。
| 戻り値 | |
|---|---|
boolean |
|
中断 中止 止めて
public void kill ()
VM に kill メッセージを送信します。VM がクラッシュ状態の場合、必ずしも機能するとは限りません。
listViewRoots
public void listViewRoots (DebugViewDumpHandler replyHandler)
| パラメータ | |
|---|---|
replyHandler |
DebugViewDumpHandler |
notifyVmMirrorExited
public void notifyVmMirrorExited ()
デバッガ VM ミラーは DDMLib の背後で終了することがあり、さまざまな競合状態や永続的な Client 損失状態につながります。現在アタッチされているデバッガが終了し、VM ミラー接続を終了することを DDMLib に通知する必要があります。
packetFailed
public void packetFailed (JdwpPacket reply)
以前のリクエストでエラーが発生しました。これは、非 DDM クライアントと通信している場合の HELO メッセージに対する想定されるレスポンスです。
| パラメータ | |
|---|---|
reply |
JdwpPacket |
読書
public void read ()
チャンネルからデータを読み取ります。1 つのスレッドからのみ呼び出す必要があります。
これは、データが利用可能であることがわかっていて、バッファにまだ完全なパケットがない場合に呼び出されます。バッファが最大容量に達している場合は、バッファを拡張します。
register
public void register (Selector sel)
クライアントをセレクタに登録します。クライアントの作成直後に呼び出す必要があります。
| パラメータ | |
|---|---|
sel |
Selector |
requestAllocationDetails
public void requestAllocationDetails ()
VM にリクエストを送信して、enable が null に設定された enableAllocationTracker(boolean) の呼び出し以降に発生したすべての割り当てに関する情報を送信します。これは非同期です。
割り当て情報には ClientData.getAllocations() でアクセスできます。新しいデータが利用可能になったという通知は、マスク Client.CHANGE_HEAP_ALLOCATIONS を含む changeMask を伴って AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) を介して受信されます。
requestAllocationStatus
public void requestAllocationStatus ()
割り当てトラッキングの有効ステータスを送信するよう VM にリクエストを送信します。これは非同期です。
割り当てステータスには ClientData.getAllocationStatus() でアクセスできます。新しいステータスが利用可能になったことを知らせる通知は、マスク Client.CHANGE_HEAP_ALLOCATION_STATUS を含む changeMask を伴って AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) を介して受信されます。
requestMethodProfilingStatus
public void requestMethodProfilingStatus ()
メソッド プロファイリングの有効ステータスを送信するよう VM にリクエストを送信します。これは非同期です。
割り当てステータスには ClientData.getAllocationStatus() でアクセスできます。新しいステータスが利用可能になったことを知らせる通知は、マスク Client.CHANGE_HEAP_ALLOCATION_STATUS を含む changeMask を伴って AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) を介して受信されます。
requestNativeHeapInformation
public boolean requestNativeHeapInformation ()
ネイティブ ヒープ更新リクエストを送信します。これは非同期です。
ネイティブ ヒープ情報は ClientData.getNativeAllocationList() でアクセスできます。新しいデータが利用可能になったという通知は、マスク Client.CHANGE_NATIVE_HEAP_DATA を含む changeMask を伴って AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) を介して受信されます。
| 戻り値 | |
|---|---|
boolean |
|
requestThreadStackTrace
public void requestThreadStackTrace (int threadId)
スレッド スタック トレースの更新リクエストを送信します。これは非同期です。
スレッド情報には、ClientData.getThreads() と ThreadInfo.getStackTrace() からアクセスできます。
新しいデータが利用可能になったという通知は、マスク Client.CHANGE_THREAD_STACKTRACE を含む changeMask を伴って AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) を介して受信されます。
| パラメータ | |
|---|---|
threadId |
int |
requestThreadUpdate
public void requestThreadUpdate ()
スレッド更新リクエストを送信します。これは非同期です。
スレッド情報には ClientData.getThreads() でアクセスできます。新しいデータが利用可能になったという通知は、マスク Client.CHANGE_THREAD_DATA を含む changeMask を使用して AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) 経由で受信されます。
setHeapInfoUpdateEnabled
public void setHeapInfoUpdateEnabled (boolean enabled)
| パラメータ | |
|---|---|
enabled |
boolean |
setHeapSegmentUpdateEnabled
public void setHeapSegmentUpdateEnabled (boolean enabled)
| パラメータ | |
|---|---|
enabled |
boolean |
setHeapUpdateEnabled
public void setHeapUpdateEnabled (boolean enabled)
ヒープの更新を有効または無効にします。
true の場合、GC が発生すると、クライアントはヒープ情報を送信します。
ヒープ情報には ClientData.getVmHeapData() でアクセスできます。
新しいデータが利用可能になったという通知は、値 Client.CHANGE_HEAP_DATA を含む changeMask を使用して AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) 経由で受信されます。
| パラメータ | |
|---|---|
enabled |
boolean: 有効フラグ |
setThreadUpdateEnabled
public void setThreadUpdateEnabled (boolean enabled)
スレッドの更新を有効または無効にします。
true の場合、VM はスレッド情報を送信できます。スレッド情報は requestThreadUpdate() でリクエストする必要があります。
| パラメータ | |
|---|---|
enabled |
boolean: 有効フラグ。 |
startMethodTracer
public void startMethodTracer ()
startOpenGlTracing
public boolean startOpenGlTracing ()
| 戻り値 | |
|---|---|
boolean |
|
startSamplingProfiler
public void startSamplingProfiler (int samplingInterval,
TimeUnit timeUnit)| パラメータ | |
|---|---|
samplingInterval |
int |
timeUnit |
TimeUnit |
stopMethodTracer
public void stopMethodTracer ()
stopOpenGlTracing
public boolean stopOpenGlTracing ()
| 戻り値 | |
|---|---|
boolean |
|
stopSamplingProfiler
public void stopSamplingProfiler ()
toggleMethodProfiling
public void toggleMethodProfiling ()
このメソッドは非推奨です。
代わりに startMethodTracer()、stopMethodTracer()、startSamplingProfiler(int, TimeUnit)、または stopSamplingProfiler() を使用します。
メソッド プロファイリングの状態を切り替えます。
update
public void update (int changeMask)
| パラメータ | |
|---|---|
changeMask |
int |
updateHeapInfo
public void updateHeapInfo ()
単一のヒープ更新をトリガーします。
保護されたメソッド
送信
protected void send (JdwpPacket packet)
クライアントに DDM パケットを送信します。
理想的には、1 回のチャネル書き込みでこれを行うことができます。そうならない場合は、このパケットが完了するまで他のユーザーがチャンネルに書き込むのを防ぐ必要があります。そのため、チャンネルで同期します。
もう 1 つの目標は、不要なバッファコピーを避けることです。そのため、JdwpPacket の ByteBuffer から直接書き込みます。
| パラメータ | |
|---|---|
packet |
JdwpPacket |