Winscope का इस्तेमाल करके, विंडो के ट्रांज़िशन को ट्रैक करना

Winscope एक वेब टूल है. इसकी मदद से, उपयोगकर्ता ऐनिमेशन और ट्रांज़िशन के दौरान और बाद में, कई सिस्टम सेवाओं की स्थितियों को रिकॉर्ड, फिर से चला सकते हैं, और उनका विश्लेषण कर सकते हैं. Winscope, ट्रैक फ़ाइल में सिस्टम की सभी ज़रूरी सेवाओं की स्थितियों को रिकॉर्ड करता है. ट्रैस फ़ाइल के साथ Winscope यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके, हर ऐनिमेशन फ़्रेम के लिए इन सेवाओं की स्थिति की जांच की जा सकती है. इसके लिए, स्क्रीन रिकॉर्डिंग के साथ या उसके बिना, ट्रांज़िशन को फिर से चलाकर, उनमें आगे बढ़कर, और उन्हें डीबग करके ऐसा किया जा सकता है.

इस्तेमाल किए जा सकने वाले ट्रेस

Winscope की मदद से, सिस्टम की सेवा की स्थितियों के अलग-अलग ट्रेस या क्रम को इकट्ठा करके, विज़ुअल तौर पर दिखाया जा सकता है. इन ट्रेस को, इस्तेमाल के अलग-अलग उदाहरणों के हिसाब से कॉन्फ़िगर किया जा सकता है. इनमें कम ओवरहेड से लेकर ज़्यादा जानकारी देने वाले उदाहरण शामिल हैं. Winscope में ये ट्रैस काम करते हैं:

  • EventLog: EventLog का इस्तेमाल करके, सिस्टम डाइग्नोस्टिक्स इवेंट का रिकॉर्ड इकट्ठा करें. Winscope में इस जानकारी का इस्तेमाल सिर्फ़ सीयूजे मार्किंग की पहचान करने और उन्हें दिखाने के लिए किया जाता है.
  • IME: इनपुट के तरीके के संपादक (IME) की पाइपलाइन से इवेंट ट्रैक करें. इनमें IMS, IMMS, और IME क्लाइंट शामिल हैं.
  • इनपुट: इनपुट इवेंट की पाइपलाइन के अलग-अलग हिस्सों से इनपुट इवेंट ट्रैक करें.
  • ProtoLog: सिस्टम सेवाओं से ProtoLog मैसेज और क्लाइंट प्रोसेस में चल रही सिस्टम सेवाओं का कोड इकट्ठा करें.
  • स्क्रीन रिकॉर्डिंग: ट्रेस के साथ-साथ स्क्रीन रिकॉर्डिंग भी इकट्ठा करें.
  • शेल ट्रांज़िशन: विंडो और गतिविधि ट्रांज़िशन सिस्टम की जानकारी रिकॉर्ड करें.
  • SurfaceFlinger: SurfaceFlinger से मिले ट्रैस इकट्ठा करें. इनमें, प्लैटफ़ॉर्म (लेयर) की जानकारी होती है, जैसे कि प्लेसमेंट, बफ़र, और कॉम्पोज़िशन.
  • लेन-देन: कंपोज़िशन के लिए SurfaceControl का इस्तेमाल करके, SurfaceFlinger को मिले एटमिक बदलावों के सेट को ट्रैक करें.
  • ViewCapture: सिस्टम विंडो के उन सभी व्यू की प्रॉपर्टी की रेंज कैप्चर करें जिनमें ViewCapture की सुविधा काम करती है. जैसे, सिस्टम यूज़र इंटरफ़ेस (यूआई) और लॉन्चर.
  • विंडो मैनेजर: विंडो से जुड़ी जानकारी देने वाली विंडो मैनेजर की स्थितियों को ट्रैक करें. इनमें इनपुट और फ़ोकस इवेंट, स्क्रीन ओरिएंटेशन, ट्रांज़िशन, ऐनिमेशन, पोज़िशनिंग, और ट्रांसफ़ॉर्मेशन शामिल हैं.

इस्तेमाल किए जा सकने वाले डंप

