डीबग बिल्ड पर adb कमांड लाइन का इस्तेमाल करके, Winscope के ट्रेस इकट्ठा किए जा सकते हैं. डीबग बिल्ड का मतलब userdebug और eng बिल्ड से है. adb की मदद से Winscope ट्रेस इकट्ठा करने से पहले, adb root चलाएं.
Android 15 से, Winscope ट्रेस को Perfetto में इंटिग्रेट किया गया है. इन्हें Perfetto कमांड लाइन का इस्तेमाल करके इकट्ठा किया जाता है. हर Winscope ट्रेस, Perfetto का डेटा सोर्स होता है. इसका अपना कॉन्फ़िगरेशन होता है. कॉन्फ़िगरेशन को अलग-अलग या एक ही ट्रेसिंग सेशन में चालू किया जा सकता है.
Android 14 और इससे पहले के वर्शन में, हर Winscope ट्रेस के लिए अलग-अलग कमांड होती है. साथ ही, हर ट्रेस को अलग-अलग इकट्ठा किया जा सकता है. ज़्यादा जानकारी के लिए, Android 14 और इससे पहले के वर्शन में ट्रेस कैप्चर करना लेख पढ़ें.
WindowManager
इस ट्रेस टाइप के लिए, डेटा सोर्स के नाम android.windowmanager का इस्तेमाल करें.
कॉन्फ़िगरेशन के विकल्प
लॉग लेवल (
log_level): इससे लॉग की वर्बोसिटी तय होती है. इस्तेमाल की जा सकने वाली वैल्यू:LOG_LEVEL_VERBOSE: यह ज़्यादा से ज़्यादा जानकारी वाले सभी एलिमेंट को लॉग करता है.LOG_LEVEL_DEBUG: यह सभी एलिमेंट को लॉग करता है, लेकिन सभी कॉन्फ़िगरेशन डेटा को नहीं लिखता.LOG_LEVEL_CRITICAL: सिर्फ़ दिखने वाले एलिमेंट को लॉग करता है. साथ ही, परफ़ॉर्मेंस पर कम से कम असर पड़ता है.
लॉग फ़्रीक्वेंसी (
log_frequency): इससे यह तय होता है कि आइटम कितनी बार लॉग किए जाएंगे:LOG_FREQUENCY_FRAME: यह कुकी, फ़्रेम के कमिट होने पर स्टेट स्नैपशॉट को ट्रैक करती है.LOG_FREQUENCY_TRANSACTION: यह कुकी, हर बार लेन-देन पूरा होने पर स्थिति के स्नैपशॉट को ट्रैक करती है.LOG_FREQUENCY_SINGLE_DUMP: डेटा सोर्स शुरू होने पर, यह कुकी एक ही स्थिति के स्नैपशॉट को ट्रैक करती है.
कॉन्फ़िगरेशन वैल्यू के बारे में ज़्यादा जानकारी के लिए, WindowManager देखें.
उदाहरण
यहां दिए गए उदाहरण में, adb के लिए WindowManager ट्रेस टाइप दिखाया गया है:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.windowmanager"
windowmanager_config: {
log_level: LOG_LEVEL_VERBOSE
log_frequency: LOG_FREQUENCY_TRANSACTION
}
}
}
EOF
ProtoLog
इस ट्रेस टाइप के लिए, डेटा सोर्स के नाम android.protolog का इस्तेमाल करें.
कॉन्फ़िगरेशन के विकल्प
ट्रेसिंग मोड (tracing_mode): इससे यह तय होता है कि किस लॉग कॉन्फ़िगरेशन का इस्तेमाल करना है:
DEFAULT: यह सिर्फ़group_overridesमें बताए गए लॉग ग्रुप और लेवल को ट्रैक करता है.ENABLE_ALL: यह सभी लॉग ग्रुप और लेवल को ट्रेस करता है. हालांकि, ऐसा तब तक होता है, जब तक किgroup_overridesमें कोई दूसरा विकल्प न चुना गया हो.
कम से कम लॉग लेवल (default_log_from_level): अगर इसे सेट किया जाता है, तो इस लेवल से ज़्यादा या इसके बराबर लॉग लेवल वाले किसी भी मैसेज को ट्रेस किया जाता है. हालांकि, ऐसा तब तक किया जाता है, जब तक ग्रुप ओवरराइड तय न किया गया हो. उदाहरण के लिए, इसका इस्तेमाल सभी चेतावनियों और गड़बड़ियों को लॉग करने के लिए किया जाता है. इसके लिए, सभी लॉग को चालू करने की ज़रूरत नहीं होती. इन वैल्यू का इस्तेमाल किया जा सकता है:
PROTOLOG_LEVEL_DEBUGPROTOLOG_LEVEL_VERBOSEPROTOLOG_LEVEL_INFOPROTOLOG_LEVEL_WARNPROTOLOG_LEVEL_ERRORPROTOLOG_LEVEL_WTF
ग्रुप के लिए तय की गई सेटिंग को बदलना (group_overrides): इससे हर ProtoLog ग्रुप के लिए, लॉग लेवल को मैन्युअल तरीके से कॉन्फ़िगर किया जा सकता है. हर ग्रुप में ये शामिल हैं:
name: ProtoLog ग्रुप का नाम, जिसका इस्तेमाल Android के सोर्स कोड में किया जाता है.log_from: यहdefault_log_from_levelके जैसा ही है, लेकिन इसे सिर्फ़ मौजूदा ग्रुप के लिए तय किया गया है.collect_stacktrace: इसेtrueपर सेट करने पर, ट्रेस किए जा रहे ग्रुप में मौजूद हर ProtoLog मैसेज के लिए स्टैक ट्रेस इकट्ठा करता है.
उदाहरण
यहां दिए गए उदाहरण में, adb के लिए ProtoLog ट्रेस टाइप दिखाया गया है:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.protolog"
protolog_config: {
tracing_mode: DEFAULT
default_log_from_level: PROTOLOG_LEVEL_WARN
group_overrides: {
group_name: "WM_SHELL_STARTING_WINDOW"
log_from: PROTOLOG_LEVEL_DEBUG
collect_stacktrace: true
}
}
}
}
EOF
टेक्स्ट लिखो
इस ट्रेस टाइप के लिए, डेटा सोर्स के नाम android.input.inputevent का इस्तेमाल करें.
कॉन्फ़िगरेशन के विकल्प
ट्रेस मोड (trace_mode): इससे यह तय होता है कि निजता बनाए रखने वाले नियमों का इस्तेमाल करके, इनपुट ट्रेस शुरू किया जाना चाहिए या सभी इनपुट इवेंट रिकॉर्ड किए जाने चाहिए:
TRACE_MODE_TRACE_ALL: यह कुकी, सिस्टम से प्रोसेस किए गए सभी इनपुट इवेंट को रिकॉर्ड करती है. भले ही, उन्हें किसी भी कॉन्टेक्स्ट में प्रोसेस किया गया हो.TRACE_MODE_USE_RULES: इस कॉन्फ़िगरेशन में तय किए गए ट्रेसिंग के नियमों का इस्तेमाल करके, यह तय करता है कि किन इवेंट को ट्रेस करना है. ट्रेस के नियमों के बारे में ज़्यादा जानने के लिए,android_input_event_config.protoदेखें.
उदाहरण
adb के लिए, इनपुट ट्रेस टाइप का एक उदाहरण यहां दिया गया है:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.input.inputevent"
android_input_event_config: {
mode: TRACE_MODE_TRACE_ALL
}
}
}
EOF
SurfaceFlinger (लेयर)
इस ट्रेस टाइप के लिए, डेटा सोर्स के नाम android.surfaceflinger.layers का इस्तेमाल करें.
कॉन्फ़िगरेशन के विकल्प
ट्रेसिंग मोड (mode): इससे यह तय होता है कि आइटम कितनी बार लॉग किए जाते हैं:
MODE_ACTIVE: लेयर के स्नैपशॉट को ट्रेस करता है. लेयर में बदलाव होने पर, हर बार स्नैपशॉट लिया जाता है.MODE_GENERATED: यह SurfaceFlinger के इंटरनल रिंग बफ़र में रखे गए लेन-देन से लेयर के स्नैपशॉट जनरेट करता है. इस डेटा सोर्स को फ़्लश करने पर, लेयर के स्नैपशॉट जनरेट होते हैं.MODE_DUMP: यह एक लेयर के स्नैपशॉट को ट्रेस करता है.MODE_GENERATED_BUGREPORT_ONLY: यहMODE_GENERATEDकी तरह ही काम करता है. हालांकि, यह लेयर के स्नैपशॉट जनरेट करने की सुविधा को सिर्फ़ तब ट्रिगर करता है, जब गड़बड़ी की रिपोर्ट ली जाती है. ऐसा तब नहीं होता, जब ट्रेस को फ़्लश किया जाता है.
ट्रेस फ़्लैग (trace_flags):
TRACE_FLAG_INPUT: अगर सर्फ़ेस में इनपुट डेटा शामिल है, तो यह इनपुट विंडो की खास जानकारी को ट्रैक करता है.TRACE_FLAG_COMPOSITION: यह कुकी, कंपोज़िशन टाइप और दिखने वाले क्षेत्र को ट्रैक करती है.TRACE_FLAG_EXTRA: यह ऑफ़स्क्रीन लेयर के साथ-साथ, अन्य सर्फ़ेस मेटाडेटा को भी ट्रैक करता है.TRACE_FLAG_HWC: यह हार्डवेयर कंपोज़र के अतिरिक्त अनस्ट्रक्चर्ड मेटाडेटा को ट्रैक करता है.TRACE_FLAG_BUFFERS: यह SurfaceFlinger को कॉन्फ़िगर करता है, ताकि वह सरफेस पर बफ़र में हुए सभी बदलावों को ट्रैक कर सके. डिफ़ॉल्ट रूप से, SurfaceFlinger सिर्फ़ तब नई स्थिति का पता लगाता है, जब ज्यामिति में बदलाव होता है.TRACE_FLAG_VIRTUAL_DISPLAYS: इसमें ट्रेस में वर्चुअल डिसप्ले लेयर शामिल होती हैं.
उदाहरण
यहां दिए गए उदाहरण में, adb के लिए SurfaceFlinger ट्रेस टाइप दिखाया गया है:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.layers"
surfaceflinger_layers_config: {
mode: MODE_ACTIVE
trace_flags: TRACE_FLAG_INPUT
trace_flags: TRACE_FLAG_COMPOSITION
trace_flags: TRACE_FLAG_HWC
trace_flags: TRACE_FLAG_BUFFERS
trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
}
}
}
EOF
अलग-अलग कॉन्फ़िगरेशन वैल्यू के बारे में जानने के लिए, SurfaceFlinger देखें.
शेल ट्रांज़िशन
इस ट्रेस टाइप के लिए, डेटा सोर्स के नाम com.android.wm.shell.transition का इस्तेमाल करें.
कॉन्फ़िगरेशन के विकल्प
इस ट्रेस टाइप के लिए, कॉन्फ़िगरेशन के कोई विकल्प नहीं हैं.
उदाहरण
यहां दिए गए उदाहरण में, adb के लिए शेल ट्रांज़िशन ट्रेस टाइप दिखाया गया है:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "com.android.wm.shell.transition"
}
}
EOF
SurfaceFlinger (लेन-देन)
इस ट्रेस टाइप के लिए, डेटा सोर्स के नाम android.surfaceflinger.transactions का इस्तेमाल करें.
कॉन्फ़िगरेशन के विकल्प
ट्रेसिंग मोड (mode): इससे यह तय होता है कि आइटम कितनी बार लॉग किए जाते हैं:
MODE_CONTINUOUS: SurfaceFlinger, डेटा सोर्स के फ़्लश होने पर, लेन-देन के अपने इंटरनल रिंग बफ़र को लिखता है. रिंग बफ़र में, SurfaceFlinger की शुरुआती स्थिति और हाल ही के लेन-देन की जानकारी होती है.MODE_ACTIVE: SurfaceFlinger, शुरुआती स्थिति को लिखता है. इसके बाद, डेटा सोर्स बंद होने तक हर आने वाले लेन-देन को लिखता है.
उदाहरण
नीचे दिए गए उदाहरण में, adb के लिए SurfaceFlinger ट्रांज़ैक्शन ट्रेस टाइप दिखाया गया है.
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_ACTIVE
}
}
}
EOF
IME
इस ट्रेस टाइप के लिए, डेटा सोर्स के नाम android.inputmethod का इस्तेमाल करें.
कॉन्फ़िगरेशन के विकल्प
इस ट्रेस टाइप के लिए, कॉन्फ़िगरेशन के कोई विकल्प नहीं हैं.
उदाहरण
यहां दिए गए उदाहरण में, adb के लिए IME ट्रेस टाइप दिखाया गया है:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.inputmethod"
}
}
EOF
ViewCapture
इस ट्रेस टाइप के लिए, डेटा सोर्स के नाम android.viewcapture का इस्तेमाल करें.
कॉन्फ़िगरेशन के विकल्प
इस ट्रेस टाइप के लिए, कॉन्फ़िगरेशन के कोई विकल्प नहीं हैं.
उदाहरण
यहां दिए गए उदाहरण में, adb के लिए ViewCapture ट्रेस टाइप दिखाया गया है:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.viewcapture"
}
}
EOF
पूरा उदाहरण
Perfetto की मदद से, एक ही कॉन्फ़िगरेशन में कई सोर्स से डेटा इकट्ठा किया जा सकता है. एक ही कमांड का इस्तेमाल करके, Winscope के सभी ट्रेस इकट्ठा किए जा सकते हैं:
$ adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
<<EOF
unique_session_name: "my_custom_session"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.windowmanager"
windowmanager_config: {
log_level: LOG_LEVEL_VERBOSE
log_frequency: LOG_FREQUENCY_TRANSACTION
}
}
}
data_sources: {
config {
name: "android.protolog"
protolog_config: {
tracing_mode: ENABLE_ALL
}
}
}
data_sources: {
config {
name: "android.input.inputevent"
android_input_event_config: {
mode: TRACE_MODE_TRACE_ALL
}
}
}
data_sources: {
config {
name: "android.surfaceflinger.layers"
surfaceflinger_layers_config: {
mode: MODE_ACTIVE
trace_flags: TRACE_FLAG_INPUT
trace_flags: TRACE_FLAG_COMPOSITION
trace_flags: TRACE_FLAG_HWC
trace_flags: TRACE_FLAG_BUFFERS
trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
}
}
}
data_sources: {
config {
name: "com.android.wm.shell.transition"
}
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_ACTIVE
}
}
}
data_sources: {
config {
name: "android.inputmethod"
}
}
data_sources: {
config {
name: "android.viewcapture"
}
}
EOF
Android 14 और इससे पहले के वर्शन में ट्रेस कैप्चर करना
नीचे दिए गए हर ट्रेस के लिए, adb shell कमांड चलाने से पहले adb root चलाएं. ट्रेस के आखिर में, ट्रेस फ़ाइलें /data/misc/wmtrace में उपलब्ध होती हैं. किसी डिवाइस से किसी फ़ाइल या डायरेक्ट्री और उसकी सबडायरेक्ट्री को कॉपी करने के लिए, किसी डिवाइस से फ़ाइलें कॉपी करना और उस पर फ़ाइलें कॉपी करना लेख पढ़ें.
WindowManager ट्रेस
WindowManager के ट्रेस कैप्चर करने के लिए:
ट्रेसिंग की सुविधा चालू करने के लिए:
adb shell wm tracing startट्रेस बंद करने के लिए:
adb shell wm tracing stopट्रेस कैप्चर करने के दौरान, लॉगिंग डेटा को फ़ाइल में सेव करें:
adb shell wm tracing save-for-bugreportहर फ़्रेम में एक बार लॉग ट्रेस करें:
adb shell wm tracing frameहर लेन-देन को लॉग करें:
adb shell wm tracing transactionज़्यादा से ज़्यादा लॉग साइज़ (केबी में) सेट करें:
adb shell wm tracing sizeप्रिंट ट्रेस की स्थिति:
adb shell wm tracing statusलॉग लेवल को
critical(सिर्फ़ कम जानकारी वाली विंडो दिखती हैं),trim(कम जानकारी वाली सभी विंडो दिखती हैं) याall(सभी विंडो और जानकारी दिखती हैं) पर सेट करें:adb shell wm tracing level
WindowManager डंप
WindowManager डंप कैप्चर करने के लिए:
adb exec-out dumpsys window --proto > window_dump.winscope
ProtoLog
नीचे दिए गए निर्देशों का इस्तेमाल ProtoLog सिस्टम के लिए किया जाता है.
system_server प्रोसेस में:
Start ProtoLog:
adb shell cmd window logging startStop ProtoLog:
adb shell cmd window logging stopदिए गए लॉग ग्रुप के लिए, ProtoLog चालू करें:
adb shell cmd window logging enable [group...]दिए गए लॉग ग्रुप के लिए, ProtoLog बंद करें:
adb shell cmd window logging disable [group...]दिए गए लॉग ग्रुप के लिए, Logcat लॉगिंग चालू करें:
adb shell cmd window logging enable-text [group...]दिए गए लॉग ग्रुप के लिए, Logcat लॉगिंग बंद करें:
adb shell cmd window logging disable-text [group...]
WMShell में:
Start ProtoLog:
adb shell dumpsys activity service SystemUIService WMShell
SurfaceFlinger ट्रेस (लेयर)
SurfaceFlinger लेयर ट्रेसिंग, कैप्चर करने के लिए Perfetto ट्रेस का इस्तेमाल करती है. कॉन्फ़िगरेशन की जानकारी के लिए, ट्रेस कॉन्फ़िगरेशन देखें.
यहां दिए गए उदाहरण में, SurfaceFlinger लेयर ट्रेसिंग के लिए कॉन्फ़िगरेशन दिखाया गया है:
unique_session_name: "surfaceflinger_layers_active"
buffers: {
size_kb: 63488
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.layers"
surfaceflinger_layers_config: {
mode: MODE_ACTIVE
trace_flags: TRACE_FLAG_INPUT
trace_flags: TRACE_FLAG_COMPOSITION
trace_flags: TRACE_FLAG_HWC
trace_flags: TRACE_FLAG_BUFFERS
trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
}
}
}
यहां दिए गए उदाहरण में, SurfaceFlinger लेयर के लिए ट्रेसिंग जनरेट करने का तरीका बताया गया है:
adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
SurfaceFlinger डंप (लेयर)
SurfaceFlinger डंप कैप्चर करने के लिए, यह कमांड चलाएं:
adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope
शेल ट्रांज़िशन
ट्रांज़िशन ट्रेसिंग के लिए, इन कमांड का इस्तेमाल किया जाता है.
system_server प्रोसेस में, इन कमांड का इस्तेमाल करें:
ट्रेस शुरू करें:
adb shell cmd window shell tracing startट्रेस को रोकना:
adb shell cmd window shell tracing stopWMShell में ट्रेस शुरू करने के लिए:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing startWMShell में ट्रेसिंग बंद करने के लिए:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
IME
इनपुट के तरीके का संपादक (IME) ट्रेसिंग के लिए, इन कमांड का इस्तेमाल किया जाता है:
- इनपुट के तरीके (आईएम) के क्लाइंट, इनपुट के तरीके की सेवा (आईएमएस), और इनपुट के तरीके को मैनेज करने की सेवा (आईएमएमएस) के लिए, IME ट्रेसिंग शुरू करें:
adb shell ime tracing start
IME क्लाइंट, IMS, और IMMS को ट्रेस करना शुरू करें:
adb shell ime tracing stop
SurfaceFlinger (लेन-देन)
SurfaceFlinger लेन-देन की ट्रेसिंग के लिए, Perfetto ट्रेस का इस्तेमाल किया जाता है. कॉन्फ़िगरेशन की जानकारी के लिए, ट्रेस कॉन्फ़िगरेशन देखें.
यहां दिए गए उदाहरण में, SurfaceFlinger के लिए Perfetto कॉन्फ़िगरेशन दिखाया गया है. इसमें ऐक्टिव ट्रेसिंग की सुविधा चालू है:
unique_session_name: "surfaceflinger_transactions_active"
buffers: {
size_kb: 1024
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_ACTIVE
}
}
}
write_into_file: true
file_write_period_ms: 100
यहां दिए गए उदाहरण में, SurfaceFlinger के लिए Perfetto कॉन्फ़िगरेशन दिखाया गया है. इसमें लगातार ट्रेसिंग की सुविधा चालू है:
unique_session_name: "surfaceflinger_transactions_continuous"
buffers: {
size_kb: 1024
fill_policy: RING_BUFFER
}
data_sources: {
config {
name: "android.surfaceflinger.transactions"
surfaceflinger_transactions_config: {
mode: MODE_CONTINUOUS
}
}
}
यहां दिए गए उदाहरण में, SurfaceFlinger ट्रांज़ैक्शन के लिए ट्रेसिंग जनरेट करने का तरीका बताया गया है:
adb shell perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \