The Chromium Chronicle #7: แหล่งที่มาก่อนการประมวลผล

ตอนที่ 7: โดย Bruce Dawson ในเมืองซีแอตเทิล รัฐวอชิงตัน (ตุลาคม 2019)
ตอนก่อนหน้า

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

เคล็ดลับ 2-3 ข้อจะช่วยให้นักพัฒนาซอฟต์แวร์ Chromium ค้นหาและเรียกใช้คำสั่ง คอมไพล์ไฟล์ต้นฉบับไฟล์ใดไฟล์หนึ่ง พร้อมการแก้ไขตามความจำเป็น

เริ่มต้นโดยไปที่ไดเรกทอรีเอาต์พุตและใช้ autoninja (หรือนินจา) เพื่อ รวบรวมชื่อไฟล์ที่สนใจ (และทรัพยากร Dependency ทั้งหมด) โดยใช้คำต่อท้าย ^ คำต่อท้ายนี้จะบอกให้นินจาสร้างเอาต์พุตของ file—version.o ที่ระบุ ได้ในกรณีนี้ จากนั้นแตะไฟล์ และคอมไพล์ (เฉพาะไฟล์นั้น) อีกครั้งด้วย Flag -v (รายละเอียด) สำหรับนินจา:

ใน Linux หรือ OSX

autoninja ../../base/version.cc^
touch ../../base/version.cc
autoninja -v ../../base/version.cc^

ใน Windows cmd Shell ^ เป็นอักขระพิเศษและต้องกำหนดเป็นอักขระหลีก:

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 ออกตั้งแต่แรก (พิมพ์ว่า บรรทัดเอาต์พุตสำหรับแต่ละ #include) แล้วเพิ่ม /P เพื่อให้ ประมวลผลไฟล์ล่วงหน้าแทนที่จะคอมไพล์ ผลลัพธ์จะได้รับการบันทึกไว้ใน ไดเรกทอรีปัจจุบันใน version.i:

..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo -imsvc ... /P

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

แหล่งข้อมูลเพิ่มเติม

  • บิลด์ของ Chrome ที่รวดเร็ว: สำหรับเคล็ดลับการเพิ่มประสิทธิภาพบิลด์เพิ่มเติม (โฟกัสที่ Windows)
  • ETW: ค้นหาวิธีค้นหาปัญหาด้านประสิทธิภาพของ Windows ใน Chrome หรือในบิลด์ โดยอ่านเอกสาร ETW (หรือที่เรียกว่า Xperf)