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 على عنصر 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()

يفرض على العميل تنفيذ أداة جمع البيانات غير المرغوب فيها.

ClientData getClientData()

تعرِض هذه الدالة العنصر ClientData الذي يحتوي على معلومات العميل هذه.

int getDebuggerListenPort()

تعرض هذه السمة منفذ برنامج تصحيح الأخطاء لهذا العميل.

IDevice getDevice()

تعرِض هذه السمة IDevice الذي يتم تشغيل هذا العميل عليه.

DeviceImpl getDeviceImpl()

تعرِض هذه السمة DeviceImpl الذي يتم تشغيل هذا العميل عليه.

JdwpPacket getJdwpPacket()

تعرض هذه السمة معلومات عن حزمة JDWP الكاملة الأولى في المخزن المؤقت.

void initializeHeapUpdateStatus()
boolean isDdmAware()

تعرض القيمة true إذا كان الجهاز الافتراضي للعميل متوافقًا مع "إدارة الأجهزة الديناميكية".

boolean isDebuggerAttached()

تعرض الدالة القيمة true إذا كان هناك مصحّح أخطاء متصل حاليًا بالعميل.

boolean isHeapUpdateEnabled()

تعرض هذه السمة ما إذا كان أي تحديث للذاكرة المؤقتة مفعّلاً.

boolean isThreadUpdateEnabled()

تعرِض هذه السمة ما إذا كان تحديث سلسلة المحادثات مفعَّلاً.

boolean isValid()

تعرض هذه السمة ما إذا كان ClientImpl لديه اتصال صالح بالجهاز الافتراضي للتطبيق.

void kill()

يرسل رسالة إنهاء إلى الجهاز الظاهري.

void listViewRoots(DebugViewDumpHandler replyHandler)
void notifyVmMirrorExited()

يمكن أن تتوقف عمليات محاكاة الجهاز الافتراضي للمصحّح بدون علم DDMLib، ما يؤدي إلى حدوث حالات مختلفة من التزامن أو فقدان Client دائم.

void packetFailed(JdwpPacket reply)

تعذّر تنفيذ طلب سابق.

void read()

قراءة البيانات من قناتنا، ويجب استدعاؤها من سلسلة محادثات واحدة فقط

void register(Selector sel)

تسجّل هذه الدالة العميل باستخدام أداة اختيار، ويجب استدعاؤها فور إنشاء العميل.

void requestAllocationDetails()

يرسل هذا الإجراء طلبًا إلى الجهاز الظاهري لإرسال معلومات حول جميع عمليات التخصيص التي حدثت منذ إجراء الاتصال بـ enableAllocationTracker(boolean) مع ضبط enable على null.

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 إلى العميل.

الإنشاءات العامة

ClientImpl

public ClientImpl (DeviceImpl device, 
                SocketChannel chan, 
                int pid)

أنشئ عنصرًا لاتصال عميل جديد.

المعلمات
device DeviceImpl: الجهاز الذي ينتمي إليه هذا العميل

chan SocketChannel: ERROR(/SocketChannel) المرتبط

pid int: معرّف العملية للعميل

الطُرق العامة

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". بخلاف ذلك، ما عليك سوى عرض القيمة "صحيح".

الفكرة هي إعلام MonitorThread عندما نرى حزمة DDM للمرة الأولى، حتى نتمكّن من إرسال بث إلى المعالجات عند إنشاء اتصال عميل. تتم مزامنة هذه الطريقة حتى نرسل البث مرة واحدة فقط.

المرتجعات
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)

تفعيل أو إيقاف أداة تتبُّع التخصيص لهذا العميل

في حال تفعيل هذه الميزة، سيبدأ الجهاز الافتراضي في تتبُّع معلومات التخصيص. سيؤدي طلب requestAllocationDetails() إلى أن ترسل الآلة الافتراضية معلومات حول جميع عمليات التخصيص التي حدثت بين التفعيل والطلب.

المعلمات
enable boolean

executeGarbageCollector

public void executeGarbageCollector ()

يفرض على العميل تنفيذ أداة جمع البيانات غير المرغوب فيها.

getClientData

public ClientData getClientData ()

تعرِض هذه الدالة العنصر ClientData الذي يحتوي على معلومات العميل هذه.

المرتجعات
ClientData

getDebuggerListenPort

public int getDebuggerListenPort ()

تعرض هذه السمة منفذ برنامج تصحيح الأخطاء لهذا العميل.

المرتجعات
int

getDevice

public IDevice getDevice ()

تعرِض هذه السمة IDevice الذي يتم تشغيل هذا العميل عليه.

المرتجعات
IDevice

getDeviceImpl

public DeviceImpl getDeviceImpl ()

تعرِض هذه السمة DeviceImpl الذي يتم تشغيل هذا العميل عليه.

