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()
अगर क्लाइंट वीएम, DDM के बारे में जानता है, तो |
boolean
|
isDebuggerAttached()
अगर कोई डीबगर फ़िलहाल क्लाइंट से अटैच है, तो यह फ़ंक्शन |
boolean
|
isHeapUpdateEnabled()
यह फ़ंक्शन बताता है कि हीप अपडेट चालू है या नहीं. |
boolean
|
isThreadUpdateEnabled()
यह फ़ंक्शन बताता है कि थ्रेड अपडेट करने की सुविधा चालू है या नहीं. |
boolean
|
isValid()
यह फ़ंक्शन बताता है कि इस |
void
|
kill()
यह VM को बंद करने का मैसेज भेजता है. |
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) ऐप्लिकेशन प्रोसेस वाले पीआईडी की अपडेट की गई सूची पाएं. 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 ()
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 |