หน้านี้จะอธิบายวิธีการทั่วไปในการวัดเวลาในการตอบสนองของอินพุตและเอาต์พุต
วัดเวลาในการตอบสนองของเอาต์พุต
มีเทคนิคหลายวิธีในการวัดเวลาในการตอบสนองของเอาต์พุต โดยมีความแม่นยำและความสามารถในการใช้งานที่ต่างกันไป ดังที่อธิบายไว้ด้านล่าง นอกจากนี้ ให้ดูตัวอย่างสภาพแวดล้อมการทดสอบในวงจรการทดสอบ
การทดสอบ LED และออสซิลโลสโคป
การทดสอบนี้จะวัดเวลาในการตอบสนองที่เกี่ยวข้องกับไฟ LED ของอุปกรณ์ หากอุปกรณ์เวอร์ชันที่ใช้งานจริงไม่มี LED คุณสามารถติดตั้ง LED ในอุปกรณ์รูปแบบต้นแบบได้ หากต้องการให้อุปกรณ์ต้นแบบที่มีวงจรแบบเปิดทำงานได้แม่นยำยิ่งขึ้น ให้เชื่อมต่อหัววัดออสซิลโลสโคป 1 ตัวกับ LED โดยตรงเพื่อข้ามเวลาในการตอบสนองของเซ็นเซอร์แสง
หากติดตั้ง LED ในอุปกรณ์เวอร์ชันที่ใช้งานจริงหรือเวอร์ชันต้นแบบไม่ได้ ให้ลองใช้วิธีแก้ปัญหาต่อไปนี้
- ใช้ขาอินพุต/เอาต์พุตอเนกประสงค์ (GPIO) เพื่อวัตถุประสงค์เดียวกัน
- ใช้ JTAG หรือพอร์ตการแก้ไขข้อบกพร่องอื่น
- ใช้แสงพื้นหลังของหน้าจอ ซึ่งอาจเสี่ยงเนื่องจากแบ็กไลท์อาจมีความล่าช้าที่ไม่ควรมองข้าม และอาจส่งผลให้การอ่านเวลาในการตอบสนองไม่ถูกต้อง
วิธีทำการทดสอบมีดังนี้
- เรียกใช้แอปที่กะพริบ LED เป็นระยะๆ ขณะส่งออกเสียง
หมายเหตุ: คุณต้องใช้ API ที่ถูกต้องในแอปทดสอบเพื่อให้ใช้เส้นทางเอาต์พุตเสียงที่รวดเร็วและได้ผลลัพธ์ที่เป็นประโยชน์ ดูออกแบบเพื่อลดเวลาในการตอบสนองสำหรับเบื้องหลัง
- วางเซ็นเซอร์แสงข้าง LED
- เชื่อมต่อหัววัดของออซิลโลสโคปแบบ 2 แชนแนลกับทั้งช่องเสียบหูฟังแบบมีสาย (เอาต์พุตสาย) และเซ็นเซอร์แสง
- ใช้ออสซิลโลสโคปเพื่อวัดเวลาระหว่างการสังเกตสัญญาณเอาต์พุตของสายกับสัญญาณเซ็นเซอร์แสง
ความแตกต่างของเวลาคือเวลาในการตอบสนองโดยประมาณของเอาต์พุตเสียง โดยสมมติว่าเวลาในการตอบสนองของ LED และเซ็นเซอร์แสงเป็น 0 โดยปกติแล้ว LED และเซ็นเซอร์แสงแต่ละตัวจะมีเวลาในการตอบสนองต่ำอยู่พอสมควร ซึ่งอยู่ที่ประมาณ 1 มิลลิวินาทีหรือน้อยกว่านั้น ซึ่งต่ำมากพอที่จะมองข้ามได้
วัดเวลาในการตอบสนองแบบไปกลับ
เวลาในการตอบสนองในการรับส่งข้อมูลคือผลรวมของเวลาในการตอบสนองของเอาต์พุตและเวลาในการตอบสนองของอินพุต
การทดสอบ Larsen
การทดสอบเวลาในการตอบสนองที่ง่ายที่สุดอย่างหนึ่งคือการทดสอบเสียงสะท้อน (Larsen effect) ซึ่งจะวัดความล่าช้าของเอาต์พุตและอินพุตแบบรวมกันโดยจับเวลาของลูปการตอบสนองต่อแรงกระตุ้น การทดสอบนี้ไม่ค่อยมีประโยชน์สําหรับการวิเคราะห์โดยละเอียดด้วยตัวของมันเองเนื่องจากลักษณะของการทดสอบ แต่อาจมีประโยชน์สําหรับการปรับเทียบการทดสอบอื่นๆ และการสร้างขีดจํากัดบน
วิธีนี้จะไม่แจกแจงเวลาของคอมโพเนนต์ ซึ่งสำคัญเมื่อเวลาในการตอบสนองของเอาต์พุตและเวลาในการตอบสนองของอินพุตไม่เกี่ยวข้องกัน ดังนั้นจึงไม่แนะนําให้ใช้วิธีการนี้ในการวัดค่าเวลาในการตอบสนองของเอาต์พุตหรือเวลาในการตอบสนองของอินพุตที่แม่นยําเพียงอย่างเดียว แต่อาจมีประโยชน์สําหรับการประมาณคร่าวๆ
เวลาในการตอบสนองของเอาต์พุตไปยังลำโพงในอุปกรณ์อาจนานกว่าเวลาในการตอบสนองของเอาต์พุตไปยังขั้วต่อหูฟังอย่างมาก สาเหตุคือระบบกำลังแก้ไขและปกป้องเสียงของลำโพง
วิธีทำการทดสอบมีดังนี้
- เรียกใช้แอปที่บันทึกเสียงจากไมโครโฟนและเล่นข้อมูลที่บันทึกไว้ผ่านลำโพงทันที
- สร้างเสียงจากภายนอก เช่น แตะเปียโนข้างไมโครโฟน เสียงรบกวนนี้ทำให้เกิดลูปความคิดเห็น หรือจะส่งแรงกระตุ้นไปยังลูปโดยใช้ซอฟต์แวร์ก็ได้
- วัดเวลาระหว่างพัลส์ของผลป้อนกลับเพื่อหาผลรวมของเวลาในการตอบสนองของเอาต์พุต เวลาในการตอบสนองของอินพุต และค่าใช้จ่ายเพิ่มเติมของแอปพลิเคชัน
แหล่งข้อมูลบางส่วนสำหรับการรับแอปสําหรับการทดสอบ Larsen มีดังนี้
- แอป Loopback ของ Dr. Rick O'Rang เป็นแอป Android สำหรับการทดสอบเสียงตอบกลับ คุณสามารถ ดาวน์โหลดแอปจาก Google Play หรือ รับซอร์สโค้ดจาก GitHub
-
นอกจากนี้ เรายังเผยแพร่ตัวอย่างการใช้งานที่ slesTestFeedback.cpp
แอปนี้เป็นแอปบรรทัดคำสั่งและสร้างขึ้นโดยใช้สภาพแวดล้อมการสร้างแพลตฟอร์ม แต่การนำโค้ดไปใช้กับสภาพแวดล้อมอื่นๆ ก็ควรทำได้ง่าย
คุณจะต้องมีโค้ด FIFO แบบไม่บล็อกด้วย ซึ่งอยู่ในไลบรารี
audio_utils
ดองเกิลเสียงแบบลูปแบ็ก
ด็อกเตอร์ Rick O'Rang audio loopback dongle มีประโยชน์ในการวัดเวลาในการตอบสนองแบบไปกลับผ่านขั้วต่อชุดหูฟัง รูปภาพด้านล่างแสดงผลลัพธ์ของการฉีดแรงกระตุ้นเข้าไปในลูป 1 ครั้ง แล้วปล่อยให้ลูปป้อนกลับสั่น ระยะเวลาของการสั่นคือเวลาในการตอบสนองแบบไปกลับ ไม่ได้ระบุอุปกรณ์ เวอร์ชันซอฟต์แวร์ และเงื่อนไขการทดสอบที่เฉพาะเจาะจงที่นี่ ผลลัพธ์ที่แสดงไม่ควรนำมาใช้คาดการณ์

