@leafer/renderer 1.9.7 → 1.9.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leafer/renderer",
3
- "version": "1.9.7",
3
+ "version": "1.9.8",
4
4
  "description": "@leafer/renderer",
5
5
  "author": "Chao (Leafer) Wan",
6
6
  "license": "MIT",
@@ -22,9 +22,9 @@
22
22
  "leaferjs"
23
23
  ],
24
24
  "dependencies": {
25
- "@leafer/core": "1.9.7"
25
+ "@leafer/core": "1.9.8"
26
26
  },
27
27
  "devDependencies": {
28
- "@leafer/interface": "1.9.7"
28
+ "@leafer/interface": "1.9.8"
29
29
  }
30
30
  }
package/src/Renderer.ts CHANGED
@@ -33,6 +33,8 @@ export class Renderer implements IRenderer {
33
33
  protected totalBounds: IBounds
34
34
 
35
35
  protected requestTime: number
36
+ protected frameTime: number
37
+ protected frames: number[] = []
36
38
  protected __eventIds: IEventListenerId[]
37
39
 
38
40
  protected get needFill(): boolean { return !!(!this.canvas.allowBackgroundColor && this.config.fill) }
@@ -225,16 +227,19 @@ export class Renderer implements IRenderer {
225
227
  if (this.requestTime || !target) return
226
228
  if (target.parentApp) return target.parentApp.requestRender(false) // App 模式下统一走 app 控制渲染帧
227
229
 
228
- const requestTime = this.requestTime = Date.now()
230
+ this.requestTime = this.frameTime || Date.now()
229
231
 
230
232
  const render = () => {
231
233
 
232
- const nowFPS = 1000 / (Date.now() - requestTime)
234
+ const nowFPS = 1000 / ((this.frameTime = Date.now()) - this.requestTime)
233
235
 
234
236
  const { maxFPS } = this.config
235
- if (maxFPS && nowFPS > maxFPS - 0.5) return Platform.requestRender(render)
237
+ if (maxFPS && nowFPS > maxFPS) return Platform.requestRender(render)
236
238
 
237
- this.FPS = Math.min(120, Math.ceil(nowFPS))
239
+ const { frames } = this
240
+ if (frames.length > 30) frames.shift()
241
+ frames.push(nowFPS)
242
+ this.FPS = Math.round(frames.reduce((a, b) => a + b, 0) / frames.length) // 帧率采样
238
243
  this.requestTime = 0
239
244
 
240
245
  this.checkRender()
package/types/index.d.ts CHANGED
@@ -19,6 +19,8 @@ declare class Renderer implements IRenderer {
19
19
  protected renderOptions: IRenderOptions;
20
20
  protected totalBounds: IBounds;
21
21
  protected requestTime: number;
22
+ protected frameTime: number;
23
+ protected frames: number[];
22
24
  protected __eventIds: IEventListenerId[];
23
25
  protected get needFill(): boolean;
24
26
  constructor(target: ILeaf, canvas: ILeaferCanvas, userConfig?: IRendererConfig);