Winscope เป็นเครื่องมือบนเว็บที่ช่วยให้ผู้ใช้บันทึก เล่นซ้ำ และวิเคราะห์สถานะของบริการระบบหลายอย่างในระหว่างและหลังการแสดงภาพเคลื่อนไหวและการเปลี่ยนผ่าน Winscope จะบันทึกสถานะบริการของระบบที่เกี่ยวข้องทั้งหมดลงในไฟล์การติดตาม เมื่อใช้ UI ของ Winscope กับไฟล์การติดตาม คุณสามารถตรวจสอบสถานะของบริการเหล่านี้สำหรับเฟรมภาพเคลื่อนไหวแต่ละเฟรมได้ ไม่ว่าจะมีการบันทึกหน้าจอหรือไม่ก็ตาม โดยเล่นซ้ำ เลื่อนดู และแก้ไขข้อบกพร่องของการเปลี่ยนเฟรม
เทรซที่รองรับ
Winscope ช่วยให้คุณรวบรวมและแสดงร่องรอยหรือลำดับสถานะบริการของระบบได้ คุณสามารถกําหนดค่าการติดตามเหล่านี้ให้เหมาะกับกรณีการใช้งานที่เฉพาะเจาะจงได้ ตั้งแต่การโอเวอร์เฮดต่ำไปจนถึงการอธิบายอย่างละเอียดสูง Winscope รองรับการติดตามต่อไปนี้
- EventLog: รวบรวมระเบียนเหตุการณ์การวินิจฉัยระบบโดยใช้
EventLog
ใน Winscope ระบบจะใช้ข้อมูลนี้เพื่อระบุและแสดงเครื่องหมาย CUJ เท่านั้น - IME: ติดตามเหตุการณ์จากไปป์ไลน์ตัวแก้ไขวิธีการป้อนข้อมูล (IME) ซึ่งรวมถึง IMS, IMMS และไคลเอ็นต์ IME
- อินพุต: ติดตามเหตุการณ์การป้อนข้อมูลจากส่วนต่างๆ ของไปป์ไลน์เหตุการณ์การป้อนข้อมูล
- ProtoLog: รวบรวมข้อความ ProtoLog จากบริการของระบบและโค้ดของบริการของระบบที่ทำงานในกระบวนการไคลเอ็นต์
- การบันทึกหน้าจอ: รวบรวมการบันทึกหน้าจอพร้อมกับร่องรอย
- การเปลี่ยน Shell: บันทึกรายละเอียดระบบการเปลี่ยนหน้าต่างและกิจกรรม
- SurfaceFlinger: รวบรวมร่องรอย SurfaceFlinger ที่มีข้อมูลเกี่ยวกับพื้นผิว (เลเยอร์) เช่น ตําแหน่ง บัฟเฟอร์ และองค์ประกอบ
- ธุรกรรม: ติดตามชุดการเปลี่ยนแปลงแบบอะตอมที่ได้รับโดย SurfaceFlinger ใช้
SurfaceControl
สำหรับการคอมโพสิชัน - ViewCapture: จับภาพช่วงพร็อพเพอร์ตี้ของมุมมองทั้งหมดจากหน้าต่างของระบบที่รองรับ ViewCapture เช่น UI ของระบบและ Launcher
- ตัวจัดการหน้าต่าง: ติดตามสถานะของตัวจัดการหน้าต่างซึ่งมีรายละเอียดที่เกี่ยวข้องกับหน้าต่าง รวมถึงเหตุการณ์อินพุตและโฟกัส การวางแนวหน้าจอ การเปลี่ยนฉาก ภาพเคลื่อนไหว การวางตำแหน่ง และการเปลี่ยนรูปแบบ
การถ่ายโอนข้อมูลแบบ Dump ที่รองรับ
Winscope สามารถรวบรวมและแสดงการถ่ายโอนสถานะ ซึ่งเป็นภาพรวมของสถานะของอุปกรณ์ที่ถ่ายไว้ในช่วงเวลาที่ผู้ใช้กำหนด ซึ่งแตกต่างจากการติดตามที่รวบรวมอย่างต่อเนื่องระหว่างการใช้งานอุปกรณ์และอาจส่งผลต่อประสิทธิภาพ โดยระบบจะบันทึกดัมพ์เฉพาะในช่วงเวลาที่ผู้ใช้กำหนดเท่านั้น เพื่อให้มั่นใจว่าประสิทธิภาพและความชัดเจนของข้อมูลจะไม่ลดลง ซึ่งช่วยให้การวิเคราะห์สถานะของอุปกรณ์ ณ จุดหนึ่งๆ มีประสิทธิภาพและมุ่งเน้นมากขึ้น Winscope รองรับไฟล์ Dump ต่อไปนี้
- ตัวจัดการหน้าต่าง: แสดงสถานะตัวจัดการหน้าต่างรายการเดียว
- SurfaceFlinger: แสดงภาพรวมของ SurfaceFlinger รายการเดียว
- ภาพหน้าจอ: รวบรวมภาพหน้าจอพร้อมกับไฟล์ Dump
แหล่งข้อมูล
ดูข้อมูลการสร้างและเรียกใช้ Winscope ได้ที่เรียกใช้ Winscope
ดูข้อมูลเกี่ยวกับการเก็บรวบรวมร่องรอยได้ที่บันทึกร่องรอย
ดูข้อมูลเกี่ยวกับวิธีโหลดร่องรอยโดยใช้ UI ของเว็บ Winscope ได้ที่โหลดร่องรอย
ดูข้อมูลเกี่ยวกับการวิเคราะห์ร่องรอยได้ที่วิเคราะห์ร่องรอย
ตัวอย่าง
ตัวอย่างต่อไปนี้อธิบายวิธีแก้ไขข้อบกพร่องของการทดสอบการกะพริบที่ไม่ผ่านและข้อบกพร่องที่ผู้ใช้รายงาน
การทดสอบการกะพริบไม่สำเร็จ
ตัวอย่างนี้แสดงวิธีใช้ Winscope เพื่อแก้ไขข้อบกพร่องของการทดสอบการกะพริบที่ไม่ผ่าน
ตรวจสอบการทดสอบที่ล้มเหลว
ทําตามขั้นตอนเหล่านี้เพื่อระบุประเภทปัญหาและตรวจสอบข้อความการทดสอบที่ไม่สําเร็จ
ระบุประเภทปัญหาโดยตรวจสอบชื่อการทดสอบและชื่อชั้นเรียน
ชื่อการทดสอบและชั้นเรียน
FlickerTestsNotification com.android.server.wm.flicker.notification.OpenAppFromLockscreenNotificationColdTest#appLayerBecomesVisible[ROTATION_0_GESTURAL_NAV]
ประเภทปัญหา:
CUJ หมายถึงการเปิดแอปจากการแจ้งเตือนบนหน้าจอล็อก (
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 โดยอัตโนมัติ
รูปที่ 1 หน้า Landing Page ของ Winscope ที่มีมุมมอง SurfaceFlinger
ไปที่การประทับเวลาที่เกิดปัญหาโดยการคัดลอกและวางการประทับเวลาจากข้อความข้อยกเว้นลงในช่องการประทับเวลา คุณสามารถคัดลอกการประทับเวลาในรูปแบบที่มนุษย์อ่านได้ (
2024-05-10T11:04:14.227572545
) แล้ววางลงในช่องแรก หรือคัดลอกการประทับเวลาเป็นนาโนวินาที (1715339054227572545ns
) แล้ววางลงในช่องที่ 2รูปที่ 2 กล่องโต้ตอบการประทับเวลา
กดแป้นลูกศรซ้ายเพื่อไปยังเฟรมก่อนหน้า ในสถานะนี้ แอป NotificationActivity จะแสดงในวิดีโออย่างถูกต้อง และทั้งแพลตฟอร์มแอปและหน้าจอแนะนำจะปรากฏขึ้น ซึ่งระบุด้วยสี่เหลี่ยมสีเขียวในมุมมอง 3 มิติ และชิป V ในองค์ประกอบลําดับชั้น
ชื่อแพลตฟอร์มของแอปและหน้าจอแนะนำมีดังนี้
com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.NotificationActivity#3458` Splash Screen com.android.server.wm.flicker.testapp#3453
ข้อมูลนี้บ่งบอกว่าแอปกำลังเปิดขึ้นเมื่อหน้าจอกลายเป็นสีดํา และเหตุการณ์นี้เกิดขึ้นระหว่างการเปิดแอปเนื่องจากหน้าจอแนะนำยังคงปรากฏอยู่
รูปที่ 3 เมื่อเปิดแอป
กดแป้นลูกศรขวาเพื่อไปยังเฟรมถัดไปที่เกิดการกะพริบ ในมุมมองสี่เหลี่ยมผืนผ้า
NotificationShade
จะแสดงบนหน้าจอแทนแอป แพลตฟอร์มต่อไปนี้จะแสดงในเฟรมนี้- การซ้อนทับการตกแต่งหน้าจอ (ด้านบนและด้านล่าง)
- แถบนำทาง
ตำแหน่งเคอร์เซอร์ (จากการบันทึกหน้าจอ)
รูปที่ 4 กิจกรรมของ Flicker
เลือกกิจกรรมของแอปในมุมมองลําดับชั้น หากไม่พบ ให้ยกเลิกแสดงเฉพาะ V จากนั้นตรวจสอบมุมมองพร็อพเพอร์ตี้
ชื่อแพลตฟอร์มของแอปคือ
com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.NotificationActivity#3458`
รูปที่ 5 พร็อพเพอร์ตี้แอป
แม้ว่าจะตั้งค่ากิจกรรมบนแอปให้มองเห็นได้และทึบแสง แต่แพลตฟอร์มก็ไม่แสดงเนื่องจากข้อผิดพลาด
Invisible due to: null visible region
ปัญหานี้เกิดขึ้นเนื่องจากมีการวางพื้นผิวทึบแสงอีกชิ้นหนึ่งไว้ด้านหน้าระหว่างการจัดองค์ประกอบ สมมติฐานนี้มาจากสี่เหลี่ยมผืนผ้าNotificationShade
อยู่ด้านหน้าสี่เหลี่ยมผืนผ้าNotificationActivity
ในมุมมอง 3 มิติ และNotificationShade
ที่มองเห็นได้ (สีเขียว) อาจเป็นเลเยอร์ที่ได้รับเลือกหากต้องการตรวจสอบสมมติฐานนี้ ให้เลือก
NotificationShade
พื้นผิวที่มองเห็นได้ในเฟรมปัจจุบันและตรวจสอบคุณสมบัติของพื้นผิวนั้น ตั้งค่า Flag เป็นOPAQUE|ENABLE_BACKPRESSURE (0x102)
ชื่อNotificationShade
พื้นผิวคือNotificationShade#3447
จากนั้นกดลูกศรซ้ายเพื่อกลับไปที่เฟรมก่อนหน้า (ก่อนเกิดปัญหากะพริบ) และตรวจสอบคุณสมบัติของพื้นผิวNotificationShade
อีกครั้ง โปรดทราบว่าแพลตฟอร์มมีเฉพาะ FlagENABLE_BACKPRESSURE (0x100)
แทนที่จะเป็นOPAQUE
การดำเนินการนี้ยืนยันว่าNotificationShade
จะทึบแสงก่อนที่แอปจะเปิดตัวอย่างสมบูรณ์ เนื่องจากNotificationShade
อยู่หน้าNotificationActivity
แอปจึงไม่แสดงNotificationShade
เป็นสีดำ หน้าจอจึงดับไปชั่วขณะ ซึ่งทำให้เกิดอาการกะพริบระบุในโค้ดว่าเหตุใด
NotificationShade
จึงทึบแสงเร็วเกินไป
ข้อบกพร่องที่ผู้ใช้รายงาน
การแก้ไขข้อบกพร่องที่ผู้ใช้รายงานอาจเป็นเรื่องยาก เนื่องจากมักไม่มีข้อมูลโดยละเอียด ข้อบกพร่องที่ผู้ใช้รายงานมักจะมีเพียงคำอธิบายสั้นๆ เกี่ยวกับปัญหาเท่านั้น ซึ่งต่างจากข้อบกพร่องที่ทดสอบการกะพริบไม่ผ่านซึ่งมีการประทับเวลา รายละเอียดองค์ประกอบ และการบันทึกหน้าจอที่เฉพาะเจาะจง
ในกรณีศึกษานี้ ข้อมูลเดียวที่ให้ไว้คือชื่อหน้าจอกะพริบเมื่อเปิดแอปอีกครั้งจากโหมดแยกหน้าจอและการประทับเวลาโดยประมาณของ18 เม.ย. 2024 15:51 น. GMT-04:00
ทําตามขั้นตอนต่อไปนี้เพื่อแก้ไขข้อบกพร่องที่ผู้ใช้รายงาน
โหลดไฟล์การติดตามใน Winscope Winscope จะเปิดขึ้นโดยเลือก SurfaceFlinger ไว้โดยอัตโนมัติ
รูปที่ 6 หน้า Landing Page ของ Winscope ที่มีมุมมอง SurfaceFlinger
ไปยังการประทับเวลาโดยประมาณที่ผู้ใช้รายงาน ซึ่งในกรณีนี้คือ
3:50 PM GMT-04:00
โดยป้อน15:50:00
ในช่องการประทับเวลาที่อ่านได้รูปที่ 7 กล่องโต้ตอบการประทับเวลา
ใช้มุมมองสี่เหลี่ยมผืนผ้าเพื่อระบุสิ่งที่วาดบนหน้าจอ หากต้องการมุมมองที่ดีขึ้น ให้ใช้แถบเลื่อนการหมุนเพื่อเปลี่ยนมุมมองของสี่เหลี่ยม เมื่อทำเครื่องหมายแสดงเฉพาะ V และแบนในมุมมองลําดับชั้น วอลล์เปเปอร์ การวางซ้อนการตกแต่งหน้าจอ แถบดำด้านบนและล่างของวิดีโอ โปรแกรมเปิดใช้งาน รายชื่อติดต่อ และหน้าจอโทรศัพท์จะปรากฏขึ้น
ชื่อแพ็กเกจมีดังนี้
Launcher:
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
เพื่อซ่อนพื้นผิวที่เกี่ยวข้องและแสดงพื้นผิวที่อยู่ด้านหลัง เรานำการวางซ้อนออกเพื่อการวิเคราะห์เนื่องจากผู้ใช้มองไม่เห็นและจะไม่ได้รับการรายงานว่าเป็นภาพเคลื่อนไหวที่กะพริบรูปที่ 8 รายงานผู้ใช้
หลังจากระบุแพลตฟอร์มที่เกี่ยวข้องในมุมมองแบบแยกหน้าจอแล้ว ให้ใช้การติดตามการเปลี่ยนเพื่อดูการดําเนินการต่างๆ ของผู้ใช้และค้นหาการกะพริบ คลิกแท็บทรานซิชันใน Winscope เพื่อแสดงรายการทรานซิชันที่เล่น
รูปที่ 9 ทรานซิชัน
ทรานซิชันที่เล่นระหว่างเฟรมนี้จะไฮไลต์เป็นสีน้ำเงิน ในกรณีนี้ Flag การเปลี่ยนผ่านจะมี
TRANSIT_FLAG_IS_RECENTS
ซึ่งบ่งบอกว่าผู้ใช้กำลังเข้าสู่หน้าจอล่าสุดคลิกลิงก์ในคอลัมน์เวลาออกเดินทาง (ในกรณีนี้คือ
2024-04-18, 15:50:57.205
) เพื่อไปยังจุดนั้นและยืนยันสี่เหลี่ยมผืนผ้าในแท็บSurface Flinger ตรวจสอบความถูกต้องของสถานะของอุปกรณ์ในระหว่างการเปลี่ยนผ่านโดยดูการเปลี่ยนผ่านด้วยแป้นลูกศรขวาและสังเกตสี่เหลี่ยมLauncher ปรากฏขึ้นที่ 15:50:57.278 แต่ภาพเคลื่อนไหวไม่เริ่มขึ้น วอลล์เปเปอร์จะปรากฏอยู่แล้วเนื่องจากไม่มีภาพวาดระหว่างแอปที่แยกหน้าจอ (ตัวแบ่ง) เฟรมก่อนหน้า 1 เฟรม (15:50:57.212) วอลล์เปเปอร์จะมองไม่เห็นและตัวแบ่งจะแสดงอยู่ ซึ่งเป็นลักษณะที่หน้าจอแยกดูเมื่อไม่ได้เคลื่อนไหว
รูปที่ 10 หน้าจอก่อนเกิดเหตุการณ์กะพริบ
หากต้องการดูการเปลี่ยนแปลงถัดไป ให้คลิกไทม์ไลน์โดยตรง สถานะ SurfaceFlinger จะแสดงด้วยแถวบล็อกสีฟ้าอ่อน ทรานซิชันจะแสดงด้วยแถวของบล็อกสีชมพู
รูปที่ 11 สิ้นสุดการเปลี่ยนเฟสแรก
คลิกแถว SurfaceFlinger ที่ตำแหน่งเริ่มต้นของทรานซิชันถัดไป ในรูปที่ 11 ตำแหน่งแนวตั้งของเคอร์เซอร์จะแสดงด้วยเส้นสีน้ำเงินบางๆ พื้นหลังสีฟ้าอ่อนของแถว SurfaceFlinger จะแสดงตำแหน่งแนวนอน เลื่อนดูการเปลี่ยนด้วยแป้นลูกศรขวาเพื่อดูว่าภาพกะพริบหรือไม่ ตรวจสอบว่าอุปกรณ์ดูถูกต้องสำหรับการเปลี่ยนแปลงนี้
ข้ามทรานซิชันถัดไปเนื่องจากมีระยะเวลาสั้นมาก จึงไม่น่าจะมีภาพกะพริบ แต่ให้คลิกไทม์ไลน์ในแถว SurfaceFlinger ที่ตำแหน่งเริ่มต้นของทรานซิชันที่ยาวขึ้นรายการถัดไป ตามที่เคอร์เซอร์ในภาพต่อไปนี้ชี้ให้เห็น
รูปที่ 12 สิ้นสุดการเปลี่ยนที่ 2
ในระหว่างการเปลี่ยนนี้ ที่
15:51:13.239
ให้สังเกตว่าSplash Screen
เลเยอร์สำหรับทั้งแอป รายชื่อติดต่อ และเครื่องมือโทรอยู่ด้านเดียวกันของจอแสดงผลรูปที่ 13 หน้าจอแนะนำ
ชี้แจงว่าแอปใดอยู่ฝั่งที่ไม่ถูกต้อง เพิ่มบุ๊กมาร์กไปยังตำแหน่งปัจจุบันโดยคลิกไอคอนธงข้างช่องป้อนข้อมูล ns เพื่อช่วยในการไปยังเฟรมนี้ในภายหลัง
รูปที่ 14 เพิ่มบุ๊กมาร์ก
ไปยังเฟรมที่ท้ายของทรานซิชันโดยคลิกไทม์ไลน์โดยตรง เช่น ไปยัง
15:51:13.859
ตอนนี้แอปทั้ง 2 แอปอยู่ในตำแหน่งสุดท้ายแล้ว โดยที่แป้นโทรศัพท์อยู่ทางด้านซ้ายและรายชื่อติดต่ออยู่ทางด้านขวารูปที่ 15 หน้าจอแยกขั้นสุดท้าย
คลิกธงของบุ๊กมาร์กในไทม์ไลน์เพื่อกลับไปที่เฟรมที่มีภาพกะพริบ
รูปที่ 16 บุ๊กมาร์กไทม์ไลน์
แอปทั้ง 2 แอปอยู่ทางด้านขวา ซึ่งบ่งบอกว่าโทรศัพท์อยู่ผิดตำแหน่ง
คลิกหน้าจอแนะนำของโปรแกรมโทรศัพท์เพื่อดูพร็อพเพอร์ตี้ ดูที่คุณสมบัติการเปลี่ยนรูปแบบโดยเฉพาะในมุมมองพร็อพเพอร์ตี้ที่มีการดูแลจัดการ
รูปที่ 17 เปลี่ยนรูปแบบพร็อพเพอร์ตี้
ระบบจะใช้การเปลี่ยนรูปแบบที่คำนวณแล้วกับพื้นผิวนี้ แต่ไม่ตั้งค่าเป็นระดับนี้ คอลัมน์ที่คำนวณแล้วและที่ขอมีค่าต่างกัน ซึ่งบ่งชี้ว่ามีการรับค่าการเปลี่ยนรูปแบบมาจากแพลตฟอร์มหลัก
ยกเลิกการเลือกแบนราบในมุมมองลําดับชั้นเพื่อแสดงลําดับชั้นทั้งต้น และไปที่โหนดหลักของแพลตฟอร์มแอปจนกว่าทั้งการเปลี่ยนรูปแบบที่คำนวณแล้วและที่ขอจะเหมือนกัน ซึ่งแสดงการเปลี่ยนรูปแบบที่ขอในแพลตฟอร์ม
Surface(name=Task=7934)/@0x1941191_transition-leash#40670
ยืนยันเวลาที่ตั้งค่าการเปลี่ยนรูปแบบครั้งแรกและค่าที่ตั้งไว้ ยุบพร็อพเพอร์ตี้ที่ดูแลจัดการโดยคลิกไอคอนข้างชื่อ
รูปที่ 18 ยุบพร็อพเพอร์ตี้ที่มีการดูแลจัดการ
เลือกแสดงความแตกต่างในมุมมองการดัมพ์โปรโตคอลเพื่อไฮไลต์พร็อพเพอร์ตี้ที่มีการเปลี่ยนแปลงในเฟรมนี้ พิมพ์
transform
ลงในช่องค้นหาข้อความเพื่อกรองที่พักรูปที่ 19 แสดงความแตกต่าง
มีการกําหนดการเปลี่ยนรูปแบบจาก
IDENTITY
เป็นSCALE|TRANSLATE|ROT_270
ในเฟรมนี้สําหรับtransition-leash
ข้อมูลนี้แสดงให้เห็นว่าภาพกะพริบเกิดขึ้นเมื่อใช้การเปลี่ยนรูปแบบกับเชนภาพเคลื่อนไหวของแอปแยกหน้าจอของโปรแกรมโทรศัพท์
รูปที่ 20 การระบุภาพกะพริบ
ระบุในโค้ดว่าเหตุใดจึงมีการตั้งค่าการเปลี่ยนรูปแบบนี้ให้กับเชนการเปลี่ยนหน้าจอแยก