Winscope, स्टेटस डंप इकट्ठा और दिखा सकता है. ये डिवाइस की स्थिति के स्नैपशॉट होते हैं, जिन्हें उपयोगकर्ता के तय किए गए खास पलों पर लिया जाता है. ट्रेस की तरह, डंप सिर्फ़ उन समय लिए जाते हैं जब उपयोगकर्ता तय करता है. ट्रेस, डिवाइस के इस्तेमाल के दौरान लगातार इकट्ठा किए जाते हैं और इनसे परफ़ॉर्मेंस पर असर पड़ सकता है. इससे यह पक्का किया जाता है कि परफ़ॉर्मेंस और जानकारी पर कोई असर न पड़े. इससे, किसी खास समय पर डिवाइस की स्थिति का ज़्यादा फ़ोकस और बेहतर विश्लेषण किया जा सकता है. Winscope में ये डंप इस्तेमाल किए जा सकते हैं:

  • विंडो मैनेजर: विंडो मैनेजर की किसी एक स्थिति को डंप करें.
  • SurfaceFlinger: SurfaceFlinger का एक स्नैपशॉट डंप करें.
  • स्क्रीनशॉट: डंप के साथ-साथ स्क्रीनशॉट भी इकट्ठा करें.

संसाधन

Winscope बनाने और चलाने के बारे में जानकारी पाने के लिए, Winscope चलाना लेख पढ़ें.

ट्रैक रिकॉर्ड करने के बारे में जानने के लिए, ट्रैक रिकॉर्ड करना लेख पढ़ें.

Winscope के वेब यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके, ट्रेस लोड करने का तरीका जानने के लिए, ट्रेस लोड करें लेख पढ़ें.

ट्रेस का विश्लेषण करने के बारे में जानकारी के लिए, ट्रेस का विश्लेषण करें लेख पढ़ें.

उदाहरण

यहां दिए गए उदाहरण में, फ़्लिकर टेस्ट में हुई गड़बड़ी और उपयोगकर्ता की ओर से बताए गए गड़बड़ी को डीबग करने का तरीका बताया गया है.

फ़्लिकर की जांच पूरी न हो पाना

इस उदाहरण में, फ़्लिकर टेस्ट में हुई गड़बड़ी को डीबग करने के लिए, Winscope का इस्तेमाल करने का तरीका बताया गया है.

जांच पूरी न हो पाने की वजह का पता लगाना

