ติดตามการเปลี่ยนเฟรมหน้าต่างโดยใช้ Winscope

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 เพื่อแก้ไขข้อบกพร่องของการทดสอบการกะพริบที่ล้มเหลว

ตรวจสอบการทดสอบที่ไม่สำเร็จ

ทำตามขั้นตอนต่อไปนี้เพื่อระบุประเภทปัญหาและตรวจสอบข้อความแสดงข้อผิดพลาดในการทดสอบ

  1. พิจารณาประเภทปัญหาโดยตรวจสอบชื่อการทดสอบและชื่อชั้นเรียน

    ชื่อการทดสอบและชั้นเรียน

    FlickerTestsNotification com.android.server.wm.flicker.notification.OpenAppFromLockscreenNotificationColdTest#appLayerBecomesVisible[ROTATION_0_GESTURAL_NAV]
    

    ประเภทปัญหา:

    • CUJ หมายถึงการเปิดแอปจากการแจ้งเตือนบนหน้าจอล็อก (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 ที่เลือกโดยอัตโนมัติ

    หน้า Landing Page ของ Winscope ที่มีมุมมอง SurfaceFlinger

    รูปที่ 1 หน้า Landing Page ของ Winscope ที่มีมุมมอง SurfaceFlinger

  2. ไปยังการประทับเวลาที่เกิดปัญหาโดยการคัดลอกและวาง การประทับเวลาจากข้อความข้อยกเว้นลงในช่องการประทับเวลา คุณสามารถ คัดลอกการประทับเวลาในรูปแบบที่มนุษย์อ่านได้ (2024-05-10T11:04:14.227572545) แล้ววางลงในช่องแรก หรือ คัดลอกการประทับเวลาในหน่วยนาโนวินาที (1715339054227572545ns) แล้ววาง ลงในช่องที่สอง

    กล่องโต้ตอบการประทับเวลา

    รูปที่ 2 กล่องโต้ตอบการประทับเวลา

  3. กดปุ่มลูกศรซ้ายเพื่อไปยังเฟรมก่อนหน้า ในสถานะนี้ แอป 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 เมื่อเปิดแอป

  4. กดปุ่มลูกศรขวาเพื่อกลับไปยังเฟรมถัดไปที่เกิด การกะพริบ ในมุมมอง Rects NotificationShade จะแสดงบนหน้าจอแทนแอป โดยพื้นผิวต่อไปนี้จะแสดงในเฟรมนี้

    • การซ้อนทับตกแต่งหน้าจอ (ด้านบนและด้านล่าง)
    • แถบนำทาง
    • ตำแหน่งของเคอร์เซอร์ (จากการบันทึกหน้าจอ)

      กิจกรรม Flicker

      รูปที่ 4 กิจกรรมการกะพริบ

  5. เลือกกิจกรรมของแอปในมุมมองลำดับชั้น หากไม่พบ ให้ยกเลิกการเลือกแสดงเฉพาะ 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 ที่มองเห็นได้ (สีเขียว) อาจเป็นเลเยอร์ที่เลือก

  6. หากต้องการตรวจสอบสมมติฐานนี้ ให้เลือกNotificationShade พื้นผิวที่มองเห็นได้ในเฟรมปัจจุบัน แล้วตรวจสอบคุณสมบัติของพื้นผิว โดยตั้งค่าสถานะเป็น OPAQUE|ENABLE_BACKPRESSURE (0x102) NotificationShade ชื่อพื้นผิวคือ NotificationShade#3447 จากนั้นกดลูกศรซ้ายเพื่อ กลับไปที่เฟรมก่อนหน้า (ก่อนที่ภาพจะกะพริบ) แล้วตรวจสอบ พร็อพเพอร์ตี้ของNotificationShadeพื้นผิวอีกครั้ง โปรดทราบว่าแทนที่จะเป็น OPAQUE พื้นผิวมีเพียงแฟล็ก ENABLE_BACKPRESSURE (0x100) ซึ่งจะยืนยันว่า NotificationShade จะทึบแสงก่อนที่แอปจะเปิดตัว เสร็จสมบูรณ์ เนื่องจาก NotificationShade อยู่หน้า NotificationActivity ระบบจึงไม่แสดงแอป NotificationShade เป็นสีดำ ดังนั้นหน้าจอจึงเป็นสีดำชั่วขณะ ซึ่งทำให้เกิดการกะพริบ

  7. ระบุในโค้ดว่าเหตุใด NotificationShade จึงทึบแสงเร็วเกินไป

ข้อบกพร่องที่ผู้ใช้รายงาน

การแก้ไขข้อบกพร่องที่ผู้ใช้รายงานอาจเป็นเรื่องท้าทายเนื่องจากมักไม่มีข้อมูลโดยละเอียด ข้อบกพร่องที่ผู้ใช้รายงานมักจะมีเพียงคำอธิบายสั้นๆ เกี่ยวกับปัญหาเท่านั้น ซึ่งแตกต่างจากข้อบกพร่องในการทดสอบการกะพริบซึ่งระบุการประทับเวลาที่เฉพาะเจาะจง รายละเอียดขององค์ประกอบ และการบันทึกหน้าจอ

ในกรณีศึกษาของเรา ข้อมูลที่ระบุมีเพียงชื่อ หน้าจอกระพริบ เมื่อเปิดแอปจากหน้าจอแยกอีกครั้ง และการประทับเวลาโดยประมาณของ 18 เม.ย. 2024 15:51 น. GMT-04:00

ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขข้อบกพร่องที่ผู้ใช้รายงาน

  1. โหลดไฟล์การติดตามใน Winscope Winscope จะเปิดขึ้นพร้อมกับ SurfaceFlinger ที่เลือกโดยอัตโนมัติ

    หน้า Landing Page ของ Winscope ที่มีมุมมอง SurfaceFlinger

    รูปที่ 6 หน้า Landing Page ของ Winscope ที่มีมุมมอง SurfaceFlinger

  2. ไปที่การประทับเวลาโดยประมาณที่ผู้ใช้รายงาน ในกรณีนี้คือ 3:50 PM GMT-04:00 โดยป้อน 15:50:00 ในช่องการประทับเวลาที่มนุษย์อ่านได้

    กล่องโต้ตอบการประทับเวลา

    รูปที่ 7 กล่องโต้ตอบการประทับเวลา

  3. ใช้มุมมอง 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 รายงานของผู้ใช้

  4. หลังจากระบุพื้นผิวที่เกี่ยวข้องกับการดูแบบแยกหน้าจอแล้ว ให้ใช้การติดตามการเปลี่ยนเพื่อดูการดำเนินการต่างๆ ของผู้ใช้ทีละขั้นตอนและค้นหาการกะพริบ คลิกแท็บการเปลี่ยนฉากใน Winscope เพื่อ แสดงรายการการเปลี่ยนฉากที่เล่น

    การเปลี่ยน

    รูปที่ 9 ทรานซิชัน

    ระบบจะไฮไลต์การเปลี่ยนฉากที่เล่นในเฟรมนี้เป็นสีน้ำเงิน ในกรณีนี้ แฟล็กการเปลี่ยนภาพจะมี TRANSIT_FLAG_IS_RECENTS ซึ่ง บ่งบอกว่าผู้ใช้กำลังเข้าสู่หน้าจอ "ล่าสุด"

  5. คลิกลิงก์ในคอลัมน์เวลาในการส่ง (ในกรณีนี้คือ 2024-04-18, 15:50:57.205) เพื่อไปยังจุดนั้นในเวลาและยืนยัน Rects ในแท็บ Surface Flinger ยืนยันความถูกต้องของสถานะอุปกรณ์ ในระหว่างการเปลี่ยนโดยการเปลี่ยนทีละขั้นตอนด้วยปุ่มลูกศรขวา และสังเกตสี่เหลี่ยม

    Launcher ปรากฏที่ 15:50:57.278 แต่ภาพเคลื่อนไหวไม่ได้เริ่มในตอนนั้น วอลเปเปอร์จะมองเห็นได้อยู่แล้วเนื่องจากไม่มีการวาดอะไรระหว่างแอปที่แบ่งหน้าจอ (เส้นแบ่ง) ก่อนหน้านี้ 1 เฟรม (15:50:57.212) วอลเปเปอร์ ไม่ปรากฏและเส้นแบ่งแสดงขึ้น ซึ่งเป็นลักษณะของหน้าจอแยก เมื่อไม่มีการเคลื่อนไหว

    หน้าจอก่อนกะพริบ

    รูปที่ 10 หน้าจอก่อนเหตุการณ์กะพริบ

  6. หากต้องการดูทรานซิชันถัดไป ให้คลิกลำดับเวลาโดยตรง สถานะ SurfaceFlinger จะแสดงด้วยแถวของบล็อกสีฟ้าอ่อน การเปลี่ยนฉากจะแสดงด้วยแถวของบล็อกสีชมพู

    สิ้นสุดการเปลี่ยนครั้งแรก

    รูปที่ 11 สิ้นสุดการเปลี่ยนครั้งแรก

    คลิกแถว SurfaceFlinger ที่ตำแหน่งเริ่มต้นของการเปลี่ยนฉากถัดไป ในรูปที่ 11 เส้นสีน้ำเงินบางๆ จะแสดงตำแหน่งแนวตั้งของเคอร์เซอร์ พื้นหลังสีฟ้าอ่อนของแถว SurfaceFlinger จะแสดงตำแหน่งแนวนอน ดูการเปลี่ยน โดยใช้แป้นลูกศรขวาเพื่อดูว่าเกิดการกะพริบหรือไม่ ยืนยัน ว่าอุปกรณ์ดูถูกต้องสำหรับการเปลี่ยนผ่านนี้

  7. ข้ามการเปลี่ยนฉากถัดไปเนื่องจากระยะเวลาสั้นมาก จึงไม่น่าจะ มีการกะพริบ แต่ให้คลิกไทม์ไลน์ในแถว SurfaceFlinger ที่ตำแหน่งเริ่มต้นของการเปลี่ยนที่ยาวขึ้นถัดไป ตามที่เคอร์เซอร์ระบุไว้ ในรูปภาพต่อไปนี้

    สิ้นสุดการเปลี่ยนครั้งที่ 2

    รูปที่ 12 สิ้นสุดการเปลี่ยนผ่านครั้งที่ 2

    ในระหว่างการเปลี่ยนผ่านนี้ ที่ 15:51:13.239 โปรดสังเกตว่าSplash Screen เลเยอร์ของทั้ง 2 แอป รายชื่อติดต่อ และแป้นโทรศัพท์จะอยู่ด้านเดียวกันของ จอแสดงผล

    หน้าจอเริ่มต้น (Splash Screen)

    รูปที่ 13 หน้าจอแนะนำ

  8. ชี้แจงว่าแอปใดอยู่ด้านที่ไม่ถูกต้อง เพิ่มที่คั่นหน้าไปยังตำแหน่งปัจจุบันโดยคลิกไอคอนธงข้างช่องป้อนข้อมูล ns เพื่อช่วยให้กลับไปที่เฟรมนี้ได้ในภายหลัง

    เพิ่มบุ๊กมาร์ก

    รูปที่ 14 เพิ่มบุ๊กมาร์ก

  9. ไปยังเฟรมที่ส่วนท้ายของการเปลี่ยนโดยคลิกไทม์ไลน์ โดยตรง เช่น ไปที่ 15:51:13.859 ตอนนี้แอปทั้ง 2 แอปอยู่ในตำแหน่งสุดท้ายแล้ว โดยแอปโทรศัพท์อยู่ทางซ้ายและแอปรายชื่อติดต่ออยู่ทางขวา

    การแบ่งหน้าจอสุดท้าย

    รูปที่ 15 แยกหน้าจอขั้นสุดท้าย

  10. คลิกธงของบุ๊กมาร์กในไทม์ไลน์เพื่อกลับไปยังเฟรมที่มีการกะพริบ

    ไทม์ไลน์ของบุ๊กมาร์ก

    รูปที่ 16 บุ๊กมาร์กไทม์ไลน์

    แอปทั้ง 2 รายการอยู่ทางด้านขวา ซึ่งบ่งบอกว่าแป้นโทรศัพท์อยู่ในตำแหน่งที่ไม่ถูกต้อง

  11. คลิกหน้าจอสแปลชของแป้นโทรเพื่อดูพร็อพเพอร์ตี้ ดูคุณสมบัติการเปลี่ยนรูปแบบในมุมมองคุณสมบัติที่ดูแลจัดการโดยเฉพาะ

    พร็อพเพอร์ตี้การเปลี่ยนรูปแบบ

    รูปที่ 17 พร็อพเพอร์ตี้การเปลี่ยนรูปแบบ

    ระบบจะใช้การเปลี่ยนรูปแบบที่คำนวณแล้วกับพื้นผิวนี้ แต่ไม่ได้ตั้งค่าเป็นระดับนี้ คอลัมน์ที่คำนวณและคอลัมน์ที่ขอมีค่าต่างกัน ซึ่งบ่งชี้ว่าการเปลี่ยนรูปแบบรับค่ามาจากแพลตฟอร์มระดับบน

  12. ยกเลิกการเลือกแบบเรียบในมุมมองลำดับชั้นเพื่อแสดงโครงสร้างลำดับชั้นทั้งหมด และไปที่โหนดหลักของแพลตฟอร์มแอปจนกว่าการแปลงทั้งที่คำนวณแล้วและที่ขอจะเหมือนกัน ซึ่งแสดงการแปลงที่ขอในแพลตฟอร์ม Surface(name=Task=7934)/@0x1941191_transition-leash#40670

  13. ยืนยันเวลาที่ตั้งค่าการเปลี่ยนรูปแบบเป็นครั้งแรกและค่าที่ตั้ง ยุบพร็อพเพอร์ตี้ที่คัดสรรแล้วโดยคลิกไอคอนข้างชื่อ

    ยุบที่พักที่คัดสรรแล้ว

    รูปที่ 18 ยุบพร็อพเพอร์ตี้ที่ดูแลจัดการ

  14. เลือกแสดงความแตกต่างในมุมมอง Proto Dump เพื่อไฮไลต์พร็อพเพอร์ตี้ที่กำลังเปลี่ยนแปลงในเฟรมนี้ พิมพ์ transform ในช่องค้นหาข้อความเพื่อกรองพร็อพเพอร์ตี้

    แสดงความแตกต่าง

    รูปที่ 19 แสดงความแตกต่าง

    ตั้งค่าการเปลี่ยนจาก IDENTITY เป็น SCALE|TRANSLATE|ROT_270 ในเฟรมนี้สำหรับ transition-leash

    ข้อมูลนี้แสดงว่าการกะพริบเกิดขึ้นเมื่อมีการใช้ transform กับสายจูงภาพเคลื่อนไหวของแอปหน้าจอแยกของโปรแกรมโทรศัพท์

    การระบุการกะพริบ

    รูปที่ 20 การระบุการกะพริบ

  15. ระบุในโค้ดว่าเหตุใดจึงตั้งค่าการเปลี่ยนนี้เป็นสายจูงการเปลี่ยนภาพหน้าจอแยก