کلاینت‌ایمپِل

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 ()

شیء ClientData حاوی اطلاعات این کلاینت را برمی‌گرداند.

int getDebuggerListenPort ()

پورت اشکال‌زدا را برای این کلاینت برمی‌گرداند.

IDevice getDevice ()

IDevice که این کلاینت روی آن در حال اجرا است را برمی‌گرداند.

DeviceImpl getDeviceImpl ()

DeviceImpl ای را که این کلاینت روی آن اجرا می‌شود، برمی‌گرداند.

JdwpPacket getJdwpPacket ()

اطلاعات مربوط به اولین بسته کامل JDWP موجود در بافر را برمی‌گرداند.

void initializeHeapUpdateStatus ()
boolean isDdmAware ()

اگر ماشین مجازی کلاینت از DDM آگاه باشد، true را برمی‌گرداند.

boolean isDebuggerAttached ()

اگر یک اشکال‌زدا در حال حاضر به کلاینت متصل باشد، true را برمی‌گرداند.

boolean isHeapUpdateEnabled ()

برمی‌گرداند که آیا به‌روزرسانی هیپ فعال شده است یا خیر.

boolean isThreadUpdateEnabled ()

برمی‌گرداند که آیا به‌روزرسانی نخ فعال است یا خیر.

boolean isValid ()

برمی‌گرداند که آیا این ClientImpl اتصال معتبری به ماشین مجازی برنامه دارد یا خیر.

void kill ()

یک پیام kill به ماشین مجازی ارسال می‌کند.

void listViewRoots ( DebugViewDumpHandler replyHandler)
void notifyVmMirrorExited ()

آینه‌های ماشین مجازی اشکال‌زدا می‌توانند پشت سر DDMLib خارج شوند و منجر به شرایط مختلف از دست دادن Client رقابتی یا دائمی شوند.

void packetFailed ( JdwpPacket reply)

درخواست قبلی منجر به شکست شد.

void read ()

داده‌ها را از کانال ما بخوانید، فقط باید از یک نخ فراخوانی شود.

void register (Selector sel)

کلاینت را با یک انتخابگر ثبت می‌کند، باید بلافاصله پس از ایجاد کلاینت فراخوانی شود.

void requestAllocationDetails ()

درخواستی را به ماشین مجازی ارسال می‌کند تا اطلاعات مربوط به تمام تخصیص‌هایی که از زمان فراخوانی enableAllocationTracker(boolean) با مقدار null برای enable رخ داده است، ارسال شود.

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 ()

یک رشته از شیء ClientImpl را برمی‌گرداند.

void toggleMethodProfiling ()

این متد منسوخ شده است. به جای آن از startMethodTracer() ، stopMethodTracer() ، startSamplingProfiler(int, TimeUnit) یا stopSamplingProfiler() استفاده کنید.

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 String toString ()

یک رشته از شیء ClientImpl را برمی‌گرداند.

بازگشت‌ها
String

پروفایل متد

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