Winscope ব্যবহার করে উইন্ডো ট্রানজিশন ট্রেস করুন

Winscope হল একটি ওয়েব টুল যা ব্যবহারকারীদের অ্যানিমেশন এবং ট্রানজিশনের সময় এবং পরে বিভিন্ন সিস্টেম পরিষেবার অবস্থা রেকর্ড, রিপ্লে এবং বিশ্লেষণ করতে দেয়। Winscope একটি ট্রেস ফাইলে সমস্ত প্রাসঙ্গিক সিস্টেম সার্ভিস স্টেট রেকর্ড করে। ট্রেস ফাইলের সাথে Winscope UI ব্যবহার করে, আপনি প্রতিটি অ্যানিমেশন ফ্রেমের জন্য এই পরিষেবাগুলির অবস্থা পরিদর্শন করতে পারেন, একটি স্ক্রিন রেকর্ডিং সহ বা ছাড়াই, রিপ্লে করে, ধাপে ধাপে এবং পরিবর্তনগুলি ডিবাগ করে।

সমর্থিত ট্রেস

উইনস্কোপ সিস্টেম সার্ভিস স্টেটের বিভিন্ন ট্রেস বা সিকোয়েন্স সংগ্রহ এবং দৃশ্যত উপস্থাপন করার ক্ষমতা প্রদান করে। নিম্ন ওভারহেড থেকে উচ্চ শব্দচয়ন পর্যন্ত নির্দিষ্ট ব্যবহারের ক্ষেত্রে আপনি এই ট্রেসগুলিকে কনফিগার করতে পারেন। নিম্নলিখিত ট্রেস Winscope দ্বারা সমর্থিত:

  • ইভেন্টলগ: EventLog ব্যবহার করে সিস্টেম ডায়াগনস্টিক ইভেন্ট রেকর্ড সংগ্রহ করুন। Winscope-এ এই তথ্যটি শুধুমাত্র CUJ চিহ্ন চিহ্নিত করতে এবং প্রদর্শন করতে ব্যবহার করা হয়।
  • IME: IMS, IMMS এবং IME ক্লায়েন্ট সহ ইনপুট মেথড এডিটর (IME) পাইপলাইন থেকে ইভেন্টগুলি ট্রেস করুন৷
  • ইনপুট: ইনপুট ইভেন্ট পাইপলাইনের বিভিন্ন অংশ থেকে ইনপুট ইভেন্ট ট্রেস করুন।
  • প্রোটোলগ: সিস্টেম পরিষেবাগুলি থেকে প্রোটোলগ বার্তা সংগ্রহ করুন এবং ক্লায়েন্ট প্রক্রিয়াগুলিতে চলমান সিস্টেম পরিষেবাগুলির কোড।
  • স্ক্রিন রেকর্ডিং: ট্রেসগুলির পাশাপাশি একটি স্ক্রিন রেকর্ডিং সংগ্রহ করুন।
  • শেল ট্রানজিশন: রেকর্ড উইন্ডো এবং কার্যকলাপ পরিবর্তন সিস্টেমের বিবরণ।
  • সারফেসফ্লিংগার: সারফেসফ্লিঙ্গার ট্রেস সংগ্রহ করুন যাতে সারফেস (স্তর) সম্পর্কে তথ্য থাকে যেমন অবস্থান, বাফার এবং কম্পোজিশন।
  • লেনদেন: কম্পোজিশনের জন্য SurfaceControl ব্যবহার করে SurfaceFlinger দ্বারা প্রাপ্ত পারমাণবিক পরিবর্তনের সেট ট্রেস করুন।
  • ভিউক্যাপচার: সিস্টেম UI এবং লঞ্চারের মতো ভিউক্যাপচার সমর্থন করে এমন সিস্টেম উইন্ডোজ থেকে সমস্ত দর্শনের বৈশিষ্ট্যের একটি পরিসর ক্যাপচার করুন।
  • উইন্ডো ম্যানেজার: ইনপুট এবং ফোকাস ইভেন্ট, স্ক্রিন ওরিয়েন্টেশন, ট্রানজিশন, অ্যানিমেশন, পজিশনিং এবং ট্রান্সফর্মেশন সহ উইন্ডোজ সম্পর্কিত বিশদ বিবরণ ধারণ করে ট্রেস উইন্ডো ম্যানেজার স্টেট।