المرتجعات
DeviceImpl

getJdwpPacket

public JdwpPacket getJdwpPacket ()

تعرض هذه السمة معلومات عن حزمة JDWP الكاملة الأولى في المخزن المؤقت.

إذا لم تتوفر لدينا حزمة كاملة بعد، سيتم عرض قيمة فارغة.

إذا لم نتلقَّ بعد مصافحة JDWP، ننتظرها هنا ونستخدمها بدون الإفصاح عن ذلك. وعند استلامها، نرسل الرسالة "HELO"، وهذا هو السبب في أنّ ذلك قد يؤدي إلى ظهور IOException.

يُرجى العِلم أنّ ترتيب العمليات عند إنشاء اتصال هو:

على الجهاز المضيف: 1) adb track-jdwp 2) تلقّي قائمة معدَّلة بمعرّفات العمليات (PID) التي تتضمّن عملية التطبيق. ‫3) افتح منفذ تصحيح الأخطاء أو أعد توجيهه واربطه بالجهاز. ‫4) نفِّذ المصافحة. ‫5) أرسِل HELO وانتظِر الردّ.

على مستوى الجهاز/العملية: أ) إنشاء نسخة من عملية zygote وتعديل ADB باستخدام معرّف العملية (PID). ب) إرسال APNM إذا كان منفذ مصحّح الأخطاء متصلاً ("<pre-initialize>"). ج) ربط العملية بالتطبيق الفعلي والحزمة. د) إرسال APNM معدَّل إذا كان منفذ مصحّح الأخطاء متصلاً.

يتم تنفيذ تسلسل التنفيذ أعلاه بالكامل بالتوازي، مع الشرط الوحيد وهو أنّ 1) يحدث قبل 2).

المرتجعات
JdwpPacket

initializeHeapUpdateStatus

public void initializeHeapUpdateStatus ()

isDdmAware

public boolean isDdmAware ()

تعرض القيمة true إذا كان الجهاز الافتراضي للعميل متوافقًا مع "إدارة الأجهزة الديناميكية".

لا يُسمح بإجراء مكالمات هنا إلا بعد إنشاء الاتصال.

المرتجعات
boolean

isDebuggerAttached

public boolean isDebuggerAttached ()

تعرض الدالة القيمة true إذا كان هناك مصحّح أخطاء متصل حاليًا بالعميل.

المرتجعات
boolean

isHeapUpdateEnabled

public boolean isHeapUpdateEnabled ()

تعرض هذه السمة ما إذا كان أي تحديث للذاكرة المؤقتة مفعّلاً.

المرتجعات
boolean

يُرجى الاطّلاع أيضًا على:

isThreadUpdateEnabled

public boolean isThreadUpdateEnabled ()

تعرِض هذه السمة ما إذا كان تحديث سلسلة المحادثات مفعَّلاً.

المرتجعات
boolean

isValid

public boolean isValid ()

تعرض هذه السمة ما إذا كان ClientImpl لديه اتصال صالح بالجهاز الافتراضي للتطبيق.

المرتجعات
boolean

قتل

public void kill ()

يرسل رسالة إنهاء إلى الجهاز الظاهري. قد لا تنجح هذه الطريقة إذا كانت الآلة الافتراضية في حالة تعذُّر التشغيل.

listViewRoots

public void listViewRoots (DebugViewDumpHandler replyHandler)

المعلمات
replyHandler DebugViewDumpHandler

notifyVmMirrorExited

public void notifyVmMirrorExited ()

يمكن أن تتوقف عمليات محاكاة الجهاز الافتراضي للمصحّح بدون علم DDMLib، ما يؤدي إلى حدوث حالات مختلفة من التزامن أو فقدان Client دائم. علينا إعلام DDMLib بأنّ أداة تصحيح الأخطاء المرفقة حاليًا ستتوقف عن العمل وستنهي اتصالها بنسخة الجهاز الافتراضي.

packetFailed

public void packetFailed (JdwpPacket reply)

تعذّر تنفيذ طلب سابق. هذه هي الاستجابة المتوقّعة لرسالة HELO عند التواصل مع عميل غير تابع لـ DDM.

المعلمات
reply JdwpPacket

قراءة

public void read ()

قراءة البيانات من قناتنا، ويجب استدعاؤها من سلسلة محادثات واحدة فقط

يتم استدعاء هذه الدالة عندما تكون البيانات متاحة، ولكن ليس لدينا حزمة كاملة في المخزن المؤقت. إذا كانت المخزن المؤقت ممتلئًا، وسِّعه.

تسجيل

public void register (Selector sel)

تسجّل هذه الدالة العميل باستخدام أداة اختيار، ويجب استدعاؤها فور إنشاء العميل.

المعلمات
sel Selector

requestAllocationDetails

public void requestAllocationDetails ()

