Scene 构造函数注入 PerformanceMonitor
This commit is contained in:
@@ -165,4 +165,12 @@ export interface ISceneConfig {
|
||||
* 场景名称
|
||||
*/
|
||||
name?: string;
|
||||
|
||||
/**
|
||||
* 性能监控器实例(可选)
|
||||
*
|
||||
* 如果不提供,Scene会自动从Core.services获取全局PerformanceMonitor。
|
||||
* 提供此参数可以实现场景级别的独立性能监控。
|
||||
*/
|
||||
performanceMonitor?: any;
|
||||
}
|
||||
@@ -89,6 +89,13 @@ export class Scene implements IScene {
|
||||
*/
|
||||
private readonly logger: ReturnType<typeof createLogger>;
|
||||
|
||||
/**
|
||||
* 性能监控器
|
||||
*
|
||||
* 用于监控场景和系统的性能。可以在构造函数中注入,如果不提供则从Core获取。
|
||||
*/
|
||||
private readonly _performanceMonitor: PerformanceMonitor;
|
||||
|
||||
/**
|
||||
* 场景是否已开始运行
|
||||
*/
|
||||
@@ -167,6 +174,12 @@ export class Scene implements IScene {
|
||||
this._services = new ServiceContainer();
|
||||
this.logger = createLogger('Scene');
|
||||
|
||||
if (config?.performanceMonitor) {
|
||||
this._performanceMonitor = config.performanceMonitor;
|
||||
} else {
|
||||
this._performanceMonitor = Core.services.resolve(PerformanceMonitor);
|
||||
}
|
||||
|
||||
if (config?.name) {
|
||||
this.name = config.name;
|
||||
}
|
||||
@@ -547,8 +560,7 @@ export class Scene implements IScene {
|
||||
|
||||
system.scene = this;
|
||||
|
||||
const perfMonitor = Core.services.resolve(PerformanceMonitor);
|
||||
system.setPerformanceMonitor(perfMonitor);
|
||||
system.setPerformanceMonitor(this._performanceMonitor);
|
||||
|
||||
const metadata = getSystemMetadata(constructor);
|
||||
if (metadata?.updateOrder !== undefined) {
|
||||
|
||||
@@ -588,4 +588,57 @@ describe('Scene - 场景管理系统测试', () => {
|
||||
}).not.toThrow();
|
||||
});
|
||||
});
|
||||
|
||||
describe('依赖注入优化', () => {
|
||||
test('应该支持注入自定义PerformanceMonitor', () => {
|
||||
const mockPerfMonitor = {
|
||||
startMeasure: jest.fn(),
|
||||
endMeasure: jest.fn(),
|
||||
recordSystemData: jest.fn(),
|
||||
recordEntityCount: jest.fn(),
|
||||
recordComponentCount: jest.fn(),
|
||||
update: jest.fn(),
|
||||
getSystemData: jest.fn(),
|
||||
getSystemStats: jest.fn(),
|
||||
resetSystem: jest.fn(),
|
||||
reset: jest.fn(),
|
||||
dispose: jest.fn()
|
||||
};
|
||||
|
||||
const customScene = new Scene({
|
||||
name: 'CustomScene',
|
||||
performanceMonitor: mockPerfMonitor as any
|
||||
});
|
||||
|
||||
class TestSystem extends EntitySystem {
|
||||
constructor() {
|
||||
super(Matcher.empty().all(PositionComponent));
|
||||
}
|
||||
}
|
||||
|
||||
const system = new TestSystem();
|
||||
customScene.addEntityProcessor(system);
|
||||
|
||||
expect(mockPerfMonitor).toBeDefined();
|
||||
|
||||
customScene.end();
|
||||
});
|
||||
|
||||
test('未提供PerformanceMonitor时应该从Core获取', () => {
|
||||
const defaultScene = new Scene({ name: 'DefaultScene' });
|
||||
|
||||
class TestSystem extends EntitySystem {
|
||||
constructor() {
|
||||
super(Matcher.empty().all(PositionComponent));
|
||||
}
|
||||
}
|
||||
|
||||
const system = new TestSystem();
|
||||
defaultScene.addEntityProcessor(system);
|
||||
|
||||
expect(defaultScene).toBeDefined();
|
||||
|
||||
defaultScene.end();
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user