সমর্থিত ডাম্প

উইনস্কোপ স্টেট ডাম্প সংগ্রহ এবং প্রদর্শন করতে পারে, যা ব্যবহারকারীর দ্বারা সংজ্ঞায়িত নির্দিষ্ট মুহুর্তে নেওয়া ডিভাইসের অবস্থার স্ন্যাপশট। ট্রেসগুলির বিপরীতে, যা ডিভাইস ব্যবহারের সময় ক্রমাগত সংগ্রহ করা হয় এবং কার্যক্ষমতাকে প্রভাবিত করতে পারে, ডাম্পগুলি শুধুমাত্র এই ব্যবহারকারী-সংজ্ঞায়িত মুহুর্তে নেওয়া হয়, যাতে কর্মক্ষমতা এবং শব্দচয়নের সাথে আপোস করা হয় না তা নিশ্চিত করে। এটি নির্দিষ্ট সময়ে ডিভাইসের অবস্থার আরও বেশি মনোযোগী এবং দক্ষ বিশ্লেষণের অনুমতি দেয়। নিম্নলিখিত ডাম্পগুলি Winscope দ্বারা সমর্থিত:

  • উইন্ডো ম্যানেজার: একটি একক উইন্ডো ম্যানেজার স্টেট ডাম্প করুন।
  • SurfaceFlinger: একটি একক SurfaceFlinger স্ন্যাপশট ডাম্প করুন।
  • স্ক্রিনশট: ডাম্পের পাশাপাশি একটি স্ক্রিনশট সংগ্রহ করুন।

সম্পদ

Winscope নির্মাণ এবং চালানোর তথ্যের জন্য Winscope চালান দেখুন।

ট্রেস সংগ্রহের তথ্যের জন্য ক্যাপচার ট্রেস দেখুন।

কিভাবে Winscope ওয়েব UI ব্যবহার করে ট্রেস লোড করতে হয় সে সম্পর্কে তথ্যের জন্য লোড ট্রেস দেখুন।

বিশ্লেষণ ট্রেস সম্পর্কে তথ্যের জন্য ট্রেস বিশ্লেষণ দেখুন।

উদাহরণ

একটি ফ্লিকার পরীক্ষা ব্যর্থতা এবং একটি ব্যবহারকারী রিপোর্ট করা বাগ ডিবাগ কিভাবে নিম্নলিখিত উদাহরণ বর্ণনা.

ফ্লিকার পরীক্ষার ব্যর্থতা

এই উদাহরণটি দেখায় কিভাবে একটি ফ্লিকার পরীক্ষা ব্যর্থতা ডিবাগ করতে Winscope ব্যবহার করতে হয়।

পরীক্ষার ব্যর্থতা পরীক্ষা করুন

