agora-electron-sdk 4.3.2 → 4.4.0-dev.1
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/gulpfile.js +3 -1
- package/js/AgoraSdk.js +4 -4
- package/js/Private/AgoraBase.js +367 -326
- package/js/Private/AgoraMediaBase.js +265 -76
- package/js/Private/AgoraMediaPlayerTypes.js +12 -30
- package/js/Private/IAgoraH265Transcoder.js +2 -5
- package/js/Private/IAgoraLog.js +2 -5
- package/js/Private/IAgoraMediaEngine.js +2 -5
- package/js/Private/IAgoraMediaPlayer.js +4 -10
- package/js/Private/IAgoraMediaRecorder.js +2 -5
- package/js/Private/IAgoraMediaStreamingSource.js +2 -5
- package/js/Private/IAgoraMusicContentCenter.js +21 -68
- package/js/Private/IAgoraRhythmPlayer.js +2 -5
- package/js/Private/IAgoraRtcEngine.js +76 -130
- package/js/Private/IAgoraRtcEngineEx.js +5 -28
- package/js/Private/IAgoraSpatialAudio.js +6 -15
- package/js/Private/IAudioDeviceManager.js +2 -5
- package/js/Private/impl/AgoraMediaBaseImpl.js +11 -14
- package/js/Private/impl/IAgoraH265TranscoderImpl.js +43 -46
- package/js/Private/impl/IAgoraMediaEngineImpl.js +155 -172
- package/js/Private/impl/IAgoraMediaPlayerImpl.js +534 -546
- package/js/Private/impl/IAgoraMediaRecorderImpl.js +26 -29
- package/js/Private/impl/IAgoraMusicContentCenterImpl.js +218 -251
- package/js/Private/impl/IAgoraRtcEngineExImpl.js +434 -436
- package/js/Private/impl/IAgoraRtcEngineImpl.js +2445 -2423
- package/js/Private/impl/IAgoraSpatialAudioImpl.js +167 -170
- package/js/Private/impl/IAudioDeviceManagerImpl.js +232 -235
- package/js/Private/internal/AgoraH265TranscoderInternal.js +33 -57
- package/js/Private/internal/AgoraMediaBaseInternal.js +9 -28
- package/js/Private/internal/AudioDeviceManagerInternal.js +24 -44
- package/js/Private/internal/IrisApiEngine.js +94 -145
- package/js/Private/internal/LocalSpatialAudioEngineInternal.js +3 -23
- package/js/Private/internal/MediaEngineInternal.js +69 -94
- package/js/Private/internal/MediaPlayerInternal.js +105 -125
- package/js/Private/internal/MediaRecorderInternal.js +37 -64
- package/js/Private/internal/MusicContentCenterInternal.js +92 -129
- package/js/Private/internal/RtcEngineExInternal.js +213 -243
- package/js/Private/ti/AgoraBase-ti.js +2 -2
- package/js/Private/ti/AgoraMediaBase-ti.js +2 -2
- package/js/Private/ti/AgoraMediaPlayerTypes-ti.js +1 -1
- package/js/Private/ti/IAgoraH265Transcoder-ti.js +2 -2
- package/js/Private/ti/IAgoraLog-ti.js +1 -1
- package/js/Private/ti/IAgoraMediaEngine-ti.js +1 -1
- package/js/Private/ti/IAgoraMediaPlayer-ti.js +2 -2
- package/js/Private/ti/IAgoraMediaPlayerSource-ti.js +2 -2
- package/js/Private/ti/IAgoraMediaRecorder-ti.js +1 -1
- package/js/Private/ti/IAgoraMediaStreamingSource-ti.js +1 -1
- package/js/Private/ti/IAgoraMusicContentCenter-ti.js +2 -2
- package/js/Private/ti/IAgoraRhythmPlayer-ti.js +1 -1
- package/js/Private/ti/IAgoraRtcEngine-ti.js +7 -7
- package/js/Private/ti/IAgoraRtcEngineEx-ti.js +1 -1
- package/js/Private/ti/IAgoraSpatialAudio-ti.js +1 -1
- package/js/Private/ti/IAudioDeviceManager-ti.js +1 -1
- package/js/Renderer/AgoraView.js +100 -145
- package/js/Renderer/IRenderer.js +43 -53
- package/js/Renderer/IRendererManager.js +106 -132
- package/js/Renderer/RendererCache.js +63 -96
- package/js/Renderer/RendererManager.js +35 -69
- package/js/Renderer/WebGLRenderer/index.js +77 -106
- package/js/Renderer/YUVCanvasRenderer/index.js +18 -40
- package/js/Utils.js +45 -64
- package/package.json +9 -7
- package/scripts/checkElectron.js +41 -0
- package/scripts/downloadPrebuild.js +56 -24
- package/scripts/synclib.js +6 -6
- package/ts/Private/AgoraBase.ts +269 -4
- package/ts/Private/AgoraMediaBase.ts +343 -1
- package/ts/Private/IAgoraMediaEngine.ts +3 -3
- package/ts/Private/IAgoraRtcEngine.ts +130 -119
- package/ts/Private/IAgoraRtcEngineEx.ts +14 -9
- package/ts/Private/impl/IAgoraRtcEngineExImpl.ts +30 -0
- package/ts/Private/impl/IAgoraRtcEngineImpl.ts +181 -61
- package/ts/Private/internal/IrisApiEngine.ts +3 -7
- package/ts/Private/internal/MediaEngineInternal.ts +0 -1
- package/ts/Private/internal/RtcEngineExInternal.ts +8 -4
- package/ts/Private/ti/IAgoraRtcEngine-ti.ts +5 -5
- package/ts/Renderer/IRenderer.ts +1 -2
- package/ts/Renderer/IRendererManager.ts +21 -12
- package/ts/Utils.ts +15 -0
- package/types/Private/AgoraBase.d.ts +264 -8
- package/types/Private/AgoraBase.d.ts.map +1 -1
- package/types/Private/AgoraMediaBase.d.ts +336 -1
- package/types/Private/AgoraMediaBase.d.ts.map +1 -1
- package/types/Private/IAgoraMediaEngine.d.ts +3 -3
- package/types/Private/IAgoraRtcEngine.d.ts +106 -116
- package/types/Private/IAgoraRtcEngine.d.ts.map +1 -1
- package/types/Private/IAgoraRtcEngineEx.d.ts +10 -10
- package/types/Private/IAgoraRtcEngineEx.d.ts.map +1 -1
- package/types/Private/impl/IAgoraRtcEngineExImpl.d.ts +3 -1
- package/types/Private/impl/IAgoraRtcEngineExImpl.d.ts.map +1 -1
- package/types/Private/impl/IAgoraRtcEngineImpl.d.ts +13 -5
- package/types/Private/impl/IAgoraRtcEngineImpl.d.ts.map +1 -1
- package/types/Private/internal/IrisApiEngine.d.ts.map +1 -1
- package/types/Private/internal/MediaEngineInternal.d.ts.map +1 -1
- package/types/Private/internal/RtcEngineExInternal.d.ts +1 -0
- package/types/Private/internal/RtcEngineExInternal.d.ts.map +1 -1
- package/types/Renderer/IRenderer.d.ts.map +1 -1
- package/types/Renderer/IRendererManager.d.ts.map +1 -1
- package/types/Utils.d.ts +4 -0
- package/types/Utils.d.ts.map +1 -1
package/js/Renderer/IRenderer.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.IRenderer = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
const AgoraBase_1 = require("../Private/AgoraBase");
|
|
5
|
+
const AgoraMediaBase_1 = require("../Private/AgoraMediaBase");
|
|
6
|
+
class IRenderer {
|
|
7
|
+
constructor() {
|
|
8
8
|
this._context = {};
|
|
9
9
|
}
|
|
10
|
-
|
|
10
|
+
bind(element) {
|
|
11
11
|
this.parentElement = element;
|
|
12
12
|
this.container = document.createElement('div');
|
|
13
13
|
Object.assign(this.container.style, {
|
|
@@ -22,58 +22,50 @@ var IRenderer = /** @class */ (function () {
|
|
|
22
22
|
this.canvas = document.createElement('canvas');
|
|
23
23
|
this.canvas.style.display = 'none';
|
|
24
24
|
this.container.appendChild(this.canvas);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (this.container && ((_a = this.canvas) === null || _a === void 0 ? void 0 : _a.parentNode) === this.container) {
|
|
25
|
+
}
|
|
26
|
+
unbind() {
|
|
27
|
+
if (this.container && this.canvas?.parentNode === this.container) {
|
|
29
28
|
this.container.removeChild(this.canvas);
|
|
30
29
|
}
|
|
31
30
|
if (this.parentElement &&
|
|
32
|
-
|
|
31
|
+
this.container?.parentNode === this.parentElement) {
|
|
33
32
|
this.parentElement.removeChild(this.container);
|
|
34
33
|
}
|
|
35
34
|
this.canvas = undefined;
|
|
36
35
|
this.container = undefined;
|
|
37
36
|
this.parentElement = undefined;
|
|
38
|
-
}
|
|
39
|
-
|
|
37
|
+
}
|
|
38
|
+
drawFrame(_videoFrame) {
|
|
40
39
|
if (!this.canvas)
|
|
41
40
|
return;
|
|
42
|
-
|
|
43
|
-
if (!this.canvas.checkVisibility()) {
|
|
41
|
+
if (this.canvas.style.display !== '') {
|
|
44
42
|
this.canvas.style.display = '';
|
|
45
43
|
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
},
|
|
62
|
-
enumerable: false,
|
|
63
|
-
configurable: true
|
|
64
|
-
});
|
|
65
|
-
IRenderer.prototype.updateRenderMode = function () {
|
|
66
|
-
var _a;
|
|
44
|
+
}
|
|
45
|
+
set context({ renderMode, mirrorMode }) {
|
|
46
|
+
if (this.context.renderMode !== renderMode) {
|
|
47
|
+
this.context.renderMode = renderMode;
|
|
48
|
+
this.updateRenderMode();
|
|
49
|
+
}
|
|
50
|
+
if (this.context.mirrorMode !== mirrorMode) {
|
|
51
|
+
this.context.mirrorMode = mirrorMode;
|
|
52
|
+
this.updateMirrorMode();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
get context() {
|
|
56
|
+
return this._context;
|
|
57
|
+
}
|
|
58
|
+
updateRenderMode() {
|
|
67
59
|
if (!this.canvas || !this.container)
|
|
68
60
|
return;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
61
|
+
const { clientWidth, clientHeight } = this.container;
|
|
62
|
+
const { width, height } = this.canvas;
|
|
63
|
+
const containerAspectRatio = clientWidth / clientHeight;
|
|
64
|
+
const canvasAspectRatio = width / height;
|
|
65
|
+
const widthScale = clientWidth / width;
|
|
66
|
+
const heightScale = clientHeight / height;
|
|
67
|
+
const isHidden = this.context?.renderMode === AgoraMediaBase_1.RenderModeType.RenderModeHidden;
|
|
68
|
+
let scale = 1;
|
|
77
69
|
// If container's aspect ratio is larger than canvas's aspect ratio
|
|
78
70
|
if (containerAspectRatio > canvasAspectRatio) {
|
|
79
71
|
// Scale canvas to fit container's width on hidden mode
|
|
@@ -85,9 +77,9 @@ var IRenderer = /** @class */ (function () {
|
|
|
85
77
|
// Scale canvas to fit container's width on fit mode
|
|
86
78
|
scale = isHidden ? heightScale : widthScale;
|
|
87
79
|
}
|
|
88
|
-
this.canvas.style.transform =
|
|
89
|
-
}
|
|
90
|
-
|
|
80
|
+
this.canvas.style.transform = `scale(${scale})`;
|
|
81
|
+
}
|
|
82
|
+
updateMirrorMode() {
|
|
91
83
|
if (!this.parentElement)
|
|
92
84
|
return;
|
|
93
85
|
Object.assign(this.parentElement.style, {
|
|
@@ -95,9 +87,8 @@ var IRenderer = /** @class */ (function () {
|
|
|
95
87
|
? 'rotateY(180deg)'
|
|
96
88
|
: '',
|
|
97
89
|
});
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
var width = _a.width, height = _a.height, rotation = _a.rotation;
|
|
90
|
+
}
|
|
91
|
+
rotateCanvas({ width, height, rotation }) {
|
|
101
92
|
if (!this.canvas)
|
|
102
93
|
return;
|
|
103
94
|
if (rotation === 0 || rotation === 180) {
|
|
@@ -109,9 +100,8 @@ var IRenderer = /** @class */ (function () {
|
|
|
109
100
|
this.canvas.width = height;
|
|
110
101
|
}
|
|
111
102
|
else {
|
|
112
|
-
throw new Error(
|
|
103
|
+
throw new Error(`Invalid rotation: ${rotation}, only 0, 90, 180, 270 are supported`);
|
|
113
104
|
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
}());
|
|
105
|
+
}
|
|
106
|
+
}
|
|
117
107
|
exports.IRenderer = IRenderer;
|
|
@@ -1,26 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
3
|
exports.IRendererManager = void 0;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
4
|
+
const AgoraBase_1 = require("../Private/AgoraBase");
|
|
5
|
+
const AgoraMediaBase_1 = require("../Private/AgoraMediaBase");
|
|
6
|
+
const Utils_1 = require("../Utils");
|
|
7
|
+
const RendererCache_1 = require("./RendererCache");
|
|
19
8
|
/**
|
|
20
9
|
* @ignore
|
|
21
10
|
*/
|
|
22
|
-
|
|
23
|
-
|
|
11
|
+
class IRendererManager {
|
|
12
|
+
constructor() {
|
|
24
13
|
this._renderingFps = 15;
|
|
25
14
|
this._currentFrameCount = 0;
|
|
26
15
|
this._previousFirstFrameTime = 0;
|
|
@@ -30,59 +19,42 @@ var IRendererManager = /** @class */ (function () {
|
|
|
30
19
|
mirrorMode: AgoraBase_1.VideoMirrorModeType.VideoMirrorModeDisabled,
|
|
31
20
|
};
|
|
32
21
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this._renderingFps = fps;
|
|
40
|
-
if (this._renderingTimer) {
|
|
41
|
-
this.stopRendering();
|
|
42
|
-
this.startRendering();
|
|
43
|
-
}
|
|
22
|
+
set renderingFps(fps) {
|
|
23
|
+
if (this._renderingFps !== fps) {
|
|
24
|
+
this._renderingFps = fps;
|
|
25
|
+
if (this._renderingTimer) {
|
|
26
|
+
this.stopRendering();
|
|
27
|
+
this.startRendering();
|
|
44
28
|
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
},
|
|
64
|
-
enumerable: false,
|
|
65
|
-
configurable: true
|
|
66
|
-
});
|
|
67
|
-
Object.defineProperty(IRendererManager.prototype, "defaultMirrorMode", {
|
|
68
|
-
get: function () {
|
|
69
|
-
return this._context.mirrorMode;
|
|
70
|
-
},
|
|
71
|
-
enumerable: false,
|
|
72
|
-
configurable: true
|
|
73
|
-
});
|
|
74
|
-
IRendererManager.prototype.release = function () {
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
get renderingFps() {
|
|
32
|
+
return this._renderingFps;
|
|
33
|
+
}
|
|
34
|
+
set defaultChannelId(channelId) {
|
|
35
|
+
this._context.channelId = channelId;
|
|
36
|
+
}
|
|
37
|
+
get defaultChannelId() {
|
|
38
|
+
return this._context.channelId ?? '';
|
|
39
|
+
}
|
|
40
|
+
get defaultRenderMode() {
|
|
41
|
+
return this._context.renderMode;
|
|
42
|
+
}
|
|
43
|
+
get defaultMirrorMode() {
|
|
44
|
+
return this._context.mirrorMode;
|
|
45
|
+
}
|
|
46
|
+
release() {
|
|
75
47
|
this.stopRendering();
|
|
76
48
|
this.clearRendererCache();
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
|
|
49
|
+
}
|
|
50
|
+
precheckRendererContext(context) {
|
|
51
|
+
let { sourceType, uid, channelId, mediaPlayerId, renderMode = this.defaultRenderMode, mirrorMode = this.defaultMirrorMode, } = context;
|
|
80
52
|
switch (sourceType) {
|
|
81
53
|
case AgoraMediaBase_1.VideoSourceType.VideoSourceRemote:
|
|
82
54
|
if (uid === undefined) {
|
|
83
55
|
throw new Error('uid is required');
|
|
84
56
|
}
|
|
85
|
-
channelId = channelId
|
|
57
|
+
channelId = channelId ?? this.defaultChannelId;
|
|
86
58
|
break;
|
|
87
59
|
case AgoraMediaBase_1.VideoSourceType.VideoSourceMediaPlayer:
|
|
88
60
|
if (mediaPlayerId === undefined) {
|
|
@@ -101,11 +73,11 @@ var IRendererManager = /** @class */ (function () {
|
|
|
101
73
|
uid = 0;
|
|
102
74
|
break;
|
|
103
75
|
}
|
|
104
|
-
return
|
|
105
|
-
}
|
|
106
|
-
|
|
76
|
+
return { ...context, sourceType, uid, channelId, renderMode, mirrorMode };
|
|
77
|
+
}
|
|
78
|
+
addOrRemoveRenderer(context) {
|
|
107
79
|
// To be compatible with the old API
|
|
108
|
-
|
|
80
|
+
let { setupMode = AgoraBase_1.VideoViewSetupMode.VideoViewSetupAdd } = context;
|
|
109
81
|
if (!context.view)
|
|
110
82
|
setupMode = AgoraBase_1.VideoViewSetupMode.VideoViewSetupRemove;
|
|
111
83
|
switch (setupMode) {
|
|
@@ -118,15 +90,15 @@ var IRendererManager = /** @class */ (function () {
|
|
|
118
90
|
this.removeRendererFromCache(context);
|
|
119
91
|
return this.addRendererToCache(context);
|
|
120
92
|
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
|
|
93
|
+
}
|
|
94
|
+
addRendererToCache(context) {
|
|
95
|
+
const checkedContext = this.precheckRendererContext(context);
|
|
124
96
|
if (!checkedContext.view)
|
|
125
97
|
return undefined;
|
|
126
98
|
if (this.findRenderer(checkedContext.view)) {
|
|
127
99
|
throw new Error('You have already added this view to the renderer');
|
|
128
100
|
}
|
|
129
|
-
|
|
101
|
+
let rendererCache = this.getRendererCache(checkedContext);
|
|
130
102
|
if (!rendererCache) {
|
|
131
103
|
rendererCache = new RendererCache_1.RendererCache(checkedContext);
|
|
132
104
|
this._rendererCaches.push(rendererCache);
|
|
@@ -134,84 +106,88 @@ var IRendererManager = /** @class */ (function () {
|
|
|
134
106
|
rendererCache.addRenderer(this.createRenderer(checkedContext));
|
|
135
107
|
this.startRendering();
|
|
136
108
|
return rendererCache;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
if (
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
109
|
+
}
|
|
110
|
+
removeRendererFromCache(context) {
|
|
111
|
+
const checkedContext = this.precheckRendererContext(context);
|
|
112
|
+
const rendererCache = this.getRendererCache(checkedContext);
|
|
113
|
+
if (rendererCache) {
|
|
114
|
+
if (checkedContext.view) {
|
|
115
|
+
const renderer = rendererCache.findRenderer(checkedContext.view);
|
|
116
|
+
if (!renderer)
|
|
117
|
+
return;
|
|
118
|
+
rendererCache.removeRenderer(renderer);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
rendererCache.removeRenderer();
|
|
122
|
+
}
|
|
123
|
+
if (rendererCache.renderers.length === 0) {
|
|
124
|
+
this._rendererCaches.splice(this._rendererCaches.indexOf(rendererCache), 1);
|
|
125
|
+
}
|
|
148
126
|
}
|
|
149
127
|
else {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
128
|
+
this._rendererCaches = this._rendererCaches.filter((_rendererCache) => {
|
|
129
|
+
const renderer = _rendererCache.findRenderer(checkedContext.view);
|
|
130
|
+
if (renderer) {
|
|
131
|
+
_rendererCache.removeRenderer(renderer);
|
|
132
|
+
}
|
|
133
|
+
return _rendererCache.renderers.length > 0;
|
|
134
|
+
});
|
|
154
135
|
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
for (
|
|
158
|
-
var rendererCache = _a[_i];
|
|
136
|
+
}
|
|
137
|
+
clearRendererCache() {
|
|
138
|
+
for (const rendererCache of this._rendererCaches) {
|
|
159
139
|
rendererCache.removeRenderer();
|
|
160
140
|
}
|
|
161
141
|
this._rendererCaches.splice(0);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
return this._rendererCaches.find(
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
var rendererCache = _a[_i];
|
|
173
|
-
var renderer = rendererCache.findRenderer(view);
|
|
142
|
+
}
|
|
143
|
+
getRendererCache(context) {
|
|
144
|
+
return this._rendererCaches.find((cache) => cache.key === (0, RendererCache_1.generateRendererCacheKey)(context));
|
|
145
|
+
}
|
|
146
|
+
getRenderers(context) {
|
|
147
|
+
return this.getRendererCache(context)?.renderers || [];
|
|
148
|
+
}
|
|
149
|
+
findRenderer(view) {
|
|
150
|
+
for (const rendererCache of this._rendererCaches) {
|
|
151
|
+
const renderer = rendererCache.findRenderer(view);
|
|
174
152
|
if (renderer)
|
|
175
153
|
return renderer;
|
|
176
154
|
}
|
|
177
155
|
return undefined;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
var _this = this;
|
|
156
|
+
}
|
|
157
|
+
startRendering() {
|
|
181
158
|
if (this._renderingTimer)
|
|
182
159
|
return;
|
|
183
|
-
|
|
184
|
-
if (
|
|
160
|
+
const renderingLooper = () => {
|
|
161
|
+
if (this._previousFirstFrameTime === 0) {
|
|
185
162
|
// Get the current time as the time of the first frame of per second
|
|
186
|
-
|
|
163
|
+
this._previousFirstFrameTime = performance.now();
|
|
187
164
|
// Reset the frame count
|
|
188
|
-
|
|
165
|
+
this._currentFrameCount = 0;
|
|
189
166
|
}
|
|
190
167
|
// Increase the frame count
|
|
191
|
-
++
|
|
168
|
+
++this._currentFrameCount;
|
|
192
169
|
// Get the current time
|
|
193
|
-
|
|
170
|
+
const currentFrameTime = performance.now();
|
|
194
171
|
// Calculate the time difference between the current frame and the previous frame
|
|
195
|
-
|
|
172
|
+
const deltaTime = currentFrameTime - this._previousFirstFrameTime;
|
|
196
173
|
// Calculate the expected time of the current frame
|
|
197
|
-
|
|
198
|
-
(0, Utils_1.logDebug)(new Date().toLocaleTimeString(), 'currentFrameCount',
|
|
199
|
-
if (
|
|
174
|
+
const expectedTime = (this._currentFrameCount * 1000) / this._renderingFps;
|
|
175
|
+
(0, Utils_1.logDebug)(new Date().toLocaleTimeString(), 'currentFrameCount', this._currentFrameCount, 'expectedTime', expectedTime, 'deltaTime', deltaTime);
|
|
176
|
+
if (this._rendererCaches.length === 0) {
|
|
200
177
|
// If there is no renderer, stop rendering
|
|
201
|
-
|
|
178
|
+
this.stopRendering();
|
|
202
179
|
return;
|
|
203
180
|
}
|
|
204
181
|
// Render all renderers
|
|
205
|
-
for (
|
|
206
|
-
|
|
207
|
-
_this.doRendering(rendererCache);
|
|
182
|
+
for (const rendererCache of this._rendererCaches) {
|
|
183
|
+
this.doRendering(rendererCache);
|
|
208
184
|
}
|
|
209
|
-
if (
|
|
210
|
-
|
|
185
|
+
if (this._currentFrameCount >= this.renderingFps) {
|
|
186
|
+
this._previousFirstFrameTime = 0;
|
|
211
187
|
}
|
|
212
188
|
if (deltaTime < expectedTime) {
|
|
213
189
|
// If the time difference between the current frame and the previous frame is less than the expected time, then wait for the difference
|
|
214
|
-
|
|
190
|
+
this._renderingTimer = window.setTimeout(renderingLooper, expectedTime - deltaTime);
|
|
215
191
|
}
|
|
216
192
|
else {
|
|
217
193
|
// If the time difference between the current frame and the previous frame is greater than the expected time, then render immediately
|
|
@@ -219,24 +195,22 @@ var IRendererManager = /** @class */ (function () {
|
|
|
219
195
|
}
|
|
220
196
|
};
|
|
221
197
|
renderingLooper();
|
|
222
|
-
}
|
|
223
|
-
|
|
198
|
+
}
|
|
199
|
+
stopRendering() {
|
|
224
200
|
if (this._renderingTimer) {
|
|
225
201
|
window.clearTimeout(this._renderingTimer);
|
|
226
202
|
this._renderingTimer = undefined;
|
|
227
203
|
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
for (
|
|
232
|
-
|
|
233
|
-
var result = rendererCache.setRendererContext(checkedContext);
|
|
204
|
+
}
|
|
205
|
+
setRendererContext(context) {
|
|
206
|
+
const checkedContext = this.precheckRendererContext(context);
|
|
207
|
+
for (const rendererCache of this._rendererCaches) {
|
|
208
|
+
const result = rendererCache.setRendererContext(checkedContext);
|
|
234
209
|
if (result) {
|
|
235
210
|
return true;
|
|
236
211
|
}
|
|
237
212
|
}
|
|
238
213
|
return false;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
}());
|
|
214
|
+
}
|
|
215
|
+
}
|
|
242
216
|
exports.IRendererManager = IRendererManager;
|