Winscope ट्रेस को डीबग बिल्ड पर adb
कमांड लाइन की मदद से इकट्ठा किया जा सकता है. डीबग बिल्ड का मतलब 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_DEBUG
PROTOLOG_LEVEL_VERBOSE
PROTOLOG_LEVEL_INFO
PROTOLOG_LEVEL_WARN
PROTOLOG_LEVEL_ERROR
PROTOLOG_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 start
Stop 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 stop
WMShell में ट्रेस शुरू करने के लिए:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing start
WMShell में ट्रेसिंग बंद करने के लिए:
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 \