Winscope เป็นเครื่องมือบนเว็บที่ช่วยให้คุณบันทึก เล่นซ้ำ และวิเคราะห์สถานะของ บริการของระบบหลายรายการระหว่างและหลังภาพเคลื่อนไหวและการเปลี่ยนฉาก Winscope บันทึกสถานะบริการของระบบที่เกี่ยวข้องทั้งหมดลงในไฟล์การติดตาม การใช้ Winscope UI กับไฟล์การติดตามจะช่วยให้คุณตรวจสอบสถานะของบริการเหล่านี้สำหรับแต่ละเฟรม ภาพเคลื่อนไหวได้ ไม่ว่าจะมีการบันทึกหน้าจอหรือไม่ก็ตาม โดยการเล่นซ้ำ การก้าว ผ่าน และการแก้ไขข้อบกพร่องของการเปลี่ยนภาพ
การติดตามที่รองรับ
Winscope ช่วยให้คุณรวบรวมและแสดงภาพร่องรอยต่างๆ ซึ่งก็คือลำดับสถานะของบริการระบบ คุณสามารถกำหนดค่าการติดตามเหล่านี้ให้เหมาะกับกรณีการใช้งานที่เฉพาะเจาะจงได้ ตั้งแต่ค่าใช้จ่ายต่ำไปจนถึงการแสดงข้อมูลแบบละเอียดสูง Winscope รองรับการติดตามต่อไปนี้
- EventLog: รวบรวมบันทึกเหตุการณ์การวินิจฉัยระบบโดยใช้
EventLogใน Winscope ระบบจะใช้ข้อมูลนี้เพื่อระบุและแสดงเครื่องหมาย CUJ เท่านั้น
- IME: ติดตามเหตุการณ์จากไปป์ไลน์ตัวแก้ไขวิธีการป้อนข้อมูล (IME) ซึ่งรวมถึง IMS, IMMS และไคลเอ็นต์ IME
- อินพุต: ติดตามเหตุการณ์อินพุตจากส่วนต่างๆ ของไปป์ไลน์เหตุการณ์อินพุต
- ProtoLog: รวบรวมข้อความ ProtoLog จากบริการของระบบและโค้ดของบริการของระบบที่ทำงานในกระบวนการไคลเอ็นต์
- การบันทึกหน้าจอ: รวบรวมการบันทึกหน้าจอพร้อมกับร่องรอย
- การเปลี่ยนเชลล์: บันทึกรายละเอียดระบบการเปลี่ยนหน้าต่างและกิจกรรม
- SurfaceFlinger: รวบรวมการติดตาม SurfaceFlinger ที่มีข้อมูลเกี่ยวกับ Surface (เลเยอร์) เช่น ตำแหน่ง บัฟเฟอร์ และการจัดองค์ประกอบ
- ธุรกรรม: ติดตามชุดการเปลี่ยนแปลงแบบอะตอมที่ SurfaceFlinger ได้รับ
โดยใช้ SurfaceControlสำหรับการจัดองค์ประกอบ
- ViewCapture: จับภาพพร็อพเพอร์ตี้ต่างๆ ของมุมมองทั้งหมดจากหน้าต่างระบบที่รองรับ ViewCapture เช่น UI ของระบบและ Launcher
- Window Manager: สถานะ Trace Window Manager ที่มีรายละเอียดเกี่ยวกับหน้าต่าง รวมถึงเหตุการณ์อินพุตและโฟกัส การวางแนวหน้าจอ การเปลี่ยนภาพ ภาพเคลื่อนไหว การวางตำแหน่ง และ การเปลี่ยนรูป
การทิ้งที่รองรับ
Winscope สามารถรวบรวมและแสดงการดัมพ์สถานะ ซึ่งเป็นสแนปชอตของสถานะอุปกรณ์ที่ถ่ายในช่วงเวลาที่เฉพาะเจาะจงซึ่งคุณกำหนด การทิ้งข้อมูลจะดำเนินการเฉพาะในช่วงเวลาที่ผู้ใช้กำหนดเท่านั้นเพื่อยืนยันว่าประสิทธิภาพ และระดับรายละเอียดจะไม่ลดลง ซึ่งต่างจากการติดตามที่ จะรวบรวมอย่างต่อเนื่องในระหว่างการใช้งานอุปกรณ์และอาจส่งผลต่อประสิทธิภาพ ซึ่งช่วยให้วิเคราะห์สถานะของอุปกรณ์ได้ อย่างมีประสิทธิภาพและตรงจุดมากขึ้น ณ ช่วงเวลาที่เฉพาะเจาะจง Winscope รองรับการทิ้งข้อมูลต่อไปนี้
- Window Manager: แสดงสถานะ Window Manager รายการเดียว
- SurfaceFlinger: ทิ้งสแนปชอต SurfaceFlinger รายการเดียว
- ภาพหน้าจอ: รวบรวมภาพหน้าจอพร้อมกับไฟล์การทิ้ง
แหล่งข้อมูล
ดูข้อมูลเกี่ยวกับการสร้างและเรียกใช้ Winscope ได้ที่เรียกใช้ Winscope
ดูข้อมูลเกี่ยวกับการรวบรวมการติดตามได้ที่บันทึกการติดตาม
ดูข้อมูลเกี่ยวกับวิธีโหลดการติดตามโดยใช้ Winscope Web UI ได้ที่โหลดการติดตาม
ดูข้อมูลเกี่ยวกับการวิเคราะห์การติดตามได้ที่วิเคราะห์การติดตาม
ตัวอย่าง
ตัวอย่างต่อไปนี้อธิบายวิธีแก้ไขข้อบกพร่องของผลการทดสอบการกะพริบที่ไม่สำเร็จและข้อบกพร่องที่ผู้ใช้รายงาน
การทดสอบการกะพริบไม่สำเร็จ
ตัวอย่างนี้แสดงวิธีใช้ Winscope เพื่อแก้ไขข้อบกพร่องของการทดสอบการกะพริบที่ล้มเหลว
ตรวจสอบการทดสอบที่ไม่สำเร็จ
ทำตามขั้นตอนต่อไปนี้เพื่อระบุประเภทปัญหาและตรวจสอบข้อความแสดงข้อผิดพลาดในการทดสอบ
- พิจารณาประเภทปัญหาโดยตรวจสอบชื่อการทดสอบและชื่อชั้นเรียน - ชื่อการทดสอบและชั้นเรียน - FlickerTestsNotification com.android.server.wm.flicker.notification.OpenAppFromLockscreenNotificationColdTest#appLayerBecomesVisible[ROTATION_0_GESTURAL_NAV]- ประเภทปัญหา: - CUJ หมายถึงการเปิดแอปจากการแจ้งเตือนบนหน้าจอล็อก
(OpenAppFromLockscreenNotificationColdTest)
- การทดสอบคาดหวังให้แอปปรากฏขึ้น (#appLayerBecomesVisible)
 
- CUJ หมายถึงการเปิดแอปจากการแจ้งเตือนบนหน้าจอล็อก
(
- ตรวจสอบข้อความการทดสอบไม่สำเร็จ ซึ่งมีข้อมูลที่ครอบคลุม เกี่ยวกับการทดสอบไม่สำเร็จ รวมถึงข้อมูลต่อไปนี้ - การเปรียบเทียบระหว่างผลลัพธ์ที่คาดหวังกับผลลัพธ์ที่มองเห็นได้จริง
- การประทับเวลาเพื่อช่วยระบุเวลาที่เกิดความล้มเหลว
- ชื่อของอาร์ติแฟกต์หรือไฟล์ที่เชื่อมโยงกับความล้มเหลว
- ข้อมูลตามบริบทเพิ่มเติมที่เกี่ยวข้องกับการทำความเข้าใจและ การแก้ไขข้อบกพร่องของความล้มเหลว
 - 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 กล่องโต้ตอบการประทับเวลา 
- กดปุ่มลูกศรซ้ายเพื่อไปยังเฟรมก่อนหน้า ในสถานะนี้ แอป 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 เมื่อเปิดแอป 
- กดปุ่มลูกศรขวาเพื่อกลับไปยังเฟรมถัดไปที่เกิด การกะพริบ ในมุมมอง Rects - NotificationShadeจะแสดงบนหน้าจอแทนแอป โดยพื้นผิวต่อไปนี้จะแสดงในเฟรมนี้- การซ้อนทับตกแต่งหน้าจอ (ด้านบนและด้านล่าง)
- แถบนำทาง
- ตำแหน่งของเคอร์เซอร์ (จากการบันทึกหน้าจอ)
 - รูปที่ 4 กิจกรรมการกะพริบ 
- เลือกกิจกรรมของแอปในมุมมองลำดับชั้น หากไม่พบ ให้ยกเลิกการเลือกแสดงเฉพาะ V จากนั้นตรวจสอบมุมมองพร็อพเพอร์ตี้ - ชื่อแพลตฟอร์มของแอปคือ - com.android.server.wm.flicker.testapp/com.android.server.wm.flicker.testapp.NotificationActivity#3458`- รูปที่ 5 พร็อพเพอร์ตี้แอป - แม้ว่าจะตั้งค่ากิจกรรมของแอปให้มองเห็นได้และทึบแสง แต่ระบบก็ไม่แสดงพื้นผิวเนื่องจากเกิดข้อผิดพลาด - Invisible due to: null visible regionปัญหานี้เกิดขึ้น เนื่องจากมีการวางพื้นผิวทึบแสงอื่นไว้ด้านหน้าในระหว่างการจัดองค์ประกอบ สมมติฐานนี้มาจาก- NotificationShaderect ที่อยู่ด้านหน้า- NotificationActivityrect ในมุมมอง 3 มิติ และ- NotificationShadeที่มองเห็นได้ (สีเขียว) อาจเป็นเลเยอร์ที่เลือก
- หากต้องการตรวจสอบสมมติฐานนี้ ให้เลือก - NotificationShadeพื้นผิวที่มองเห็นได้ในเฟรมปัจจุบัน แล้วตรวจสอบคุณสมบัติของพื้นผิว โดยตั้งค่าสถานะเป็น- OPAQUE|ENABLE_BACKPRESSURE (0x102)- NotificationShadeชื่อพื้นผิวคือ- NotificationShade#3447จากนั้นกดลูกศรซ้ายเพื่อ กลับไปที่เฟรมก่อนหน้า (ก่อนที่ภาพจะกะพริบ) แล้วตรวจสอบ พร็อพเพอร์ตี้ของ- NotificationShadeพื้นผิวอีกครั้ง โปรดทราบว่าแทนที่จะเป็น- OPAQUEพื้นผิวมีเพียงแฟล็ก- ENABLE_BACKPRESSURE (0x100)เท่านั้น ซึ่งยืนยันว่า- 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 กล่องโต้ตอบการประทับเวลา 
- ใช้มุมมอง Rects เพื่อระบุสิ่งที่วาดบนหน้าจอ ใช้แถบเลื่อนการหมุนเพื่อเปลี่ยนมุมมองของสี่เหลี่ยมผืนผ้าเพื่อให้ดูได้ดียิ่งขึ้น การทำเครื่องหมายแสดงเฉพาะ 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
 - นอกจากพื้นผิวที่มองเห็นได้ (สี่เหลี่ยมสีเขียว) แล้ว ยังมีสี่เหลี่ยมสีเทาซึ่ง แสดงถึงพื้นผิวพื้นที่แสดงผลชื่อ Unknown display ปรากฏขึ้นด้วย หากต้องการปรับปรุงระดับการมองเห็น ให้คลิก ( - ) ข้าง - ScreenDecorHwcOverlay#64พื้นผิวเพื่อซ่อน สี่เหลี่ยมผืนผ้าที่เกี่ยวข้องและแสดงพื้นผิวที่อยู่ด้านหลัง เราจะนำภาพซ้อนทับออกสำหรับการวิเคราะห์ เนื่องจากผู้ใช้มองไม่เห็นและจะไม่ได้รับการรายงานเป็น ภาพเคลื่อนไหวที่กะพริบ- รูปที่ 8 รายงานของผู้ใช้ 
- Launcher: 
- หลังจากระบุพื้นผิวที่เกี่ยวข้องในมุมมองแบบแยกหน้าจอแล้ว ให้ใช้การติดตามการเปลี่ยนฉากเพื่อดูการดำเนินการต่างๆ ของผู้ใช้และค้นหา การกะพริบ คลิกแท็บการเปลี่ยนฉากใน Winscope เพื่อแสดงภาพ รายการการเปลี่ยนฉากที่เล่น - รูปที่ 9 ทรานซิชัน - ระบบจะไฮไลต์การเปลี่ยนฉากที่เล่นในเฟรมนี้เป็นสีน้ำเงิน ในกรณีนี้ แฟล็กการเปลี่ยนภาพจะมี - TRANSIT_FLAG_IS_RECENTSซึ่ง บ่งบอกว่าผู้ใช้กำลังเข้าสู่หน้าจอ "ล่าสุด"
- คลิกลิงก์ในคอลัมน์เวลาในการส่ง (ในกรณีนี้คือ - 2024-04-18, 15:50:57.205) เพื่อไปยังจุดนั้นในเวลาและยืนยัน Rects ในแท็บ 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เลเยอร์ของทั้ง 2 แอป รายชื่อติดต่อ และแป้นโทรศัพท์จะอยู่ด้านเดียวกันของ จอแสดงผล- รูปที่ 13 หน้าจอแนะนำ 
- ชี้แจงว่าแอปใดอยู่ด้านที่ไม่ถูกต้อง เพิ่มที่คั่นหน้าไปยังตำแหน่งปัจจุบันโดยคลิกไอคอนธงข้างช่องป้อนข้อมูล ns เพื่อช่วยให้กลับไปที่เฟรมนี้ได้ในภายหลัง - รูปที่ 14 เพิ่มบุ๊กมาร์ก 
- ไปยังเฟรมที่ส่วนท้ายของการเปลี่ยนโดยคลิกไทม์ไลน์ โดยตรง เช่น ไปที่ - 15:51:13.859ตอนนี้แอปทั้ง 2 จะอยู่ในตำแหน่งสุดท้าย โดยแอปโทรศัพท์จะอยู่ทางซ้ายและแอปรายชื่อติดต่อจะอยู่ทางขวา- รูปที่ 15 แยกหน้าจอขั้นสุดท้าย 
- คลิกธงของบุ๊กมาร์กในไทม์ไลน์เพื่อกลับไปยังเฟรมที่มีการกะพริบ - รูปที่ 16 บุ๊กมาร์กไทม์ไลน์ - แอปทั้ง 2 รายการอยู่ทางด้านขวา ซึ่งบ่งบอกว่าแป้นโทรศัพท์อยู่ในตำแหน่งที่ไม่ถูกต้อง 
- คลิกหน้าจอสแปลชของแป้นโทรเพื่อดูพร็อพเพอร์ตี้ ดูคุณสมบัติการเปลี่ยนรูปในมุมมองคุณสมบัติที่ดูแลจัดการโดยเฉพาะ - รูปที่ 17 พร็อพเพอร์ตี้การเปลี่ยนรูปแบบ - ระบบจะใช้การเปลี่ยนรูปแบบที่คำนวณแล้วกับพื้นผิวนี้ แต่ไม่ได้ตั้งค่าไว้ที่ระดับนี้ คอลัมน์ที่คำนวณและคอลัมน์ที่ขอมีค่าต่างกัน ซึ่งบ่งชี้ว่าการเปลี่ยนรูปแบบรับค่ามาจากแพลตฟอร์มระดับบน 
- ยกเลิกการเลือกแบบเรียบในมุมมองลำดับชั้นเพื่อแสดงโครงสร้างลำดับชั้นทั้งหมด และไปที่โหนดหลักของแพลตฟอร์มแอปจนกว่าการแปลงทั้งที่คำนวณแล้วและที่ขอจะเหมือนกัน ซึ่งแสดงการแปลงที่ขอในแพลตฟอร์ม - Surface(name=Task=7934)/@0x1941191_transition-leash#40670
- ยืนยันเวลาที่ตั้งค่าการเปลี่ยนรูปแบบเป็นครั้งแรกและค่าที่ตั้ง ยุบพร็อพเพอร์ตี้ที่คัดสรรแล้วโดยคลิกไอคอนข้างชื่อ - รูปที่ 18 ยุบพร็อพเพอร์ตี้ที่ดูแลจัดการ 
- เลือกแสดงความแตกต่างในมุมมอง Proto Dump เพื่อไฮไลต์พร็อพเพอร์ตี้ที่กำลังเปลี่ยนแปลงในเฟรมนี้ พิมพ์ - transformในช่องค้นหาข้อความเพื่อกรองพร็อพเพอร์ตี้- รูปที่ 19 แสดงความแตกต่าง - ตั้งค่าการเปลี่ยนจาก - IDENTITYเป็น- SCALE|TRANSLATE|ROT_270ในเฟรมนี้สำหรับ- transition-leash- ข้อมูลนี้แสดงว่าการกะพริบเกิดขึ้นเมื่อมีการใช้การเปลี่ยนรูปแบบกับสายจูงภาพเคลื่อนไหวของแอปหน้าจอแยกของโปรแกรมโทรศัพท์ - รูปที่ 20 การระบุการกะพริบ 
- ระบุในโค้ดว่าเหตุใดจึงตั้งค่าการเปลี่ยนนี้เป็นสายจูงการเปลี่ยนภาพหน้าจอแยก