يرسل هذا الإجراء طلبًا إلى الجهاز الظاهري لإرسال معلومات حول جميع عمليات التخصيص التي حدثت منذ إجراء الاتصال بـ enableAllocationTracker(boolean) مع ضبط enable على null. هذا الإجراء غير متزامن.

يمكن الوصول إلى معلومات التخصيص من خلال ClientData.getAllocations(). سيتم تلقّي الإشعار بأنّ البيانات الجديدة متاحة من خلال AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) مع changeMask يحتوي على القناع Client.CHANGE_HEAP_ALLOCATIONS.

requestAllocationStatus

public void requestAllocationStatus ()

يرسل هذا الإجراء طلبًا إلى الجهاز الظاهري لإرسال حالة التفعيل الخاصة بتتبُّع عمليات التخصيص. هذا الإجراء غير متزامن.

يمكن الوصول إلى حالة التخصيص من خلال ClientData.getAllocationStatus(). سيتم تلقّي الإشعار الذي يفيد بتوفّر الحالة الجديدة من خلال AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) مع changeMask يحتوي على القناع Client.CHANGE_HEAP_ALLOCATION_STATUS.

requestMethodProfilingStatus

public void requestMethodProfilingStatus ()

يرسل طلبًا إلى الجهاز الافتراضي لإرسال حالة تفعيل تحديد مواصفات الطريقة. هذا الإجراء غير متزامن.

يمكن الوصول إلى حالة التخصيص من خلال ClientData.getAllocationStatus(). سيتم تلقّي الإشعار الذي يفيد بتوفّر الحالة الجديدة من خلال AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) مع changeMask يحتوي على القناع Client.CHANGE_HEAP_ALLOCATION_STATUS.

requestNativeHeapInformation

public boolean requestNativeHeapInformation ()

يرسِل هذا الإجراء طلبًا غير متزامن لتعديل الذاكرة المؤقتة الأصلية.

يمكن الوصول إلى معلومات الذاكرة المؤقتة الأصلية باستخدام ClientData.getNativeAllocationList(). سيتم تلقّي الإشعار بأنّ البيانات الجديدة متاحة من خلال AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) مع changeMask يتضمّن القناع Client.CHANGE_NATIVE_HEAP_DATA.

المرتجعات
boolean

requestThreadStackTrace

public void requestThreadStackTrace (int threadId)

يرسل هذا الإجراء طلبًا لتعديل تتبُّع تسلسل استدعاء الدوال البرمجية. هذا الإجراء غير متزامن.

يمكن لتطبيقَي ClientData.getThreads() وThreadInfo.getStackTrace() الوصول إلى معلومات سلسلة المحادثات.

سيتم تلقّي الإشعار بأنّ البيانات الجديدة متاحة من خلال AndroidDebugBridge.clientChanged(com.android.tradefed.device.server.ClientImpl, int) مع changeMask يتضمّن القناع Client.CHANGE_THREAD_STACKTRACE.

المعلمات
threadId int

requestThreadUpdate

public void requestThreadUpdate ()

يرسل هذا الإجراء طلبًا لتعديل سلسلة محادثات. هذا الإجراء غير متزامن.

يمكن الوصول إلى معلومات سلسلة المحادثات من خلال 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، سيؤدي أي عملية جمع للبيانات غير الضرورية إلى أن يرسل العميل معلومات الذاكرة المخصّصة.

يمكن لتطبيق 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: علامة التفعيل

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

toString

public String toString ()

تعرض هذه الطريقة تمثيلاً كسلسلة للكائن ClientImpl.

المرتجعات
String

toggleMethodProfiling

public void toggleMethodProfiling ()

تم إيقاف استخدام هذه الطريقة نهائيًا.
استخدِم startMethodTracer() أو stopMethodTracer() أو startSamplingProfiler(int, TimeUnit) أو stopSamplingProfiler() بدلاً من ذلك.

يبدّل حالة إنشاء ملفات تعريف الطرق.

تحديث

public void update (int changeMask)

المعلمات
changeMask int

updateHeapInfo

public void updateHeapInfo ()

يتم تشغيل عملية تعديل واحدة في الذاكرة المؤقتة.

الطُرق المحمية

إرسال

protected void send (JdwpPacket packet)

أرسِل حزمة DDM إلى العميل.

من المفترض أن نتمكّن من إجراء ذلك من خلال عملية كتابة واحدة على القناة. إذا لم يحدث ذلك، علينا منع أي شخص آخر من الكتابة إلى القناة إلى أن تكتمل هذه الحزمة، لذا سنقوم بمزامنة القناة.

والهدف الآخر هو تجنُّب نُسخ المخزن المؤقت غير الضرورية، لذا نكتب مباشرةً من ByteBuffer الخاص بـ JdwpPacket.

المعلمات
packet JdwpPacket