Winscope เป็นเครื่องมือบนเว็บที่ช่วยให้ผู้ใช้บันทึก เล่นซ้ำ และวิเคราะห์สถานะของ บริการของระบบหลายอย่างระหว่างและหลังภาพเคลื่อนไหวและการเปลี่ยนฉาก Winscope บันทึกสถานะบริการของระบบที่เกี่ยวข้องทั้งหมดลงในไฟล์การติดตาม การใช้ Winscope UI กับไฟล์การติดตามจะช่วยให้คุณตรวจสอบสถานะของบริการเหล่านี้สำหรับแต่ละเฟรมภาพเคลื่อนไหว ได้ ไม่ว่าจะมีการบันทึกหน้าจอหรือไม่ก็ตาม โดยการเล่นซ้ำ การเลื่อนดู และการแก้ไขข้อบกพร่องของการเปลี่ยนภาพ
การติดตามที่รองรับ
Winscope ช่วยให้คุณรวบรวมและแสดงร่องรอย หรือลำดับสถานะของบริการระบบต่างๆ ได้ คุณกำหนดค่าการติดตามเหล่านี้ให้เหมาะกับ Use Case ที่เฉพาะเจาะจงได้ ตั้งแต่ค่าใช้จ่ายต่ำไปจนถึงการแสดงข้อมูลแบบละเอียดสูง 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
)
ตรวจสอบข้อความการทดสอบไม่สำเร็จ ซึ่งมีข้อมูลที่ครอบคลุมเกี่ยวกับการทดสอบไม่สำเร็จ รวมถึงข้อมูลต่อไปนี้
- การเปรียบเทียบระหว่างผลลัพธ์ที่คาดหวังกับผลลัพธ์ที่มองเห็นได้จริง
- การประทับเวลาเพื่อช่วยระบุเวลาที่เกิดความล้มเหลว
- ชื่อของอาร์ติแฟกต์หรือไฟล์ที่เชื่อมโยงกับความล้มเหลว
- ข้อมูลตามบริบทเพิ่มเติมที่เกี่ยวข้องกับการทำความเข้าใจและการแก้ไขข้อบกพร่อง ของความล้มเหลว
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
ปัญหานี้เกิดขึ้น เนื่องจากมีการวางพื้นผิวทึบแสงอื่นไว้ด้านหน้าในระหว่างการจัดองค์ประกอบ สมมติฐานนี้มาจากNotificationShade
rect ที่อยู่ด้านหน้าNotificationActivity
rect ในมุมมอง 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
นอกจากพื้นผิวที่มองเห็นได้ (สี่เหลี่ยมผืนผ้าสีเขียว) แล้ว ยังมีสี่เหลี่ยมผืนผ้าสีเทาซึ่ง แสดงถึงพื้นผิวพื้นที่แสดงผลที่ชื่อว่าจอแสดงผลที่ไม่รู้จัก หากต้องการปรับปรุงระดับการมองเห็น ให้คลิก (
) ข้าง
ScreenDecorHwcOverlay#64
พื้นผิวเพื่อซ่อน สี่เหลี่ยมผืนผ้าที่เกี่ยวข้องและแสดงพื้นผิวที่อยู่ด้านหลัง เราจะนำภาพซ้อนทับออกสำหรับการวิเคราะห์ เนื่องจากผู้ใช้มองไม่เห็นและจะไม่ได้รับการรายงานเป็น ภาพเคลื่อนไหวที่กะพริบรูปที่ 8 รายงานของผู้ใช้
หลังจากระบุพื้นผิวที่เกี่ยวข้องกับการดูแบบแยกหน้าจอแล้ว ให้ใช้การติดตามการเปลี่ยนเพื่อดูการดำเนินการต่างๆ ของผู้ใช้ทีละขั้นตอนและค้นหาการกะพริบ คลิกแท็บการเปลี่ยนฉากใน 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
ข้อมูลนี้แสดงว่าการกะพริบเกิดขึ้นเมื่อมีการใช้ transform กับสายจูงภาพเคลื่อนไหวของแอปหน้าจอแยกของโปรแกรมโทรศัพท์
รูปที่ 20 การระบุการกะพริบ
ระบุในโค้ดว่าเหตุใดจึงตั้งค่าการเปลี่ยนนี้เป็นสายจูงการเปลี่ยนภาพหน้าจอแยก