รูปที่ 1 การวัดผลแบบไปกลับ
คุณอาจต้องถอดสาย USB เพื่อลดเสียงรบกวน และปรับระดับเสียงเพื่อให้การสั่นมีความเสถียร
วัดเวลาในการตอบสนองต่ออินพุต
เวลาในการตอบสนองต่ออินพุตวัดได้ยากกว่าเวลาในการตอบสนองของเอาต์พุต การทดสอบต่อไปนี้อาจช่วยได้
วิธีหนึ่งคือกำหนดเวลาในการตอบสนองของเอาต์พุตโดยใช้วิธีการของ LED และออซิลโลสโคป จากนั้นใช้การทดสอบเสียงสะท้อน (Larsen) เพื่อหาผลรวมของเวลาในการตอบสนองของเอาต์พุตและเวลาในการตอบสนองของอินพุต ความแตกต่างระหว่างการวัดค่า 2 อย่างนี้คือเวลาในการตอบสนองของอินพุต
อีกเทคนิคหนึ่งคือการใช้ขา GPIO ในอุปกรณ์ต้นแบบ ภายนอก ให้ส่งพัลส์อินพุต GPIO ในเวลาเดียวกับที่คุณส่งสัญญาณเสียงไปยังอุปกรณ์ เรียกใช้แอปที่เปรียบเทียบความแตกต่างของเวลามาถึงของสัญญาณ GPIO และข้อมูลเสียง
ลดเวลาในการตอบสนอง
หากต้องการให้เวลาในการตอบสนองของเสียงต่ำ ให้ใส่ใจเป็นพิเศษกับการกำหนดเวลา การจัดการการขัดจังหวะ การจัดการพลังงาน และการออกแบบโปรแกรมควบคุมอุปกรณ์ในระบบ เป้าหมายของคุณคือป้องกันไม่ให้ส่วนใดส่วนหนึ่งของแพลตฟอร์มบล็อกเธรดเสียง SCHED_FIFO
นานกว่า 2-3 มิลลิวินาที การใช้แนวทางที่เป็นระบบเช่นนี้จะช่วยให้คุณลดเวลาในการตอบสนองของเสียงและได้รับประโยชน์เพิ่มเติมจากประสิทธิภาพที่คาดการณ์ได้มากขึ้นโดยรวม
เสียงที่เล่นไม่จบมักตรวจพบได้ภายใต้เงื่อนไขบางอย่างหรือเฉพาะในช่วงเปลี่ยนฉากเท่านั้น ลองทดสอบระบบด้วยการเปิดแอปใหม่และเลื่อนดูหน้าจอต่างๆ อย่างรวดเร็ว แต่โปรดทราบว่าเงื่อนไขการทดสอบบางอย่างมีภาระงานมากเกินกว่าเป้าหมายการออกแบบ เช่น การส่งรายงานข้อบกพร่องจะทำให้เกิดภาระงานอย่างมากต่อระบบ ซึ่งอาจยอมรับการใช้เวลาน้อยกว่าที่คาดไว้ได้ในกรณีดังกล่าว
เมื่อทดสอบเวลาต่ำกว่าที่คาดไว้
- กำหนดค่า DSP หลังโปรแกรมประมวลผลแอปเพื่อให้เกิดความล่าช้าน้อยที่สุด
- ทำการทดสอบภายใต้เงื่อนไขต่างๆ เช่น เปิดหรือปิดหน้าจอ เสียบหรือถอด USB ออก เปิดหรือปิด Wi-Fi เปิดหรือปิดบลูทูธ เปิดหรือปิดโทรศัพท์และวิทยุข้อมูล
- เลือกเพลงที่ค่อนข้างเบาซึ่งคุณคุ้นเคยมากและฟังได้ง่ายว่าเสียงขาด
- ใช้หูฟังแบบใช้สายเพื่อให้มีความไวมากขึ้น
- หยุดพักเป็นระยะๆ เพื่อไม่ให้ "หูล้า"
เมื่อพบสาเหตุของเวลาในการเล่นที่สั้นลง ให้ลดจำนวนและขนาดบัฟเฟอร์เพื่อใช้ประโยชน์จากเรื่องนี้ แนวทางที่มุ่งเน้นการลดจำนวนและขนาดบัฟเฟอร์ก่อนวิเคราะห์เวลาทำงานไม่เพียงพอและแก้ไขสาเหตุของเวลาทำงานไม่เพียงพอจะทําให้เกิดความหงุดหงิด
เครื่องมือ
systrace
เป็นเครื่องมืออเนกประสงค์ที่ยอดเยี่ยมสำหรับวิเคราะห์ข้อบกพร่องด้านประสิทธิภาพระดับระบบ
เอาต์พุตของ dumpsys media.audio_flinger
ยังมีส่วนที่เรียกว่า "สถิติการเคลื่อนที่แบบง่าย" ซึ่งมีประโยชน์ด้วย ข้อมูลนี้แสดงสรุปเกี่ยวกับความแปรปรวนของเวลาที่ผ่านไปสำหรับมิกซ์เสียงแต่ละรายการและรอบ I/O
โดยหลักการแล้ว การวัดเวลาทั้งหมดควรเท่ากับค่าเฉลี่ยหรือเวลารอบการทำงานตามชื่อ หากเห็นค่าต่ำสุดต่ำมากหรือค่าสูงสุดสูงมาก แสดงว่ามีปัญหา ซึ่งอาจเป็นเวลาในการตอบสนองของการกำหนดเวลาสูงหรือเวลาปิดใช้การขัดจังหวะ ส่วนหางของเอาต์พุตจะมีประโยชน์อย่างยิ่งเนื่องจากจะไฮไลต์ความแปรปรวนที่อยู่นอกเหนือความเบี่ยงเบนมาตรฐาน +/- 3