সমস্যার ধরন নির্ধারণ করতে এবং পরীক্ষার ব্যর্থতার বার্তা পরীক্ষা করতে এই পদক্ষেপগুলি অনুসরণ করুন৷

  1. পরীক্ষা এবং ক্লাসের নাম পরীক্ষা করে সমস্যার ধরন নির্ধারণ করুন।

    পরীক্ষা এবং ক্লাসের নাম:

    FlickerTestsNotification com.android.server.wm.flicker.notification.OpenAppFromLockscreenNotificationColdTest#appLayerBecomesVisible[ROTATION_0_GESTURAL_NAV]
    

    সমস্যার ধরন:

    • CUJ একটি লকস্ক্রিন বিজ্ঞপ্তি ( OpenAppFromLockscreenNotificationColdTest ) থেকে একটি অ্যাপ চালু করাকে বোঝায়।

    • পরীক্ষাটি আশা করে যে অ্যাপটি দৃশ্যমান হবে ( #appLayerBecomesVisible )।

  2. পরীক্ষার ব্যর্থতার বার্তাটি পরীক্ষা করুন, যা ব্যর্থতা সম্পর্কে ব্যাপক তথ্য প্রদান করে, যার মধ্যে রয়েছে:

    • প্রত্যাশিত ফলাফল এবং প্রকৃত দৃশ্যমান ফলাফলের মধ্যে একটি তুলনা
    • কখন ব্যর্থতা ঘটেছে তা চিহ্নিত করতে টাইমস্ট্যাম্প
    • ব্যর্থতার সাথে যুক্ত আর্টিফ্যাক্ট বা ফাইলের নাম
    • ব্যর্থতা বোঝা এবং ডিবাগ করার জন্য প্রাসঙ্গিক অতিরিক্ত প্রাসঙ্গিক তথ্য
    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

ডিবাগ

ফ্লিকারের কারণ নির্ধারণ করতে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. ট্রেস ফাইল ডাউনলোড করুন এবং Winscope এ লোড করুন। Winscope SurfaceFlinger স্বতঃনির্বাচনের সাথে খোলে:

    Winscope landing page with SurfaceFlinger view

    চিত্র 1. SurfaceFlinger ভিউ সহ Winscope ল্যান্ডিং পৃষ্ঠা।

  2. টাইমস্ট্যাম্পে নেভিগেট করুন যেখানে টাইমস্ট্যাম্প ক্ষেত্রে ব্যতিক্রম বার্তা থেকে টাইমস্ট্যাম্প অনুলিপি এবং আটকানোর মাধ্যমে সমস্যাটি ঘটে। আপনি হয় মানব-পঠনযোগ্য বিন্যাসে টাইমস্ট্যাম্পটি অনুলিপি করতে পারেন ( 2024-05-10T11:04:14.227572545 ) এবং প্রথম ক্ষেত্রে পেস্ট করতে পারেন, অথবা ন্যানোসেকেন্ডে টাইমস্ট্যাম্পটি অনুলিপি করতে পারেন ( 1715339054227572545ns ) এবং দ্বিতীয় ক্ষেত্রে পেস্ট করতে পারেন৷

    Timestamp dialog

    চিত্র 2. টাইমস্ট্যাম্প ডায়ালগ।

  3. পূর্ববর্তী ফ্রেমে নেভিগেট করতে বাম তীর কী টিপুন। এই অবস্থায় নোটিফিকেশন অ্যাক্টিভিটি অ্যাপ ভিডিওতে সঠিকভাবে দেখায় এবং অ্যাপ এবং স্প্ল্যাশ স্ক্রিন উভয় পৃষ্ঠই দৃশ্যমান, 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
    

    এটি ইঙ্গিত দেয় যে স্ক্রীন কালো হয়ে গেলে অ্যাপটি চালু হচ্ছে এবং এই ইভেন্টটি অ্যাপ লঞ্চের সময় ঘটছে, কারণ স্প্ল্যাশ স্ক্রীনটি এখনও দৃশ্যমান:

    At app launch

    চিত্র 3. অ্যাপ চালু করার সময়।

  4. পরবর্তী ফ্রেমে ফিরে যেতে ডান তীর কী টিপুন, যেখানে ফ্লিকার ঘটে। রেক্টস ভিউতে অ্যাপের পরিবর্তে স্ক্রিনে NotificationShade দেখানো হয়েছে। নিম্নলিখিত পৃষ্ঠতল এই ফ্রেমে দেখানো হয়:

    • পর্দা সজ্জা ওভারলে (উপর এবং নীচে)
    • নেভিগেশন বার
    • পয়েন্টার অবস্থান (স্ক্রিন রেকর্ডিং থেকে)

      Flicker activity

      চিত্র 4. ফ্লিকার কার্যকলাপ।

  5. অনুক্রমের দৃশ্যে অ্যাপের কার্যকলাপ নির্বাচন করুন। আপনি যদি এটি খুঁজে না পান তবে শুধুমাত্র দেখান V কে আনটগল করুন। তারপর, বৈশিষ্ট্য দৃশ্য পরিদর্শন করুন.

    অ্যাপ পৃষ্ঠের নাম হল:

    com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.NotificationActivity#3458`
    

    App properties

    চিত্র 5. অ্যাপের বৈশিষ্ট্য।

    যদিও অ্যাপ অ্যাক্টিভিটি দৃশ্যমান এবং অস্বচ্ছ তে সেট করা হয়েছে, Invisible due to: null visible region কারণে পৃষ্ঠটি দেখানো হয় না। এটি ঘটে কারণ রচনার সময় এটির সামনে আরেকটি অস্বচ্ছ পৃষ্ঠ স্থাপন করা হয়েছিল। এই অনুমানটি 3D ভিউতে NotificationActivity rect-এর সামনে NotificationShade rect থেকে এবং দৃশ্যমান (সবুজ) NotificationShade সম্ভাব্যভাবে নির্বাচিত স্তর থেকে উদ্ভূত হয়েছে।

  6. এই অনুমানটি যাচাই করতে, বর্তমান ফ্রেমে দৃশ্যমান NotificationShade পৃষ্ঠ নির্বাচন করুন এবং এর বৈশিষ্ট্যগুলি পরীক্ষা করুন। পতাকাগুলি OPAQUE|ENABLE_BACKPRESSURE (0x102) এ সেট করা হয়েছে। NotificationShade পৃষ্ঠের নাম NotificationShade#3447 । এর পরে, পূর্ববর্তী ফ্রেমে (ফ্লিকারের আগে) নেভিগেট করতে বাম তীর টিপুন এবং আবার NotificationShade পৃষ্ঠের বৈশিষ্ট্যগুলি পরিদর্শন করুন। লক্ষ্য করুন যে OPAQUE হওয়ার পরিবর্তে, পৃষ্ঠে শুধুমাত্র ENABLE_BACKPRESSURE (0x100) পতাকা রয়েছে। এটি নিশ্চিত করে যে অ্যাপ লঞ্চ সম্পূর্ণভাবে শেষ হওয়ার আগে NotificationShade অস্বচ্ছ হয়ে যায়। যেহেতু NotificationShade NotificationActivity এর সামনে থাকে, তাই অ্যাপটি দেখানো হয় না। NotificationShade শেড কালো, তাই স্ক্রিনটি সংক্ষিপ্তভাবে কালো হয়ে যায়, যা ফ্লিকার সৃষ্টি করে।

  7. কোডে চিহ্নিত করুন কেন NotificationShade খুব তাড়াতাড়ি অস্বচ্ছ হয়ে যায়।

ব্যবহারকারী-প্রতিবেদিত বাগ

ব্যবহারকারী-প্রতিবেদিত বাগগুলি ডিবাগ করা চ্যালেঞ্জিং হতে পারে কারণ তাদের প্রায়শই বিশদ তথ্যের অভাব থাকে। ফ্লিকার পরীক্ষার ব্যর্থতার বিপরীতে, যা নির্দিষ্ট টাইমস্ট্যাম্প, উপাদানের বিবরণ এবং স্ক্রিন রেকর্ডিং প্রদান করে, ব্যবহারকারী-প্রতিবেদিত বাগগুলি সাধারণত শুধুমাত্র সমস্যার একটি সংক্ষিপ্ত বিবরণ অন্তর্ভুক্ত করে।

আমাদের কেস স্টাডিতে, স্প্লিট স্ক্রীন থেকে অ্যাপটি পুনরায় খোলার সময় শিরোনাম স্ক্রীন ফ্লিকারড এবং এপ্রিল 18, 2024 3:51 PM GMT-04:00 এর একটি আনুমানিক টাইমস্ট্যাম্প দেওয়া হয়েছে।

ব্যবহারকারীর রিপোর্ট করা বাগ ডিবাগ করতে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. Winscope এ ট্রেস ফাইল লোড করুন। SurfaceFlinger স্বতঃনির্বাচিত হয়ে Winscope খোলে।

    Winscope landing page with SurfaceFlinger view

    চিত্র 6. SurfaceFlinger ভিউ সহ Winscope ল্যান্ডিং পৃষ্ঠা।

  2. ব্যবহারকারীর দ্বারা রিপোর্ট করা আনুমানিক টাইমস্ট্যাম্পে নেভিগেট করুন, এই ক্ষেত্রে 3:50 PM GMT-04:00 , মানব-পঠনযোগ্য টাইমস্ট্যাম্প ক্ষেত্রে 15:50:00 প্রবেশ করে৷

    Timestamp dialog

    চিত্র 7. টাইমস্ট্যাম্প ডায়ালগ।

  3. পর্দায় কি আঁকা হয়েছে তা সনাক্ত করতে রেক্টস ভিউ ব্যবহার করুন। আরও ভাল দেখার জন্য, রেক্টস দৃষ্টিকোণ পরিবর্তন করতে ঘূর্ণন স্লাইডার ব্যবহার করুন। হায়ারার্কি ভিউতে শুধুমাত্র দেখান 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

    দৃশ্যমান সারফেস (সবুজ রেক্ট) ছাড়াও, একটি ধূসর রেক্ট, যা ডিসপ্লে এরিয়া পৃষ্ঠকে প্রতিনিধিত্ব করে, নাম অজানা ডিসপ্লে , প্রদর্শিত হয়। দৃশ্যমানতা উন্নত করতে, ক্লিক করুন ( visibility icon ) ScreenDecorHwcOverlay#64 পৃষ্ঠের পাশে এর সংশ্লিষ্ট রেক্ট লুকিয়ে রাখতে এবং পিছনের পৃষ্ঠগুলিকে প্রকাশ করতে। আমরা বিশ্লেষণের জন্য ওভারলেটি সরিয়ে ফেলি কারণ এটি ব্যবহারকারীর কাছে দৃশ্যমান নয় এবং এটি একটি চকচকে অ্যানিমেশন হিসাবে রিপোর্ট করা হবে না৷

    User report

    চিত্র 8. ব্যবহারকারীর প্রতিবেদন।

  4. স্প্লিট স্ক্রিন ভিউতে কোন সারফেস জড়িত তা শনাক্ত করার পরে, ব্যবহারকারীর বিভিন্ন ক্রিয়াকলাপের মধ্য দিয়ে ধাপে ধাপে যেতে এবং ফ্লিকার খুঁজে পেতে ট্রানজিশন ট্রেস ব্যবহার করুন। প্লে ট্রানজিশনের তালিকাটি কল্পনা করতে Winscope-এর ট্রানজিশন ট্যাবে ক্লিক করুন:

    transitions

    চিত্র 9. রূপান্তর।

    এই ফ্রেমের সময় ট্রানজিশনটি নীল রঙে হাইলাইট করা হয়েছে। এই ক্ষেত্রে, ট্রানজিশন পতাকাগুলি TRANSIT_FLAG_IS_RECENTS অন্তর্ভুক্ত করে, যা নির্দেশ করে যে ব্যবহারকারী সাম্প্রতিক স্ক্রীনে প্রবেশ করছেন৷

  5. ডিসপ্যাচ টাইম কলামের লিঙ্কে ক্লিক করুন (এই ক্ষেত্রে 2024-04-18, 15:50:57.205 ) সময়ে সেই বিন্দুতে নেভিগেট করতে এবং সারফেস ফ্লিংগার ট্যাবে রেক্টগুলি যাচাই করতে। ডান তীর কী দিয়ে ট্রানজিশনের মাধ্যমে ধাপে ধাপে এবং রেক্টগুলি পর্যবেক্ষণ করে ট্রানজিশনের সময় ডিভাইসের অবস্থার সঠিকতা নিশ্চিত করুন।

    লঞ্চারটি 15:50:57.278 এ উপস্থিত হয়, কিন্তু তখন অ্যানিমেশন শুরু হয় না। ওয়ালপেপারটি ইতিমধ্যেই দৃশ্যমান কারণ স্প্লিট-স্ক্রিন অ্যাপস (বিভাজক) এর মধ্যে কিছুই আঁকা হয়নি। একটি ফ্রেম আগে (15:50:57.212), ওয়ালপেপারটি দৃশ্যমান নয়, এবং বিভাজকটি দেখানো হয়েছে, যা অ্যানিমেটিং না করার সময় স্প্লিট-স্ক্রিনটি কেমন দেখায়।

    Screen before flicker

    চিত্র 10. ফ্লিকার ইভেন্টের আগে স্ক্রীন।

  6. পরবর্তী রূপান্তর পরীক্ষা করতে, সরাসরি টাইমলাইনে ক্লিক করুন। সারফেসফ্লিংগার স্টেটগুলিকে হালকা নীল ব্লকের সারি দ্বারা উপস্থাপিত করা হয়। রূপান্তরগুলি গোলাপী ব্লকের সারি দ্বারা উপস্থাপিত হয়।

    End of first transition

    চিত্র 11. প্রথম রূপান্তরের শেষ।

    পরবর্তী ট্রানজিশনের শুরুর অবস্থানে SurfaceFlinger সারিতে ক্লিক করুন। চিত্র 11-এ, কার্সারের উল্লম্ব অবস্থানটি পাতলা নীল রেখা দ্বারা নির্দেশিত হয়েছে। SurfaceFlinger সারির হালকা নীল পটভূমি তার অনুভূমিক অবস্থান দেখায়। একটি ঝাঁকুনি দেখা যায় কিনা তা দেখতে ডান তীর কী দিয়ে পরিবর্তনের মধ্য দিয়ে যান৷ নিশ্চিত করুন যে ডিভাইসটি এই রূপান্তরের জন্য সঠিক দেখাচ্ছে।

  7. পরবর্তী ট্রানজিশনটি এড়িয়ে যান কারণ এটির সময়কাল খুবই ছোট, তাই এটিতে একটি ঝাঁকুনি থাকার সম্ভাবনা নেই। পরিবর্তে, পরবর্তী দীর্ঘ ট্রানজিশনের শুরুর অবস্থানে SurfaceFlinger সারিতে টাইমলাইনে ক্লিক করুন, যেমনটি নিম্নলিখিত ছবিতে কার্সার দ্বারা নির্দেশিত হয়েছে।

    end of second transition

    চিত্র 12. দ্বিতীয় স্থানান্তরের শেষ।

    এই পরিবর্তনের সময়, 15:51:13.239 এ, লক্ষ্য করুন যে উভয় অ্যাপ, পরিচিতি এবং ডায়ালারের জন্য Splash Screen স্তরগুলি প্রদর্শনের একই দিকে রয়েছে:

    splash screens

    চিত্র 13. স্প্ল্যাশ স্ক্রিন।

  8. কোন অ্যাপটি ভুল দিকে রয়েছে তা পরিষ্কার করুন। পরে এই ফ্রেমে ফিরে যেতে সাহায্য করতে ns ইনপুট ক্ষেত্রের পাশের পতাকা আইকনে ক্লিক করে আপনার বর্তমান অবস্থানে একটি বুকমার্ক যোগ করুন।

    add bookmark

    ছবি 14. বুকমার্ক যোগ করুন।

  9. ট্রানজিশনের শেষে সরাসরি টাইমলাইনে ক্লিক করে একটি ফ্রেমে নেভিগেট করুন, উদাহরণস্বরূপ, 15:51:13.859 এ। এখানে দুটি অ্যাপ এখন তাদের চূড়ান্ত অবস্থানে রয়েছে, বাম দিকে ডায়ালার এবং ডানদিকে পরিচিতিগুলি রয়েছে:

    final split screen

    চিত্র 15. চূড়ান্ত বিভক্ত পর্দা।

  10. ফ্লিকার দিয়ে ফ্রেমে ফিরে যেতে টাইমলাইনে বুকমার্কের পতাকায় ক্লিক করুন।

    bookmark timeline

    চিত্র 16. বুকমার্ক টাইমলাইন।

    উভয় অ্যাপই ডানদিকে রয়েছে, যা নির্দেশ করে যে ডায়লারটি ভুল অবস্থানে রয়েছে।

  11. ডায়লারের স্প্ল্যাশ স্ক্রীনের বৈশিষ্ট্য দেখতে ক্লিক করুন। কিউরেটেড প্রোপার্টি ভিউতে এর রূপান্তর বৈশিষ্ট্যগুলি বিশেষভাবে দেখুন।

    Transform properties

    চিত্র 17. রূপান্তর বৈশিষ্ট্য।

    গণনা করা রূপান্তর এই পৃষ্ঠে প্রয়োগ করা হয়, কিন্তু এই স্তর হিসাবে সেট করা হয় না। গণনা করা এবং অনুরোধ করা কলামগুলির বিভিন্ন মান রয়েছে, যা নির্দেশ করে যে রূপান্তরটি একটি মূল পৃষ্ঠ থেকে উত্তরাধিকারসূত্রে পাওয়া যাচ্ছে।

  12. সম্পূর্ণ হায়ারার্কি ট্রি দেখানোর জন্য হায়ারার্কি ভিউতে ফ্ল্যাট সিলেক্ট করুন, এবং অ্যাপ্লিকেশান সারফেস এর প্যারেন্ট নোডগুলিতে নেভিগেট করুন যতক্ষণ না ক্যালকুলেটেড এবং রিকোয়েস্টেড ট্রান্সফর্ম উভয়ই একই হয়, Surface(name=Task=7934)/@0x1941191_transition-leash#40670 সারফেসে যে ট্রান্সফর্মের অনুরোধ করা হচ্ছে তা দেখায়।

  13. কনফার্ম করুন কখন ট্রান্সফর্মটি প্রথম সেট করা হয়েছিল এবং কোন মানতে। শিরোনামের পাশের আইকনে ক্লিক করে কিউরেটেড বৈশিষ্ট্যগুলিকে সঙ্কুচিত করুন:

    collapse the curated properties

    চিত্র 18. কিউরেটেড বৈশিষ্ট্যগুলিকে সঙ্কুচিত করুন।

  14. এই ফ্রেমে যে বৈশিষ্ট্যগুলি পরিবর্তন করা হচ্ছে তা হাইলাইট করতে প্রোটো ডাম্প ভিউতে শো ডিফ নির্বাচন করুন। বৈশিষ্ট্যগুলি ফিল্টার করতে পাঠ্য অনুসন্ধান ক্ষেত্রে transform টাইপ করুন:

    show diff

    চিত্র 19. পার্থক্য দেখান।

    রূপান্তরটি transition-leash জন্য এই ফ্রেমে IDENTITY থেকে SCALE|TRANSLATE|ROT_270 এ সেট করা হয়েছে।

    এই তথ্যটি দেখায় যে ডায়ালার স্প্লিট স্ক্রিন অ্যাপের অ্যানিমেশন লিশে রূপান্তর প্রয়োগ করার সময় ফ্লিকার ঘটেছিল।

    Identification of the flicker

    চিত্র 20. ফ্লিকার সনাক্তকরণ।

  15. কোডে শনাক্ত করুন কেন এই রূপান্তরটি স্প্লিট স্ক্রিন ট্রানজিশন লিশে সেট করা হয়েছে।