This is an automated email from the ASF dual-hosted git repository.

bchapuis pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git


The following commit(s) were added to refs/heads/main by this push:
     new ba74025e Display framerate in dev mode and missing license headers 
(#813)
ba74025e is described below

commit ba74025eb8c1ac1b1de3dcb75bbdd97d4d6bc67f
Author: Bertil Chapuis <[email protected]>
AuthorDate: Sat Dec 16 14:14:10 2023 +0100

    Display framerate in dev mode and missing license headers (#813)
---
 .../main/resources/assets/maplibre-gl-framerate.js | 204 +++++++++++++++++++++
 .../main/resources/assets/maplibre-gl-inspect.css  |  35 ++++
 .../main/resources/assets/maplibre-gl-inspect.js   |  34 ++++
 .../assets/maplibre-gl-tile-boundaries.css         |  18 +-
 .../assets/maplibre-gl-tile-boundaries.js          |  17 ++
 .../src/main/resources/assets/viewer.html          |   7 +-
 6 files changed, 313 insertions(+), 2 deletions(-)

diff --git a/baremaps-server/src/main/resources/assets/maplibre-gl-framerate.js 
b/baremaps-server/src/main/resources/assets/maplibre-gl-framerate.js
new file mode 100644
index 00000000..5df1302c
--- /dev/null
+++ b/baremaps-server/src/main/resources/assets/maplibre-gl-framerate.js
@@ -0,0 +1,204 @@
+/**
+ * Copyright (c) 2019, Mapbox
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Source:
+ * https://github.com/mapbox/mapbox-gl-framerate
+ */
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? 
module.exports = factory() :
+        typeof define === 'function' && define.amd ? define(factory) :
+            (global.FrameRateControl = factory());
+}(this, (function () { 'use strict';
+
+    function _classCallCheck(instance, Constructor) {
+        if (!(instance instanceof Constructor)) {
+            throw new TypeError("Cannot call a class as a function");
+        }
+    }
+
+    function _defineProperty(obj, key, value) {
+        if (key in obj) {
+            Object.defineProperty(obj, key, {
+                value: value,
+                enumerable: true,
+                configurable: true,
+                writable: true
+            });
+        } else {
+            obj[key] = value;
+        }
+
+        return obj;
+    }
+
+    function _objectSpread(target) {
+        for (var i = 1; i < arguments.length; i++) {
+            var source = arguments[i] != null ? arguments[i] : {};
+            var ownKeys = Object.keys(source);
+
+            if (typeof Object.getOwnPropertySymbols === 'function') {
+                ownKeys = 
ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
+                    return Object.getOwnPropertyDescriptor(source, 
sym).enumerable;
+                }));
+            }
+
+            ownKeys.forEach(function (key) {
+                _defineProperty(target, key, source[key]);
+            });
+        }
+
+        return target;
+    }
+
+    var FrameRateControl = function FrameRateControl(options) {
+        var _this = this;
+
+        _classCallCheck(this, FrameRateControl);
+
+        _defineProperty(this, "onAdd", function (map) {
+            _this.map = map;
+            var dpr = window.devicePixelRatio;
+            var _this$options = _this.options,
+                width = _this$options.width,
+                graphWidth = _this$options.graphWidth,
+                graphHeight = _this$options.graphHeight,
+                color = _this$options.color,
+                background = _this$options.background,
+                font = _this$options.font;
+            var el = _this.container = document.createElement('div');
+            el.className = 'maplibregl-ctrl maplibregl-ctrl-fps';
+            el.style.backgroundColor = background;
+            el.style.borderRadius = '6px';
+            _this.readOutput = document.createElement('div');
+            _this.readOutput.style.color = color;
+            _this.readOutput.style.fontFamily = font;
+            _this.readOutput.style.padding = '0 5px 5px';
+            _this.readOutput.style.fontSize = '9px';
+            _this.readOutput.style.fontWeight = 'bold';
+            _this.readOutput.textContent = 'Waiting…';
+            _this.canvas = document.createElement('canvas');
+            _this.canvas.className = 'maplibregl-ctrl-canvas';
+            _this.canvas.width = width;
+            _this.canvas.height = graphHeight;
+            _this.canvas.style.cssText = "width: ".concat(width / dpr, "px; 
height: ").concat(graphHeight / dpr, "px;");
+            el.appendChild(_this.readOutput);
+            el.appendChild(_this.canvas);
+
+            _this.map.on('movestart', _this.onMoveStart);
+
+            _this.map.on('moveend', _this.onMoveEnd);
+
+            return _this.container;
+        });
+
+        _defineProperty(this, "onMoveStart", function () {
+            _this.frames = 0;
+            _this.time = performance.now();
+
+            _this.map.on('render', _this.onRender);
+        });
+
+        _defineProperty(this, "onMoveEnd", function () {
+            var now = performance.now();
+
+            _this.updateGraph(_this.getFPS(now));
+
+            _this.frames = 0;
+            _this.time = null;
+
+            _this.map.off('render', _this.onRender);
+        });
+
+        _defineProperty(this, "onRender", function () {
+            _this.frames++;
+            var now = performance.now();
+
+            if (now >= _this.time + 1e3) {
+                _this.updateGraph(_this.getFPS(now));
+
+                _this.frames = 0;
+                _this.time = now;
+            }
+        });
+
+        _defineProperty(this, "getFPS", function (now) {
+            _this.totalTime += now - _this.time, _this.totalFrames += 
_this.frames;
+            return Math.round(1e3 * _this.frames / (now - _this.time)) || 0;
+        });
+
+        _defineProperty(this, "updateGraph", function (fpsNow) {
+            var _this$options2 = _this.options,
+                barWidth = _this$options2.barWidth,
+                graphRight = _this$options2.graphRight,
+                graphTop = _this$options2.graphTop,
+                graphWidth = _this$options2.graphWidth,
+                graphHeight = _this$options2.graphHeight,
+                background = _this$options2.background,
+                color = _this$options2.color;
+
+            var context = _this.canvas.getContext('2d');
+
+            var fps = Math.round(1e3 * _this.totalFrames / _this.totalTime) || 
0;
+            var rect = (barWidth);
+            context.fillStyle = background;
+            context.globalAlpha = 1;
+            context.fillRect(0, 0, graphWidth, graphTop);
+            context.fillStyle = color;
+            _this.readOutput.textContent = "".concat(fpsNow, " FPS 
(").concat(fps, " Avg)");
+            context.drawImage(_this.canvas, graphRight + rect, graphTop, 
graphWidth - rect, graphHeight, graphRight, graphTop, graphWidth - rect, 
graphHeight);
+            context.fillRect(graphRight + graphWidth - rect, graphTop, rect, 
graphHeight);
+            context.fillStyle = background;
+            context.globalAlpha = 0.75;
+            context.fillRect(graphRight + graphWidth - rect, graphTop, rect, 
(1 - fpsNow / 100) * graphHeight);
+        });
+
+        _defineProperty(this, "onRemove", function () {
+            _this.map.off('render', _this.onRender);
+
+            _this.map.off('movestart', _this.onMoveStart);
+
+            _this.map.off('moveend', _this.onMoveEnd);
+
+            _this.container.parentNode.removeChild(_this.container);
+
+            _this.map = null;
+            return _this;
+        });
+
+        var _dpr = window.devicePixelRatio;
+        var defaultOptions = {
+            background: 'rgba(0,0,0,0.9)',
+            barWidth: 4 * _dpr,
+            color: '#7cf859',
+            font: 'Monaco, Consolas, Courier, monospace',
+            graphHeight: 60 * _dpr,
+            graphWidth: 90 * _dpr,
+            graphTop: 0,
+            graphRight: 5 * _dpr,
+            width: 100 * _dpr
+        };
+        this.frames = 0;
+        this.totalTime = 0;
+        this.totalFrames = 0;
+        this.options = _objectSpread({}, options, defaultOptions);
+    };
+
+    if (window.maplibregl) {
+        maplibregl.FrameRateControl = FrameRateControl;
+    }
+
+    return FrameRateControl;
+
+})));
\ No newline at end of file
diff --git a/baremaps-server/src/main/resources/assets/maplibre-gl-inspect.css 
b/baremaps-server/src/main/resources/assets/maplibre-gl-inspect.css
index 6730686e..ac300630 100644
--- a/baremaps-server/src/main/resources/assets/maplibre-gl-inspect.css
+++ b/baremaps-server/src/main/resources/assets/maplibre-gl-inspect.css
@@ -1,3 +1,38 @@
+/**
+ * BSD 3-Clause License
+ *
+ * Copyright (c) 2017, Lukas Martinelli
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice, 
this
+ *   list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ *
+ * * Neither the name of the copyright holder nor the names of its
+ *   contributors may be used to endorse or promote products derived from
+ *   this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Source:
+ * https://github.com/acalcutt/maplibre-gl-inspect
+ */
+
 .maplibregl-inspect_popup {
   color: #333;
   display: table;
diff --git a/baremaps-server/src/main/resources/assets/maplibre-gl-inspect.js 
b/baremaps-server/src/main/resources/assets/maplibre-gl-inspect.js
index 04f6d757..a2ef598c 100644
--- a/baremaps-server/src/main/resources/assets/maplibre-gl-inspect.js
+++ b/baremaps-server/src/main/resources/assets/maplibre-gl-inspect.js
@@ -1 +1,35 @@
+/**
+ * BSD 3-Clause License
+ *
+ * Copyright (c) 2017, Lukas Martinelli
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice, 
this
+ *   list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ *
+ * * Neither the name of the copyright holder nor the names of its
+ *   contributors may be used to endorse or promote products derived from
+ *   this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Source:
+ * https://github.com/acalcutt/maplibre-gl-inspect
+ */
 !function(t){"object"==typeof exports&&"undefined"!=typeof 
module?module.exports=t():"function"==typeof 
define&&define.amd?define([],t):("undefined"!=typeof 
window?window:"undefined"!=typeof global?global:"undefined"!=typeof 
self?self:this).MaplibreInspect=t()}(function(){return function 
r(o,i,s){function a(e,t){if(!i[e]){if(!o[e]){var n="function"==typeof 
require&&require;if(!t&&n)return n(e,!0);if(u)return u(e,!0);throw(n=new 
Error("Cannot find module '"+e+"'")).code="MODULE_NOT_FOUND" [...]
\ No newline at end of file
diff --git 
a/baremaps-server/src/main/resources/assets/maplibre-gl-tile-boundaries.css 
b/baremaps-server/src/main/resources/assets/maplibre-gl-tile-boundaries.css
index 3f4b10d6..72324efc 100644
--- a/baremaps-server/src/main/resources/assets/maplibre-gl-tile-boundaries.css
+++ b/baremaps-server/src/main/resources/assets/maplibre-gl-tile-boundaries.css
@@ -1,3 +1,20 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 .maplibregl-ctrl-hide-boundaries {
     background-image: url("data:image/svg+xml,%3Csvg 
xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3C!--! Font Awesome 
Pro 6.2.0 by @fontawesome - https://fontawesome.com License - 
https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, 
Inc. --%3E%3Cpath d='M32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32s32-14.3 
32-32s-14.3-32-32-32zm96 64c17.7 0 32-14.3 32-32s-14.3-32-32-32s-32 14.3-32 
32s14.3 32 32 32zm0-384c17.7 0 32-14.3 32-32s-14.3-32-32-32s-32 14.3- [...]
     background-repeat: no-repeat;
@@ -11,4 +28,3 @@
     background-size: 20px 20px;
     background-position: 5px 5px;
 }
-
diff --git 
a/baremaps-server/src/main/resources/assets/maplibre-gl-tile-boundaries.js 
b/baremaps-server/src/main/resources/assets/maplibre-gl-tile-boundaries.js
index 2e1d089f..75991dd0 100644
--- a/baremaps-server/src/main/resources/assets/maplibre-gl-tile-boundaries.js
+++ b/baremaps-server/src/main/resources/assets/maplibre-gl-tile-boundaries.js
@@ -1,3 +1,20 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 function container(child, show) {
     var container = document.createElement('div');
     container.className = 'maplibregl-ctrl maplibregl-ctrl-group';
diff --git a/baremaps-server/src/main/resources/assets/viewer.html 
b/baremaps-server/src/main/resources/assets/viewer.html
index 48d7a73c..c20877bc 100644
--- a/baremaps-server/src/main/resources/assets/viewer.html
+++ b/baremaps-server/src/main/resources/assets/viewer.html
@@ -21,6 +21,7 @@ limitations under the License.
   <script src='/maplibre-gl-inspect.js'></script>
   <script src='/maplibre-gl-tile-boundaries.js'></script>
   <script src='/maplibre-custom-controls.js'></script>
+  <script src='/maplibre-gl-framerate.js'></script>
   <link href='https://unpkg.com/[email protected]/dist/maplibre-gl.css' 
rel='stylesheet' />
   <link href='/maplibre-gl-inspect.css' rel='stylesheet' />
   <link href='/maplibre-gl-tile-boundaries.css' rel='stylesheet' />
@@ -109,7 +110,11 @@ limitations under the License.
     bearing: map.getBearing(),
     hash: false,
     interactive: false,
-  })
+  });
+
+  // Add the framerate control to the map
+  const fps = new maplibregl.FrameRateControl();
+  map.addControl(fps);
 
   // Add the navigation control to the map
   map.addControl(new maplibregl.NavigationControl());

Reply via email to