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()
تعرِض هذه الدالة العنصر |
int
|
getDebuggerListenPort()
تعرض هذه السمة منفذ برنامج تصحيح الأخطاء لهذا العميل. |
IDevice
|
getDevice()
تعرِض هذه السمة |
DeviceImpl
|
getDeviceImpl()
تعرِض هذه السمة |
JdwpPacket
|
getJdwpPacket()
تعرض هذه السمة معلومات عن حزمة JDWP الكاملة الأولى في المخزن المؤقت. |
void
|
initializeHeapUpdateStatus()
|
boolean
|
isDdmAware()
تعرض القيمة |
boolean
|
isDebuggerAttached()
تعرض الدالة القيمة |
boolean
|
isHeapUpdateEnabled()
تعرض هذه السمة ما إذا كان أي تحديث للذاكرة المؤقتة مفعّلاً. |
boolean
|
isThreadUpdateEnabled()
تعرِض هذه السمة ما إذا كان تحديث سلسلة المحادثات مفعَّلاً. |
boolean
|
isValid()
تعرض هذه السمة ما إذا كان |
void
|
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 إلى العميل. |
الإنشاءات العامة
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 |