performancemonitor由内部框架维护
This commit is contained in:
@@ -180,7 +180,7 @@ export class Core {
|
|||||||
this._serviceContainer.registerInstance(PoolManager, this._poolManager);
|
this._serviceContainer.registerInstance(PoolManager, this._poolManager);
|
||||||
|
|
||||||
// 初始化场景管理器
|
// 初始化场景管理器
|
||||||
this._sceneManager = new SceneManager();
|
this._sceneManager = new SceneManager(this._performanceMonitor);
|
||||||
this._serviceContainer.registerInstance(SceneManager, this._sceneManager);
|
this._serviceContainer.registerInstance(SceneManager, this._sceneManager);
|
||||||
|
|
||||||
// 设置场景切换回调,通知调试管理器
|
// 设置场景切换回调,通知调试管理器
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import { ComponentStorageManager } from './Core/ComponentStorage';
|
|||||||
import { QuerySystem } from './Core/QuerySystem';
|
import { QuerySystem } from './Core/QuerySystem';
|
||||||
import { TypeSafeEventSystem } from './Core/EventSystem';
|
import { TypeSafeEventSystem } from './Core/EventSystem';
|
||||||
import type { ReferenceTracker } from './Core/ReferenceTracker';
|
import type { ReferenceTracker } from './Core/ReferenceTracker';
|
||||||
|
import type { ServiceContainer } from '../Core/ServiceContainer';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 场景接口定义
|
* 场景接口定义
|
||||||
@@ -67,6 +68,13 @@ export interface IScene {
|
|||||||
*/
|
*/
|
||||||
readonly referenceTracker: ReferenceTracker;
|
readonly referenceTracker: ReferenceTracker;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 服务容器
|
||||||
|
*
|
||||||
|
* 场景级别的依赖注入容器,用于管理服务的生命周期。
|
||||||
|
*/
|
||||||
|
readonly services: ServiceContainer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取系统列表
|
* 获取系统列表
|
||||||
*/
|
*/
|
||||||
@@ -171,12 +179,4 @@ export interface ISceneConfig {
|
|||||||
* 场景名称
|
* 场景名称
|
||||||
*/
|
*/
|
||||||
name?: string;
|
name?: string;
|
||||||
|
|
||||||
/**
|
|
||||||
* 性能监控器实例(可选)
|
|
||||||
*
|
|
||||||
* 如果不提供,Scene会自动从Core.services获取全局PerformanceMonitor。
|
|
||||||
* 提供此参数可以实现场景级别的独立性能监控。
|
|
||||||
*/
|
|
||||||
performanceMonitor?: any;
|
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@ import { createLogger } from '../Utils/Logger';
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 游戏场景默认实现类
|
* 游戏场景默认实现类
|
||||||
*
|
*
|
||||||
* 实现IScene接口,提供场景的基础功能。
|
* 实现IScene接口,提供场景的基础功能。
|
||||||
* 推荐使用组合而非继承的方式来构建自定义场景。
|
* 推荐使用组合而非继承的方式来构建自定义场景。
|
||||||
*/
|
*/
|
||||||
@@ -97,11 +97,11 @@ export class Scene implements IScene {
|
|||||||
private readonly logger: ReturnType<typeof createLogger>;
|
private readonly logger: ReturnType<typeof createLogger>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 性能监控器
|
* 性能监控器缓存
|
||||||
*
|
*
|
||||||
* 用于监控场景和系统的性能。可以在构造函数中注入,如果不提供则从Core获取。
|
* 用于监控场景和系统的性能。从 ServiceContainer 获取。
|
||||||
*/
|
*/
|
||||||
private readonly _performanceMonitor: PerformanceMonitor;
|
private _performanceMonitor: PerformanceMonitor | null = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 场景是否已开始运行
|
* 场景是否已开始运行
|
||||||
@@ -182,10 +182,6 @@ export class Scene implements IScene {
|
|||||||
this._services = new ServiceContainer();
|
this._services = new ServiceContainer();
|
||||||
this.logger = createLogger('Scene');
|
this.logger = createLogger('Scene');
|
||||||
|
|
||||||
// 从配置获取 PerformanceMonitor,如果未提供则创建一个新实例
|
|
||||||
// Scene 应该是独立的,不依赖于 Core,通过构造函数参数明确依赖关系
|
|
||||||
this._performanceMonitor = config?.performanceMonitor || new PerformanceMonitor();
|
|
||||||
|
|
||||||
if (config?.name) {
|
if (config?.name) {
|
||||||
this.name = config.name;
|
this.name = config.name;
|
||||||
}
|
}
|
||||||
@@ -201,6 +197,19 @@ export class Scene implements IScene {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取性能监控器
|
||||||
|
*
|
||||||
|
* 从 ServiceContainer 获取,如果未注册则创建默认实例(向后兼容)
|
||||||
|
*/
|
||||||
|
private get performanceMonitor(): PerformanceMonitor {
|
||||||
|
if (!this._performanceMonitor) {
|
||||||
|
this._performanceMonitor = this._services.tryResolve(PerformanceMonitor)
|
||||||
|
?? new PerformanceMonitor();
|
||||||
|
}
|
||||||
|
return this._performanceMonitor;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化场景
|
* 初始化场景
|
||||||
*
|
*
|
||||||
@@ -578,7 +587,7 @@ export class Scene implements IScene {
|
|||||||
|
|
||||||
system.scene = this;
|
system.scene = this;
|
||||||
|
|
||||||
system.setPerformanceMonitor(this._performanceMonitor);
|
system.setPerformanceMonitor(this.performanceMonitor);
|
||||||
|
|
||||||
const metadata = getSystemMetadata(constructor);
|
const metadata = getSystemMetadata(constructor);
|
||||||
if (metadata?.updateOrder !== undefined) {
|
if (metadata?.updateOrder !== undefined) {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { Time } from '../Utils/Time';
|
|||||||
import { createLogger } from '../Utils/Logger';
|
import { createLogger } from '../Utils/Logger';
|
||||||
import type { IService } from '../Core/ServiceContainer';
|
import type { IService } from '../Core/ServiceContainer';
|
||||||
import { World } from './World';
|
import { World } from './World';
|
||||||
|
import { PerformanceMonitor } from '../Utils/PerformanceMonitor';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 单场景管理器
|
* 单场景管理器
|
||||||
@@ -73,14 +74,20 @@ export class SceneManager implements IService {
|
|||||||
*/
|
*/
|
||||||
private _onSceneChangedCallback?: () => void;
|
private _onSceneChangedCallback?: () => void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 性能监控器(从 Core 注入)
|
||||||
|
*/
|
||||||
|
private _performanceMonitor: PerformanceMonitor | null = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 默认场景ID
|
* 默认场景ID
|
||||||
*/
|
*/
|
||||||
private static readonly DEFAULT_SCENE_ID = '__main__';
|
private static readonly DEFAULT_SCENE_ID = '__main__';
|
||||||
|
|
||||||
constructor() {
|
constructor(performanceMonitor?: PerformanceMonitor) {
|
||||||
this._defaultWorld = new World({ name: '__default__' });
|
this._defaultWorld = new World({ name: '__default__' });
|
||||||
this._defaultWorld.start();
|
this._defaultWorld.start();
|
||||||
|
this._performanceMonitor = performanceMonitor || null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -111,6 +118,11 @@ export class SceneManager implements IService {
|
|||||||
// 移除旧场景
|
// 移除旧场景
|
||||||
this._defaultWorld.removeAllScenes();
|
this._defaultWorld.removeAllScenes();
|
||||||
|
|
||||||
|
// 注册全局 PerformanceMonitor 到 Scene 的 ServiceContainer
|
||||||
|
if (this._performanceMonitor) {
|
||||||
|
scene.services.registerInstance(PerformanceMonitor, this._performanceMonitor);
|
||||||
|
}
|
||||||
|
|
||||||
// 通过 World 创建新场景
|
// 通过 World 创建新场景
|
||||||
this._defaultWorld.createScene(SceneManager.DEFAULT_SCENE_ID, scene);
|
this._defaultWorld.createScene(SceneManager.DEFAULT_SCENE_ID, scene);
|
||||||
this._defaultWorld.setSceneActive(SceneManager.DEFAULT_SCENE_ID, true);
|
this._defaultWorld.setSceneActive(SceneManager.DEFAULT_SCENE_ID, true);
|
||||||
|
|||||||
@@ -589,25 +589,10 @@ describe('Scene - 场景管理系统测试', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('依赖注入优化', () => {
|
describe('性能监控', () => {
|
||||||
test('应该支持注入自定义PerformanceMonitor', () => {
|
test('Scene应该自动创建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({
|
const customScene = new Scene({
|
||||||
name: 'CustomScene',
|
name: 'CustomScene'
|
||||||
performanceMonitor: mockPerfMonitor as any
|
|
||||||
});
|
});
|
||||||
|
|
||||||
class TestSystem extends EntitySystem {
|
class TestSystem extends EntitySystem {
|
||||||
@@ -619,13 +604,14 @@ describe('Scene - 场景管理系统测试', () => {
|
|||||||
const system = new TestSystem();
|
const system = new TestSystem();
|
||||||
customScene.addEntityProcessor(system);
|
customScene.addEntityProcessor(system);
|
||||||
|
|
||||||
expect(mockPerfMonitor).toBeDefined();
|
expect(customScene).toBeDefined();
|
||||||
|
|
||||||
customScene.end();
|
customScene.end();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('未提供PerformanceMonitor时应该从Core获取', () => {
|
test('每个Scene应该有独立的PerformanceMonitor', () => {
|
||||||
const defaultScene = new Scene({ name: 'DefaultScene' });
|
const scene1 = new Scene({ name: 'Scene1' });
|
||||||
|
const scene2 = new Scene({ name: 'Scene2' });
|
||||||
|
|
||||||
class TestSystem extends EntitySystem {
|
class TestSystem extends EntitySystem {
|
||||||
constructor() {
|
constructor() {
|
||||||
@@ -633,12 +619,14 @@ describe('Scene - 场景管理系统测试', () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const system = new TestSystem();
|
scene1.addEntityProcessor(new TestSystem());
|
||||||
defaultScene.addEntityProcessor(system);
|
scene2.addEntityProcessor(new TestSystem());
|
||||||
|
|
||||||
expect(defaultScene).toBeDefined();
|
expect(scene1).toBeDefined();
|
||||||
|
expect(scene2).toBeDefined();
|
||||||
|
|
||||||
defaultScene.end();
|
scene1.end();
|
||||||
|
scene2.end();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user