소스 검색

Fix the WebGL memory leak for Blur effect in Chrome 77 and up (#4652)

j8
Jaya Allamsetty 5 년 전
부모
커밋
d40fce741a
4개의 변경된 파일57개의 추가작업 그리고 69개의 파일을 삭제
  1. 28
    64
      package-lock.json
  2. 2
    2
      package.json
  3. 6
    1
      react/features/stream-effects/blur/JitsiStreamBlurEffect.js
  4. 21
    2
      react/features/stream-effects/blur/index.js

+ 28
- 64
package-lock.json 파일 보기

@@ -4007,37 +4007,36 @@
4007 4007
       }
4008 4008
     },
4009 4009
     "@tensorflow-models/body-pix": {
4010
-      "version": "1.1.1",
4011
-      "resolved": "https://registry.npmjs.org/@tensorflow-models/body-pix/-/body-pix-1.1.1.tgz",
4012
-      "integrity": "sha512-l9bd+b3QI7OzJjw/OuhEfeGRb5l2lRivgDHGMvQbT2Snn8nV7odHSRW55NzhU7Khl7vga00TWo5QDuVnkevQmQ=="
4010
+      "version": "1.1.2",
4011
+      "resolved": "https://registry.npmjs.org/@tensorflow-models/body-pix/-/body-pix-1.1.2.tgz",
4012
+      "integrity": "sha512-moCCTlP77v20HMg1e/Hs1LehCDLAKS32e6OUeI1MA/4HrRRO1Dq9engVCLFZUMO2+mJXdQeBdzexcFg0WQox7w=="
4013 4013
     },
4014 4014
     "@tensorflow/tfjs": {
4015
-      "version": "1.2.2",
4016
-      "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-1.2.2.tgz",
4017
-      "integrity": "sha512-HfhSzL2eTWhlT0r/A5wmo+u3bHe+an16p5wsnFH3ujn21fQ8QtGpSfDHQZjWx1kVFaQnV6KBG+17MOrRHoHlLA==",
4015
+      "version": "1.2.9",
4016
+      "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-1.2.9.tgz",
4017
+      "integrity": "sha512-9UAQnSp638FyM5eedYEM+j2R7VcNajiFmkeT5EXtf7YIurmMFNEm1sbajKJx7/ckz31YcYrVoUPc/iLhhDQl2A==",
4018 4018
       "requires": {
4019
-        "@tensorflow/tfjs-converter": "1.2.2",
4020
-        "@tensorflow/tfjs-core": "1.2.2",
4021
-        "@tensorflow/tfjs-data": "1.2.2",
4022
-        "@tensorflow/tfjs-layers": "1.2.2"
4019
+        "@tensorflow/tfjs-converter": "1.2.9",
4020
+        "@tensorflow/tfjs-core": "1.2.9",
4021
+        "@tensorflow/tfjs-data": "1.2.9",
4022
+        "@tensorflow/tfjs-layers": "1.2.9"
4023 4023
       }
4024 4024
     },
4025 4025
     "@tensorflow/tfjs-converter": {
4026
-      "version": "1.2.2",
4027
-      "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-1.2.2.tgz",
4028
-      "integrity": "sha512-NM2NcPRHpCNeJdBxHcYpmW9ZHTQ2lJFJgmgGpQ8CxSC9CtQB05bFONs3SKcwMNDE/69QBRVom5DYqLCVUg+A+g=="
4026
+      "version": "1.2.9",
4027
+      "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-1.2.9.tgz",
4028
+      "integrity": "sha512-OKmiuZicIgadT3Bv9BvM+oom7wRz9eC5rTglQnuv7VN9H0syFVuhf5oD1Ff70tGDhJjJgL+cPz01fZRxTXjRWA=="
4029 4029
     },
4030 4030
     "@tensorflow/tfjs-core": {
4031
-      "version": "1.2.2",
4032
-      "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-1.2.2.tgz",
4033
-      "integrity": "sha512-2hCHMKjh3UNpLEjbAEaurrTGJyj/KpLtMSAraWgHA1vGY0kmk50BBSbgCDmXWUVm7lyh/SkCq4/GrGDZktEs3g==",
4031
+      "version": "1.2.9",
4032
+      "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-1.2.9.tgz",
4033
+      "integrity": "sha512-s0hHZSx6rGTlkkB8u8gs5n7sIPv1GXDNHmISRy+kqGzmlpkfI2kr6WXqOWQy6wFgjzopRD8cJQjBZ9USPZnYTQ==",
4034 4034
       "requires": {
4035 4035
         "@types/offscreencanvas": "~2019.3.0",
4036 4036
         "@types/seedrandom": "2.4.27",
4037 4037
         "@types/webgl-ext": "0.0.30",
4038 4038
         "@types/webgl2": "0.0.4",
4039 4039
         "node-fetch": "~2.1.2",
4040
-        "rollup-plugin-visualizer": "~1.1.1",
4041 4040
         "seedrandom": "2.4.3"
4042 4041
       },
4043 4042
       "dependencies": {
@@ -4049,9 +4048,9 @@
4049 4048
       }
4050 4049
     },
