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

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

इन ट्रेस को इस्तेमाल किया जा सकता है

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

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

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

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 पूरी तरह से ओपेक हो जाता है. NotificationActivity के सामने NotificationShade होने की वजह से, ऐप्लिकेशन नहीं दिखता. 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

    दिखने वाले प्लैटफ़ॉर्म (हरे रंग के आयत) के अलावा, एक धूसर रंग का आयत दिखता है. यह डिसप्ले एरिया प्लैटफ़ॉर्म को दिखाता है. इसका नाम Unknown display है. विज़िबिलिटी को बेहतर बनाने के लिए, ScreenDecorHwcOverlay#64 के बगल में मौजूद ('किसको दिखे' सेटिंग वाला आइकॉन) पर क्लिक करें. इससे, 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), वॉलपेपर नहीं दिख रहा है. साथ ही, डिवाइडर दिख रहा है. स्प्लिट-स्क्रीन में ऐनिमेशन न होने पर, ऐसा ही दिखता है.

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

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

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

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

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

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

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

    दूसरे ट्रांज़िशन के खत्म होने पर

    बारहवीं इमेज. दूसरे ट्रांज़िशन का अंत.

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

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

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

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

    बुकमार्क जोड़ें

    चौदहवीं इमेज. बुकमार्क जोड़ें.

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

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

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

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

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

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

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

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

    ट्रांसफ़ॉर्म प्रॉपर्टी

    17वीं इमेज. ट्रांसफ़ॉर्म प्रॉपर्टी.

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

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

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

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

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

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

    अंतर दिखाएं

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

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

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

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

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

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