Replace Polymer Legacy this.debounce with simple debounce utility

Change-Id: I23e4388d047062cb093144978d0c3a646bf8517f
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-highlight/gr-diff-highlight.ts b/polygerrit-ui/app/elements/diff/gr-diff-highlight/gr-diff-highlight.ts
index fb28e2b..5ccb3b3 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-highlight/gr-diff-highlight.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-highlight/gr-diff-highlight.ts
@@ -30,6 +30,7 @@
 import {GrDiffBuilderElement} from '../gr-diff-builder/gr-diff-builder-element';
 import {FILE} from '../gr-diff/gr-diff-line';
 import {getRange, getSide} from '../gr-diff/gr-diff-utils';
+import {debounce, DelayedTask} from '../../../utils/async-util';
 
 interface SidedRange {
   side: Side;
@@ -53,8 +54,6 @@
   rootId: string;
 }
 
-const DEBOUNCER_SELECTION_CHANGE = 'selectionChange';
-
 @customElement('gr-diff-highlight')
 export class GrDiffHighlight extends LegacyElementMixin(PolymerElement) {
   static get template() {
@@ -73,6 +72,8 @@
   @property({type: Object, notify: true})
   selectedRange?: SidedRange;
 
+  private selectionChangeTask?: DelayedTask;
+
   /** @override */
   created() {
     super.created();
@@ -89,7 +90,7 @@
 
   /** @override */
   disconnectedCallback() {
-    this.cancelDebouncer(DEBOUNCER_SELECTION_CHANGE);
+    this.selectionChangeTask?.cancel();
     super.disconnectedCallback();
   }
 
@@ -127,8 +128,8 @@
     // quick 'c' press after the selection change. If you wait less than 10
     // ms, then you will have about 50 _handleSelection calls when doing a
     // simple drag for select.
-    this.debounce(
-      DEBOUNCER_SELECTION_CHANGE,
+    this.selectionChangeTask = debounce(
+      this.selectionChangeTask,
       () => this._handleSelection(selection, isMouseUp),
       10
     );
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js
index 0bb7e7e..53a2404 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js
@@ -158,6 +158,7 @@
       element.reload();
       // Multiple cascading microtasks are scheduled.
       await flush();
+      await flush();
       // Reporting can be called with other parameters (ex. PluginsLoaded),
       // but only 'Diff Total Render' is important in this test.
       assert.equal(
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts
index 178f1aa..4b91ead 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts
@@ -32,6 +32,7 @@
 import {customElement, property} from '@polymer/decorators';
 import {DiffContent} from '../../../types/diff';
 import {Side} from '../../../constants/constants';
+import {debounce, DelayedTask} from '../../../utils/async-util';
 
 const WHOLE_FILE = -1;
 
@@ -63,8 +64,6 @@
  */
 const MAX_GROUP_SIZE = 120;
 
-const DEBOUNCER_RESET_IS_SCROLLING = 'resetIsScrolling';
-
 /**
  * Converts the API's `DiffContent`s  to `GrDiffGroup`s for rendering.
  *
@@ -113,6 +112,8 @@
   @property({type: Boolean})
   _isScrolling?: boolean;
 
+  private resetIsScrollingTask?: DelayedTask;
+
   /** @override */
   connectedCallback() {
     super.connectedCallback();
@@ -121,7 +122,7 @@
 
   /** @override */
   disconnectedCallback() {
-    this.cancelDebouncer(DEBOUNCER_RESET_IS_SCROLLING);
+    this.resetIsScrollingTask?.cancel();
     this.cancel();
     window.removeEventListener('scroll', this.handleWindowScroll);
     super.disconnectedCallback();
@@ -129,11 +130,9 @@
 
   private readonly handleWindowScroll = () => {
     this._isScrolling = true;
-    this.debounce(
-      DEBOUNCER_RESET_IS_SCROLLING,
-      () => {
-        this._isScrolling = false;
-      },
+    this.resetIsScrollingTask = debounce(
+      this.resetIsScrollingTask,
+      () => (this._isScrolling = false),
       50
     );
   };
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.ts b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.ts
index d36c1fd..3ee87c0 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.ts
@@ -75,6 +75,7 @@
 } from '../../../api/diff';
 import {isSafari} from '../../../utils/dom-util';
 import {assertIsDefined} from '../../../utils/common-util';
+import {debounce, DelayedTask} from '../../../utils/async-util';
 
 const NO_NEWLINE_BASE = 'No newline at end of base file.';
 const NO_NEWLINE_REVISION = 'No newline at end of revision file.';
@@ -92,8 +93,6 @@
  */
 const COMMIT_MSG_LINE_LENGTH = 72;
 
-const RENDER_DIFF_TABLE_DEBOUNCE_NAME = 'renderDiffTable';
-
 export interface LineOfInterest {
   number: number;
   leftSide: boolean;
@@ -283,6 +282,8 @@
   @property({type: Array})
   layers?: DiffLayer[];
 
+  private renderDiffTableTask?: DelayedTask;
+
   /** @override */
   created() {
     super.created();
@@ -302,7 +303,7 @@
 
   /** @override */
   disconnectedCallback() {
-    this.cancelDebouncer(RENDER_DIFF_TABLE_DEBOUNCE_NAME);
+    this.renderDiffTableTask?.cancel();
     this._unobserveIncrementalNodes();
     this._unobserveNodes();
     super.disconnectedCallback();
@@ -475,7 +476,7 @@
   /** Cancel any remaining diff builder rendering work. */
   cancel() {
     this.$.diffBuilder.cancel();
-    this.cancelDebouncer(RENDER_DIFF_TABLE_DEBOUNCE_NAME);
+    this.renderDiffTableTask?.cancel();
   }
 
   getCursorStops(): Array<HTMLElement | AbortStop> {
@@ -774,7 +775,7 @@
    * render once.
    */
   _debounceRenderDiffTable() {
-    this.debounce(RENDER_DIFF_TABLE_DEBOUNCE_NAME, () =>
+    this.renderDiffTableTask = debounce(this.renderDiffTableTask, () =>
       this._renderDiffTable()
     );
   }
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.js b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.js
index c6bd8d6..1827def 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.js
@@ -660,14 +660,14 @@
           change_type: 'MODIFIED',
           content: [{skip: 66}],
         };
-        element.flushDebouncer('renderDiffTable');
+        element.renderDiffTableTask.flush();
       });
 
       test('change in preferences re-renders diff', () => {
         sinon.stub(element, '_renderDiffTable');
         element.prefs = {
           ...MINIMAL_PREFS, time_format: 'HHMM_12'};
-        element.flushDebouncer('renderDiffTable');
+        element.renderDiffTableTask.flush();
         assert.isTrue(element._renderDiffTable.called);
       });
 
@@ -676,14 +676,14 @@
         const newPrefs1 = {...MINIMAL_PREFS,
           line_wrapping: true};
         element.prefs = newPrefs1;
-        element.flushDebouncer('renderDiffTable');
+        element.renderDiffTableTask.flush();
         assert.isTrue(element._renderDiffTable.called);
         stub.reset();
 
         const newPrefs2 = {...newPrefs1};
         delete newPrefs2.line_wrapping;
         element.prefs = newPrefs2;
-        element.flushDebouncer('renderDiffTable');
+        element.renderDiffTableTask.flush();
         assert.isTrue(element._renderDiffTable.called);
       });
 
@@ -693,7 +693,7 @@
         element.noRenderOnPrefsChange = true;
         element.prefs = {
           ...MINIMAL_PREFS, time_format: 'HHMM_12'};
-        element.flushDebouncer('renderDiffTable');
+        element.renderDiffTableTask.flush();
         assert.isFalse(element._renderDiffTable.called);
       });
     });