4051 4050
     "@tensorflow/tfjs-data": {
4052
-      "version": "1.2.2",
4053
-      "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-1.2.2.tgz",
4054
-      "integrity": "sha512-oHGBoGdnCl2RyouLKplQqo+iil0iJgPbi/aoHizhpO77UBuJXlKMblH8w5GbxVAw3hKxWlqzYpxPo6rVRgehNA==",
4051
+      "version": "1.2.9",
4052
+      "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-1.2.9.tgz",
4053
+      "integrity": "sha512-Ti9Cj3pte9butuEsK5OPq0Lcqdi4wVUdtQXm0o7iYOZ0umseRzfbIb6zbdqucc2MQzOMTnRoxN+FL7LZmncsHg==",
4055 4054
       "requires": {
4056 4055
         "@types/node-fetch": "^2.1.2",
4057 4056
         "node-fetch": "~2.1.2"
@@ -4065,9 +4064,9 @@
4065 4064
       }
4066 4065
     },
4067 4066
     "@tensorflow/tfjs-layers": {
4068
-      "version": "1.2.2",
4069
-      "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-1.2.2.tgz",
4070
-      "integrity": "sha512-yzWZaZrCVpEyTkSrzMe4OOP4aGUfaaROE/zR9fPsPGGF8wLlbLNZUJjeYUmjy3G3pXGaM0mQUbLR5Vd707CVtQ=="
4067
+      "version": "1.2.9",
4068
+      "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-1.2.9.tgz",
4069
+      "integrity": "sha512-OlXYaIb1rCk5dYmpaNsPEkO7R+T0oxfS3vQGIztNJB+YxrN8mwCu3hqgpbdKhAITiP+jxO0o+7bny8MsOCkOSQ=="
4071 4070
     },
4072 4071
     "@types/istanbul-lib-coverage": {
4073 4072
       "version": "2.0.1",
@@ -4092,14 +4091,14 @@
4092 4091
       }
4093 4092
     },
4094 4093
     "@types/node": {
4095
-      "version": "12.0.10",
4096
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.10.tgz",
4097
-      "integrity": "sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ=="
4094
+      "version": "12.7.5",
4095
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.5.tgz",
4096
+      "integrity": "sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w=="
4098 4097
     },
4099 4098
     "@types/node-fetch": {
4100
-      "version": "2.3.7",
4101
-      "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.3.7.tgz",
4102
-      "integrity": "sha512-+bKtuxhj/TYSSP1r4CZhfmyA0vm/aDRQNo7vbAgf6/cZajn0SAniGGST07yvI4Q+q169WTa2/x9gEHfJrkcALw==",
4099
+      "version": "2.5.2",
4100
+      "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.2.tgz",
4101
+      "integrity": "sha512-djYYKmdNRSBtL1x4CiE9UJb9yZhwtI1VC+UxZD0psNznrUj80ywsxKlEGAE+QL1qvLjPbfb24VosjkYM6W4RSQ==",
4103 4102
       "requires": {
4104 4103
         "@types/node": "*"
4105 4104
       }
@@ -16442,35 +16441,6 @@
16442 16441
         "inherits": "^2.0.1"
16443 16442
       }
16444 16443
     },
16445
-    "rollup-plugin-visualizer": {
16446
-      "version": "1.1.1",
16447
-      "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-1.1.1.tgz",
16448
-      "integrity": "sha512-7xkSKp+dyJmSC7jg2LXqViaHuOnF1VvIFCnsZEKjrgT5ZVyiLLSbeszxFcQSfNJILphqgAEmWAUz0Z4xYScrRw==",
16449
-      "optional": true,
16450
-      "requires": {
16451
-        "mkdirp": "^0.5.1",
16452
-        "opn": "^5.4.0",
16453
-        "source-map": "^0.7.3",
16454
-        "typeface-oswald": "0.0.54"
16455
-      },
16456
-      "dependencies": {
16457
-        "opn": {
16458
-          "version": "5.5.0",
16459
-          "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
16460
-          "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
16461
-          "optional": true,
16462
-          "requires": {
16463
-            "is-wsl": "^1.1.0"
16464
-          }
16465
-        },
16466
-        "source-map": {
16467
-          "version": "0.7.3",
16468
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
16469
-          "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
16470
-          "optional": true
16471
-        }
16472
-      }
16473
-    },
16474 16444
     "rsvp": {
16475 16445
       "version": "4.8.5",
16476 16446
       "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
@@ -18460,12 +18430,6 @@
18460 18430
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
18461 18431
       "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
18462 18432
     },