समस्या का टाइप पता करने और टेस्ट में हुई गड़बड़ी के मैसेज की जांच करने के लिए, यह तरीका अपनाएं.

  1. टेस्ट और क्लास के नाम की जांच करके, समस्या का टाइप तय करें.

    टेस्ट और क्लास का नाम:

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

    समस्या प्रकार:

    • सीयूजे का मतलब, लॉक स्क्रीन पर सूचना (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 के अपने-आप चुने जाने की सुविधा के साथ खुलता है:

    SurfaceFlinger व्यू वाला Winscope का लैंडिंग पेज

    पहली इमेज. SurfaceFlinger व्यू वाला Winscope का लैंडिंग पेज.

  2. समस्या वाले टाइमस्टैंप पर जाने के लिए, अपवाद वाले मैसेज के टाइमस्टैंप को कॉपी करके, टाइमस्टैंप फ़ील्ड में चिपकाएं. टाइमस्टैंप को, इंसान के पढ़ने लायक फ़ॉर्मैट (2024-05-10T11:04:14.227572545) में कॉपी करके पहले फ़ील्ड में चिपकाया जा सकता है. इसके अलावा, टाइमस्टैंप को नैनोसेकंड (1715339054227572545ns) में कॉपी करके दूसरे फ़ील्ड में चिपकाया जा सकता है.

    टाइमस्टैंप डायलॉग

    दूसरी इमेज. टाइमस्टैंप डायलॉग.

  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
    

    इससे पता चलता है कि स्क्रीन का काला होना, ऐप्लिकेशन के लॉन्च होने का संकेत है. साथ ही, स्प्लैश स्क्रीन अब भी दिख रही है, इसलिए यह इवेंट ऐप्लिकेशन के लॉन्च होने के दौरान हो रहा है:

    ऐप्लिकेशन लॉन्च होने पर

    तीसरी इमेज. ऐप्लिकेशन लॉन्च होने पर.

  4. अगले फ़्रेम पर वापस जाने के लिए, राइट ऐरो बटन दबाएं. रेक्ट व्यू में, ऐप्लिकेशन के बजाय स्क्रीन पर NotificationShade दिखता है. इस फ़्रेम में ये प्लैटफ़ॉर्म दिखते हैं:

    • स्क्रीन डेकोर ओवरले (ऊपर और नीचे)
    • नेविगेशन बार
    • पॉइंटर की जगह (स्क्रीन रिकॉर्डिंग से)

      फ़्लिकर गतिविधि

      चौथी इमेज. फ़्लिकर गतिविधि.

  5. हैरारकी व्यू में, ऐप्लिकेशन गतिविधि चुनें. अगर आपको यह विकल्प नहीं मिल रहा है, तो सिर्फ़ V दिखाएं को टॉगल करें. इसके बाद, प्रॉपर्टी व्यू की जांच करें.

    ऐप्लिकेशन के प्लैटफ़ॉर्म का नाम:

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

    ऐप्लिकेशन प्रॉपर्टी

    पांचवीं इमेज. ऐप्लिकेशन प्रॉपर्टी.

    भले ही, ऐप्लिकेशन गतिविधि को 'दिख रहा है' और 'अस्पष्ट है' पर सेट किया गया हो, लेकिन Invisible due to: null visible region गड़बड़ी की वजह से, प्लैटफ़ॉर्म नहीं दिख रहा है. ऐसा इसलिए होता है, क्योंकि कॉम्पोज़िशन के दौरान उसके सामने कोई ऐसा ऑब्जेक्ट रखा गया था जो पारदर्शी नहीं था. यह अनुमान इस बात से लगाया गया है कि 3D व्यू में NotificationShade रेक्टैंगल, NotificationActivity रेक्टैंगल के सामने है. साथ ही, दिखने वाला (हरा) 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 बजे GMT-04:00 का अनुमानित टाइमस्टैंप दिया गया है.

उपयोगकर्ता की ओर से बताई गई गड़बड़ी को डीबग करने के लिए, यह तरीका अपनाएं:

  1. Winscope में ट्रेस फ़ाइल लोड करें. Winscope, SurfaceFlinger के साथ अपने-आप खुलता है.

    SurfaceFlinger व्यू वाला Winscope का लैंडिंग पेज

    छठी इमेज. SurfaceFlinger व्यू वाला Winscope का लैंडिंग पेज.

  2. उपयोगकर्ता ने जिस टाइमस्टैंप की शिकायत की है उस पर जाएं. इस मामले में, 3:50 PM GMT-04:00 पर जाएं. इसके लिए, टाइमस्टैंप वाले फ़ील्ड में 15:50:00 डालें.

    टाइमस्टैंप डायलॉग

    सातवीं इमेज. टाइमस्टैंप डायलॉग.

  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

    दिखने वाले प्लैटफ़ॉर्म (हरे रंग के रेक्टैंगल) के अलावा, एक स्लेटी रंग का रेक्टैंगल भी दिखता है. यह अज्ञात डिसप्ले नाम के डिसप्ले एरिया प्लैटफ़ॉर्म को दिखाता है. बेहतर तरीके से देखने के लिए, ScreenDecorHwcOverlay#64 सतह के बगल में मौजूद ('किसको दिखे' सेटिंग वाला आइकॉन) पर क्लिक करें. इससे उससे जुड़ी रेक्ट को छिपाकर, पीछे की सतहें दिखेंगी. हम विश्लेषण के लिए ओवरले हटा देते हैं, क्योंकि यह उपयोगकर्ता को नहीं दिखता. साथ ही, इसे फ़्लिकर करने वाले ऐनिमेशन के तौर पर रिपोर्ट नहीं किया जाएगा.

    उपयोगकर्ता की रिपोर्ट

    आठवीं इमेज. उपयोगकर्ता की शिकायत.

  4. स्प्लिट स्क्रीन व्यू में कौनसे प्लैटफ़ॉर्म शामिल हैं, यह पता लगाने के बाद ट्रांज़िशन ट्रेस का इस्तेमाल करके, उपयोगकर्ता की अलग-अलग कार्रवाइयों को देखें और फ़्लिकर ढूंढें. चलाए गए ट्रांज़िशन की सूची देखने के लिए, Winscope में ट्रांज़िशन टैब पर क्लिक करें:

    ट्रांज़िशन

    नौवीं इमेज. ट्रांज़िशन.

    इस फ़्रेम के दौरान चलाया गया ट्रांज़िशन, नीले रंग में हाइलाइट किया गया है. इस मामले में, ट्रांज़िशन फ़्लैग में TRANSIT_FLAG_IS_RECENTS शामिल है, जिससे पता चलता है कि उपयोगकर्ता हाल ही में इस्तेमाल की गई ऐप्लिकेशन की स्क्रीन पर जा रहा है.

  5. उस समय पर जाने के लिए, डिस्पैच का समय कॉलम (इस मामले में 2024-04-18, 15:50:57.205) में मौजूद लिंक पर क्लिक करें और Surface Flinger टैब में रेक्ट की पुष्टि करें. ट्रांज़िशन के दौरान, डिवाइस की स्थिति सही है या नहीं, इसकी पुष्टि करें. इसके लिए, राइट ऐरो बटन का इस्तेमाल करके ट्रांज़िशन की प्रक्रिया को आगे बढ़ाएं और रेक्ट को देखें.

    लॉन्चर 15:50:57.278 पर दिखता है, लेकिन ऐनिमेशन तब शुरू नहीं होता. वॉलपेपर पहले से ही दिख रहा है, क्योंकि स्प्लिट-स्क्रीन ऐप्लिकेशन (डिवाइडर) के बीच कुछ नहीं है. इससे पहले के एक फ़्रेम (15:50:57.212) में, वॉलपेपर नहीं दिख रहा है और डिवाइडर दिख रहा है. ऐनिमेशन न होने पर, स्प्लिट-स्क्रीन इसी तरह दिखती है.

    फ़्लिकर होने से पहले की स्क्रीन

    10वीं इमेज. फ़्लिकर इवेंट से पहले की स्क्रीन.

  6. अगला ट्रांज़िशन देखने के लिए, सीधे टाइमलाइन पर क्लिक करें. SurfaceFlinger की स्थितियों को हल्के नीले रंग के ब्लॉक की एक पंक्ति से दिखाया जाता है. ट्रांज़िशन को गुलाबी ब्लॉक की एक पंक्ति से दिखाया जाता है.

    पहला ट्रांज़िशन खत्म होने पर

    11वीं इमेज. पहला ट्रांज़िशन खत्म होने का समय.

    अगले ट्रांज़िशन की शुरुआत में मौजूद, SurfaceFlinger लाइन पर क्लिक करें. इमेज 11 में, कर्सर की वर्टिकल पोज़िशन को नीली पतली लाइन से दिखाया गया है. SurfaceFlinger लाइन का हल्का नीला रंग, उसकी हॉरिज़ॉन्टल पोज़िशन दिखाता है. राइट ऐरो बटन का इस्तेमाल करके ट्रांज़िशन को धीरे-धीरे देखें और पता लगाएं कि फ़्लिकर होता है या नहीं. पुष्टि करें कि इस ट्रांज़िशन के लिए डिवाइस सही है.

  7. अगले ट्रांज़िशन को स्किप करें, क्योंकि इसकी अवधि बहुत कम है. इसलिए, इसमें फ़्लिकर होने की संभावना नहीं है. इसके बजाय, अगले लंबे ट्रांज़िशन की शुरुआत वाली जगह पर, SurfaceFlinger लाइन में टाइमलाइन पर क्लिक करें. इसकी जानकारी, नीचे दी गई इमेज में कर्सर से दी गई है.

    दूसरे ट्रांज़िशन का आखिरी हिस्सा

    12वीं इमेज. दूसरा ट्रांज़िशन खत्म.

    इस ट्रांज़िशन के दौरान, 15:51:13.239 पर ध्यान दें कि दोनों ऐप्लिकेशन, संपर्क, और डायलर के लिए Splash Screen लेयर, डिसप्ले के एक ही तरफ़ हों:

    स्प्लैश स्क्रीन

    13वीं इमेज. स्प्लैश स्क्रीन.

  8. बताएं कि कौनसा ऐप्लिकेशन गलत जगह पर है. ns इनपुट फ़ील्ड के बगल में मौजूद फ़्लैग आइकॉन पर क्लिक करके, अपनी मौजूदा जगह पर बुकमार्क जोड़ें. इससे, बाद में इस फ़्रेम पर वापस जाने में मदद मिलेगी.

    बुकमार्क जोड़ना

    14वीं इमेज. बुकमार्क जोड़ें.

  9. सीधे टाइमलाइन पर क्लिक करके, ट्रांज़िशन के आखिर में मौजूद किसी फ़्रेम पर जाएं. उदाहरण के लिए, 15:51:13.859 पर जाएं. यहां दोनों ऐप्लिकेशन अब अपनी आखिरी जगह पर हैं. डायलर बाईं ओर और संपर्क दाईं ओर हैं:

    फ़ाइनल स्प्लिट स्क्रीन

    15वीं इमेज. फ़ाइनल स्प्लिट स्क्रीन.

  10. फ़्लिकर वाले फ़्रेम पर वापस जाने के लिए, टाइमलाइन में बुकमार्क के फ़्लैग पर क्लिक करें.

    बुकमार्क की टाइमलाइन

    16वीं इमेज. टाइमलाइन को बुकमार्क करें.

    दोनों ऐप्लिकेशन दाईं ओर हैं, जिससे पता चलता है कि डायलर ऐप्लिकेशन गलत जगह पर है.

  11. डायलर की प्रॉपर्टी देखने के लिए, डायलर की स्प्लैश स्क्रीन पर क्लिक करें. चुनी गई प्रॉपर्टी व्यू में, खास तौर पर इसकी ट्रांसफ़ॉर्म प्रॉपर्टी देखें.

    प्रॉपर्टी बदलना

    17वीं इमेज. प्रॉपर्टी बदलें.

    कैलकुलेट किया गया ट्रांसफ़ॉर्म इस प्लैटफ़ॉर्म पर लागू होता है, लेकिन इसे इस लेवल के तौर पर सेट नहीं किया जाता. कैलकुलेट किए गए और अनुरोध किए गए कॉलम की वैल्यू अलग-अलग होती हैं. इससे पता चलता है कि ट्रांसफ़ॉर्म को पैरंट प्लैटफ़ॉर्म से इनहेरिट किया जा रहा है.

  12. हैरारकी का पूरा ट्री दिखाने के लिए, हैरारकी व्यू में फ़्लैट से चुने हुए का निशान हटाएं. इसके बाद, ऐप्लिकेशन के प्लैटफ़ॉर्म के पैरंट नोड पर तब तक जाएं, जब तक गिनती किए गए और अनुरोध किए गए ट्रांसफ़ॉर्म एक जैसे न हो जाएं. इससे, Surface(name=Task=7934)/@0x1941191_transition-leash#40670 प्लैटफ़ॉर्म पर अनुरोध किया गया ट्रांसफ़ॉर्म दिखेगा.

  13. पुष्टि करें कि ट्रांसफ़ॉर्म को पहली बार कब सेट किया गया था और किस वैल्यू पर सेट किया गया था. टाइटल के बगल में मौजूद आइकॉन पर क्लिक करके, चुनी गई प्रॉपर्टी को छोटा करें:

    चुनी गई प्रॉपर्टी को छोटा करना

    18वीं इमेज. चुनी गई प्रॉपर्टी को छोटा करें.

  14. इस फ़्रेम में बदली जा रही प्रॉपर्टी को हाइलाइट करने के लिए, प्रोटो डंप व्यू में बदलाव दिखाएं को चुनें. प्रॉपर्टी को फ़िल्टर करने के लिए, टेक्स्ट खोज फ़ील्ड में transform टाइप करें:

    show diff

    19वीं इमेज. अंतर दिखाएं.

    transition-leash के लिए, इस फ़्रेम में ट्रांसफ़ॉर्म को IDENTITY से SCALE|TRANSLATE|ROT_270 पर सेट किया गया है.

    इस जानकारी से पता चलता है कि फ़्लिकर तब हुआ, जब डायलर स्प्लिट स्क्रीन ऐप्लिकेशन के ऐनिमेशन लीश पर ट्रांसफ़ॉर्म लागू किया गया था.

    फ़्लिकर की पहचान

    20वीं इमेज. फ़्लिकर की पहचान.

  15. कोड में यह पता लगाएं कि यह ट्रांसफ़ॉर्मेशन, स्प्लिट स्क्रीन ट्रांज़िशन लीश पर क्यों सेट है.