کلاینتایمپِل
public class ClientImpl
extends JdwpAgent implements Client
| شیء جاوا | ||
| ↳ | com.android.tradefed.device.server.jdwp.JdwpAgent | |
| ↳ | com.android.tradefed.device.server.ClientImpl | |
این نشان دهنده یک کلاینت واحد است که معمولاً یک فرآیند Dalvik VM است.
این کلاس به اطلاعات اولیه کلاینت و همچنین متدهایی برای انجام اقدامات روی کلاینت دسترسی میدهد.
اطلاعات دقیقتر، که معمولاً به صورت بلادرنگ بهروزرسانی میشوند، از طریق کلاس ClientData قابل دسترسی هستند. هر شیء Client ، ClientData مخصوص به خود را دارد که از طریق getClientData() قابل دسترسی است.
خلاصه
سازندگان عمومی | |
|---|---|
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 ()کلاینت را مجبور میکند تا garbage collector خود را اجرا کند. |
ClientData | getClientData () شیء |
int | getDebuggerListenPort ()پورت اشکالزدا را برای این کلاینت برمیگرداند. |
IDevice | getDevice () |
DeviceImpl | getDeviceImpl () |
JdwpPacket | getJdwpPacket ()اطلاعات مربوط به اولین بسته کامل JDWP موجود در بافر را برمیگرداند. |
void | initializeHeapUpdateStatus () |
boolean | isDdmAware () اگر ماشین مجازی کلاینت از DDM آگاه باشد، |
boolean | isDebuggerAttached () اگر یک اشکالزدا در حال حاضر به کلاینت متصل باشد، |
boolean | isHeapUpdateEnabled ()برمیگرداند که آیا بهروزرسانی هیپ فعال شده است یا خیر. |
boolean | isThreadUpdateEnabled ()برمیگرداند که آیا بهروزرسانی نخ فعال است یا خیر. |
boolean | isValid () برمیگرداند که آیا این |
void | kill ()یک پیام kill به ماشین مجازی ارسال میکند. |
void | listViewRoots ( DebugViewDumpHandler replyHandler) |
void | notifyVmMirrorExited () آینههای ماشین مجازی اشکالزدا میتوانند پشت سر DDMLib خارج شوند و منجر به شرایط مختلف از دست دادن |
void | packetFailed ( JdwpPacket reply)درخواست قبلی منجر به شکست شد. |
void | read ()دادهها را از کانال ما بخوانید، فقط باید از یک نخ فراخوانی شود. |
void | register (Selector sel)کلاینت را با یک انتخابگر ثبت میکند، باید بلافاصله پس از ایجاد کلاینت فراخوانی شود. |
void | requestAllocationDetails () درخواستی را به ماشین مجازی ارسال میکند تا اطلاعات مربوط به تمام تخصیصهایی که از زمان فراخوانی |
void | requestAllocationStatus ()درخواستی را به ماشین مجازی ارسال میکند تا وضعیت فعالسازی ردیابی تخصیص را ارسال کند. |
void | requestMethodProfilingStatus ()درخواستی را به ماشین مجازی ارسال میکند تا وضعیت فعالسازی پروفایلینگ متد را ارسال کند. |
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 به کلاینت ارسال کنید. |
سازندگان عمومی
کلاینتایمپِل
public ClientImpl (DeviceImpl device, SocketChannel chan, int pid)
یک شیء برای اتصال کلاینت جدید ایجاد کنید.
| پارامترها | |
|---|---|
device | DeviceImpl : دستگاهی که این کلاینت به آن تعلق دارد |
chan | SocketChannel : ERROR(/SocketChannel) . |
pid | int : شماره شناسایی (pid) کلاینت. |
روشهای عمومی
ضبط ویو
public void captureView (String viewRoot,
String view,
DebugViewDumpHandler handler)| پارامترها | |
|---|---|
viewRoot | String |
view | String |
handler | DebugViewDumpHandler |
بستن
public void close (boolean notify)
کانال سوکت کلاینت را ببندید. اگر اشکالزدایی (دیباگر) مرتبط با ما وجود دارد، آن را نیز ببندید.
بستن یک کانال به طور خودکار آن را از انتخابگر لغو ثبت میکند. با این حال، قبل از اینکه واقعاً آنها را رها کند و به توصیفگرهای فایل اجازه بسته شدن بدهد، باید در حلقه انتخابگر تکرار کنیم. انتظار میرود که فراخواننده این کار را مدیریت کند.
| پارامترها | |
|---|---|
notify | boolean : آیا به شنوندگان (listeners) از تغییر مطلع شود یا خیر. |
ddmSeen
public boolean ddmSeen ()
MonitorThread این را زمانی فراخوانی میکند که یک درخواست یا پاسخ DDM را ببیند. اگر قبلاً بسته DDM ندیده باشیم، وضعیت را به ST_READY ارتقا میدهیم و "false" را برمیگردانیم. در غیر این صورت، فقط true را برمیگردانیم.
ایده این است که به MonitorThread اطلاع دهیم چه زمانی برای اولین بار یک بسته DDM را مشاهده میکنیم، بنابراین میتوانیم هنگام برقراری اتصال کلاینت، یک broadcast به handlers ارسال کنیم. این روش همگامسازی شده است، بنابراین ما فقط یک بار broadcast را ارسال میکنیم.
| بازگشتها | |
|---|---|
boolean | |
dumpDisplayList
public void dumpDisplayList (String viewRoot,
String view)| پارامترها | |
|---|---|
viewRoot | String |
view | String |
سلسله مراتب dumpView
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)
ردیاب تخصیص را برای این کلاینت فعال یا غیرفعال میکند.
در صورت فعال بودن، ماشین مجازی شروع به ردیابی اطلاعات تخصیص میکند. فراخوانی requestAllocationDetails() باعث میشود ماشین مجازی اطلاعات مربوط به تمام تخصیصهایی که بین فعالسازی و درخواست رخ داده است را ارسال کند.
| پارامترها | |
|---|---|
enable | boolean |
اجرای GarbageCollector
public void executeGarbageCollector ()
کلاینت را مجبور میکند تا garbage collector خود را اجرا کند.
دریافت دادههای کلاینت
public ClientData getClientData ()
شیء ClientData حاوی اطلاعات این کلاینت را برمیگرداند.
| بازگشتها | |
|---|---|
ClientData | |
اشکالزدا دریافت کنید
public int getDebuggerListenPort ()
پورت اشکالزدا را برای این کلاینت برمیگرداند.
| بازگشتها | |
|---|---|
int | |
دریافت دستگاه
public IDevice getDevice ()
IDevice که این کلاینت روی آن در حال اجرا است را برمیگرداند.
| بازگشتها | |
|---|---|
IDevice | |
دریافت دستگاه
public DeviceImpl getDeviceImpl ()
DeviceImpl ای را که این کلاینت روی آن اجرا میشود، برمیگرداند.
| بازگشتها | |
|---|---|
DeviceImpl | |
دریافت بسته Jdwp
public JdwpPacket getJdwpPacket ()
اطلاعات مربوط به اولین بسته کامل JDWP موجود در بافر را برمیگرداند.
اگر هنوز بسته کامل را نداریم، مقدار null را برمیگردانیم.
اگر هنوز JDWP handshake را دریافت نکرده باشیم، در اینجا منتظر آن میمانیم و بدون اینکه به انجام آن اعتراف کنیم، آن را مصرف میکنیم. پس از دریافت، پیام "HELO" را ارسال میکنیم، به همین دلیل است که این میتواند یک IOException ایجاد کند.
توجه داشته باشید که ترتیب عملیات در برقراری اتصال به شرح زیر است:
سمت میزبان: ۱) adb track-jdwp ۲) دریافت لیست بهروز شده از PID های حاوی فرآیند برنامه. ۳) باز کردن/ارسال پورت اشکالزدا و اتصال به دستگاه. ۴) انجام handshake. ۵) ارسال HELO و منتظر ماندن برای پاسخ.
سمت دستگاه/فرآیند: الف) انشعاب زیگوت و بهروزرسانی ADB با PID. ب) ارسال APNM در صورت اتصال پورت اشکالزدا ("<pre-initialize>"). ج) اتصال فرآیند به برنامه و بسته واقعی. د) ارسال APNM بهروزرسانیشده در صورت اتصال پورت اشکالزدا.
دو توالی اجرای فوق کاملاً به صورت موازی اجرا میشوند، و تنها محدودیت این است که الف) قبل از ۲) اتفاق بیفتد.
| بازگشتها | |
|---|---|
JdwpPacket | |
مقداردهی اولیه وضعیت به روز رسانی Heap
public void initializeHeapUpdateStatus ()
isDdmAware
public boolean isDdmAware ()
اگر ماشین مجازی کلاینت از DDM آگاه باشد، true را برمیگرداند.
تماس در اینجا فقط پس از برقراری اتصال مجاز است.
| بازگشتها | |
|---|---|
boolean | |
isDebugger پیوست شده است
public boolean isDebuggerAttached ()
اگر یک اشکالزدا در حال حاضر به کلاینت متصل باشد، true را برمیگرداند.
| بازگشتها | |
|---|---|
boolean | |
isHeapUpdateEnabled
public boolean isHeapUpdateEnabled ()
برمیگرداند که آیا بهروزرسانی هیپ فعال شده است یا خیر.
| بازگشتها | |
|---|---|
boolean | |
همچنین ببینید:
isThreadUpdateEnabled
public boolean isThreadUpdateEnabled ()
برمیگرداند که آیا بهروزرسانی نخ فعال است یا خیر.
| بازگشتها | |
|---|---|
boolean | |
معتبر است
public boolean isValid ()
برمیگرداند که آیا این ClientImpl اتصال معتبری به ماشین مجازی برنامه دارد یا خیر.
| بازگشتها | |
|---|---|
boolean | |
کشتن
public void kill ()
یک پیام kill به ماشین مجازی ارسال میکند. اگر ماشین مجازی در حالت crash باشد، این لزوماً کار نمیکند.
ریشههای نمایش لیست
public void listViewRoots (DebugViewDumpHandler replyHandler)
| پارامترها | |
|---|---|
replyHandler | DebugViewDumpHandler |
notifyVmMirrorخروج
public void notifyVmMirrorExited ()
آینههای ماشین مجازی اشکالزدا میتوانند پشت سر DDMLib خارج شوند و منجر به شرایط مختلف از دست دادن Client رقابتی یا دائمی شوند. ما باید به DDMLib اطلاع دهیم که اشکالزدا که در حال حاضر متصل است در حال خروج است و اتصال آینه ماشین مجازی خود را از بین میبرد.
بسته ناموفق
public void packetFailed (JdwpPacket reply)
درخواست قبلی منجر به شکست شد. این پاسخ مورد انتظار به پیام HELO هنگام صحبت با یک کلاینت غیر DDM است.
| پارامترها | |
|---|---|
reply | JdwpPacket |
خواندن
public void read ()
دادهها را از کانال ما بخوانید، فقط باید از یک نخ فراخوانی شود.
این زمانی فراخوانی میشود که مشخص شده باشد دادهها در دسترس هستند و ما هنوز بستهی کاملی در بافر نداریم. اگر بافر ظرفیت کامل دارد، آن را گسترش دهید.
ثبت نام
public void register (Selector sel)
کلاینت را با یک انتخابگر ثبت میکند، باید بلافاصله پس از ایجاد کلاینت فراخوانی شود.
| پارامترها | |
|---|---|
sel | Selector |
جزئیات درخواست تخصیص
public void requestAllocationDetails ()
درخواستی را به ماشین مجازی ارسال میکند تا اطلاعات مربوط به تمام تخصیصهایی که از زمان فراخوانی enableAllocationTracker(boolean) با مقدار null برای enable رخ داده است را ارسال کند. این کار به صورت غیرهمزمان انجام میشود.
اطلاعات تخصیص داده میتواند توسط ClientData.getAllocations() قابل دسترسی باشد. اعلان مربوط به در دسترس بودن دادههای جدید از طریق AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) با changeMask حاوی ماسک Client.CHANGE_HEAP_ALLOCATIONS دریافت خواهد شد.
درخواستوضعیت تخصیص
public void requestAllocationStatus ()
درخواستی را به ماشین مجازی ارسال میکند تا وضعیت فعالسازی ردیابی تخصیص را ارسال کند. این کار به صورت ناهمزمان انجام میشود.
وضعیت تخصیص میتواند توسط ClientData.getAllocationStatus() قابل دسترسی باشد. اعلان مربوط به در دسترس بودن وضعیت جدید از طریق AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) با changeMask حاوی ماسک Client.CHANGE_HEAP_ALLOCATION_STATUS دریافت خواهد شد.
درخواستروشپروفایلینگوضعیت
public void requestMethodProfilingStatus ()
درخواستی را به ماشین مجازی ارسال میکند تا وضعیت فعالسازی پروفایل متد را ارسال کند. این کار به صورت ناهمزمان انجام میشود.
وضعیت تخصیص میتواند توسط ClientData.getAllocationStatus() قابل دسترسی باشد. اعلان مربوط به در دسترس بودن وضعیت جدید از طریق AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) با changeMask حاوی ماسک Client.CHANGE_HEAP_ALLOCATION_STATUS دریافت خواهد شد.
درخواستاطلاعاتNativeHeap
public boolean requestNativeHeapInformation ()
یک درخواست بهروزرسانی محلی هیپ ارسال میکند. این کار ناهمزمان است.
اطلاعات هیپ بومی (native heap) از طریق ClientData.getNativeAllocationList() قابل دسترسی است. اعلان مربوط به در دسترس بودن دادههای جدید از طریق AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) با changeMask حاوی ماسک Client.CHANGE_NATIVE_HEAP_DATA دریافت میشود.
| بازگشتها | |
|---|---|
boolean | |
درخواستThreadStackTrace
public void requestThreadStackTrace (int threadId)
درخواست بهروزرسانی ردیابی پشته نخ را ارسال میکند. این کار ناهمزمان است.
اطلاعات رشته (thread) از طریق ClientData.getThreads() و ThreadInfo.getStackTrace() قابل دسترسی است.
اعلانی مبنی بر در دسترس بودن دادههای جدید از طریق AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) با changeMask حاوی ماسک Client.CHANGE_THREAD_STACKTRACE دریافت خواهد شد.
| پارامترها | |
|---|---|
threadId | int |
درخواست بهروزرسانی موضوع
public void requestThreadUpdate ()
یک درخواست بهروزرسانی نخ ارسال میکند. این ناهمزمان است.
اطلاعات رشته (thread) از طریق ClientData.getThreads() قابل دسترسی است. اعلان مربوط به در دسترس بودن دادههای جدید از طریق AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) با changeMask حاوی ماسک Client.CHANGE_THREAD_DATA دریافت میشود.
setHeapInfoUpdateEnabled
public void setHeapInfoUpdateEnabled (boolean enabled)
| پارامترها | |
|---|---|
enabled | boolean |
setHeapSegmentUpdateEnabled
public void setHeapSegmentUpdateEnabled (boolean enabled)
| پارامترها | |
|---|---|
enabled | boolean |
setHeapUpdateEnabled
public void setHeapUpdateEnabled (boolean enabled)
بهروزرسانی هیپ را فعال یا غیرفعال میکند.
اگر true ، هر GC باعث میشود که کلاینت اطلاعات هیپ خود را ارسال کند.
اطلاعات هیپ (heap) توسط ClientData.getVmHeapData() قابل دسترسی است.
اعلانی مبنی بر در دسترس بودن دادههای جدید از طریق AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) با changeMask حاوی مقدار Client.CHANGE_HEAP_DATA دریافت خواهد شد.
| پارامترها | |
|---|---|
enabled | boolean : پرچم فعالسازی |
setThreadUpdateEnabled
public void setThreadUpdateEnabled (boolean enabled)
بهروزرسانی رشته را فعال یا غیرفعال میکند.
اگر true ماشین مجازی قادر به ارسال اطلاعات رشته خواهد بود. اطلاعات رشته باید با استفاده از requestThreadUpdate() درخواست شود.
| پارامترها | |
|---|---|
enabled | boolean : پرچم فعالسازی. |
شروعMethodTracer
public void startMethodTracer ()
شروع OpenGlTracing
public boolean startOpenGlTracing ()
| بازگشتها | |
|---|---|
boolean | |
شروع نمونهبرداری پروفایلر
public void startSamplingProfiler (int samplingInterval,
TimeUnit timeUnit)| پارامترها | |
|---|---|
samplingInterval | int |
timeUnit | TimeUnit |
stopMethodTracer
public void stopMethodTracer ()
توقف OpenGlTracing
public boolean stopOpenGlTracing ()
| بازگشتها | |
|---|---|
boolean | |
stopSamplingProfiler
public void stopSamplingProfiler ()
پروفایل متد
public void toggleMethodProfiling ()
این روش منسوخ شده است.
به جای آن از startMethodTracer() ، stopMethodTracer() ، startSamplingProfiler(int, TimeUnit) یا stopSamplingProfiler() استفاده کنید.
وضعیت پروفایلینگ متد را تغییر میدهد.
بهروزرسانی
public void update (int changeMask)
| پارامترها | |
|---|---|
changeMask | int |
اطلاعات بهروزرسانی
public void updateHeapInfo ()
یک بهروزرسانی تکی هیپ را اجرا میکند.
روشهای محافظتشده
ارسال
protected void send (JdwpPacket packet)
یک بسته DDM به کلاینت ارسال کنید.
در حالت ایدهآل، میتوانیم این کار را با نوشتن در یک کانال انجام دهیم. اگر این اتفاق نیفتد، باید تا زمان تکمیل این بسته، از نوشتن هر کس دیگری در کانال جلوگیری کنیم، بنابراین در کانال همگامسازی میکنیم.
هدف دیگر جلوگیری از کپیهای غیرضروری بافر است، بنابراین مستقیماً از ByteBuffer مربوط به JdwpPacket مینویسیم.
| پارامترها | |
|---|---|
packet | JdwpPacket |