หน้านี้อธิบายวิธีการทั่วไปในการวัดเวลาแฝงของอินพุตและเอาต์พุต
วัดเวลาแฝงของเอาต์พุต
มีเทคนิคหลายประการในการวัดเวลาแฝงของเอาต์พุต โดยมีระดับความแม่นยำและความง่ายในการทำงานที่แตกต่างกัน ตามที่อธิบายไว้ด้านล่าง โปรดดู วงจรการทดสอบ เพื่อดูตัวอย่างสภาพแวดล้อมการทดสอบ
การทดสอบ LED และออสซิลโลสโคป
การทดสอบนี้วัดเวลาแฝงโดยสัมพันธ์กับไฟ LED แสดงสถานะของอุปกรณ์ หากอุปกรณ์การผลิตของคุณไม่มี LED คุณสามารถติดตั้ง LED บนอุปกรณ์ฟอร์มแฟคเตอร์ต้นแบบได้ เพื่อความแม่นยำที่ดียิ่งขึ้นบนอุปกรณ์ต้นแบบที่มีวงจรเปิด ให้เชื่อมต่อโพรบออสซิลโลสโคปหนึ่งตัวกับ LED โดยตรงเพื่อหลีกเลี่ยงเวลาแฝงของเซ็นเซอร์แสง
หากคุณไม่สามารถติดตั้ง LED บนอุปกรณ์การผลิตหรืออุปกรณ์ต้นแบบของคุณได้ ให้ลองวิธีแก้ปัญหาชั่วคราวต่อไปนี้:
- ใช้พินอินพุต/เอาท์พุตวัตถุประสงค์ทั่วไป (GPIO) เพื่อจุดประสงค์เดียวกัน
- ใช้ JTAG หรือพอร์ตการดีบักอื่น
- ใช้แสงพื้นหลังของหน้าจอ สิ่งนี้อาจมีความเสี่ยงเนื่องจากแบ็คไลท์อาจมีเวลาแฝงที่ไม่สำคัญ และอาจส่งผลต่อการอ่านค่าเวลาแฝงที่ไม่ถูกต้อง
หากต้องการดำเนินการทดสอบนี้:
- เรียกใช้แอพที่จะส่งสัญญาณไฟ LED เป็นระยะพร้อมกับส่งสัญญาณเสียงออก
หมายเหตุ: เพื่อให้ได้ผลลัพธ์ที่เป็นประโยชน์ จำเป็นอย่างยิ่งที่จะต้องใช้ API ที่ถูกต้องในแอปทดสอบ เพื่อให้คุณใช้เส้นทางเอาต์พุตเสียงที่รวดเร็ว ดู การออกแบบเพื่อลดเวลาแฝง สำหรับพื้นหลัง
- วางเซ็นเซอร์วัดแสงไว้ข้าง LED
- เชื่อมต่อโพรบของออสซิลโลสโคปแบบสองแชนเนลเข้ากับแจ็คหูฟังแบบมีสาย (เอาต์พุตไลน์) และเซ็นเซอร์วัดแสง
- ใช้ออสซิลโลสโคปเพื่อวัดความแตกต่างของเวลาระหว่างการสังเกตสัญญาณเอาต์พุตไลน์กับสัญญาณเซ็นเซอร์วัดแสง
ความแตกต่างของเวลาคือเวลาแฝงของเอาต์พุตเสียงโดยประมาณ โดยถือว่าเวลาแฝงของ LED และเวลาแฝงของเซ็นเซอร์แสงมีค่าเป็นศูนย์ทั้งคู่ โดยทั่วไปแล้ว LED และเซ็นเซอร์วัดแสงแต่ละตัวจะมีเวลาแฝงที่ค่อนข้างต่ำในลำดับหนึ่งมิลลิวินาทีหรือน้อยกว่า ซึ่งต่ำพอที่จะเพิกเฉยได้
วัดความล่าช้าในการเดินทางไปกลับ
เวลาแฝงแบบไปกลับ คือผลรวมของเวลาแฝงเอาต์พุตและเวลาแฝงอินพุต
การทดสอบเสน
หนึ่งในการทดสอบเวลาแฝงที่ง่ายที่สุดคือการทดสอบการตอบสนองด้วยเสียง (เอฟเฟกต์ลาร์เซน) นี่เป็นการวัดคร่าวๆ ของเอาท์พุตและเวลาแฝงของอินพุตรวมกันโดยการกำหนดเวลาของลูปการตอบสนองแบบอิมพัลส์ การทดสอบนี้ไม่มีประโยชน์มากนักสำหรับการวิเคราะห์โดยละเอียดด้วยตัวเองเนื่องจากลักษณะของการทดสอบ แต่จะมีประโยชน์สำหรับการสอบเทียบการทดสอบอื่นๆ และสำหรับการสร้างขอบเขตบน
วิธีนี้ไม่แจกแจงเวลาของส่วนประกอบ ซึ่งเป็นสิ่งสำคัญเมื่อเวลาแฝงของเอาต์พุตและเวลาแฝงของอินพุตเป็นอิสระจากกัน ดังนั้นจึงไม่แนะนำให้ใช้วิธีนี้ในการวัดค่าเวลาแฝงของเอาต์พุตที่แม่นยำหรือค่าเวลาแฝงของอินพุตแยกกัน แต่อาจมีประโยชน์สำหรับการสร้างการประมาณค่าคร่าวๆ
เวลาแฝงของเอาต์พุตไปยังลำโพงในอุปกรณ์อาจมีขนาดใหญ่กว่าเวลาแฝงของเอาต์พุตไปยังขั้วต่อชุดหูฟังอย่างมาก นี่เป็นเพราะการแก้ไขและการป้องกันลำโพง
หากต้องการดำเนินการทดสอบนี้:
- เรียกใช้แอพที่บันทึกเสียงจากไมโครโฟนและเล่นข้อมูลที่บันทึกไว้กลับไปยังลำโพงทันที
- สร้างเสียงจากภายนอก เช่น การแตะดินสอด้วยไมโครโฟน เสียงนี้สร้างวงจรป้อนกลับ อีกทางหนึ่งคือสามารถฉีดแรงกระตุ้นเข้าไปในลูปโดยใช้ซอฟต์แวร์
- วัดเวลาระหว่างพัลส์ป้อนกลับเพื่อรับผลรวมของเวลาแฝงเอาต์พุต เวลาแฝงอินพุต และโอเวอร์เฮดของแอปพลิเคชัน
ต่อไปนี้เป็นแหล่งข้อมูลบางส่วนในการรับแอปสำหรับการทดสอบ Larsen:
- แอป Dr. Rick O'Rang Loopback เป็นแอป Android สำหรับการทดสอบเสียงตอบรับ คุณสามารถ ดาวน์โหลดแอปได้จาก Google Play หรือ รับซอร์สโค้ดจาก GitHub
- นอกจากนี้เรายังเผยแพร่ตัวอย่างการใช้งานที่ slesTestFeedback.cpp นี่คือแอปบรรทัดคำสั่งและสร้างขึ้นโดยใช้สภาพแวดล้อมการสร้างแพลตฟอร์ม อย่างไรก็ตาม การใช้โค้ดกับสภาพแวดล้อมอื่นๆ ควรตรงไปตรงมา คุณจะต้องมีรหัส FIFO ที่ไม่ปิดกั้น ซึ่งอยู่ในไลบรารี
audio_utils
ดองเกิลลูปแบ็คเสียง
ด็องเกิลย้อนกลับเสียง Dr. Rick O'Rang มีประโยชน์สำหรับการวัดเวลาแฝงแบบไปกลับผ่านขั้วต่อชุดหูฟัง ภาพด้านล่างแสดงผลลัพธ์ของการฉีดแรงกระตุ้นเข้าไปในลูปหนึ่งครั้ง จากนั้นปล่อยให้ฟีดแบ็กแกว่งไปมา ระยะเวลาของการแกว่งคือเวลาแฝงแบบไปกลับ ไม่ได้ระบุอุปกรณ์เฉพาะ การเผยแพร่ซอฟต์แวร์ และเงื่อนไขการทดสอบที่นี่ ผลลัพธ์ที่แสดงไม่ควรถูกคาดการณ์
![การวัดแบบไปกลับ](https://source.android.google.cn/static/docs/core/audio/images/round_trip.png?authuser=6&hl=th)
รูปที่ 1 การวัดแบบไปกลับ
คุณอาจต้องถอดสาย USB ออกเพื่อลดเสียงรบกวน และปรับระดับเสียงเพื่อให้ได้เสียงที่เสถียร
วัดเวลาแฝงของอินพุต
เวลาแฝงของอินพุตวัดได้ยากกว่าเวลาแฝงของเอาต์พุต การทดสอบต่อไปนี้อาจช่วยได้
วิธีหนึ่งคือ ขั้นแรกให้ระบุเวลาแฝงของเอาต์พุตโดยใช้วิธี LED และออสซิลโลสโคป จากนั้นใช้การทดสอบการตอบสนองด้วยเสียง (Larsen) เพื่อกำหนดผลรวมของเวลาแฝงของเอาต์พุตและเวลาแฝงของอินพุต ความแตกต่างระหว่างการวัดทั้งสองนี้คือเวลาแฝงของอินพุต
อีกเทคนิคหนึ่งคือการใช้พิน GPIO บนอุปกรณ์ต้นแบบ จากภายนอก ให้พัลส์อินพุต GPIO ในเวลาเดียวกันกับที่คุณนำเสนอสัญญาณเสียงไปยังอุปกรณ์ เรียกใช้แอปที่เปรียบเทียบความแตกต่างของเวลาที่มาถึงของสัญญาณ GPIO และข้อมูลเสียง
ลดความล่าช้า
เพื่อให้มีเวลาแฝงของเสียงต่ำ ให้ให้ความสนใจเป็นพิเศษทั่วทั้งระบบในการกำหนดเวลา การจัดการการขัดจังหวะ การจัดการพลังงาน และการออกแบบไดรเวอร์อุปกรณ์ เป้าหมายของคุณคือการป้องกันไม่ให้ส่วนใดส่วนหนึ่งของแพลตฟอร์มบล็อกเธรดเสียง SCHED_FIFO
เป็นเวลานานกว่าสองสามมิลลิวินาที ด้วยการนำแนวทางที่เป็นระบบดังกล่าวมาใช้ คุณสามารถลดเวลาแฝงของเสียงและได้รับประโยชน์ข้างเคียงจากประสิทธิภาพโดยรวมที่คาดการณ์ได้มากขึ้น
เมื่อเสียงขาดหายไป มักจะตรวจพบได้ภายใต้เงื่อนไขบางประการหรือในช่วงการเปลี่ยนภาพเท่านั้น ลองเน้นย้ำระบบด้วยการเปิดตัวแอพใหม่และเลื่อนดูจอแสดงผลต่างๆ อย่างรวดเร็ว แต่โปรดทราบว่าเงื่อนไขการทดสอบบางอย่างนั้นเครียดมากจนเกินเป้าหมายการออกแบบ ตัวอย่างเช่น การรับรายงานจุดบกพร่องจะทำให้ระบบมีภาระงานมหาศาลจนอาจยอมรับได้หากมีการดำเนินการที่ต่ำกว่าปกติในกรณีนั้น
เมื่อทำการทดสอบช่วงล่าง:
- กำหนดค่า DSP ใดๆ หลังโปรเซสเซอร์แอปเพื่อเพิ่มเวลาแฝงให้น้อยที่สุด
- เรียกใช้การทดสอบภายใต้เงื่อนไขต่างๆ เช่น การเปิดหรือปิดหน้าจอ, เสียบหรือถอดปลั๊ก USB, เปิดหรือปิด WiFi, เปิดหรือปิดบลูทูธ และเปิดหรือปิดวิทยุโทรศัพท์และข้อมูล
- เลือกเพลงที่ค่อนข้างเงียบที่คุณคุ้นเคยเป็นอย่างดีและเป็นเพลงที่ฟังง่าย
- ใช้หูฟังแบบมีสายเพื่อเพิ่มความไว
- พักให้ตัวเองจะได้ไม่รู้สึก "เมื่อยล้าหู"
เมื่อคุณพบสาเหตุที่แท้จริงของการวิ่งต่ำกว่า ให้ลดจำนวนบัฟเฟอร์และขนาดเพื่อใช้ประโยชน์จากสิ่งนี้ แนวทางที่กระตือรือร้นในการลดจำนวนและขนาดบัฟเฟอร์ ก่อนที่ จะวิเคราะห์การวิ่งต่ำกว่าและแก้ไขสาเหตุของการวิ่งเกินทำให้เกิดความหงุดหงิดเท่านั้น
เครื่องมือ
systrace
เป็นเครื่องมืออเนกประสงค์ที่ยอดเยี่ยมสำหรับการวินิจฉัยข้อบกพร่องด้านประสิทธิภาพระดับระบบ
ผลลัพธ์ของ dumpsys media.audio_flinger
ยังมีส่วนที่มีประโยชน์ที่เรียกว่า "สถิติการเคลื่อนไหวอย่างง่าย" ข้อมูลนี้มีสรุปความแปรปรวนของเวลาที่ผ่านไปสำหรับการผสมเสียงและรอบ I/O แต่ละรายการ ตามหลักการแล้ว การวัดเวลาทั้งหมดควรจะเท่ากับค่าเฉลี่ยหรือรอบเวลาที่กำหนด หากคุณเห็นค่าต่ำสุดหรือสูงสุดที่ต่ำมาก นี่เป็นข้อบ่งชี้ถึงปัญหา มีแนวโน้มว่าเวลาแฝงของกำหนดการจะสูงหรือเวลาปิดการใช้งานขัดจังหวะ ส่วน ท้าย ของเอาต์พุตมีประโยชน์อย่างยิ่ง เนื่องจากเน้นความแปรปรวนที่เกินกว่าค่าเบี่ยงเบนมาตรฐาน +/- 3