shjung il y a 2 ans
Parent
commit
a6b2c24820

+ 66 - 1
src/main/java/com/its/op/dto/its/scrs/TbScIxrCmraMngmDto.java

@@ -99,6 +99,30 @@ public class TbScIxrCmraMngmDto implements Serializable {
     @JsonProperty("lane_cnt")
     private Integer laneCnt;
 
+    @ApiModelProperty("WEB RTC 서버 아이피")  // Y VARCHAR2(20)
+    @JsonProperty("web_rtc_svr_ip")
+    private String webRtcSvrIp;
+
+    @ApiModelProperty("WEB RTC 서버 포트")  // Y NUMBER(5)
+    @JsonProperty("web_rtc_svr_port")
+    private Integer webRtcSvrPort;
+
+    @ApiModelProperty("WEB RTC ID")  // Y VARCHAR2(56)
+    @JsonProperty("web_rtc_id")
+    private String webRtcId;
+
+    @ApiModelProperty("RTC 서버 아이피")  // Y VARCHAR2(20)
+    @JsonProperty("rtc_svr_ip")
+    private String rtcSvrIp;
+
+    @ApiModelProperty("RTC 서버 포트")  // Y NUMBER(5)
+    @JsonProperty("rtc_svr_port")
+    private Integer rtcSvrPort;
+
+    @ApiModelProperty("RTC ID")  // Y VARCHAR2(56)
+    @JsonProperty("rtc_id")
+    private String rtcId;
+
     // Code Description Field
     @ApiModelProperty("방향 구분 코드 설명")
     @JsonProperty("drct_dvsn_desc")    // DRCT_DVSN_CD
@@ -211,8 +235,38 @@ public class TbScIxrCmraMngmDto implements Serializable {
         @PositiveOrZero
         private Integer laneCnt;
 
+        @ApiModelProperty("WEB RTC 서버 아이피, Nullable = Y, VARCHAR2(20)")  // Y VARCHAR2(20)
+        @JsonProperty("web_rtc_svr_ip")
+        @Size(min=1, max=20)
+        private String webRtcSvrIp;
+
+        @ApiModelProperty("WEB RTC 서버 포트, Nullable = Y, NUMBER(5)")  // Y NUMBER(5)
+        @JsonProperty("web_rtc_svr_port")
+        @PositiveOrZero
+        private Integer webRtcSvrPort;
+
+        @ApiModelProperty("WEB RTC ID, Nullable = Y, VARCHAR2(56)")  // Y VARCHAR2(56)
+        @JsonProperty("web_rtc_id")
+        @Size(min=1, max=56)
+        private String webRtcId;
+
+        @ApiModelProperty("RTC 서버 아이피, Nullable = Y, VARCHAR2(20)")  // Y VARCHAR2(20)
+        @JsonProperty("rtc_svr_ip")
+        @Size(min=1, max=20)
+        private String rtcSvrIp;
+
+        @ApiModelProperty("RTC 서버 포트, Nullable = Y, NUMBER(5)")  // Y NUMBER(5)
+        @JsonProperty("rtc_svr_port")
+        @PositiveOrZero
+        private Integer rtcSvrPort;
+
+        @ApiModelProperty("RTC ID, Nullable = Y, VARCHAR2(56)")  // Y VARCHAR2(56)
+        @JsonProperty("rtc_id")
+        @Size(min=1, max=56)
+        private String rtcId;
+
         @Builder
-        public TbScIxrCmraMngmUpdReq(String ixr_id, String cmra_id, Integer drct_dvsn_cd, String istl_lctn, String cmra_ip, String cmra_port, Integer use_en, String cmra_logn_id, String cmra_logn_pw, Integer cmra_http_port, String stre_url, String cmra_url, Integer cmra_type, String cmra_x_crdn, String cmra_y_crdn, Integer cmra_angl, Integer hmpg_dspl_en, Integer bus_dvrs_lane_en, Integer srvc_anly_en, Integer lane_cnt) {
+        public TbScIxrCmraMngmUpdReq(String ixr_id, String cmra_id, Integer drct_dvsn_cd, String istl_lctn, String cmra_ip, String cmra_port, Integer use_en, String cmra_logn_id, String cmra_logn_pw, Integer cmra_http_port, String stre_url, String cmra_url, Integer cmra_type, String cmra_x_crdn, String cmra_y_crdn, Integer cmra_angl, Integer hmpg_dspl_en, Integer bus_dvrs_lane_en, Integer srvc_anly_en, Integer lane_cnt, String web_rtc_svr_ip, Integer web_rtc_svr_port, String web_rtc_id, String rtc_svr_ip, Integer rtc_svr_port, String rtc_id) {
             this.ixrId = ixr_id;
             this.cmraId = cmra_id;
             this.drctDvsnCd = drct_dvsn_cd;
@@ -233,6 +287,11 @@ public class TbScIxrCmraMngmDto implements Serializable {
             this.busDvrsLaneEn = bus_dvrs_lane_en;
             this.srvcAnlyEn = srvc_anly_en;
             this.laneCnt = lane_cnt;
+            this.webRtcSvrPort = web_rtc_svr_port;
+            this.webRtcId = web_rtc_id;
+            this.rtcSvrIp = rtc_svr_ip;
+            this.rtcSvrPort = rtc_svr_port;
+            this.rtcId = rtc_id;
         }
 
         public TbScIxrCmraMngm toEntity() {
@@ -259,6 +318,12 @@ public class TbScIxrCmraMngmDto implements Serializable {
                     .busDvrsLaneEn(this.busDvrsLaneEn)
                     .srvcAnlyEn(this.srvcAnlyEn)
                     .laneCnt(this.laneCnt)
+                    .webRtcSvrIp(this.webRtcSvrIp)
+                    .webRtcSvrPort(this.webRtcSvrPort)
+                    .webRtcId(this.webRtcId)
+                    .rtcSvrIp(this.rtcSvrIp)
+                    .rtcSvrPort(this.rtcSvrPort)
+                    .rtcId(this.rtcId)
                     .build();
         }
 

+ 36 - 0
src/main/java/com/its/op/entity/its/scrs/TbScIxrCmraMngm.java

@@ -113,6 +113,30 @@ public class TbScIxrCmraMngm implements Serializable {
     @Column(name = "LANE_CNT", columnDefinition = "NUMBER", length = 2)
     private Integer laneCnt;
 
+    @ApiModelProperty("WEB RTC 서버 아이피")  // Y VARCHAR2(20)
+    @Column(name = "WEB_RTC_SVR_IP", length = 20)
+    private String webRtcSvrIp;
+
+    @ApiModelProperty("WEB RTC 서버 포트")  // Y NUMBER(5)
+    @Column(name = "WEB_RTC_SVR_PORT", columnDefinition = "NUMBER", length = 5)
+    private Integer webRtcSvrPort;
+
+    @ApiModelProperty("WEB RTC ID")  // Y VARCHAR2(56)
+    @Column(name = "WEB_RTC_ID", length = 56)
+    private String webRtcId;
+
+    @ApiModelProperty("RTC 서버 아이피")  // Y VARCHAR2(20)
+    @Column(name = "RTC_SVR_IP", length = 20)
+    private String rtcSvrIp;
+
+    @ApiModelProperty("RTC 서버 포트")  // Y NUMBER(5)
+    @Column(name = "RTC_SVR_PORT", columnDefinition = "NUMBER", length = 5)
+    private Integer rtcSvrPort;
+
+    @ApiModelProperty("RTC ID")  // Y VARCHAR2(56)
+    @Column(name = "RTC_ID", length = 56)
+    private String rtcId;
+
     @OneToOne
     @JoinColumns({
             @JoinColumn(insertable=false, updatable=false, name = "IXR_ID", referencedColumnName = "IXR_ID"),
@@ -169,6 +193,12 @@ public class TbScIxrCmraMngm implements Serializable {
                 .busDvrsLaneEn(this.busDvrsLaneEn)
                 .srvcAnlyEn(this.srvcAnlyEn)
                 .laneCnt(this.laneCnt)
+                .webRtcSvrIp(this.webRtcSvrIp)
+                .webRtcSvrPort(this.webRtcSvrPort)
+                .webRtcId(this.webRtcId)
+                .rtcSvrIp(this.rtcSvrIp)
+                .rtcSvrPort(this.rtcSvrPort)
+                .rtcId(this.rtcId)
                 .build();
     }
 
@@ -222,6 +252,12 @@ public class TbScIxrCmraMngm implements Serializable {
         this.busDvrsLaneEn = req.getBusDvrsLaneEn();
         this.srvcAnlyEn = req.getSrvcAnlyEn();
         this.laneCnt = req.getLaneCnt();
+        this.webRtcSvrIp = req.getWebRtcSvrIp();
+        this.webRtcSvrPort = req.getWebRtcSvrPort();
+        this.webRtcId = req.getWebRtcId();
+        this.rtcSvrIp = req.getRtcSvrIp();
+        this.rtcSvrPort = req.getRtcSvrPort();
+        this.rtcId = req.getRtcId();
     }
 
 }

+ 3 - 0
src/main/java/com/its/op/scheduler/ItsOpSigPhaseListener.java

@@ -59,6 +59,9 @@ public class ItsOpSigPhaseListener {
     public void shutdown() {
         this.isShutdown = true;
         if (this.executorService != null) {
+//            while (!this.executorService.isTerminated())	{
+//                // wait
+//            }
             this.executorService.shutdownNow();
         }
     }

+ 3 - 3
src/main/resources/static/application/op/05.vms/02.manager/03.symbl-vmp/02.symbl-vmp1/symbl-vmp1.js

@@ -564,7 +564,7 @@ function editEvent(){
 function addEvent(){
     let canvas = document.querySelector('.canvas');
     const image = document.querySelector('.symbl-image');
-    canvas.getContext('2d').clearRect(0, 0, image.width, image.height);
+    canvas.getContext('2d', {willReadFrequently: true}).clearRect(0, 0, image.width, image.height);
 
     $('.symbl-image').attr('src', null);
     $('.image-download-link').attr('href', '');
@@ -867,8 +867,8 @@ function canvasInit(image){
     canvas.height = image.height;
     $('.canvas').css('width', image.width);
     $('.canvas').css('height', image.height);
-    canvas.getContext('2d').clearRect(0, 0, image.width, image.height);
-    let ctx = canvas.getContext('2d');
+    canvas.getContext('2d', {willReadFrequently: true}).clearRect(0, 0, image.width, image.height);
+    let ctx = canvas.getContext('2d', {willReadFrequently: true});
     ctx.drawImage(image, 0, 0 , image.width, image.height);
     return ctx;
 }

+ 3 - 3
src/main/resources/static/application/op/05.vms/02.manager/03.symbl-vmp/03.symbl-vmp2/symbl-vmp2.js

@@ -381,7 +381,7 @@ function editEvent(){
 function addEvent(){
     let canvas = document.querySelector('.canvas');
     const image = document.querySelector('.symbl-image');
-    canvas.getContext('2d').clearRect(0, 0, image.width, image.height);
+    canvas.getContext('2d', {willReadFrequently: true}).clearRect(0, 0, image.width, image.height);
     $('.symbl-image').attr('src', null);
     $('.image-download-link').attr('href', '');
     $('.image-download-link').attr('download', '');
@@ -637,8 +637,8 @@ function canvasInit(image){
     canvas.height = image.height;
     $('.canvas').css('width', image.width);
     $('.canvas').css('height', image.height);
-    canvas.getContext('2d').clearRect(0, 0, image.width, image.height);
-    let ctx = canvas.getContext('2d');
+    canvas.getContext('2d', {willReadFrequently: true}).clearRect(0, 0, image.width, image.height);
+    let ctx = canvas.getContext('2d', {willReadFrequently: true});
     ctx.drawImage(image, 0, 0 , image.width, image.height);
     return ctx;
 }

+ 1 - 1
src/main/resources/static/libs/highchart/es-modules/Extensions/Boost/BoostAttach.js

@@ -73,7 +73,7 @@ function createAndAttachRenderer(chart, series) {
                 .add(targetGroup);
             target.renderTarget = doc.createElement('canvas');
             target.renderTargetCtx =
-                target.renderTarget.getContext('2d');
+                target.renderTarget.getContext('2d', {willReadFrequently: true});
             target.renderTargetFo.element.appendChild(target.renderTarget);
             target.boostClear = function () {
                 target.renderTarget.width =

+ 1 - 1
src/main/resources/static/libs/highchart/es-modules/Extensions/Boost/WGLRenderer.js

@@ -1065,7 +1065,7 @@ function GLRenderer(postRenderCallback) {
                 isReady: false,
                 texture: doc.createElement('canvas'),
                 handle: gl.createTexture()
-            }, ctx = props.texture.getContext('2d');
+            }, ctx = props.texture.getContext('2d', {willReadFrequently: true});
             textureHandles[name] = props;
             props.texture.width = 512;
             props.texture.height = 512;

+ 2 - 2
src/main/resources/static/libs/highchart/es-modules/Extensions/BoostCanvas.js

@@ -93,7 +93,7 @@ var initCanvasBoost = function () {
                     .image('', 0, 0, width, height)
                     .addClass('highcharts-boost-canvas')
                     .add(targetGroup);
-                target.ctx = ctx = target.canvas.getContext('2d');
+                target.ctx = ctx = target.canvas.getContext('2d', {willReadFrequently: true});
                 if (chart.inverted) {
                     ['moveTo', 'lineTo', 'rect', 'arc'].forEach(function (fn) {
                         wrap(ctx, fn, swapXY);
@@ -499,7 +499,7 @@ var initCanvasBoost = function () {
                 chart.renderTarget.attr({ href: '' });
             }
             if (chart.canvas) {
-                chart.canvas.getContext('2d').clearRect(0, 0, chart.canvas.width, chart.canvas.height);
+                chart.canvas.getContext('2d', {willReadFrequently: true}).clearRect(0, 0, chart.canvas.width, chart.canvas.height);
             }
         }
         addEvent(chart, 'predraw', clear);

+ 2 - 2
src/main/resources/static/libs/highchart/es-modules/Extensions/OfflineExporting/OfflineExporting.js

@@ -309,7 +309,7 @@ var OfflineExporting;
             }, function () {
                 // Failed due to tainted canvas
                 // Create new and untainted canvas
-                var canvas = doc.createElement('canvas'), ctx = canvas.getContext('2d'), imageWidth = svg.match(/^<svg[^>]*width\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, imageHeight = svg.match(/^<svg[^>]*height\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, downloadWithCanVG = function () {
+                var canvas = doc.createElement('canvas'), ctx = canvas.getContext('2d', {willReadFrequently: true}), imageWidth = svg.match(/^<svg[^>]*width\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, imageHeight = svg.match(/^<svg[^>]*height\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, downloadWithCanVG = function () {
                     var v = win.canvg.Canvg.fromString(ctx, svg);
                     v.start();
                     try {
@@ -570,7 +570,7 @@ var OfflineExporting;
         var img = new win.Image(), taintedHandler;
         var loadHandler = function () {
             setTimeout(function () {
-                var canvas = doc.createElement('canvas'), ctx = canvas.getContext && canvas.getContext('2d');
+                var canvas = doc.createElement('canvas'), ctx = canvas.getContext && canvas.getContext('2d', {willReadFrequently: true});
                 var dataURL;
                 try {
                     if (!ctx) {

+ 1 - 1
src/main/resources/static/libs/highchart/lib/svg2pdf.src.js

@@ -554,7 +554,7 @@
         };
         TextMeasure.prototype.canvasTextMeasure = function (text, fontFamily, fontSize, fontStyle, fontWeight) {
             var canvas = document.createElement('canvas');
-            var context = canvas.getContext('2d');
+            var context = canvas.getContext('2d', {willReadFrequently: true});
             if (context != null) {
                 context.font = [fontStyle, fontWeight, fontSize, fontFamily].join(' ');
                 return context.measureText(text).width;

+ 2 - 2
src/main/resources/static/libs/highchart/modules/boost-canvas.src.js

@@ -167,7 +167,7 @@
                             .image('', 0, 0, width, height)
                             .addClass('highcharts-boost-canvas')
                             .add(targetGroup);
-                        target.ctx = ctx = target.canvas.getContext('2d');
+                        target.ctx = ctx = target.canvas.getContext('2d', {willReadFrequently: true});
                         if (chart.inverted) {
                             ['moveTo', 'lineTo', 'rect', 'arc'].forEach(function (fn) {
                                 wrap(ctx, fn, swapXY);
@@ -585,7 +585,7 @@
                         chart.renderTarget.attr({ href: '' });
                     }
                     if (chart.canvas) {
-                        chart.canvas.getContext('2d').clearRect(0, 0, chart.canvas.width, chart.canvas.height);
+                        chart.canvas.getContext('2d', {willReadFrequently: true}).clearRect(0, 0, chart.canvas.width, chart.canvas.height);
                     }
                 }
                 addEvent(chart, 'predraw', clear);

+ 4 - 4
src/main/resources/static/libs/highchart/modules/boost.src.js

@@ -1823,7 +1823,7 @@
                             texture: doc.createElement('canvas'),
                             handle: gl.createTexture()
                         },
-                        ctx = props.texture.getContext('2d');
+                        ctx = props.texture.getContext('2d', {willReadFrequently: true});
                     textureHandles[name] = props;
                     props.texture.width = 512;
                     props.texture.height = 512;
@@ -2028,7 +2028,7 @@
                         .add(targetGroup);
                     target.renderTarget = doc.createElement('canvas');
                     target.renderTargetCtx =
-                        target.renderTarget.getContext('2d');
+                        target.renderTarget.getContext('2d', {willReadFrequently: true});
                     target.renderTargetFo.element.appendChild(target.renderTarget);
                     target.boostClear = function () {
                         target.renderTarget.width =
@@ -2827,7 +2827,7 @@
                             .image('', 0, 0, width, height)
                             .addClass('highcharts-boost-canvas')
                             .add(targetGroup);
-                        target.ctx = ctx = target.canvas.getContext('2d');
+                        target.ctx = ctx = target.canvas.getContext('2d', {willReadFrequently: true});
                         if (chart.inverted) {
                             ['moveTo', 'lineTo', 'rect', 'arc'].forEach(function (fn) {
                                 wrap(ctx, fn, swapXY);
@@ -3245,7 +3245,7 @@
                         chart.renderTarget.attr({ href: '' });
                     }
                     if (chart.canvas) {
-                        chart.canvas.getContext('2d').clearRect(0, 0, chart.canvas.width, chart.canvas.height);
+                        chart.canvas.getContext('2d', {willReadFrequently: true}).clearRect(0, 0, chart.canvas.width, chart.canvas.height);
                     }
                 }
                 addEvent(chart, 'predraw', clear);

+ 2 - 2
src/main/resources/static/libs/highchart/modules/offline-exporting.src.js

@@ -528,7 +528,7 @@
                     }, function () {
                         // Failed due to tainted canvas
                         // Create new and untainted canvas
-                        var canvas = doc.createElement('canvas'), ctx = canvas.getContext('2d'), imageWidth = svg.match(/^<svg[^>]*width\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, imageHeight = svg.match(/^<svg[^>]*height\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, downloadWithCanVG = function () {
+                        var canvas = doc.createElement('canvas'), ctx = canvas.getContext('2d', {willReadFrequently: true}), imageWidth = svg.match(/^<svg[^>]*width\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, imageHeight = svg.match(/^<svg[^>]*height\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, downloadWithCanVG = function () {
                                 var v = win.canvg.Canvg.fromString(ctx, svg);
                             v.start();
                             try {
@@ -801,7 +801,7 @@
                     taintedHandler;
                 var loadHandler = function () {
                         setTimeout(function () {
-                            var canvas = doc.createElement('canvas'), ctx = canvas.getContext && canvas.getContext('2d');
+                            var canvas = doc.createElement('canvas'), ctx = canvas.getContext && canvas.getContext('2d', {willReadFrequently: true});
                         var dataURL;
                         try {
                             if (!ctx) {

+ 9 - 9
src/main/resources/static/libs/html2.canvas/html2.canvas-1.4.1.js

@@ -4248,7 +4248,7 @@
     var testSVG = function (document) {
         var img = new Image();
         var canvas = document.createElement('canvas');
-        var ctx = canvas.getContext('2d');
+        var ctx = canvas.getContext('2d', {willReadFrequently: true});
         if (!ctx) {
             return false;
         }
@@ -4270,7 +4270,7 @@
         var size = 100;
         canvas.width = size;
         canvas.height = size;
-        var ctx = canvas.getContext('2d');
+        var ctx = canvas.getContext('2d', {willReadFrequently: true});
         if (!ctx) {
             return Promise.reject(false);
         }
@@ -5346,8 +5346,8 @@
             try {
                 clonedCanvas.width = canvas.width;
                 clonedCanvas.height = canvas.height;
-                var ctx = canvas.getContext('2d');
-                var clonedCtx = clonedCanvas.getContext('2d');
+                var ctx = canvas.getContext('2d', {willReadFrequently: true});
+                var clonedCtx = clonedCanvas.getContext('2d', {willReadFrequently: true});
                 if (clonedCtx) {
                     if (!this.options.allowTaint && ctx) {
                         clonedCtx.putImageData(ctx.getImageData(0, 0, canvas.width, canvas.height), 0, 0);
@@ -5374,7 +5374,7 @@
             var canvas = video.ownerDocument.createElement('canvas');
             canvas.width = video.offsetWidth;
             canvas.height = video.offsetHeight;
-            var ctx = canvas.getContext('2d');
+            var ctx = canvas.getContext("2d", { willReadFrequently: true });
             try {
                 if (ctx) {
                     ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
@@ -6620,7 +6620,7 @@
             var _this = _super.call(this, context, options) || this;
             _this._activeEffects = [];
             _this.canvas = options.canvas ? options.canvas : document.createElement('canvas');
-            _this.ctx = _this.canvas.getContext('2d');
+            _this.ctx = _this.canvas.getContext("2d", { willReadFrequently: true });
             if (!options.canvas) {
                 _this.canvas.width = Math.floor(options.width * options.scale);
                 _this.canvas.height = Math.floor(options.height * options.scale);
@@ -7144,7 +7144,7 @@
             var canvas = ownerDocument.createElement('canvas');
             canvas.width = Math.max(1, width);
             canvas.height = Math.max(1, height);
-            var ctx = canvas.getContext('2d');
+            var ctx = canvas.getContext('2d', {willReadFrequently: true});
             ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, width, height);
             return canvas;
         };
@@ -7192,7 +7192,7 @@
                                                 canvas = document.createElement('canvas');
                                                 canvas.width = width;
                                                 canvas.height = height;
-                                                ctx = canvas.getContext('2d');
+                                                ctx = canvas.getContext("2d", { willReadFrequently: true });
                                                 gradient_1 = ctx.createLinearGradient(x0, y0, x1, y1);
                                                 processColorStops(backgroundImage.stops, lineLength).forEach(function (colorStop) {
                                                     return gradient_1.addColorStop(colorStop.stop, asString(colorStop.color));
@@ -7566,7 +7566,7 @@
         function ForeignObjectRenderer(context, options) {
             var _this = _super.call(this, context, options) || this;
             _this.canvas = options.canvas ? options.canvas : document.createElement('canvas');
-            _this.ctx = _this.canvas.getContext('2d');
+            _this.ctx = _this.canvas.getContext("2d", { willReadFrequently: true });
             _this.options = options;
             _this.canvas.width = Math.floor(options.width * options.scale);
             _this.canvas.height = Math.floor(options.height * options.scale);

+ 1 - 1
src/main/resources/static/libs/v6.14.1-dist/ol-ext/extra/Cloud.js

@@ -64,7 +64,7 @@ ol.control.Cloud.prototype.setWind= function (options) {
 */
 ol.control.Cloud.prototype.drawCloud_ = function (event) {
   if (!this.getMap()) return;
-  var ctx = event.context || ol.ext.getMapCanvas(this.getMap()).getContext('2d');
+  var ctx = event.context || ol.ext.getMapCanvas(this.getMap()).getContext('2d', {willReadFrequently: true});
   var canvas = ctx.canvas;
 //	var ratio = event.frameState.pixelRatio;
 //	var m = Math.max(canvas.width, canvas.height);

+ 39 - 39
src/main/resources/static/libs/v6.14.1-dist/ol-ext/ol-ext.js

@@ -283,8 +283,8 @@ ol.ext.SVGFilter.prototype.applyTo = function(img) {
   var canvas = document.createElement('CANVAS');
   canvas.width = img.naturalWidth || img.width;
   canvas.height = img.naturalHeight || img.height;
-  canvas.getContext('2d').filter = 'url(#'+this.getId()+')';
-  canvas.getContext('2d').drawImage(img, 0, 0);
+  canvas.getContext('2d', {willReadFrequently: true}).filter = 'url(#'+this.getId()+')';
+  canvas.getContext('2d', {willReadFrequently: true}).drawImage(img, 0, 0);
   return canvas;
 };
 
@@ -1298,7 +1298,7 @@ ol.ext.imageLoader.pixelTransform = function(setPixel) {
         var canvas = document.createElement('canvas');
         canvas.width = size[0];
         canvas.height = size[1];
-        var ctx = canvas.getContext('2d');
+        var ctx = canvas.getContext('2d', {willReadFrequently: true});
         ctx.drawImage(img, 0, 0);
         var imgData = ctx.getImageData(0, 0, size[0], size[1]);
         var pixels = imgData.data;
@@ -1387,7 +1387,7 @@ ol.ext.imageLoader.shadedRelief = function() {
       src,
       function(data, size) {
         var canvas = document.createElement('canvas');
-        var ctx = canvas.getContext('2d');
+        var ctx = canvas.getContext('2d', {willReadFrequently: true});
         var width = canvas.width = size[0];
         var height = canvas.height = size[1];
         var imgData = ctx.getImageData(0, 0, width, height);
@@ -1455,7 +1455,7 @@ ol.ext.imageLoader.elevationMap = function(getPixelColor) {
       src,
       function(data, size) {
         var canvas = document.createElement('canvas');
-        var ctx = canvas.getContext('2d');
+        var ctx = canvas.getContext('2d', {willReadFrequently: true});
         canvas.width = size[0];
         canvas.height = size[1];
         var imgData = ctx.getImageData(0, 0, size[0], size[1]);
@@ -3215,7 +3215,7 @@ ol.legend.Legend.prototype.refresh = function() {
   var width = this.get('size')[0] + 2 * margin;
   var height = this.get('lineHeight') || this.get('size')[1] + 2 * margin;
   var canvas = this.getCanvas();
-  var ctx = canvas.getContext('2d');
+  var ctx = canvas.getContext('2d', {willReadFrequently: true});
   ctx.textAlign = 'left';
   ctx.textBaseline = 'middle';
   var ratio = ol.has.DEVICE_PIXEL_RATIO;
@@ -3330,7 +3330,7 @@ ol.legend.Legend.getLegendImage = function(item, canvas, row) {
     canvas.width = width * ratio;
     canvas.height = height * ratio;
   }
-  var ctx = canvas.getContext('2d');
+  var ctx = canvas.getContext('2d', {willReadFrequently: true});
   ctx.save();
   var vectorContext = ol.render.toContext(ctx, { pixelRatio: ratio });
   var typeGeom = item.typeGeom;
@@ -3537,7 +3537,7 @@ ol.control.CanvasBase.prototype.getContext = function(e) {
   var ctx = e.context;
   if (!ctx && this.getMap()) {
     var c = this.getMap().getViewport().getElementsByClassName('ol-fixedoverlay')[0];
-    ctx = c ? c.getContext('2d') : null;
+    ctx = c ? c.getContext('2d', {willReadFrequently: true}) : null;
   }
   return ctx;
 };
@@ -9011,7 +9011,7 @@ ol.control.Imageline.prototype._drawLink = function(e) {
   if (!this.get('linkColor') | this.isCollapsed()) return;
   var map = this.getMap();
   if (map && this._select && this._select.elt) {
-    var ctx = e.context || ol.ext.getMapCanvas(this.getMap()).getContext('2d');
+    var ctx = e.context || ol.ext.getMapCanvas(this.getMap()).getContext('2d', {willReadFrequently: true});
     var ratio = e.frameState.pixelRatio;
     var pt = [ 
       this._select.elt.offsetLeft 
@@ -10830,13 +10830,13 @@ ol.control.Print.prototype._getCanvas = function(event, imageType, canvas) {
       var size = this.getMap().getSize();
       canvas.width = size[0];
       canvas.height = size[1];
-      ctx = canvas.getContext('2d');
+      ctx = canvas.getContext('2d', {willReadFrequently: true});
       if (/jp.*g$/.test(imageType)) {
         ctx.fillStyle = this.get('bgColor') || 'white';
         ctx.fillRect(0,0,canvas.width,canvas.height);		
       }
     } else {
-      ctx = canvas.getContext('2d');
+      ctx = canvas.getContext('2d', {willReadFrequently: true});
     }
     // ol6+ : create canvas using layer canvas
     this.getMap().getViewport().querySelectorAll('.ol-layers canvas, canvas.ol-fixedoverlay').forEach(function(c) {
@@ -11314,7 +11314,7 @@ ol.control.PrintDialog = function(options) {
       var canvas = document.createElement('CANVAS');
       canvas.width = clegend.width;
       canvas.height = clegend.height;
-      var ctx = canvas.getContext('2d');
+      var ctx = canvas.getContext('2d', {willReadFrequently: true});
       ctx.fillStyle = '#fff';
       ctx.fillRect(0, 0, canvas.width, canvas.height);
       ctx.drawImage(clegend, 0, 0);
@@ -12316,7 +12316,7 @@ ol.control.Profil.prototype.getSelection = function(start, end) {
  */
 ol.control.Profil.prototype._drawGraph = function(t, style) {
   if (!t.length) return;
-  var ctx = this.canvas_.getContext('2d');
+  var ctx = this.canvas_.getContext('2d', {willReadFrequently: true});
   var scx = this.scale_[0];
   var scy = this.scale_[1];
   var dy = this.dy_;
@@ -12417,7 +12417,7 @@ ol.control.Profil.prototype.setGeometry = function(g, options) {
  */
 ol.control.Profil.prototype.refresh = function() {
   var canvas = this.canvas_;
-  var ctx = canvas.getContext('2d');
+  var ctx = canvas.getContext('2d', {willReadFrequently: true});
   var w = canvas.width;
   var h = canvas.height;
   ctx.setTransform(1, 0, 0, 1, 0, 0);
@@ -19147,7 +19147,7 @@ ol.filter.Colorize.prototype.postcompose = function(e) {
           c2 = document.createElement('CANVAS');
           c2.width = canvas.width;
           c2.height = canvas.height;
-          ctx2 = c2.getContext('2d');
+          ctx2 = c2.getContext('2d', {willReadFrequently: true});
           ctx2.drawImage (canvas, 0, 0, w, h);
           ctx2.globalCompositeOperation = 'color-burn';
           console.log(v)
@@ -19170,7 +19170,7 @@ ol.filter.Colorize.prototype.postcompose = function(e) {
         c2 = document.createElement('CANVAS');
         c2.width = canvas.width;
         c2.height = canvas.height;
-        ctx2 = c2.getContext('2d');
+        ctx2 = c2.getContext('2d', {willReadFrequently: true});
         ctx2.drawImage(canvas, 0,0);
         ctx2.globalCompositeOperation = this.get('operation');
         ctx2.fillStyle = this.get('color');
@@ -19618,7 +19618,7 @@ ol.filter.PencilSketch.prototype.postcompose = function(e) {
   var bwimg = document.createElement('canvas');
   bwimg.width = w;
   bwimg.height = h;
-  var bwctx = bwimg.getContext('2d');
+  var bwctx = bwimg.getContext('2d', {willReadFrequently: true});
   bwctx.filter = 'grayscale(1) invert(1) blur('+this.get('blur')+'px)';
   bwctx.drawImage(canvas, 0,0);
   ctx.save();
@@ -19683,7 +19683,7 @@ ol.filter.Pointillism.prototype.postcompose = function(e) {
   var img = document.createElement('canvas');
   img.width = w;
   img.height = h;
-  var ictx = img.getContext('2d');
+  var ictx = img.getContext('2d', {willReadFrequently: true});
   ictx.filter = 'saturate('+Math.round(2*this.get('saturate')*100)+'%)';
   ictx.drawImage(canvas, 0,0);
   ctx.save();
@@ -19762,7 +19762,7 @@ ol.filter.SVGFilter.prototype.postcompose = function(e) {
   var canvas = document.createElement('canvas');
   canvas.width = e.context.canvas.width;
   canvas.height = e.context.canvas.height;
-  canvas.getContext('2d').drawImage(e.context.canvas,0,0);
+  canvas.getContext('2d', {willReadFrequently: true}).drawImage(e.context.canvas,0,0);
   // Apply filter
   if (filter) {
     e.context.save();
@@ -22336,7 +22336,7 @@ ol.interaction.Flashlight.prototype.setPosition = function(e) {
 /** Postcompose function
 */
 ol.interaction.Flashlight.prototype.postcompose_ = function(e) {
-  var ctx = ol.ext.getMapCanvas(this.getMap()).getContext('2d');
+  var ctx = ol.ext.getMapCanvas(this.getMap()).getContext('2d', {willReadFrequently: true});
   var ratio = e.frameState.pixelRatio;
   var w = ctx.canvas.width;
   var h = ctx.canvas.height;
@@ -25651,7 +25651,7 @@ ol.interaction.TinkerBell.prototype.onMove = function(e) {
 */
 ol.interaction.TinkerBell.prototype.postcompose_ = function(e) {
   var delta = 15;
-  var ctx = e.context || ol.ext.getMapCanvas(this.getMap()).getContext('2d');
+  var ctx = e.context || ol.ext.getMapCanvas(this.getMap()).getContext('2d', {willReadFrequently: true});
   var dt = e.frameState.time - this.time;
   this.time = e.frameState.time;
   if (e.frameState.time-this.lastSparkle > 30 && !this.isout_) {
@@ -25801,7 +25801,7 @@ ol.interaction.TouchCompass.prototype.getCenter_ = function()
  */
 ol.interaction.TouchCompass.prototype.drawCompass_ = function(e)
 {	if (!this.getActive()) return;
-	var ctx = e.context || ol.ext.getMapCanvas(this.getMap()).getContext('2d');
+	var ctx = e.context || ol.ext.getMapCanvas(this.getMap()).getContext('2d', {willReadFrequently: true});
 	var ratio = e.frameState.pixelRatio;
 	ctx.save();
 	ctx.scale(ratio,ratio);
@@ -29111,7 +29111,7 @@ ol.source.GeoImage.prototype.calculateImage = function(extent, resolution, pixel
   var canvas = document.createElement('canvas');
   canvas.width = size[0];
   canvas.height = size[1];
-  var ctx = canvas.getContext('2d');
+  var ctx = canvas.getContext('2d', {willReadFrequently: true});
   if (!this._imageSize) return canvas;
   // transform coords to pixel
   function tr(xy) {
@@ -29731,7 +29731,7 @@ ol.source.IDW.prototype.setData = function(v, data, i) {
 ol.source.IDW.prototype.getValue = function(coord) {
   if (!this._canvas) return null
   var pt = this.transform(coord);
-  var v = this._canvas.getContext('2d').getImageData(Math.round(pt[0]), Math.round(pt[1]), 1, 1).data;
+  var v = this._canvas.getContext('2d', {willReadFrequently: true}).getImageData(Math.round(pt[0]), Math.round(pt[1]), 1, 1).data;
   return (v);
 };
 /** Calculate IDW at extent / resolution
@@ -29748,7 +29748,7 @@ ol.source.IDW.prototype.calculateImage = function(extent, resolution, pixelRatio
   var canvas = document.createElement('CANVAS');
   var width = canvas.width = Math.round(size[0] / (this.get('scale')*pixelRatio));
   var height = canvas.height = Math.round(size[1] / (this.get('scale')*pixelRatio));
-  var ctx = canvas.getContext('2d');
+  var ctx = canvas.getContext('2d', {willReadFrequently: true});
   var imageData = ctx.getImageData(0, 0, width, height);
   // Transform coords to pixel / value
   var pts = [];
@@ -29796,7 +29796,7 @@ ol.source.IDW.prototype.calculateImage = function(extent, resolution, pixelRatio
   // Draw full resolution canvas
   this._canvas.width = Math.round(size[0]);
   this._canvas.height = Math.round(size[1]);
-  this._canvas.getContext('2d').drawImage(canvas, 0, 0, size[0], size[1]);
+  this._canvas.getContext('2d', {willReadFrequently: true}).drawImage(canvas, 0, 0, size[0], size[1]);
   return this._canvas;
 }
 
@@ -32516,7 +32516,7 @@ ol.particule.Cloud = function(options) {
   var canvas = document.createElement('CANVAS');
   canvas.width = 200;
   canvas.height = 200;
-  var ctx = canvas.getContext('2d');
+  var ctx = canvas.getContext('2d', {willReadFrequently: true});
   var grd = this.gradient = ctx.createRadialGradient(50,50, 0, 50,50, 50);
   grd.addColorStop(0, 'rgba(255,255,255,.2');
   grd.addColorStop(1, 'rgba(255,255,255,0');
@@ -32571,7 +32571,7 @@ ol.particule.Rain = function(options) {
   var canvas = document.createElement('CANVAS');
   canvas.width = 50;
   canvas.height = 50;
-  var ctx = canvas.getContext('2d');
+  var ctx = canvas.getContext('2d', {willReadFrequently: true});
   this.gradient = ctx.createRadialGradient(0,0, 0, 0,0, 25);
   this.gradient.addColorStop(0, 'rgba(0,0,80,0)');
   this.gradient.addColorStop(1, 'rgba(0,0,80,.3)');
@@ -32624,7 +32624,7 @@ ol.particule.RainDrop = function(options) {
   var canvas = document.createElement('CANVAS');
   canvas.width = 100;
   canvas.height = 100;
-  var ctx = canvas.getContext('2d');
+  var ctx = canvas.getContext('2d', {willReadFrequently: true});
   var grd = ctx.createRadialGradient(50,50, 0, 50,50, 50);
   grd.addColorStop(0, 'rgba(128,128,192,.8');
   grd.addColorStop(1, 'rgba(128,128,192,0');
@@ -32680,7 +32680,7 @@ ol.particule.Snow = function(options) {
   var canvas = document.createElement('CANVAS');
   canvas.width = 20;
   canvas.height = 20;
-  var ctx = canvas.getContext('2d');
+  var ctx = canvas.getContext('2d', {willReadFrequently: true});
   var grd = ctx.createRadialGradient(10,10, 0, 10,10, 10);
   grd.addColorStop(0, "rgba(255, 255, 255,1)");  // white
   grd.addColorStop(.8, "rgba(210, 236, 242,.8)");  // bluish
@@ -33026,7 +33026,7 @@ ol.Overlay.AnimatedCanvas = function(options) {
   this._canvas = ol.ext.element.create('CANVAS', {
     className: ((options.className || '') + ' ol-animated-overlay').trim()
   });
-  this._ctx = this._canvas.getContext('2d');
+  this._ctx = this._canvas.getContext('2d', {willReadFrequently: true});
   ol.Overlay.call(this, {
     element: this._canvas,
     stopEvent: false
@@ -36626,7 +36626,7 @@ ol.style.Chart.prototype.renderChart_ = function(pixelratio) {
   // no atlas manager is used, create a new canvas
   var canvas = this.getImage(pixelratio);
   // draw the circle on the canvas
-  var context = (canvas.getContext('2d'));
+  var context = (canvas.getContext('2d', {willReadFrequently: true}));
   context.save();
   // reset transform
   context.setTransform(pixelratio, 0, 0, pixelratio, 0, 0);
@@ -36758,7 +36758,7 @@ ol.style.FillPattern = function(options) {
   var canvas = this.canvas_ = document.createElement('canvas');
   var scale = Number(options.scale)>0 ? Number(options.scale) : 1;
   var ratio = scale*ol.has.DEVICE_PIXEL_RATIO || ol.has.DEVICE_PIXEL_RATIO;
-  var ctx = canvas.getContext('2d');
+  var ctx = canvas.getContext('2d', {willReadFrequently: true});
   if (options.image) {
     options.image.load();
     var i;
@@ -37891,7 +37891,7 @@ ol.style.FontSymbol.prototype.renderMarker_ = function(pixelratio) {
     size: canvas.width/pixelratio,
   };
   // draw the circle on the canvas
-  var context = (canvas.getContext('2d'));
+  var context = (canvas.getContext('2d', {willReadFrequently: true}));
   context.clearRect(0, 0, canvas.width, canvas.height);
   this.drawMarker_(renderOptions, context, 0, 0, pixelratio);
   // Set anchor / displacement
@@ -38309,14 +38309,14 @@ ol.style.Photo.prototype.renderPhoto_ = function(pixelratio) {
   }
   var canvas = this.getImage(pixelratio);
   // Draw hitdetection image
-  var context = this.getHitDetectionImage().getContext('2d');
+  var context = this.getHitDetectionImage().getContext('2d', {willReadFrequently: true});
   context.save();
   context.setTransform(1,0,0,1,0,0)
   this.drawBack_(context,"#000",strokeWidth, 1);
   context.fill();
   context.restore();
   // Draw the image
-  context = canvas.getContext('2d');
+  context = canvas.getContext('2d', {willReadFrequently: true});
   context.save();
   context.setTransform(pixelratio, 0, 0, pixelratio, 0, 0);
   this.drawBack_(context,strokeStyle,strokeWidth, pixelratio);
@@ -38361,7 +38361,7 @@ ol.style.Photo.prototype.drawImage_ = function(img) {
   var pixelratio = window.devicePixelRatio;
   var canvas = this.getImage(pixelratio);
   // Remove the circle on the canvas
-  var context = (canvas.getContext('2d'));
+  var context = (canvas.getContext('2d', {willReadFrequently: true}));
   var strokeWidth = 0;
   if (this._stroke) strokeWidth = this._stroke.getWidth();
   var size = 2*this._radius;
@@ -38811,7 +38811,7 @@ ol.style.Shadow.prototype.renderShadow_ = function(pixelratio) {
   var radius = this._radius;
   var canvas = this.getImage(pixelratio);
   // Remove the circle on the canvas
-  var context = (canvas.getContext('2d'));
+  var context = (canvas.getContext('2d', {willReadFrequently: true}));
   context.clearRect(0, 0, canvas.width, canvas.height);
   context.save();
   context.beginPath();
@@ -38863,7 +38863,7 @@ ol.style.StrokePattern = function(options)
 	var canvas = this.canvas_ = document.createElement('canvas');
 	var scale = Number(options.scale)>0 ? Number(options.scale) : 1;
 	var ratio = scale*ol.has.DEVICE_PIXEL_RATIO || ol.has.DEVICE_PIXEL_RATIO;
-	var ctx = canvas.getContext('2d');
+	var ctx = canvas.getContext('2d', {willReadFrequently: true});
 	if (options.image)
 	{	options.image.load();
 		var img = options.image.getImage();

+ 17 - 0
src/test/java/com/its/op/ItsOpServerApplicationTests.java

@@ -8,10 +8,27 @@ import org.jasypt.salt.StringFixedSaltGenerator;
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
 @Slf4j
 @SpringBootTest
 public class ItsOpServerApplicationTests {
 
+    void reference1() {
+        String name = "test";
+        LocalDateTime ldt = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-dd-MM HH:mm:ss.SSS");
+        System.out.println(ldt.format(formatter) + " Started thread " + name);
+        try {
+            Thread.sleep(2000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        ldt = LocalDateTime.now();
+        System.out.println(ldt.format(formatter) + "  Ended thread " + name);
+    }
+
     @Test
     void test1() {
         for (int ii = 0; ii < 24; ii++) {