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 Web UI का इस्तेमाल करके ट्रेस लोड करने के बारे में जानने के लिए, लोड ट्रेस देखें.
ट्रेस का विश्लेषण करने के बारे में जानकारी पाने के लिए, ट्रेस का विश्लेषण करना लेख पढ़ें.
उदाहरण
यहां दिए गए उदाहरण में, फ़्लिकर टेस्ट के फ़ेल होने और उपयोगकर्ता की ओर से रिपोर्ट किए गए बग को डीबग करने का तरीका बताया गया है.
फ़्लिकर टेस्ट फ़ेल हो गया
इस उदाहरण में, फ़्लिकर टेस्ट के फ़ेल होने की समस्या को डीबग करने के लिए, Winscope का इस्तेमाल करने का तरीका दिखाया गया है.
जांच पूरी न हो पाने की वजह जानना
समस्या का टाइप पता करने और टेस्ट के फ़ेल होने का मैसेज देखने के लिए, यह तरीका अपनाएं.
टेस्ट और क्लास के नाम की जांच करके, समस्या का टाइप पता करें.
टेस्ट और क्लास का नाम:
FlickerTestsNotification com.android.server.wm.flicker.notification.OpenAppFromLockscreenNotificationColdTest#appLayerBecomesVisible[ROTATION_0_GESTURAL_NAV]
समस्या प्रकार:
- सीयूजे का मतलब, लॉकस्क्रीन पर दिखने वाली सूचना से किसी ऐप्लिकेशन को लॉन्च करना है
(
OpenAppFromLockscreenNotificationColdTest
). - इस टेस्ट में, ऐप्लिकेशन को दिखने की अनुमति (
#appLayerBecomesVisible
) देने की ज़रूरत होती है.
- सीयूजे का मतलब, लॉकस्क्रीन पर दिखने वाली सूचना से किसी ऐप्लिकेशन को लॉन्च करना है
(
जांच पूरी न होने की वजह बताने वाले मैसेज को देखें. इसमें जांच पूरी न होने के बारे में पूरी जानकारी दी गई होती है. जैसे:
- अनुमानित नतीजे और असल में दिखने वाले नतीजे के बीच तुलना
- टाइमस्टैंप, ताकि यह पता चल सके कि गड़बड़ी कब हुई
- फ़ेल होने से जुड़े आर्टफ़ैक्ट या फ़ाइल का नाम
- गड़बड़ी को समझने और उसे ठीक करने के लिए, कॉन्टेक्स्ट के हिसाब से अतिरिक्त जानकारी
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 व्यू मेंNotificationShade
रेक्ट,NotificationActivity
रेक्ट के सामने है. साथ ही, दिखने वाला (हरा)NotificationShade
, चुनी गई लेयर हो सकती है.इस हाइपोथेसिस की पुष्टि करने के लिए, मौजूदा फ़्रेम पर दिखने वाला
NotificationShade
सरफ़ेस चुनें और उसकी प्रॉपर्टी देखें. फ़्लैग कोOPAQUE|ENABLE_BACKPRESSURE (0x102)
पर सेट किया गया है.NotificationShade
सरफ़ेस का नामNotificationShade#3447
है. इसके बाद, बाईं ओर वाले ऐरो को दबाकर, पिछली फ़्रेम (फ़्लिकर से पहले) पर वापस जाएं. साथ ही,NotificationShade
की प्रॉपर्टी फिर से देखें. ध्यान दें किOPAQUE
के बजाय, प्लैटफ़ॉर्म पर सिर्फ़ENABLE_BACKPRESSURE (0x100)
फ़्लैग मौजूद है. इससे पुष्टि होती है कि ऐप्लिकेशन लॉन्च होने से पहले,NotificationShade
पूरी तरह से अपारदर्शी हो जाता है.NotificationActivity
के सामनेNotificationShade
होने की वजह से, ऐप्लिकेशन नहीं दिखता.NotificationShade
काले रंग का है. इसलिए, स्क्रीन कुछ समय के लिए काली हो जाती है. इससे स्क्रीन फ़्लिकर होती है.कोड में यह पता लगाएं कि
NotificationShade
इतनी जल्दी अपारदर्शी क्यों हो जाता है.
उपयोगकर्ता की ओर से रिपोर्ट की गई गड़बड़ी
उपयोगकर्ताओं की ओर से बताई गई गड़बड़ियों को ठीक करना मुश्किल हो सकता है, क्योंकि उनमें अक्सर पूरी जानकारी नहीं होती. फ़्लिकर टेस्ट के फ़ेल होने पर, टाइमस्टैंप, एलिमेंट की जानकारी, और स्क्रीन रिकॉर्डिंग जैसी खास जानकारी मिलती है. हालांकि, उपयोगकर्ता की ओर से रिपोर्ट किए गए बग में आम तौर पर सिर्फ़ समस्या के बारे में कम शब्दों में जानकारी शामिल होती है.
हमारी केस स्टडी में, सिर्फ़ यह जानकारी दी गई है: टाइटल स्प्लिट स्क्रीन से ऐप्लिकेशन को फिर से खोलने पर स्क्रीन फ़्लिकर हुई और अनुमानित टाइमस्टैंप 18 अप्रैल, 2024 शाम 3:51 GMT-04:00.
उपयोगकर्ता की ओर से बताई गई गड़बड़ी को ठीक करने के लिए, यह तरीका अपनाएं:
Winscope में ट्रेस फ़ाइल लोड करें. Winscope, SurfaceFlinger के साथ खुलता है.
छठी इमेज. SurfaceFlinger व्यू के साथ Winscope का लैंडिंग पेज.
उपयोगकर्ता की ओर से रिपोर्ट किए गए अनुमानित टाइमस्टैंप पर जाएं. इस मामले में,
3:50 PM GMT-04:00
पर जाने के लिए,15:50:00
को समझने में आसान टाइमस्टैंप फ़ील्ड में डालें.सातवीं इमेज. टाइमस्टैंप वाला डायलॉग.
स्क्रीन पर क्या ड्रॉ किया गया था, यह जानने के लिए रेक्ट व्यू का इस्तेमाल करें. बेहतर व्यू के लिए, रोटेशन स्लाइडर का इस्तेमाल करके रेक्ट का पर्सपेक्टिव बदलें. पदानुक्रम व्यू में सिर्फ़ 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
से जुड़ा रेक्ट छिप जाएगा और उसके पीछे मौजूद सतहें दिखेंगी. हम विश्लेषण के लिए ओवरले हटा देते हैं, क्योंकि यह उपयोगकर्ता को नहीं दिखता और इसे फ़्लिकर करने वाले ऐनिमेशन के तौर पर रिपोर्ट नहीं किया जाएगा.आठवीं इमेज. उपयोगकर्ता की रिपोर्ट.
- लॉन्चर:
यह पता लगाने के बाद कि स्प्लिट स्क्रीन व्यू में कौनसी सतहें शामिल हैं, ट्रांज़िशन ट्रेस का इस्तेमाल करके उपयोगकर्ता की अलग-अलग कार्रवाइयों पर जाएं और फ़्लिकर ढूंढें. Winscope में Transitions टैब पर क्लिक करके, चलाए गए ट्रांज़िशन की सूची देखी जा सकती है:
नौवीं इमेज. ट्रांज़िशन.
इस फ़्रेम के दौरान चलाए गए ट्रांज़िशन को नीले रंग में हाइलाइट किया गया है. इस मामले में, ट्रांज़िशन फ़्लैग में
TRANSIT_FLAG_IS_RECENTS
शामिल है. इससे पता चलता है कि उपयोगकर्ता, हाल ही में इस्तेमाल की गई ऐप्लिकेशन की स्क्रीन पर जा रहा है.उस समय पर जाने के लिए, डिस्पैच का समय कॉलम (इस मामले में
2024-04-18, 15:50:57.205
) में मौजूद लिंक पर क्लिक करें. इसके बाद, Surface Flinger टैब में जाकर रेक्ट की पुष्टि करें. ट्रांज़िशन के दौरान डिवाइस की स्थिति सही है या नहीं, इसकी पुष्टि करें. इसके लिए, सही ऐरो कुंजी का इस्तेमाल करके ट्रांज़िशन करें और रेक्ट को देखें.लॉन्चर 15:50:57.278 पर दिखता है, लेकिन ऐनिमेशन तब शुरू नहीं होता. वॉलपेपर पहले से ही दिख रहा है, क्योंकि स्प्लिट-स्क्रीन वाले ऐप्लिकेशन (डिवाइडर) के बीच कुछ भी नहीं बनाया गया है. एक फ़्रेम पहले (15:50:57.212), वॉलपेपर नहीं दिख रहा है. साथ ही, डिवाइडर दिख रहा है. स्प्लिट-स्क्रीन में ऐनिमेशन न होने पर ऐसा ही दिखता है.
दसवीं इमेज. फ़्लिकर इवेंट से पहले की स्क्रीन.
अगले ट्रांज़िशन को देखने के लिए, सीधे टाइमलाइन पर क्लिक करें. SurfaceFlinger की स्थितियों को हल्के नीले रंग के ब्लॉक की लाइन से दिखाया जाता है. ट्रांज़िशन को गुलाबी रंग के ब्लॉक की लाइन से दिखाया जाता है.
ग्यारहवीं इमेज. पहले ट्रांज़िशन के खत्म होने की तारीख.
अगले ट्रांज़िशन की शुरुआती पोज़िशन पर, SurfaceFlinger लाइन पर क्लिक करें. 11वें फ़िगर में, कर्सर की वर्टिकल पोज़िशन को नीले रंग की पतली लाइन से दिखाया गया है. SurfaceFlinger लाइन का हल्का नीला बैकग्राउंड, उसकी हॉरिज़ॉन्टल पोज़िशन दिखाता है. ट्रांज़िशन के दौरान, राइट ऐरो बटन का इस्तेमाल करके देखें कि स्क्रीन फ़्लिकर हो रही है या नहीं. पुष्टि करें कि इस ट्रांज़िशन के लिए डिवाइस सही दिख रहा हो.
अगले ट्रांज़िशन को छोड़ें, क्योंकि इसकी अवधि बहुत कम है. इसलिए, इसमें फ़्लिकर होने की संभावना कम है. इसके बजाय, अगली लंबी अवधि के ट्रांज़िशन की शुरुआती पोज़िशन पर, SurfaceFlinger लाइन में मौजूद टाइमलाइन पर क्लिक करें. यह बात, यहां दी गई इमेज में कर्सर से दिखाई गई है.
बारहवीं इमेज. दूसरे ट्रांज़िशन का अंत.
इस ट्रांज़िशन के दौरान,
15:51:13.239
पर ध्यान दें. देखें कि दोनों ऐप्लिकेशन, संपर्क, और डायलर के लिएSplash Screen
लेयर, डिसप्ले के एक ही तरफ़ हैं या नहीं:तेरहवीं इमेज. स्प्लैश स्क्रीन.
यह बताएं कि कौनसा ऐप्लिकेशन गलत साइड पर है. ns इनपुट फ़ील्ड के बगल में मौजूद फ़्लैग आइकॉन पर क्लिक करके, अपनी मौजूदा जगह पर बुकमार्क जोड़ें. इससे आपको बाद में इस फ़्रेम पर वापस जाने में मदद मिलेगी.
चौदहवीं इमेज. बुकमार्क जोड़ें.
टाइमलाइन पर सीधे क्लिक करके, ट्रांज़िशन के आखिर में मौजूद किसी फ़्रेम पर जाएं. उदाहरण के लिए,
15:51:13.859
पर क्लिक करें. यहां दोनों ऐप्लिकेशन अब अपनी आखिरी जगह पर हैं. डायलर बाईं ओर और संपर्क दाईं ओर है:15वीं इमेज. फ़ाइनल स्प्लिट स्क्रीन.
फ़्लिकर वाले फ़्रेम पर वापस जाने के लिए, टाइमलाइन में मौजूद बुकमार्क के फ़्लैग पर क्लिक करें.
16वीं इमेज. टाइमलाइन को बुकमार्क करें.
दोनों ऐप्लिकेशन दाईं ओर हैं. इससे पता चलता है कि डायलर गलत जगह पर है.
डायल करने वाले ऐप्लिकेशन की स्प्लैश स्क्रीन की प्रॉपर्टी देखने के लिए, उस पर क्लिक करें. खास तौर पर, प्रॉपर्टी के चुने गए व्यू में, उसकी ट्रांसफ़ॉर्म प्रॉपर्टी देखें.
17वीं इमेज. ट्रांसफ़ॉर्म प्रॉपर्टी.
कैलकुलेट किए गए ट्रांसफ़ॉर्म को इस सर्फ़ेस पर लागू किया गया है, लेकिन इस लेवल पर सेट नहीं किया गया है. कैलकुलेट किए गए और अनुरोध किए गए कॉलम की वैल्यू अलग-अलग हैं. इससे पता चलता है कि ट्रांसफ़ॉर्म को पैरंट सर्फ़ेस से इनहेरिट किया जा रहा है.
पूरी हैरारकी ट्री दिखाने के लिए, हैरारकी व्यू में फ़्लैट से चुने हुए का निशान हटाएं. इसके बाद, ऐप्लिकेशन की सतह के पैरंट नोड पर तब तक जाएं, जब तक कैलकुलेट किया गया और अनुरोध किया गया ट्रांसफ़ॉर्म एक जैसे न हो जाएं. इससे पता चलेगा कि
Surface(name=Task=7934)/@0x1941191_transition-leash#40670
सतह पर अनुरोध किया गया ट्रांसफ़ॉर्म दिख रहा है.पुष्टि करें कि ट्रांसफ़ॉर्म को पहली बार कब और किस वैल्यू पर सेट किया गया था. टाइटल के बगल में मौजूद आइकॉन पर क्लिक करके, चुनी गई प्रॉपर्टी को छोटा करें:
18वीं इमेज. चुनी गई प्रॉपर्टी को छोटा करें.
इस फ़्रेम में बदली जा रही प्रॉपर्टी को हाइलाइट करने के लिए, प्रोटो डंप व्यू में अंतर दिखाएं को चुनें. प्रॉपर्टी फ़िल्टर करने के लिए, टेक्स्ट सर्च फ़ील्ड में
transform
टाइप करें:19वीं इमेज. अंतर दिखाएं.
इस फ़्रेम में,
transition-leash
के लिए ट्रांसफ़ॉर्म कोIDENTITY
सेSCALE|TRANSLATE|ROT_270
पर सेट किया गया है.इस जानकारी से पता चलता है कि डायलर स्प्लिट स्क्रीन ऐप्लिकेशन के ऐनिमेशन लीश पर ट्रांसफ़ॉर्म लागू होने पर फ़्लिकर हुआ.
20वीं इमेज. फ़्लिकर की पहचान.
कोड में यह पता लगाएं कि इस ट्रांसफ़ॉर्म को स्प्लिट स्क्रीन ट्रांज़िशन लीश पर क्यों सेट किया गया है.