Winscope হল একটি ওয়েব টুল যা আপনাকে অ্যানিমেশন ও ট্রানজিশনের সময় ও পরে বিভিন্ন সিস্টেম পরিষেবার স্টেট রেকর্ড, রিপ্লে ও বিশ্লেষণ করতে দেয়। Winscope একটি ট্রেস ফাইলে প্রাসঙ্গিক সব সিস্টেম পরিষেবা স্টেট রেকর্ড করে। ট্রেস ফাইলের সাথে Winscope UI ব্যবহার করে, আপনি প্রতিটি অ্যানিমেশন ফ্রেমের জন্য এইসব পরিষেবার অবস্থা পরীক্ষা করতে পারবেন। এটি স্ক্রিন রেকর্ডিং সহ বা এটি ছাড়াই করা যেতে পারে। এর জন্য, ট্রানজিশন রিপ্লে করুন, ধাপে ধাপে দেখুন এবং ডিবাগ করুন।
কাজ করে এমন ট্রেস
Winscope বিভিন্ন ট্রেস সংগ্রহ ও ভিজ্যুয়ালি উপস্থাপন করার ক্ষমতা প্রদান করে, অর্থাৎ সিস্টেম পরিষেবা স্টেটের সিকোয়েন্স। আপনি এইসব ট্রেস কনফিগার করে নির্দিষ্ট ব্যবহারিক কেস অনুযায়ী সাজিয়ে নিতে পারবেন, এর মধ্যে কম ওভারহেড থেকে শুরু করে হাই ভার্বোসিটি পর্যন্ত বিভিন্ন ধরনের বিকল্প রয়েছে। Winscope নিম্নলিখিত ট্রেস সমর্থন করে:
- EventLog:
EventLogব্যবহার করে সিস্টেম ডায়াগনস্টিক ইভেন্ট রেকর্ড সংগ্রহ করুন। Winscope-এ এই তথ্য শুধুমাত্র CUJ চিহ্ন শনাক্ত ও দেখাতে ব্যবহার করা হয়। - IME: Input Method Editor (IME) পাইপলাইন থেকে ইভেন্ট ট্র্যাক করুন, যার মধ্যে IMS, IMMS এবং IME ক্লায়েন্ট অন্তর্ভুক্ত।
- ইনপুট: ইনপুট ইভেন্ট পাইপলাইনের বিভিন্ন অংশ থেকে ইনপুট ইভেন্ট ট্রেস করুন।
- ProtoLog: সিস্টেম পরিষেবা ও ক্লায়েন্ট প্রসেসে রান করা সিস্টেম পরিষেবার কোড থেকে ProtoLog মেসেজ সংগ্রহ করে।
- স্ক্রিন রেকর্ডিং: ট্রেসের সাথে স্ক্রিন রেকর্ডিং সংগ্রহ করুন।
- শেল ট্রানজিশন: উইন্ডো ও অ্যাক্টিভিটি ট্রানজিশন সিস্টেমের বিবরণ রেকর্ড করুন।
- SurfaceFlinger: পজিশন, বাফার ও কম্পোজিশনের মতো সারফেস (লেয়ার) সংক্রান্ত তথ্য সহ SurfaceFlinger ট্রেস সংগ্রহ করে।
- ট্রানজ্যাকশন: কম্পোজিশনের জন্য
SurfaceControlব্যবহার করে SurfaceFlinger-এর মাধ্যমে পাওয়া অ্যাটমিক পরিবর্তনের সেট ট্রেস করুন। - ViewCapture: ViewCapture কাজ করে এমন সিস্টেম উইন্ডো থেকে সব ভিউয়ের বিভিন্ন প্রপার্টি ক্যাপচার করে, যেমন সিস্টেম UI ও লঞ্চার।
- উইন্ডো ম্যানেজার: ট্রেস উইন্ডো ম্যানেজার ইনপুট ও ফোকাস ইভেন্ট, স্ক্রিন ওরিয়েন্টেশন, ট্রানজিশন, অ্যানিমেশন, পজিশনিং ও ট্রান্সফর্মেশন সহ উইন্ডো সম্পর্কিত বিবরণ ধারণ করে।
সমর্থিত ডাম্প
Winscope, স্টেট ডাম্প সংগ্রহ ও দেখাতে পারে। এগুলি হল আপনার ডিভাইসের স্টেটের স্ন্যাপশট যা আপনার নির্দিষ্ট করা নির্দিষ্ট মুহূর্তে নেওয়া হয়। ট্রেসের মতো নয়, যা ডিভাইস ব্যবহারের সময় ক্রমাগত সংগ্রহ করা হয় এবং পারফর্ম্যান্সকে প্রভাবিত করতে পারে, ডাম্প শুধুমাত্র ব্যবহারকারীর সংজ্ঞায়িত মুহূর্তগুলিতে নেওয়া হয়, যাতে পারফর্ম্যান্স ও ভারবোসিটি যে আপস করা হয়নি তা যাচাই করা যায়। এটি নির্দিষ্ট সময়ে ডিভাইসের স্ট্যাটাস আরও ফোকাসড ও দক্ষতার সাথে বিশ্লেষণ করতে সাহায্য করে। Winscope নিচে উল্লেখ করা ডাম্পে কাজ করে:
- উইন্ডো ম্যানেজার: একটি উইন্ডো ম্যানেজারের স্টেট ডাম্প করুন।
- SurfaceFlinger: একটি SurfaceFlinger স্ন্যাপশট ডাম্প করুন।
- স্ক্রিনশট: ডাম্পের সাথে স্ক্রিনশট সংগ্রহ করুন।
রিসোর্স
Winscope তৈরি ও রান করা সংক্রান্ত তথ্যের জন্য Winscope রান করা দেখুন।
ট্রেস সংগ্রহ করা সম্পর্কিত তথ্যের জন্য ট্রেস ক্যাপচার করা দেখুন।
Winscope ওয়েব UI ব্যবহার করে কীভাবে ট্রেস লোড করতে হয় সেই সম্পর্কে তথ্য পেতে, ট্রেস লোড করা দেখুন।
ট্রেস বিশ্লেষণ করার ব্যাপারে তথ্য পেতে ট্রেস বিশ্লেষণ করুন দেখুন।
উদাহরণ
নিচের উদাহরণে কীভাবে ফ্লিকার টেস্ট ব্যর্থতা ও ব্যবহারকারীর রিপোর্ট করা সমস্যার সমাধান করতে হয় তা বর্ণনা করা হয়েছে।
ফ্লিকার টেস্ট করা যায়নি
ফ্লিকার টেস্ট ব্যর্থতা ডিবাগ করার জন্য কীভাবে Winscope ব্যবহার করতে হয় তা এই উদাহরণে দেখানো হয়েছে।
টেস্ট করার সময় হওয়া সমস্যা পরীক্ষা করা
সমস্যার ধরন নির্ধারণ করতে এবং টেস্ট করায় সমস্যা সংক্রান্ত মেসেজ পরীক্ষা করতে এইসব ধাপ অনুসরণ করুন।
টেস্ট ও ক্লাসের নাম পরীক্ষা করে সমস্যার ধরন নির্ধারণ করুন।
টেস্ট ও ক্লাসের নাম:
FlickerTestsNotification com.android.server.wm.flicker.notification.OpenAppFromLockscreenNotificationColdTest#appLayerBecomesVisible[ROTATION_0_GESTURAL_NAV]সমস্যার ধরন:
- CUJ বলতে লকস্ক্রিন বিজ্ঞপ্তি থেকে অ্যাপ লঞ্চ করাকে বোঝায়
(
OpenAppFromLockscreenNotificationColdTest)। - পরীক্ষাটি আশা করে যে অ্যাপটি দৃশ্যমান হবে (
#appLayerBecomesVisible)।
- CUJ বলতে লকস্ক্রিন বিজ্ঞপ্তি থেকে অ্যাপ লঞ্চ করাকে বোঝায়
(
পরীক্ষা ব্যর্থ হওয়ার মেসেজটি ভাল করে দেখুন, এটি ব্যর্থতা সম্পর্কে বিস্তারিত তথ্য প্রদান করে, যার মধ্যে এগুলি অন্তর্ভুক্ত:
- প্রত্যাশিত ফলাফল ও বাস্তবে দৃশ্যমান ফলাফলের মধ্যে তুলনা
- সমস্যা কখন হয়েছে তা নির্দিষ্টভাবে চিহ্নিত করতে সাহায্য করার জন্য টাইমস্ট্যাম্প
- ব্যর্থতার সাথে যুক্ত আর্টিফ্যাক্ট বা ফাইলের নাম
- সমস্যা বোঝা ও ডিবাগ করার জন্য প্রাসঙ্গিক অতিরিক্ত প্রাসঙ্গিক তথ্য
android.tools.flicker.subject.exceptions.IncorrectVisibilityException: com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.NotificationActivity# should be visible Where? Timestamp(UNIX=2024-05-10T11:04:14.227572545(1715339054227572545ns), UPTIME=37m21s184ms79178ns(2241184079178ns), ELAPSED=0ns) What? Expected: com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.NotificationActivity# Actual: [e636ecd com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.NotificationActivity#3457: Buffer is empty, Visible region calculated by Composition Engine is empty, com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.NotificationActivity#3458: Visible region calculated by Composition Engine is empty] Other information Artifact: FAIL__OpenAppFromLockscreenNotificationColdTest_ROTATION_0_GESTURAL_NAV.zip Check the test run artifacts for trace files at android.tools.flicker.subject.layers.LayerTraceEntrySubject.isVisible(LayerTraceEntrySubject.kt:187) at android.tools.flicker.subject.layers.LayersTraceSubject$isVisible$1$1.invoke(LayersTraceSubject.kt:151) at android.tools.flicker.subject.layers.LayersTraceSubject$isVisible$1$1.invoke(LayersTraceSubject.kt:150) at android.tools.flicker.assertions.NamedAssertion.invoke(NamedAssertion.kt:32) at android.tools.flicker.assertions.CompoundAssertion.invoke(CompoundAssertion.kt:42) at android.tools.flicker.assertions.AssertionsChecker.test(AssertionsChecker.kt:79) at android.tools.flicker.subject.FlickerTraceSubject.forAllEntries(FlickerTraceSubject.kt:59) at android.tools.flicker.assertions.AssertionDataFactory$createTraceAssertion$closedAssertion$1.invoke(AssertionDataFactory.kt:46) at android.tools.flicker.assertions.AssertionDataFactory$createTraceAssertion$closedAssertion$1.invoke(AssertionDataFactory.kt:43) at android.tools.flicker.assertions.AssertionDataImpl.checkAssertion(AssertionDataImpl.kt:33) at android.tools.flicker.assertions.ReaderAssertionRunner.doRunAssertion(ReaderAssertionRunner.kt:35) at android.tools.flicker.assertions.ReaderAssertionRunner.runAssertion(ReaderAssertionRunner.kt:29) at android.tools.flicker.assertions.BaseAssertionRunner.runAssertion(BaseAssertionRunner.kt:36) at android.tools.flicker.legacy.LegacyFlickerTest.doProcess(LegacyFlickerTest.kt:59) at android.tools.flicker.assertions.BaseFlickerTest.assertLayers(BaseFlickerTest.kt:89) at com.android.server.wm.flicker.notification.OpenAppTransition.appLayerBecomesVisible_coldStart(OpenAppTransition.kt:51) at com.android.server.wm.flicker.notification.OpenAppFromNotificationColdTest.appLayerBecomesVisible(OpenAppFromNotificationColdTest.kt:64)এই আউটপুট স্যাম্পেল থেকে নিম্নলিখিত বিষয়গুলি বোঝা যায়:
2024-05-10T11:04:14.227572545-এ সমস্যাটি হয়।NotificationActivityদেখা যাওয়ার কথা থাকলেও তা দেখা যাচ্ছে না।- আর্টিফ্যাক্ট ফাইলের নাম যাতে ডিবাগ করার জন্য ট্রেস থাকে
তা হল
FAIL__OpenAppFromLockscreenNotificationColdTest_ROTATION_0_GESTURAL_NAV।
ডিবাগ করুন
ফ্লিকার করার কারণ নির্ধারণ করতে এইসব ধাপ অনুসরণ করুন:
ট্রেস ফাইল ডাউনলোড করে Winscope-এ লোড করুন। Winscope খুলে যায় এবং SurfaceFlinger অটোমেটিক বেছে নেওয়া হয়:
ছবি ১. SurfaceFlinger ভিউ সহ Winscope ল্যান্ডিং পৃষ্ঠা।
যে টাইমস্ট্যাম্পে সমস্যা হয়েছে সেখানে নেভিগেট করতে, ব্যতিক্রমী মেসেজ থেকে টাইমস্ট্যাম্প কপি করে টাইমস্ট্যাম্প ফিল্ডে পেস্ট করুন। আপনি মানুষের-পঠনযোগ্য ফর্ম্যাটে টাইমস্ট্যাম্প কপি করে (
2024-05-10T11:04:14.227572545) প্রথম ফিল্ডে পেস্ট করতে পারেন অথবা ন্যানোসেকেন্ডে টাইমস্ট্যাম্প কপি করে (1715339054227572545ns) দ্বিতীয় ফিল্ডে পেস্ট করতে পারেন।
ছবি ২. টাইমস্ট্যাম্প ডায়ালগ।
আগের ফ্রেমে নেভিগেট করতে বাঁদিকের তীরচিহ্ন কী প্রেস করুন। এই অবস্থায় NotificationActivity অ্যাপ ভিডিওতে সঠিকভাবে দেখা যায় এবং অ্যাপ ও স্প্ল্যাশ স্ক্রিন সারফেস, দুটিই দেখা যায়, যা 3D ভিউতে সবুজ রঙের আয়তক্ষেত্র এবং তাদের হায়ারার্কি এলিমেন্টে V চিপের মাধ্যমে দেখানো হয়।
অ্যাপ ও স্প্ল্যাশ স্ক্রিনের সারফেসের নাম হল:
com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.NotificationActivity#3458` Splash Screen com.android.server.wm.flicker.testapp#3453এটি থেকে বোঝা যায় যে স্ক্রিন কালো হয়ে যাওয়ার সময় অ্যাপটি লঞ্চ হচ্ছিল এবং অ্যাপ লঞ্চ করার সময় এই ইভেন্টটি ঘটছে, কারণ স্প্ল্যাশ স্ক্রিন এখনও দেখা যাচ্ছে:
ছবি ৩. অ্যাপ লঞ্চ করার সময়।
যেখানে ফ্লিকার হচ্ছে, সেই পরের ফ্রেমে ফিরে যেতে ডানদিকের তীরচিহ্ন কী প্রেস করুন। রেকটেঙ্গেল ভিউতে, অ্যাপের পরিবর্তে স্ক্রিনে
NotificationShadeদেখানো হয়। এই ফ্রেমে নিম্নলিখিত সারফেস দেখানো হয়:- স্ক্রিন ডেকোর ওভারলে (উপরে ও নিচে)
- নেভিগেশন বার
- পয়েন্টারের লোকেশন (স্ক্রিন রেকর্ডিং থেকে)
ছবি ৪. ফ্লিকার অ্যাক্টিভিটি।
হায়ারার্কি ভিউতে অ্যাপ অ্যাক্টিভিটি বেছে নিন। আপনি এটি খুঁজে না পেলে, শুধুমাত্র V দেখান বিকল্পটি টগল করে বন্ধ করুন। তারপর, প্রপার্টি ভিউ চেক করুন।
অ্যাপ সারফেসের নাম হল:
com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.NotificationActivity#3458`
ছবি ৫. অ্যাপ প্রপার্টি।
যদিও অ্যাপ অ্যাক্টিভিটি দৃশ্যমান এবং অস্বচ্ছ হিসেবে সেট করা আছে,
Invisible due to: null visible regionসমস্যার কারণে সারফেস দেখানো হচ্ছে না। এটি ঘটে কারণ কম্পোজিশনের সময় এটির সামনে আরেকটি অস্বচ্ছ সারফেস রাখা হয়েছিল। এই হাইপোথিসিসটি 3D ভিউতেNotificationShaderect,NotificationActivityrect-এর সামনে থাকার কারণে তৈরি হয়েছে এবং দৃশ্যমান (সবুজ)NotificationShadeসম্ভবত বেছে নেওয়া লেয়ার।এই হাইপোথিসিস যাচাই করতে, বর্তমান ফ্রেমে দৃশ্যমান
NotificationShadeসারফেস বেছে নিন এবং এর প্রপার্টি চেক করুন। ফ্ল্যাগগুলিOPAQUE|ENABLE_BACKPRESSURE (0x102)-এ সেট করা আছে।NotificationShadeসারফেসের নাম হলNotificationShade#3447। এরপরে, আগের ফ্রেমে (ফ্লিকারের আগে) ফিরে যেতে বাঁদিকের তীরচিহ্ন টিপুন এবংNotificationShadeসারফেসের প্রপার্টি আবার পরীক্ষা করুন। লক্ষ্য করুন যেOPAQUE-এর পরিবর্তে সারফেসে শুধুমাত্রENABLE_BACKPRESSURE (0x100)ফ্ল্যাগ আছে। এটি নিশ্চিত করে যে অ্যাপ লঞ্চ সম্পূর্ণ শেষ হওয়ার আগেইNotificationShadeঅস্বচ্ছ হয়ে যায়।NotificationShadeযেহেতুNotificationActivity-এর সামনে আছে, তাই অ্যাপটি দেখানো হচ্ছে না।NotificationShadeকালো হওয়ার কারণে স্ক্রিন কিছুক্ষণের জন্য কালো হয়ে যায়, যার ফলে ফ্লিকারিং হয়।কোডে শনাক্ত করুন যে কেন
NotificationShadeখুব তাড়াতাড়ি অস্বচ্ছ হয়ে যায়।
ব্যবহারকারীর অভিযোগ করা সমস্যা
ব্যবহারকারীদের রিপোর্ট করা বাগ ডিবাগ করা কঠিন হতে পারে কারণ সেগুলিতে প্রায়ই বিস্তারিত তথ্য থাকে না। ফ্লিকার টেস্টে সমস্যা হলে, নির্দিষ্ট টাইমস্ট্যাম্প, এলিমেন্টের বিবরণ ও স্ক্রিন রেকর্ডিং প্রদান করা হয়। তবে, ব্যবহারকারীর রিপোর্ট করা বাগের ক্ষেত্রে সাধারণত সমস্যার সংক্ষিপ্ত বিবরণই শুধু থাকে।
আমাদের কেস স্টাডিতে, শুধুমাত্র স্প্লিট স্ক্রিন থেকে অ্যাপ আবার খোলার সময় স্ক্রিন ফ্লিকার করছে শীর্ষক তথ্য এবং ১৮ এপ্রিল, ২০২৪ GMT-০৪:০০ অনুসারে ৩:৫১ PM-এর আনুমানিক টাইমস্ট্যাম্প প্রদান করা হয়েছে।
ব্যবহারকারীর রিপোর্ট করা কোনও বাগ ডিবাগ করতে এইসব ধাপ অনুসরণ করুন:
Winscope-এ ট্রেস ফাইল লোড করুন। SurfaceFlinger autoselected সহ Winscope খোলে।
ছবি ৬. SurfaceFlinger ভিউ সহ Winscope ল্যান্ডিং পৃষ্ঠা।
ব্যবহারকারীর রিপোর্ট করা আনুমানিক টাইমস্ট্যাম্পে নেভিগেট করুন, এই ক্ষেত্রে
3:50 PM GMT-04:00, হিউম্যান-রিডেবল টাইমস্ট্যাম্প ফিল্ডে15:50:00লিখে।
ছবি ৭. টাইমস্ট্যাম্প ডায়ালগ।
স্ক্রিনে কী আঁকা হয়েছে তা শনাক্ত করতে rects ভিউ ব্যবহার করুন। আরও ভালভাবে দেখার জন্য, ঘোরান স্লাইডার ব্যবহার করে রেকটসের পরিপ্রেক্ষিত পরিবর্তন করুন। হায়ারার্কি ভিউতে শুধুমাত্র V দেখুন ও ফ্ল্যাট বিকল্পে টিকচিহ্ন দিলে, ওয়ালপেপার, স্ক্রিন ডেকোর ওভারলে, লেটারবক্স, লঞ্চার, পরিচিতি ও ডায়লার সারফেস দেখা যায়।
প্যাকেজের নামগুলি হল:
- লঞ্চার:
com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#40602 - পরিচিতি:
com.google.android.contacts/com.android.contacts.activities.PeopleActivity#40565 - ডায়লার:
com.google.android.dialer/com.google.android.dialer.extensions.GoogleDialtactsActivity#40564
যেসব সারফেস দেখা যাচ্ছে (সবুজ আয়তক্ষেত্র) সেগুলি ছাড়াও, একটি ধূসর আয়তক্ষেত্র, যা ডিসপ্লে এরিয়া সারফেসকে দেখায়, অজানা ডিসপ্লে নামে দেখানো হয়। দৃশ্যমানতা উন্নত করতে,
ScreenDecorHwcOverlay#64সারফেসের ঠিক পাশে থাকা (
)
আইকনে ক্লিক করে সংশ্লিষ্ট
রেক্ট লুকান এবং তার পিছনের সারফেস প্রকাশ করুন। আমরা বিশ্লেষণের জন্য ওভারলে সরিয়ে দিই
কারণ এটি ব্যবহারকারীর কাছে দৃশ্যমান নয় এবং এটিকে
ফ্লিকারিং অ্যানিমেশন হিসেবে রিপোর্ট করা হবে না।
ছবি ৮. ব্যবহারকারীর অভিযোগ।
- লঞ্চার:
কোন কোন সারফেস স্প্লিট স্ক্রিন ভিউতে ইনভলভ আছে তা শনাক্ত করার পরে, বিভিন্ন ব্যবহারকারীর অ্যাকশন ধাপে ধাপে দেখতে এবং ফ্লিকার খুঁজে পেতে ট্রানজিশন ট্রেস ব্যবহার করুন। Winscope-এ ট্রানজিশন ট্যাবে ক্লিক করে প্লে করা ট্রানজিশনের তালিকা দেখুন:
ছবি ৯. ট্রানজিশন।
এই ফ্রেম চলাকালীন যে ট্রানজিশন চালানো হয়েছে সেটি নীল রঙে হাইলাইট করা হয়েছে। এই ক্ষেত্রে, ট্রানজিশন ফ্ল্যাগে
TRANSIT_FLAG_IS_RECENTSঅন্তর্ভুক্ত থাকে, যা নির্দেশ করে যে ব্যবহারকারী সাম্প্রতিক স্ক্রিনে প্রবেশ করছেন।ডিসপ্যাচ টাইম কলামের (এই ক্ষেত্রে
2024-04-18, 15:50:57.205) লিঙ্কে ক্লিক করে সেই সময়ের পয়েন্টে যান এবং Surface Flinger ট্যাবে রেকট্যাঙ্গেল যাচাই করুন। ডানদিকের তীরচিহ্ন ব্যবহার করে ট্রানজিশনের প্রতিটি ধাপের মধ্য দিয়ে যাওয়ার সময় ডিভাইসের স্ট্যাটাস সঠিক আছে কিনা তা কনফার্ম করুন এবং রেকটগুলি লক্ষ্য করুন।লঞ্চার ১৫:৫০:৫৭.২৭৮-এ দেখা যায়, কিন্তু অ্যানিমেশন তখন শুরু হয় না। ওয়ালপেপার আগে থেকেই দেখা যাচ্ছে কারণ স্প্লিট-স্ক্রিন অ্যাপের (ডিভাইডার) মধ্যে কিছু আঁকা নেই। একটি ফ্রেম আগে (১৫:৫০:৫৭.২১২), ওয়ালপেপার দেখা যাচ্ছে না এবং ডিভাইডার দেখানো হয়েছে, অ্যানিমেট না করলে স্প্লিট-স্ক্রিন যেমন দেখায় এটিও তেমনই।
ছবি ১০. ফ্লিকার ইভেন্টের আগের স্ক্রিন।
পরের ট্রানজিশন দেখতে, সরাসরি টাইমলাইনে ক্লিক করুন। SurfaceFlinger-এর স্টেটগুলি হালকা নীল রঙের ব্লকের একটি সারি দিয়ে দেখানো হয়। ট্রানজিশনগুলি পিঙ্ক ব্লকগুলির একটি সারি দ্বারা দেখানো হয়।
ছবি ১১. প্রথম ট্রানজিশনের শেষ।
পরবর্তী ট্রানজিশনের শুরুর পজিশনে SurfaceFlinger সারিতে ক্লিক করুন। ১১ নম্বর ছবিতে, কার্সরের উল্লম্ব পজিশনটি নীল রঙের সরু লাইন দিয়ে দেখানো হয়েছে। SurfaceFlinger সারির হালকা নীল ব্যাকগ্রাউন্ড থেকে এর আনুভূমিক পজিশন বোঝা যায়। ট্রানজিশনের মাধ্যমে ডানদিকের তীরচিহ্ন কী ব্যবহার করে দেখুন যে কোনও ফ্লিকার হচ্ছে কিনা। এই ট্রানজিশনের জন্য ডিভাইসটি সঠিক কিনা তা কনফার্ম করুন।
পরবর্তী ট্রানজিশন এড়িয়ে যান কারণ এর সময়সীমা খুবই কম, তাই এতে ফ্লিকার থাকার সম্ভাবনা নেই। পরিবর্তে, SurfaceFlinger সারিতে টাইমলাইনে ক্লিক করুন পরের দীর্ঘ ট্রানজিশনের শুরুর পজিশনে, যেমনটি নিম্নলিখিত ছবিতে কার্সর দ্বারা নির্দেশিত হয়েছে।
ছবি ১২. দ্বিতীয় ট্রানজিশনের শেষ।
এই ট্রানজিশনের সময়,
15:51:13.239-এ, লক্ষ্য করুন যে দুটি অ্যাপ, পরিচিতি ও ডায়ালারেরSplash Screenলেয়ার ডিসপ্লের একই দিকে আছে:
ছবি ১৩. স্প্ল্যাশ স্ক্রিন।
কোন অ্যাপটি ভুল দিকে আছে তা স্পষ্ট করুন। পরে এই ফ্রেমে ফিরে আসার জন্য নেভিগেট করতে, ns ইনপুট ফিল্ডের পাশে ফ্ল্যাগ আইকনে ক্লিক করে আপনার বর্তমান পজিশনে বুকমার্ক যোগ করুন।
ছবি ১৪. বুকমার্ক যোগ করুন।
টাইমলাইনে ক্লিক করে ট্রানজিশনের শেষে থাকা কোনও ফ্রেমে নেভিগেট করুন সরাসরি, যেমন,
15:51:13.859-এ। এখানে দুটি অ্যাপ এখন তাদের চূড়ান্ত পজিশনে আছে, বাঁদিকে ডায়ালার এবং ডানদিকে পরিচিতি অ্যাপ:
ছবি ১৫. চূড়ান্ত স্প্লিট স্ক্রিন।
ফ্লিকার সহ ফ্রেমে ফিরে যেতে টাইমলাইনে বুকমার্কের ফ্ল্যাগ আইকনে ক্লিক করুন।
ছবি ১৬. টাইমলাইন বুকমার্ক করুন।
দুটি অ্যাপই ডানদিকে আছে, এর অর্থ হল ডায়ালারটি ভুল পজিশনে আছে।
ডায়ালারের প্রপার্টি দেখতে, ডায়ালারের স্প্ল্যাশ স্ক্রিনে ক্লিক করুন। কিউরেট করা প্রপার্টি ভিউতে এর ট্রান্সফর্ম প্রপার্টি বিশেষভাবে দেখুন।
ছবি ১৭. ট্রান্সফর্ম প্রপার্টি।
এই সারফেসে হিসেব করা ট্রান্সফর্ম প্রয়োগ করা হয়েছে, কিন্তু এই লেভেলে সেট করা হয়নি। গণনা করা ও অনুরোধ করা কলামের মান আলাদা, এর থেকে বোঝা যায় যে ট্রান্সফর্মটি প্যারেন্ট সারফেস থেকে ইনহেরিট করা হচ্ছে।
সম্পূর্ণ হায়ারার্কি ট্রি দেখতে হায়ারার্কি ভিউতে ফ্ল্যাট অনির্বাচন করুন, এবং অ্যাপ সারফেসের পেরেন্ট নোডে নেভিগেট করুন যতক্ষণ না Calculated এবং Requested ট্রান্সফর্ম একই হয়, যা
Surface(name=Task=7934)/@0x1941191_transition-leash#40670সারফেসে অনুরোধ করা ট্রান্সফর্ম দেখায়।ট্রান্সফর্ম প্রথম কখন সেট করা হয়েছিল এবং এর ভ্যালু কত ছিল তা কনফার্ম করুন। শীর্ষকের পাশে থাকা আইকনে ক্লিক করে কিউরেট করা প্রপার্টি আড়াল করুন:
ছবি ১৮. কিউরেট করা প্রপার্টি আড়াল করুন।
এই ফ্রেমে পরিবর্তন করা হচ্ছে এমন প্রপার্টি হাইলাইট করতে, Proto Dump ভিউতে পার্থক্য দেখুন বিকল্প বেছে নিন। প্রপার্টি ফিল্টার করতে, টেক্সট সার্চ ফিল্ডে
transformটাইপ করুন:
ছবি ১৯. পার্থক্য দেখুন।
transition-leash-এর জন্য এই ফ্রেমে ট্রান্সফর্মIDENTITYথেকেSCALE|TRANSLATE|ROT_270-এ সেট করা হয়েছে।এই তথ্য থেকে জানা যায় যে ডায়ালার স্প্লিট স্ক্রিন অ্যাপের অ্যানিমেশন লিশে ট্রান্সফর্ম প্রয়োগ করার সময় ফ্লিকার হয়েছে।
ছবি ২০. ফ্লিকার শনাক্তকরণ।
কোডে শনাক্ত করুন কেন এই ট্রান্সফর্ম স্প্লিট স্ক্রিন ট্রানজিশন লিশে সেট করা আছে।