18463
-    "typeface-oswald": {
18464
-      "version": "0.0.54",
18465
-      "resolved": "https://registry.npmjs.org/typeface-oswald/-/typeface-oswald-0.0.54.tgz",
18466
-      "integrity": "sha512-U1WMNp4qfy4/3khIfHMVAIKnNu941MXUfs3+H9R8PFgnoz42Hh9pboSFztWr86zut0eXC8byalmVhfkiKON/8Q==",
18467
-      "optional": true
18468
-    },
18469 18433
     "ua-parser-js": {
18470 18434
       "version": "0.7.17",
18471 18435
       "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",

+ 2
- 2
package.json 파일 보기

@@ -37,8 +37,8 @@
37 37
     "@react-native-community/async-storage": "1.3.4",
38 38
     "@react-native-community/netinfo": "4.1.5",
39 39
     "@svgr/webpack": "4.3.2",
40
-    "@tensorflow-models/body-pix": "^1.0.1",
41
-    "@tensorflow/tfjs": "^1.1.2",
40
+    "@tensorflow-models/body-pix": "1.1.2",
41
+    "@tensorflow/tfjs": "1.2.9",
42 42
     "@webcomponents/url": "0.7.1",
43 43
     "amplitude-js": "4.5.2",
44 44
     "bc-css-flags": "3.0.0",

+ 6
- 1
react/features/stream-effects/blur/JitsiStreamBlurEffect.js 파일 보기

@@ -100,7 +100,7 @@ export default class JitsiStreamBlurEffect {
100 100
         });
101 101
         this._maskFrameTimerWorker.postMessage({
102 102
             id: SET_INTERVAL,
103
-            timeMs: 200
103
+            timeMs: 50
104 104
         });
105 105
 
106 106
         return this._outputCanvasElement.captureStream(this._frameRate);
@@ -136,6 +136,11 @@ export default class JitsiStreamBlurEffect {
136 136
                 7, // Constant for background blur, integer values between 0-20
137 137
                 7 // Constant for edge blur, integer values between 0-20
138 138
             );
139
+
140
+            // Make sure we clear this buffer before feeding the segmentation data
141
+            // to drawBokehEffect for creating the blur. This fixes the memory leak
142
+            // that started happening in WebGL in Chrome 77 and up.
143
+            this._segmentationData = null;
139 144
         }
140 145
     }
141 146
 

+ 21
- 2
react/features/stream-effects/blur/index.js 파일 보기

@@ -1,7 +1,7 @@
1 1
 // @flow
2 2
 
3 3
 import { load } from '@tensorflow-models/body-pix';
4
-
4
+import * as tfc from '@tensorflow/tfjs-core';
5 5
 import JitsiStreamBlurEffect from './JitsiStreamBlurEffect';
6 6
 
7 7
 /**
@@ -11,6 +11,12 @@ import JitsiStreamBlurEffect from './JitsiStreamBlurEffect';
11 11
  */
12 12
 const bpModelPromise = load(0.25);
13 13
 
14
+/**
15
+ * Configure the Tensor Flow model to use the webgl backend which is the
16
+ * most powerful backend for the browser.
17
+ */
18
+const webGlBackend = 'webgl';
19
+
14 20
 /**
15 21
  * Creates a new instance of JitsiStreamBlurEffect.
16 22
  *
@@ -21,5 +27,18 @@ export function createBlurEffect() {
21 27
         return Promise.reject(new Error('JitsiStreamBlurEffect not supported!'));
22 28
     }
23 29
 
24
-    return bpModelPromise.then(bpmodel => new JitsiStreamBlurEffect(bpmodel));
30
+    const setBackendPromise = new Promise((resolve, reject) => {
31
+        if (tfc.getBackend() === webGlBackend) {
32
+            resolve();
33
+
34
+            return;
35
+        }
36
+
37
+        return tfc.setBackend(webGlBackend)
38
+            .then(resolve, reject);
39
+    });
40
+
41
+    return setBackendPromise
42
+        .then(() => bpModelPromise)
43
+        .then(bpmodel => new JitsiStreamBlurEffect(bpmodel));
25 44
 }

Loading…
취소
저장