first commit
This commit is contained in:
107
apps/miniprogram/pages/terminal/terminalPerfLogBuffer.test.ts
Normal file
107
apps/miniprogram/pages/terminal/terminalPerfLogBuffer.test.ts
Normal file
@@ -0,0 +1,107 @@
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
const { createTerminalPerfLogBuffer, pickPerfScore } = require("./terminalPerfLogBuffer.js");
|
||||
|
||||
describe("terminalPerfLogBuffer", () => {
|
||||
beforeEach(() => {
|
||||
vi.useFakeTimers();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
vi.useRealTimers();
|
||||
});
|
||||
|
||||
it("会从常见耗时字段中选出最大的 score", () => {
|
||||
expect(
|
||||
pickPerfScore({
|
||||
totalCostMs: 120,
|
||||
setDataCostMs: 320,
|
||||
overlayCostMs: 180
|
||||
})
|
||||
).toBe(320);
|
||||
expect(
|
||||
pickPerfScore({
|
||||
applyCostMs: 220,
|
||||
trimCostMs: 380,
|
||||
cloneCostMs: 260
|
||||
})
|
||||
).toBe(380);
|
||||
});
|
||||
|
||||
it("会把 5 秒窗口内的高频事件聚合成 1 条摘要", () => {
|
||||
const writes = [];
|
||||
const buffer = createTerminalPerfLogBuffer({
|
||||
windowMs: 5000,
|
||||
write(summary) {
|
||||
writes.push(summary);
|
||||
}
|
||||
});
|
||||
|
||||
buffer.push({
|
||||
event: "stdout.slice",
|
||||
at: 1000,
|
||||
sinceLoadMs: 100,
|
||||
status: "connected",
|
||||
totalCostMs: 240
|
||||
});
|
||||
buffer.push({
|
||||
event: "layout.refresh.long",
|
||||
at: 1800,
|
||||
sinceLoadMs: 900,
|
||||
status: "connected",
|
||||
totalCostMs: 1400,
|
||||
setDataCostMs: 1200
|
||||
});
|
||||
buffer.push({
|
||||
event: "stdout.slice",
|
||||
at: 2200,
|
||||
sinceLoadMs: 1300,
|
||||
status: "connected",
|
||||
totalCostMs: 180
|
||||
});
|
||||
|
||||
vi.advanceTimersByTime(5000);
|
||||
|
||||
expect(writes).toHaveLength(1);
|
||||
expect(writes[0]).toMatchObject({
|
||||
event: "perf.summary",
|
||||
count: 3,
|
||||
status: "connected"
|
||||
});
|
||||
expect(writes[0].topEvents[0]).toEqual({ event: "stdout.slice", count: 2 });
|
||||
expect(writes[0].slowest).toMatchObject({
|
||||
event: "layout.refresh.long",
|
||||
scoreMs: 1400
|
||||
});
|
||||
expect(writes[0].latest).toMatchObject({
|
||||
event: "stdout.slice"
|
||||
});
|
||||
});
|
||||
|
||||
it("支持在页面收起前手动 flush,避免丢掉最后一个窗口", () => {
|
||||
const writes = [];
|
||||
const buffer = createTerminalPerfLogBuffer({
|
||||
windowMs: 5000,
|
||||
write(summary) {
|
||||
writes.push(summary);
|
||||
}
|
||||
});
|
||||
|
||||
buffer.push({
|
||||
event: "overlay.sync.long",
|
||||
at: 3000,
|
||||
sinceLoadMs: 2000,
|
||||
status: "connected",
|
||||
costMs: 65000
|
||||
});
|
||||
|
||||
const summary = buffer.flush("page_hide");
|
||||
|
||||
expect(summary).toMatchObject({
|
||||
event: "perf.summary",
|
||||
reason: "page_hide",
|
||||
count: 1
|
||||
});
|
||||
expect(writes).toHaveLength(1);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user