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

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

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

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

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

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

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

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

রিসোর্স

উইনস্কোপ তৈরি এবং চালানো সম্পর্কে তথ্যের জন্য রান উইনস্কোপ দেখুন।

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

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

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

উদাহরণ

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

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

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

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

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

  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

    চিত্র ১. সারফেসফ্লিংগার ভিউ সহ উইনস্কোপ ল্যান্ডিং পৃষ্ঠা।

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

    Timestamp dialog

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

  3. পূর্ববর্তী ফ্রেমে নেভিগেট করতে বাম তীর কী টিপুন। এই অবস্থায় 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
    

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

    At app launch

    চিত্র ৩. অ্যাপ লঞ্চের সময়।

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

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

    Flicker activity

    চিত্র ৪। ঝিকিমিকি কার্যকলাপ।

  5. হায়ারার্কি ভিউতে অ্যাপ অ্যাক্টিভিটি নির্বাচন করুন। যদি আপনি এটি খুঁজে না পান, তাহলে Show only V আনটগল করুন। তারপর, প্রোপার্টি ভিউটি পরীক্ষা করুন।

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

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

    App properties

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

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

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

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

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

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

আমাদের কেস স্টাডিতে, কেবলমাত্র স্প্লিট স্ক্রিন থেকে অ্যাপটি পুনরায় খোলার সময় স্ক্রিনটি ঝিকিমিকি করে দেখানো শিরোনাম এবং ১৮ এপ্রিল, ২০২৪, ৩:৫১ PM GMT-০৪:০০ এর আনুমানিক টাইমস্ট্যাম্পের তথ্য দেওয়া হয়েছে।

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

  1. উইনস্কোপে ট্রেস ফাইলটি লোড করুন। সারফেসফ্লিংগার স্বয়ংক্রিয়ভাবে নির্বাচিত হয়ে উইনস্কোপ খুলবে।

    Winscope landing page with SurfaceFlinger view

    চিত্র ৬। সারফেসফ্লিংগার ভিউ সহ উইনস্কোপ ল্যান্ডিং পৃষ্ঠা।

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

    Timestamp dialog

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

  3. স্ক্রিনে কী আঁকা হয়েছে তা শনাক্ত করতে rects ভিউ ব্যবহার করুন। আরও ভালোভাবে দেখার জন্য, rects দৃষ্টিকোণ পরিবর্তন করতে Rotation স্লাইডার ব্যবহার করুন। Hierarchy ভিউতে Show only V এবং Flat চিহ্নিত করলে, ওয়ালপেপার, স্ক্রিন ডেকোর ওভারলে, লেটারবক্স, লঞ্চার, পরিচিতি এবং ডায়ালার পৃষ্ঠতল দৃশ্যমান হয়।

    প্যাকেজের নামগুলো হল:

    • লঞ্চার: 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

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

    User report

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

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

    transitions

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

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

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

    লঞ্চারটি ১৫:৫০:৫৭.২৭৮ এ প্রদর্শিত হয়, কিন্তু অ্যানিমেশনটি তখন শুরু হয় না। ওয়ালপেপারটি ইতিমধ্যেই দৃশ্যমান কারণ স্প্লিট-স্ক্রিন অ্যাপগুলির (ডিভাইডার) মধ্যে কিছুই আঁকা হয়নি। এক ফ্রেম আগে (১৫:৫০:৫৭.২১২), ওয়ালপেপারটি দৃশ্যমান হয় না এবং ডিভাইডারটি প্রদর্শিত হয়, যা অ্যানিমেট না করার সময় স্প্লিট-স্ক্রিনটি কেমন দেখায়।

    Screen before flicker

    চিত্র ১০। ফ্লিকার ইভেন্টের আগে স্ক্রিন।

  6. পরবর্তী ট্রানজিশনটি দেখতে, সরাসরি টাইমলাইনে ক্লিক করুন। SurfaceFlinger অবস্থাগুলি হালকা নীল ব্লকের সারি দ্বারা প্রতিনিধিত্ব করা হয়। ট্রানজিশনগুলি গোলাপী ব্লকের সারি দ্বারা প্রতিনিধিত্ব করা হয়।

    End of first transition

    চিত্র ১১। প্রথম রূপান্তরের সমাপ্তি।

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

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

    end of second transition

    চিত্র ১২। দ্বিতীয় পরিবর্তনের সমাপ্তি।

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

    splash screens

    চিত্র ১৩। স্প্ল্যাশ স্ক্রিন।

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

    add bookmark

    চিত্র ১৪। বুকমার্ক যোগ করুন।

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

    final split screen

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

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

    bookmark timeline

    চিত্র ১৬। টাইমলাইন বুকমার্ক করুন।

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

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

    Transform properties

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

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

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

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

    collapse the curated properties

    চিত্র ১৮। কিউরেটেড প্রোপার্টিগুলো সঙ্কুচিত করুন।

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

    show diff

    চিত্র ১৯। পার্থক্য দেখান।

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

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

    Identification of the flicker

    চিত্র ২০। ঝিকিমিকি সনাক্তকরণ।

  15. কোডে চিহ্নিত করুন কেন এই ট্রান্সফর্মটি স্প্লিট স্ক্রিন ট্রানজিশন লিশে সেট করা আছে।