আপনি adb কমান্ড লাইন ব্যবহার করে ডিবাগ বিল্ডে
(অর্থাৎ, userdebug এবং eng বিল্ডে) Winscope ট্রেস সংগ্রহ করতে পারবেন। 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 দেখুন।
Shell ট্রানজিশন
এই ট্রেস ধরনের জন্য ডেটা সোর্সের নাম 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 statuscritical(শুধুমাত্র কম তথ্য সহ উইন্ডো দেখা যাবে ),trim(কম তথ্য সহ সব উইন্ডো) অথবাall(সব উইন্ডো ও তথ্য) হিসেবে লগ লেভেল সেট করুন:adb shell wm tracing level
WindowManager ডাম্প
WindowManager ডাম্প ক্যাপচার করতে:
adb exec-out dumpsys window --proto > window_dump.winscope
ProtoLog
ProtoLog সিস্টেমের জন্য নিম্নলিখিত কমান্ড ব্যবহার করা হয়।
system_server প্রসেসে:
ProtoLog শুরু করুন:
adb shell cmd window logging startProtoLog বন্ধ করুন:
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-এ:
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
Shell ট্রানজিশন
ট্রানজিশন ট্রেসিংয়ের জন্য নিম্নলিখিত কমান্ড ব্যবহার করা হয়।
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) ট্রেসিংয়ের জন্য নিম্নলিখিত কমান্ড ব্যবহার করা হয়:
- ইনপুট পদ্ধতি (IM) ক্লায়েন্ট, ইনপুট পদ্ধতি পরিষেবা
(IMS) এবং ইনপুট পদ্ধতি ম্যানেজমেন্ট পরিষেবার (IMMS) জন্য 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 \