perfetto-ui: Checkerboard on no data

We left it up to individual tracks to checkerboard on no data
which most weren't doing. Instead handle this in the super
class.

Change-Id: Ibf54db77363f7b1c09a427f0749f62e5aebd8108
diff --git a/ui/src/frontend/checkerboard.ts b/ui/src/frontend/checkerboard.ts
index 6a126c5..6ae9487 100644
--- a/ui/src/frontend/checkerboard.ts
+++ b/ui/src/frontend/checkerboard.ts
@@ -18,7 +18,7 @@
 /**
  * Checker board the range [leftPx, rightPx].
  */
-function checkerboard(
+export function checkerboard(
     ctx: CanvasRenderingContext2D,
     heightPx: number,
     leftPx: number,
diff --git a/ui/src/frontend/track.ts b/ui/src/frontend/track.ts
index acd475c..2059cf6 100644
--- a/ui/src/frontend/track.ts
+++ b/ui/src/frontend/track.ts
@@ -14,6 +14,7 @@
 
 import {TrackState} from '../common/state';
 import {TrackData} from '../common/track_data';
+import {checkerboard} from './checkerboard';
 
 import {globals} from './globals';
 
@@ -65,6 +66,13 @@
 
   render(ctx: CanvasRenderingContext2D) {
     globals.frontendLocalState.addVisibleTrack(this.trackState.id);
-    this.renderCanvas(ctx);
+    if (this.data() === undefined) {
+      const {visibleWindowTime, timeScale} = globals.frontendLocalState;
+      const startPx = Math.floor(timeScale.timeToPx(visibleWindowTime.start));
+      const endPx = Math.ceil(timeScale.timeToPx(visibleWindowTime.end));
+      checkerboard(ctx, this.getHeight(), startPx, endPx);
+    } else {
+      this.renderCanvas(ctx);
+    }
   }
 }