From 640a399278c2633fc885b522238b25ce88c4e864 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 18 Jun 2015 11:21:00 -0700 Subject: [PATCH] [Workers] Add example worker Add an example worker which inefficiently calculates fibonacci numbers outside of the UI thread, for #12. --- example/worker/README.md | 1 + example/worker/bundle.json | 16 ++++++ example/worker/src/FibonacciIndicator.js | 70 ++++++++++++++++++++++++ example/worker/src/FibonacciWorker.js | 15 +++++ platform/execution/bundle.json | 1 + 5 files changed, 103 insertions(+) create mode 100644 example/worker/README.md create mode 100644 example/worker/bundle.json create mode 100644 example/worker/src/FibonacciIndicator.js create mode 100644 example/worker/src/FibonacciWorker.js diff --git a/example/worker/README.md b/example/worker/README.md new file mode 100644 index 0000000000..811539ddeb --- /dev/null +++ b/example/worker/README.md @@ -0,0 +1 @@ +Example of running a Web Worker using the `workerService`. diff --git a/example/worker/bundle.json b/example/worker/bundle.json new file mode 100644 index 0000000000..2241aca2a6 --- /dev/null +++ b/example/worker/bundle.json @@ -0,0 +1,16 @@ +{ + "extensions": { + "indicators": [ + { + "implementation": "FibonacciIndicator.js", + "depends": [ "workerService", "$rootScope" ] + } + ], + "workers": [ + { + "key": "example.fibonacci", + "scriptUrl": "FibonacciWorker.js" + } + ] + } +} diff --git a/example/worker/src/FibonacciIndicator.js b/example/worker/src/FibonacciIndicator.js new file mode 100644 index 0000000000..77a55bc531 --- /dev/null +++ b/example/worker/src/FibonacciIndicator.js @@ -0,0 +1,70 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed 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. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +/*global define*/ + +define( + [], + function () { + "use strict"; + + /** + * Displays Fibonacci numbers in the status area. + * @constructor + */ + function FibonacciIndicator(workerService, $rootScope) { + var latest, + counter = 0, + worker = workerService.run('example.fibonacci'); + + function requestNext() { + worker.postMessage([counter]); + counter += 1; + } + + function handleResponse(event) { + latest = event.data; + $rootScope.$apply(); + requestNext(); + } + + worker.onmessage = handleResponse; + requestNext(); + + return { + getGlyph: function () { + return "?"; + }, + getText: function () { + return latest; + }, + getGlyphClass: function () { + return ""; + }, + getDescription: function () { + return ""; + } + }; + } + + return FibonacciIndicator; + } +); diff --git a/example/worker/src/FibonacciWorker.js b/example/worker/src/FibonacciWorker.js new file mode 100644 index 0000000000..2d0d5832a6 --- /dev/null +++ b/example/worker/src/FibonacciWorker.js @@ -0,0 +1,15 @@ +/*global onmessage,postMessage*/ +(function () { + "use strict"; + + // Calculate fibonacci numbers inefficiently. + // We can do this because we're on a background thread, and + // won't halt the UI. + function fib(n) { + return n < 2 ? n : (fib(n - 1) + fib(n - 2)); + } + + onmessage = function (event) { + postMessage(fib(event.data)); + }; +}()); diff --git a/platform/execution/bundle.json b/platform/execution/bundle.json index ce12852ee9..6e6ea83eee 100644 --- a/platform/execution/bundle.json +++ b/platform/execution/bundle.json @@ -3,6 +3,7 @@ "services": [ { "key": "workerService", + "implementation": "WorkerService.js", "depends": [ "$window", "workers[]" ] } ]