Winscope Perfetto ট্রেসে নির্দিষ্ট অবস্থা খুঁজে পেতে SQL ব্যবহার করুন। প্রশ্নগুলি চালানোর জন্য এবং সারণীকৃত ফলাফলগুলি কল্পনা করতে Winscope UI-তে গ্লোবাল সার্চ ভিউয়ার ব্যবহার করুন:
চিত্র 1. অনুসন্ধান দর্শক ট্যাব.
সার্চ ভিউয়ার আপনাকে পারফেটো ট্রেসে কাস্টম এসকিউএল কোয়েরি লিখতে এবং চালাতে দেয়, সেইসাথে সাম্প্রতিক এবং সংরক্ষিত প্রশ্নগুলি অ্যাক্সেস করতে দেয়। Winscope SurfaceFlinger, লেনদেন, ট্রানজিশন এবং ভিউক্যাপচার ট্রেস অনুসন্ধানে সহায়তা করার জন্য বিশেষ SQL ভিউ প্রদান করে।
সমস্ত দর্শনের জন্য নিম্নলিখিত নিয়মগুলি ব্যবহার করুন:
property
এবংflat_property
কলামের জন্য:- সম্পত্তির নামগুলি সাপের ক্ষেত্রে রয়েছে, উদাহরণস্বরূপ
LayerProto
থেকেvisible_region
। একটি ডট নোটেশন নেস্টেড বৈশিষ্ট্যগুলিকে উপস্থাপন করে, উদাহরণস্বরূপ,
visible_region.rect
।property
পুনরাবৃত্ত ক্ষেত্রগুলিকে বর্গাকার বন্ধনী দিয়ে আলাদা করা হয়:উদাহরণস্বরূপ, বারবার
visible_region.rect
ফিল্ডের দুটি উদাহরণের মধ্যে,top
ক্ষেত্রটিvisible_region.rect[0].top
এবংvisible_region.rect[1].top
দ্বারা উপস্থাপন করা হয়।flat_property
পুনরাবৃত্তি করা ক্ষেত্রগুলি আলাদা করা যায় না:উদাহরণস্বরূপ,
visible_region.rect
বারবার ফিল্ডের দুটি উদাহরণের মধ্যে,top
ক্ষেত্রটি উভয় ক্ষেত্রেইvisible_region.rect.top
দ্বারা উপস্থাপন করা হয়।
- সম্পত্তির নামগুলি সাপের ক্ষেত্রে রয়েছে, উদাহরণস্বরূপ
value
এবংprevious_value
কলামগুলির জন্য, বুলিয়ান মানগুলি0
(False
) বা1
(True
) দ্বারা উপস্থাপিত হয়।
Perfetto args
টেবিলের সাথে ট্রেস-নির্দিষ্ট টেবিল থেকে ডেটা যোগ করে Winscope এই ভিউ তৈরি করে। আপনি সরাসরি এই টেবিল জিজ্ঞাসা করতে পারেন. args
টেবিলে, key
, flat_key
, এবং display_value
কলামগুলি যথাক্রমে কলামের property
, flat_property
, এবং value
দেখার জন্য সাদৃশ্যপূর্ণ।
args
টেবিল:
কলাম | বর্ণনা |
---|---|
arg_set_id | args এর একটি সেট সংযুক্ত করতে ব্যবহৃত হয় |
flat_key | প্রোটো বার্তা থেকে সম্পত্তির নাম, বারবার ক্ষেত্রগুলির জন্য অ্যাকাউন্টিং নয় |
key | প্রোটো বার্তা থেকে সম্পত্তির নাম, বারবার ক্ষেত্রগুলির জন্য অ্যাকাউন্টিং |
value_type | সম্পত্তির মান প্রকার |
int_value | সম্পত্তির মান যদি মান প্রকার একটি পূর্ণসংখ্যা হয় |
string_value | সম্পত্তির মান যদি মান প্রকার একটি স্ট্রিং হয় |
real_value | সম্পত্তির মান যদি মান প্রকার বাস্তব হয় |
display_value | স্ট্রিং-এ প্রপার্টি ভ্যালু কাস্ট |
SurfaceFlinger SQL ভিউ
SurfaceFlinger প্রোটো ডেটা এই ফর্ম্যাটগুলি ব্যবহার করে:
লেয়ার ডেটা
LayerProto
ফরম্যাটে থাকে।স্তরবিন্যাস রুট ডেটা
LayersSnapshotProto
বিন্যাসে আছে।
স্তর ডেটা অনুসন্ধান করতে, sf_layer_search
ভিউ ব্যবহার করুন। এই দৃশ্যে এই কলামগুলি অন্তর্ভুক্ত রয়েছে:
কলাম | বর্ণনা |
---|---|
state_id | এন্ট্রির সারি আইডি যে স্তরটির অন্তর্গত |
ts | লেয়ারটি যে এন্ট্রির টাইমস্ট্যাম্প |
layer_id | লেয়ার আইডি |
parent_id | পিতামাতার লেয়ার আইডি |
layer_name | স্তরের নাম |
property | পুনরাবৃত্ত ক্ষেত্রগুলির জন্য সম্পত্তির নাম অ্যাকাউন্টিং |
flat_property | সম্পত্তির নাম বারবার ক্ষেত্রগুলির জন্য অ্যাকাউন্টিং নয় |
value | স্ট্রিং বিন্যাসে সম্পত্তি মান |
previous_value | স্ট্রিং বিন্যাসে পূর্ববর্তী এন্ট্রি থেকে সম্পত্তির মান |
অনুক্রমের রুট ডেটা অনুসন্ধান করতে, sf_hierarchy_root_search
ভিউ ব্যবহার করুন। এই দৃশ্যে এই কলামগুলি অন্তর্ভুক্ত রয়েছে:
কলাম | বর্ণনা |
---|---|
state_id | এন্ট্রির সারি আইডি |
ts | প্রবেশের টাইমস্ট্যাম্প |
property | পুনরাবৃত্ত ক্ষেত্রগুলির জন্য সম্পত্তির নাম অ্যাকাউন্টিং |
flat_property | সম্পত্তির নাম বারবার ক্ষেত্রগুলির জন্য অ্যাকাউন্টিং নয় |
value | স্ট্রিং বিন্যাসে সম্পত্তি মান |
previous_value | স্ট্রিং বিন্যাসে পূর্ববর্তী এন্ট্রি থেকে সম্পত্তির মান |
উদাহরণ প্রশ্ন
সমস্ত ফ্রেম খুঁজুন যেখানে
IME
স্তরের বৈধ স্ক্রীন সীমা রয়েছে:SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name like 'IME%' AND property='screen_bounds.bottom' AND value<='24000'
Taskbar
স্তরেরcolor.a
পরিবর্তন করে এমন সমস্ত ফ্রেম খুঁজুন:SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name like 'Taskbar%' AND property='color.a' AND value!=previous_value
এমন সব ফ্রেম খুঁজুন যেখানে
Wallpaper
নিচের সীমা 2400 এর কম বা সমান:SELECT ts, value, previous_value FROM sf_layer_search WHERE layer_name LIKE 'Wallpaper%' AND property='bounds.bottom' AND cast_int!(value) <= 2400
একটি বৈধ স্তর স্ট্যাকের সাথে প্রদর্শনের জন্য সমস্ত বৈশিষ্ট্য তালিকাভুক্ত করুন:
SELECT STATE.* FROM sf_hierarchy_root_search STATE_WITH_DISPLAY_ON INNER JOIN sf_hierarchy_root_search STATE ON STATE.state_id = STATE_WITH_DISPLAY_ON.state_id AND STATE_WITH_DISPLAY_ON.flat_property='displays.layer_stack' AND STATE_WITH_DISPLAY_ON.value!='4294967295' AND STATE.property LIKE CONCAT( SUBSTRING( STATE_WITH_DISPLAY_ON.property, 0, instr(STATE_WITH_DISPLAY_ON.property, ']') ), '%' )
যেখানে সোয়াইপ ব্যাক জেসচার দেখা যায় সেই সমস্ত ফ্রেম খুঁজুন
SELECT DISTINCT STATE.ts FROM sf_layer_search STATE WHERE STATE.layer_name LIKE 'EdgeBackGestureHandler%'
ডেটা টেবিল
সারফেসফ্লিংগার ভিউগুলি নিম্নলিখিত অন্তর্নিহিত টেবিলগুলি ব্যবহার করে তৈরি করা হয়েছে।
surfaceflinger_layers_snapshot
:
কলাম | বর্ণনা |
---|---|
id | প্রবেশের জন্য সারি আইডি |
ts | প্রবেশের টাইমস্ট্যাম্প |
arg_set_id | এই এন্ট্রির সাথে args টেবিল থেকে সারি সংযুক্ত করতে ব্যবহৃত ID |
surfaceflinger_layer
:
কলাম | বর্ণনা |
---|---|
id | স্তরের জন্য সারি আইডি |
snapshot_id | surfaceflinger_layers_snapshot থেকে এন্ট্রির সারি আইডি যে স্তরটির অন্তর্গত |
arg_set_id | এই স্তরের সাথে args টেবিল থেকে সারি সংযুক্ত করতে ব্যবহৃত ID |
লেনদেন SQL ভিউ
লেনদেনের প্রোটো ডেটা TransactionTraceEntry
ফর্ম্যাট ব্যবহার করে।
লেনদেন ট্রেস ডেটা অনুসন্ধান করতে, transactions_search
ভিউ ব্যবহার করুন। এই দৃশ্যে এই কলামগুলি অন্তর্ভুক্ত রয়েছে:
কলাম | বর্ণনা |
---|---|
state_id | প্রোটো সম্পত্তি যে এন্ট্রির সারি আইডি |
ts | প্রোটো সম্পত্তি যে এন্ট্রির টাইমস্ট্যাম্প |
transaction_id | উপলব্ধ থাকলে লেনদেন আইডি |
property | পুনরাবৃত্ত ক্ষেত্রগুলির জন্য সম্পত্তির নাম অ্যাকাউন্টিং |
flat_property | সম্পত্তির নাম বারবার ক্ষেত্রগুলির জন্য অ্যাকাউন্টিং নয় |
value | স্ট্রিং বিন্যাসে সম্পত্তি মান |
উদাহরণ প্রশ্ন
লেয়ার x অবস্থানকে -54.0 এ পরিবর্তন করতে একটি লেনদেন প্রয়োগ করা হয়েছে এমন ফ্রেমটি খুঁজুন:
SELECT ts, transaction_id, value FROM transactions_search WHERE flat_property='transactions.layer_changes.x' AND value='-54.0'
ImeContainer
স্তর যোগ করা হয়েছে যেখানে ফ্রেম খুঁজুন:SELECT ts FROM transactions_search WHERE flat_property='added_layers.name' AND value='ImeContainer'
ডেটা টেবিল
লেনদেন SQL ভিউ নিম্নলিখিত অন্তর্নিহিত টেবিল ব্যবহার করে তৈরি করা হয়.
surfaceflinger_transactions
:
কলাম | বর্ণনা |
---|---|
id | প্রবেশের জন্য সারি আইডি |
ts | প্রবেশের টাইমস্ট্যাম্প |
arg_set_id | এই এন্ট্রির সাথে args টেবিল থেকে সারি সংযুক্ত করতে ব্যবহৃত ID |
vsync_id | এই এন্ট্রিতে সমস্ত লেনদেনের সাথে যুক্ত VSync ID |
android_surfaceflinger_transaction
:
কলাম | বর্ণনা |
---|---|
id | লেনদেনের জন্য সারি আইডি |
snapshot_id | ট্রানজ্যাকশনটি যে surfaceflinger_transactions থেকে এন্ট্রির সারি আইডি |
arg_set_id | এই লেনদেনের সাথে args টেবিল থেকে সারি সংযুক্ত করতে ব্যবহৃত ID |
transaction_id | লেনদেন আইডি প্রোটো বার্তা থেকে নেওয়া |
pid | লেনদেন পিআইডি প্রোটো বার্তা থেকে নেওয়া |
uid | লেনদেন UID প্রোটো বার্তা থেকে নেওয়া |
layer_id | প্রযোজ্য হলে লেনদেনের সাথে সংশ্লিষ্ট স্তরের আইডি |
display_id | প্রযোজ্য হলে লেনদেনের সাথে যুক্ত ডিসপ্লের আইডি |
flags_id | android_surfaceflinger_transaction_flag থেকে সংশ্লিষ্ট পতাকা পুনরুদ্ধার করতে আইডি ব্যবহার করা হয় |
transaction_type | লেনদেনের ধরন |
android_surfaceflinger_transaction_flag
:
কলাম | বর্ণনা |
---|---|
flags_id | android_surfaceflinger_transaction এ একটি সারিতে মানের সাথে মিলে যায় |
flag | অনুবাদিত পতাকা স্ট্রিং |
পৃথক লেনদেনগুলি তাদের লেনদেনের প্রকারের উপর ভিত্তি করে বিভিন্ন প্রোটো বার্তা বিন্যাস থেকে args টেবিলে যোগ করা হয়:
-
LAYER_ADDED
:LayerCreationArgs
বিন্যাস -
LAYER_CHANGED
:LayerState
বিন্যাস -
DISPLAY_ADDED
:DisplayState
ফরম্যাট -
DISPLAY_CHANGED
:DisplayState
ফরম্যাট -
LAYER_DESTROYED
: কোন আর্গস নেই -
LAYER_HANDLE_DESTROYED
: কোন আর্গস নেই -
DISPLAY_REMOVED
: কোন আর্গস নেই -
NOOP
: কোন args নেই
রূপান্তর SQL ভিউ
ট্রানজিশন প্রোটো ডেটা ShellTransition
ফর্ম্যাট ব্যবহার করে।
ট্রানজিশন ডেটা অনুসন্ধান করতে, transitions_search
ভিউ ব্যবহার করুন। এই দৃশ্যে এই কলামগুলি অন্তর্ভুক্ত রয়েছে:
কলাম | বর্ণনা |
---|---|
ts | প্রেরণ সময়; পাওয়া গেলে পাঠানোর সময় ফিরে আসে, অন্যথায় 0 |
transition_id | ট্রানজিশন আইডি প্রোটো মেসেজ থেকে নেওয়া হয়েছে |
property | পুনরাবৃত্ত ক্ষেত্রগুলির জন্য সম্পত্তির নাম অ্যাকাউন্টিং |
flat_property | সম্পত্তির নাম বারবার ক্ষেত্রগুলির জন্য অ্যাকাউন্টিং নয় |
value | লেনদেন UID প্রোটো বার্তা থেকে নেওয়া |
উদাহরণ প্রশ্ন
DefaultMixedHandler
দ্বারা পরিচালিত ট্রানজিশনের বৈশিষ্ট্য খুঁজুন:
SELECT
PROPS.ts,
PROPS.transition_id,
PROPS.property,
PROPS.value
FROM transitions_search HANDLER_MATCH
INNER JOIN transitions_search PROPS
ON HANDLER_MATCH.transition_id = PROPS.transition_id
WHERE HANDLER_MATCH.property = 'handler'
AND HANDLER_MATCH.value LIKE "%DefaultMixedHandler"
ORDER BY PROPS.transition_id, PROPS.property
ডেটা টেবিল
ট্রানজিশন ভিউ নিম্নলিখিত অন্তর্নিহিত টেবিল ব্যবহার করে তৈরি করা হয়েছে।
window_manager_shell_transitions
:
কলাম | বর্ণনা |
---|---|
id | রূপান্তরের জন্য সারি আইডি |
ts | প্রেরণ সময়; পাওয়া গেলে পাঠানোর সময় ফিরে আসে, অন্যথায় 0 |
transition_id | ট্রানজিশন আইডি প্রোটো মেসেজ থেকে নেওয়া হয়েছে |
arg_set_id | এই ট্রানজিশনের সাথে args টেবিল থেকে সারি সংযুক্ত করতে ব্যবহৃত ID |
transition_type | ট্রানজিশন টাইপ প্রোটো মেসেজ থেকে নেওয়া হয়েছে |
send_time_ns | ট্রানজিশন সেন্ড টাইম প্রোটো মেসেজ থেকে নেওয়া |
dispatch_time_ns | প্রোটো বার্তা থেকে ট্রানজিশন প্রেরণের সময় নেওয়া হয়েছে |
duration_ns | ট্রানজিশনের সময়কাল, যদি শুরু এবং শেষের সময় পাওয়া যায় |
handler | ট্রানজিশন হ্যান্ডলার: window_manager_shell_transition_handlers থেকে অনুবাদ পুনরুদ্ধার করুন |
status | ট্রানজিশন স্ট্যাটাস: played , merged বা aborted |
flags | ট্রানজিশন পতাকা প্রোটো বার্তা থেকে নেওয়া |
window_manager_shell_transition_handlers
:
কলাম | বর্ণনা |
---|---|
handler_id | window_manager_shell_transitions এর handler কলামের মানের সাথে সম্পর্কিত ID |
handler_name | স্ট্রিং অনুবাদ |
android_window_manager_shell_transition_participants
:
কলাম | বর্ণনা |
---|---|
transition_id | ট্রানজিশন আইডি কাঁচা প্রোটো বার্তা থেকে নেওয়া হয়েছে |
layer_id | SurfaceFlinger স্তর অংশগ্রহণকারীর আইডি |
window_id | WindowManager কন্টেইনার অংশগ্রহণকারীর আইডি |
ViewCapture SQL ভিউ
ভিউক্যাপচার প্রোটো ডেটা View
ফরম্যাট ব্যবহার করে।
ViewCapture ডেটা অনুসন্ধান করতে, viewcapture_search
ভিউ ব্যবহার করুন। এই দৃশ্যে এই কলামগুলি অন্তর্ভুক্ত রয়েছে:
কলাম | বর্ণনা |
---|---|
state_id | যে রাজ্যের ভিউটি সেই রাজ্যের সারি আইডি৷ |
ts | রাজ্যের টাইমস্ট্যাম্প যে ভিউ এর অন্তর্গত |
package_name | প্যাকেজের নাম |
window_name | জানালার নাম |
class_name | ক্লাসের নাম দেখুন |
property | পুনরাবৃত্ত ক্ষেত্রগুলির জন্য সম্পত্তির নাম অ্যাকাউন্টিং |
flat_property | সম্পত্তির নাম বারবার ক্ষেত্রগুলির জন্য অ্যাকাউন্টিং নয় |
value | স্ট্রিং বিন্যাসে সম্পত্তি মান |
previous_value | স্ট্রিং বিন্যাসে পূর্ববর্তী অবস্থা থেকে সম্পত্তি মান |
উদাহরণ প্রশ্ন
যখন SearchContainerView
y-দিক থেকে সরানো হয়েছে তখন সমস্ত অবস্থা খুঁজুন:
SELECT * FROM viewcapture_search
WHERE class_name LIKE '%SearchContainerView'
AND flat_property='translation_y'
AND value!=previous_value
ডেটা টেবিল
ViewCapture ভিউ নিম্নলিখিত অন্তর্নিহিত টেবিল ব্যবহার করে তৈরি করা হয়.
android_viewcapture
:
কলাম | বর্ণনা |
---|---|
id | প্রবেশের জন্য সারি আইডি |
ts | প্রবেশের টাইমস্ট্যাম্প |
arg_set_id | এই এন্ট্রির সাথে args টেবিল থেকে সারি সংযুক্ত করতে ব্যবহৃত ID |
android_viewcapture_view
:
কলাম | বর্ণনা |
---|---|
id | দেখার জন্য সারি আইডি |
snapshot_id | android_viewcapture থেকে এন্ট্রির সারি আইডি যে ভিউটির অন্তর্গত |
arg_set_id | এই দৃশ্যের সাথে args টেবিল থেকে সারি সংযুক্ত করতে ব্যবহৃত ID |
প্রোটোলগ এসকিউএল টেবিল
ProtoLog প্রোটো ডেটা ProtoLogMessage
ফর্ম্যাট ব্যবহার করে। এই দৃশ্যে এই কলামগুলি অন্তর্ভুক্ত রয়েছে:
কলাম | বর্ণনা |
---|---|
ts | লগের টাইমস্ট্যাম্প |
level | লগ লেভেল |
tag | লগিং গ্রুপ ট্যাগ |
message | লগ বার্তা |
stacktrace | স্ট্যাকট্রেস (যদি পাওয়া যায়) |
location | কোড অবস্থান যেখান থেকে বার্তাটি আসে |
উদাহরণ প্রশ্ন
transition
ধারণকারী একটি বার্তা সহ সমস্ত লগ খুঁজুন:SELECT ts, message, location FROM protolog WHERE message LIKE '%transition%'
বৈধ লেনদেন আইডি রয়েছে এমন সমস্ত লগ খুঁজুন:
CREATE PERFETTO VIEW valid_tx_ids AS SELECT DISTINCT transaction_id FROM transactions_search WHERE transaction_id IS NOT NULL AND transaction_id != '0'; SELECT TRANS.transaction_id, message FROM valid_tx_ids TRANS INNER JOIN protolog LOGS ON LOGS.message LIKE CONCAT('%', TRANS.transaction_id, '%');
প্রশ্ন চালান
আপনি সার্চ ভিউয়ারের বাম দিকে গ্লোবাল সার্চ প্যানেল ব্যবহার করে সার্চ কোয়েরি চালাতে পারেন।
আপনি যখন প্রথমবার গ্লোবাল সার্চ প্যানেলের সাথে ইন্টারঅ্যাক্ট করেন, তখন ট্রেস সার্চ শুরু হয় এবং Winscope সাহায্যকারী SQL ভিউ তৈরি করে। এটি কয়েক সেকেন্ড সময় নেয়। ট্রেস অনুসন্ধান শুরু করার সময়, টাইমলাইন উপলব্ধ নয়।
একটি ক্যোয়ারী শুরু করতে, অনুসন্ধান বাক্সে একটি ক্যোয়ারী লিখুন এবং অনুসন্ধান ক্যোয়ারী চালান ক্লিক করুন বা এটি চালানোর জন্য আপনার কীবোর্ডে এন্টার টিপুন।
শেষ হলে, ফলাফলের সারণী মধ্যম প্যানেলে দেখায়। আপনার ক্যোয়ারীটি অনুসন্ধান বাক্সের নীচে প্রদর্শিত হবে, সেশনগুলির মধ্যে ক্যোয়ারী সংরক্ষণ করার জন্য একটি ক্ষেত্র রয়েছে৷
আপনি বাম প্যানেলে সংরক্ষিত ট্যাবে ক্লিক করে সংরক্ষিত প্রশ্নগুলি অ্যাক্সেস করতে পারেন এবং সাম্প্রতিক ট্যাবে ক্লিক করে সম্প্রতি চালানো প্রশ্নগুলি অ্যাক্সেস করতে পারেন:
চিত্র 2. অনুসন্ধান দর্শক বাম প্যানেল.
ফলাফল
সমস্ত ক্যোয়ারী সারণিযুক্ত ফলাফল প্রদান করে, লগ-ভিত্তিক ট্রেস ভিউয়ারের মত ইন্টারেক্টিভ আচরণ সহ একটি স্ক্রোলযোগ্য দৃশ্যে দেখানো হয়, যেমন লেনদেন এবং প্রোটোলগ:
চিত্র 3. দর্শক ফলাফল অনুসন্ধান করুন.
ফলাফল সারণিতে একটি ts
কলাম থাকলে, সেই কলামের মানগুলিকে টাইমস্ট্যাম্প হিসাবে ব্যাখ্যা করা হয় এবং এন্ট্রির একটি নতুন সারি হিসাবে টাইমলাইন ওভারলেতে যোগ করা হয়। এই সারিতে ক্লিক করুন এবং এন্ট্রিগুলির মধ্যে নেভিগেট করতে আপনার বাম এবং ডান তীর কীগুলি ব্যবহার করুন:
চিত্র 4. টাইমলাইন অনুসন্ধান করুন।