ทีม Chrome ภูมิใจนำเสนอ Chromium Chronicle ซึ่งเป็น ที่ออกแบบมาเพื่อนักพัฒนาซอฟต์แวร์ของ Chromium โดยเฉพาะ รวมถึงนักพัฒนาซอฟต์แวร์ที่สร้าง เบราว์เซอร์
Chromium Chronicle จะเน้นการเผยแพร่ความรู้ทางเทคนิคเป็นหลัก และแนวทางปฏิบัติแนะนำในการเขียน สร้าง และทดสอบ Chrome เรามีแผนจะเพิ่ม หัวข้อที่เกี่ยวข้องและเป็นประโยชน์ต่อนักพัฒนาซอฟต์แวร์ Chromium เช่น โค้ด สุขภาพ เครื่องมือที่มีประโยชน์ การทดสอบหน่วย การเข้าถึงได้ง่าย และอื่นๆ อีกมากมาย แต่ละบทความ จะเขียนและแก้ไขโดยวิศวกร Chrome
เรารู้สึกตื่นเต้นกับซีรีส์ใหม่นี้และหวังว่าคุณจะรู้สึกเหมือนกัน พร้อมเจาะลึกแล้วหรือยัง ลองดูตอนแรกได้ที่ด้านล่าง
แนวทางปฏิบัติแนะนำสำหรับการกำหนดเวลางาน
ตอนที่ 1: โดย Gabriel Charette ในเมืองมอนทรีออล รัฐ PQ (เมษายน 2019)
ตอนก่อนหน้า
โค้ด Chrome ที่ต้องมีการดำเนินการแบบไม่พร้อมกันในกระบวนการมักจะโพสต์งาน เป็นลำดับ ลำดับเป็น "ชุดข้อความเสมือน" ที่จัดการโดย Chrome และ แนะนำให้สร้างชุดข้อความของคุณเอง วัตถุทำงานอย่างไร รู้ว่าจะโพสต์ไปในลำดับใด
กระบวนทัศน์แบบเดิมคือการรับ SequencedTaskRunner จากผู้สร้างดังนี้
Foo::Foo(scoped_refptr
กระบวนทัศน์ที่แนะนำคือการสร้าง SequencedTaskRunner อิสระ ดังนี้
Foo::Foo()
: backend_task_runner_(
base::CreateSequencedTaskRunnerWithTraits({
base::MayBlock(), base::TaskPriority::BEST_EFFORT})) {}
วิธีนี้ทำให้อ่านและเขียนได้ง่ายขึ้น เนื่องจากข้อมูลทั้งหมดอยู่ในท้องถิ่นและมี จึงไม่เสี่ยงต่อการต้องพึ่งพาตนเองคนอื่นๆ กับงานที่ไม่เกี่ยวข้อง
กระบวนทัศน์นี้ยังใช้ในการทดสอบได้ดียิ่งขึ้น แทนการแทรก ตัวเรียกใช้งานต่างๆ ด้วยตัวเอง โดยการทดสอบจะยืนยันสภาพแวดล้อมงานที่ควบคุมได้ ในการจัดการงานของ Foo
class FooTest : public testing::Test {
public
(...)
protected:
base::test::TaskEnvironment task_environment_;
Foo foo_;
};
การมี TaskEnvironment ติดตั้งเป็นอันดับแรกจะช่วยให้แน่ใจว่า จัดการสภาพแวดล้อมของงานตลอดชีวิตของ Foo สภาพแวดล้อมของงาน จะบันทึกคำขอของ Foo เพื่อสร้าง SequencedTaskRunner และ จะจัดการงานภายใต้ FooTest แต่ละรายการ
หากต้องการทดสอบผลลัพธ์ของการดำเนินการแบบอะซิงโครนัส ให้ใช้เมธอด
RunLoop::Run()+QuitClosure()
กระบวนทัศน์:
TEST_F(FooTest, TestAsyncWork) {
RunLoop run_loop;
foo_.BeginAsyncWork(run_loop.QuitClosure());
run_loop.Run();
EXPECT_TRUE(foo_.work_done());
}
คีย์นี้เหมาะกับ RunUntilIdle() ซึ่งอาจทำให้เกิดการไม่สม่ำเสมอได้ถ้าแบบอะซิงโครนัส
ซึ่งเกี่ยวข้องกับงานที่อยู่นอกขอบเขตขอบเขตงาน
เช่น เหตุการณ์ของระบบ ดังนั้นโปรดใช้ RunUntilIdle()
ด้วยความระมัดระวัง
หากต้องการดูข้อมูลเพิ่มเติม อ่านเอกสารของเราเกี่ยวกับการจัดชุดข้อความและงาน หรือมีส่วนร่วมในการย้ายข้อมูลไปยัง Task Environment