summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/render-status.html
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/render-status.html')
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/render-status.html133
1 files changed, 133 insertions, 0 deletions
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/render-status.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/render-status.html
new file mode 100644
index 00000000000..151f74ebc05
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/render-status.html
@@ -0,0 +1,133 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="boot.html">
+
+<script>
+(function() {
+
+ 'use strict';
+
+ let scheduled = false;
+ let beforeRenderQueue = [];
+ let afterRenderQueue = [];
+
+ function schedule() {
+ scheduled = true;
+ // before next render
+ requestAnimationFrame(function() {
+ scheduled = false;
+ flushQueue(beforeRenderQueue);
+ // after the render
+ setTimeout(function() {
+ runQueue(afterRenderQueue);
+ });
+ });
+ }
+
+ function flushQueue(queue) {
+ while (queue.length) {
+ callMethod(queue.shift());
+ }
+ }
+
+ function runQueue(queue) {
+ for (let i=0, l=queue.length; i < l; i++) {
+ callMethod(queue.shift());
+ }
+ }
+
+ function callMethod(info) {
+ const context = info[0];
+ const callback = info[1];
+ const args = info[2];
+ try {
+ callback.apply(context, args);
+ } catch(e) {
+ setTimeout(() => {
+ throw e;
+ });
+ }
+ }
+
+ function flush() {
+ while (beforeRenderQueue.length || afterRenderQueue.length) {
+ flushQueue(beforeRenderQueue);
+ flushQueue(afterRenderQueue);
+ }
+ scheduled = false;
+ }
+
+ /**
+ * Module for scheduling flushable pre-render and post-render tasks.
+ *
+ * @namespace
+ * @memberof Polymer
+ * @summary Module for scheduling flushable pre-render and post-render tasks.
+ */
+ Polymer.RenderStatus = {
+
+ /**
+ * Enqueues a callback which will be run before the next render, at
+ * `requestAnimationFrame` timing.
+ *
+ * This method is useful for enqueuing work that requires DOM measurement,
+ * since measurement may not be reliable in custom element callbacks before
+ * the first render, as well as for batching measurement tasks in general.
+ *
+ * Tasks in this queue may be flushed by calling `Polymer.RenderStatus.flush()`.
+ *
+ * @memberof Polymer.RenderStatus
+ * @param {*} context Context object the callback function will be bound to
+ * @param {function(...*):void} callback Callback function
+ * @param {!Array=} args An array of arguments to call the callback function with
+ * @return {void}
+ */
+ beforeNextRender: function(context, callback, args) {
+ if (!scheduled) {
+ schedule();
+ }
+ beforeRenderQueue.push([context, callback, args]);
+ },
+
+ /**
+ * Enqueues a callback which will be run after the next render, equivalent
+ * to one task (`setTimeout`) after the next `requestAnimationFrame`.
+ *
+ * This method is useful for tuning the first-render performance of an
+ * element or application by deferring non-critical work until after the
+ * first paint. Typical non-render-critical work may include adding UI
+ * event listeners and aria attributes.
+ *
+ * @memberof Polymer.RenderStatus
+ * @param {*} context Context object the callback function will be bound to
+ * @param {function(...*):void} callback Callback function
+ * @param {!Array=} args An array of arguments to call the callback function with
+ * @return {void}
+ */
+ afterNextRender: function(context, callback, args) {
+ if (!scheduled) {
+ schedule();
+ }
+ afterRenderQueue.push([context, callback, args]);
+ },
+
+ /**
+ * Flushes all `beforeNextRender` tasks, followed by all `afterNextRender`
+ * tasks.
+ *
+ * @memberof Polymer.RenderStatus
+ * @return {void}
+ */
+ flush: flush
+
+ };
+
+})();
+</script>