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

अगर क्लाइंट वीएम, DDM के बारे में जानता है, तो true दिखाता है.

boolean isDebuggerAttached()

अगर कोई डीबगर फ़िलहाल क्लाइंट से अटैच है, तो यह फ़ंक्शन true दिखाता है.

boolean isHeapUpdateEnabled()

यह फ़ंक्शन बताता है कि हीप अपडेट चालू है या नहीं.

boolean isThreadUpdateEnabled()

यह फ़ंक्शन बताता है कि थ्रेड अपडेट करने की सुविधा चालू है या नहीं.

boolean isValid()

यह फ़ंक्शन बताता है कि इस ClientImpl का ऐप्लिकेशन वीएम से मान्य कनेक्शन है या नहीं.

void kill()

यह VM को बंद करने का मैसेज भेजता है.

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) ऐप्लिकेशन प्रोसेस वाले पीआईडी की अपडेट की गई सूची पाएं. 3) ओपन/फ़ॉरवर्ड डीबगर पोर्ट और डिवाइस से कनेक्ट करें. 4) हैंडशेक करें. 5) HELO भेजें और जवाब का इंतज़ार करें.

डिवाइस/प्रोसेस साइड: a) ज़ायगोट को फ़ोर्क करें और PID के साथ ADB को अपडेट करें. b) अगर डीबगर पोर्ट कनेक्ट है, तो APNM भेजें ("<pre-initialize>"). c) प्रोसेस को ऐप्लिकेशन और पैकेज से बाइंड करें. d) अगर डीबगर पोर्ट कनेक्ट है, तो अपडेट किया गया APNM भेजें.

ऊपर दिए गए दोनों टास्क एक साथ पूरे होते हैं. हालांकि, इनमें सिर्फ़ एक शर्त होती है: a) 2 से पहले होना चाहिए.

रिटर्न
JdwpPacket

initializeHeapUpdateStatus

public void initializeHeapUpdateStatus ()

isDdmAware

public boolean isDdmAware ()

अगर क्लाइंट वीएम, DDM के बारे में जानता है, तो 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 ()

यह VM को बंद करने का मैसेज भेजता है. अगर वीएम क्रैश हो गया है, तो हो सकता है कि यह तरीका काम न करे.

listViewRoots

public void listViewRoots (DebugViewDumpHandler replyHandler)

पैरामीटर
replyHandler DebugViewDumpHandler

notifyVmMirrorExited

public void notifyVmMirrorExited ()

डबगर वीएम मिरर, DDMLib के पीछे से बंद हो सकते हैं. इससे रेस या परमानेंट Client लॉस की अलग-अलग स्थितियां पैदा हो सकती हैं. हमें DDMLib को यह सूचना देनी होगी कि फ़िलहाल अटैच किया गया डीबगर, बंद हो रहा है और वीएम मिरर कनेक्शन को बंद कर रहा है.

packetFailed

public void packetFailed (JdwpPacket reply)

पिछला अनुरोध पूरा नहीं हो सका. यह गैर-डीडीएम क्लाइंट से बातचीत करते समय, HELO मैसेज का अनुमानित जवाब है.

पैरामीटर
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 है, तो कोई भी GC क्लाइंट को अपनी हीप जानकारी भेजने के लिए कहेगा.

ढेर की जानकारी को 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 पैकेट भेजें.

आमतौर पर, हम इसे एक ही चैनल में लिख सकते हैं. अगर ऐसा नहीं होता है, तो हमें इस पैकेट के पूरा होने तक किसी और को चैनल पर लिखने से रोकना होगा, ताकि हम चैनल पर सिंक कर सकें.

हमारा एक और मकसद, बिना वजह की बफ़र कॉपी से बचना है. इसलिए, हम सीधे तौर पर JdwpPacket के ByteBuffer से लिखते हैं.

पैरामीटर
packet JdwpPacket