ตอนที่ 7: โดย Bruce Dawson ในซีแอตเทิล รัฐวอชิงตัน (ตุลาคม 2019)
ตอนก่อนหน้า
ในบางครั้ง การคอมไพล์ไฟล์ต้นฉบับ Chromium ไฟล์เดียวด้วยตนเองก็อาจมีประโยชน์ เช่น การทดลองใช้ตัวเลือกการเพิ่มประสิทธิภาพคอมไพเลอร์ เพื่อประมวลผลไฟล์ดังกล่าวเป็นไฟล์เดียวไว้ล่วงหน้าเพื่อทำความเข้าใจรายละเอียดเล็กๆ น้อยๆ ของมาโคร หรือเพื่อลดข้อบกพร่องของคอมไพเลอร์
เคล็ดลับ 2-3 ข้อจะช่วยให้นักพัฒนาซอฟต์แวร์ Chromium ค้นหาและเรียกใช้คำสั่งที่คอมไพล์ไฟล์ต้นฉบับหนึ่งๆ และแก้ไขตามที่จำเป็นได้
เริ่มต้นด้วยการไปที่ไดเรกทอรีเอาต์พุตและใช้ autoninja (หรือ ninja) เพื่อคอมไพล์ไฟล์ที่สนใจ (และการอ้างอิงใดๆ) โดยใช้คำต่อท้าย ^
คำต่อท้ายนี้จะบอกให้นินจาสร้างเอาต์พุตของ file—version.o
ที่ระบุในกรณีนี้ จากนั้นแตะไฟล์ และคอมไพล์ (เฉพาะไฟล์) อีกครั้งด้วยแฟล็ก -v
(แบบละเอียด) ไปยังนินจา:
ใน Linux หรือ OSX:
autoninja ../../base/version.cc^
touch ../../base/version.cc
autoninja -v ../../base/version.cc^
ในเชลล์ของ Windows cmd ^
เป็นอักขระพิเศษและต้องใช้ Escape:
C:\> autoninja ../../base/version.cc^^
C:\> touch ../../base/version.cc
C:\> autoninja -v ../../base/version.cc^^
เอาต์พุตโดยทั่วไปของคำสั่ง autoninja -v
จะมีลักษณะดังนี้ (ถูกตัดออกอย่างมาก)
..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo /showIncludes -imsvc ...
คำสั่งนี้ช่วยให้คุณคอมไพล์ไฟล์ที่สนใจได้ หากต้องการรับผลลัพธ์ที่ประมวลผลล่วงหน้า ให้ทำตามขั้นตอนต่อไปนี้
ใน Linux หรือ OSX ให้นำบล็อก -o obj/base/base/version.o
ออกจากส่วนท้าย แล้วเพิ่ม -E
ซึ่งจะบอกคอมไพเลอร์ให้พิมพ์ไฟล์ที่ประมวลผลล่วงหน้าไปยัง Stdout
เปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์ ดังนี้
../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD ... -E >version.i
ใน Windows ให้นำตัวเลือก /showIncludes
ออกจากตอนต้น (ซึ่งจะพิมพ์เอาต์พุต 1 บรรทัดสำหรับ #include
แต่ละรายการ) แล้วเพิ่ม /P
เพื่อประมวลผลไฟล์ล่วงหน้าแทนการคอมไพล์ ผลลัพธ์จะบันทึกอยู่ในไดเรกทอรีปัจจุบันใน version.i
:
..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo -imsvc ... /P
ตอนนี้คุณสามารถตรวจสอบไฟล์ที่ประมวลผลล่วงหน้าเพื่อดูว่ามาโครทำงานอะไรอยู่จริง หรือทำการเปลี่ยนแปลงทดสอบกับสวิตช์คอมไพเลอร์และคอมไพล์อีกครั้งเพื่อดูสิ่งที่เกิดขึ้น
แหล่งข้อมูลเพิ่มเติม
- Chrome บิลด์ที่รวดเร็ว: ดูเคล็ดลับการเพิ่มประสิทธิภาพบิลด์เพิ่มเติม (เน้นไปที่ Windows)
- ETW: ค้นหาวิธีค้นหาปัญหาประสิทธิภาพของ Windows ใน Chrome หรือในบิลด์ด้วยการอ่านเอกสาร ETW (หรือที่เรียกว่า Xperf)