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

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

ตรวจสอบการทดสอบที่ล้มเหลว

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

  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

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

    รูปที่ 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. กดแป้นลูกศรขวาเพื่อไปยังเฟรมถัดไปที่เกิดการกะพริบ ในมุมมองสี่เหลี่ยมผืนผ้า NotificationShade จะแสดงบนหน้าจอแทนแอป แพลตฟอร์มต่อไปนี้จะแสดงในเฟรมนี้

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

      กิจกรรมกะพริบ

      รูปที่ 4 กิจกรรมของ Flicker

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

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

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

  5. คลิกลิงก์ในคอลัมน์เวลาออกเดินทาง (ในกรณีนี้คือ 2024-04-18, 15:50:57.205) เพื่อไปยังจุดนั้นและยืนยันสี่เหลี่ยมผืนผ้าในแท็บ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เลเยอร์สำหรับทั้งแอป รายชื่อติดต่อ และเครื่องมือโทรอยู่ด้านเดียวกันของจอแสดงผล

    หน้าจอแนะนำ

    รูปที่ 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. เลือกแสดงความแตกต่างในมุมมองการดัมพ์โปรโตคอลเพื่อไฮไลต์พร็อพเพอร์ตี้ที่มีการเปลี่ยนแปลงในเฟรมนี้ พิมพ์ transform ลงในช่องค้นหาข้อความเพื่อกรองที่พัก

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

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

    มีการกําหนดการเปลี่ยนรูปแบบจาก IDENTITY เป็น SCALE|TRANSLATE|ROT_270 ในเฟรมนี้สําหรับ transition-leash

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

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

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

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