[ui] Convert ftrace track impl into native plugin track.


Change-Id: Idcc96e594b7d1a90bab7ba0891febd8c76023217
diff --git a/ui/src/tracks/ftrace/index.ts b/ui/src/tracks/ftrace/index.ts
index 5a576a5..124696e 100644
--- a/ui/src/tracks/ftrace/index.ts
+++ b/ui/src/tracks/ftrace/index.ts
@@ -12,20 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-import {Vnode} from 'mithril';
-
 import {duration, Time, time} from '../../base/time';
+import {BasicAsyncTrack} from '../../common/basic_async_track';
 import {colorForString} from '../../common/colorizer';
 import {LONG, NUM, STR} from '../../common/query_result';
-import {
-  TrackAdapter,
-  TrackControllerAdapter,
-  TrackWithControllerAdapter,
-} from '../../common/track_adapter';
 import {LIMIT, TrackData} from '../../common/track_data';
 import {checkerboardExcept} from '../../frontend/checkerboard';
 import {globals} from '../../frontend/globals';
-import {NewTrackArgs} from '../../frontend/track';
 import {
   EngineProxy,
   Plugin,
@@ -44,23 +37,26 @@
   cpu?: number;
 }
 
-export const FTRACE_RAW_TRACK_KIND = 'FtraceRawTrack';
-
 const MARGIN = 2;
 const RECT_HEIGHT = 18;
 const TRACK_HEIGHT = (RECT_HEIGHT) + (2 * MARGIN);
 
-class FtraceRawTrackController extends TrackControllerAdapter<Config, Data> {
-  static readonly kind = FTRACE_RAW_TRACK_KIND;
+class FtraceRawTrack extends BasicAsyncTrack<Data> {
+  constructor(private engine: EngineProxy, private cpu: number) {
+    super();
+  }
+
+  getHeight(): number {
+    return TRACK_HEIGHT;
+  }
 
   async onBoundsChange(start: time, end: time, resolution: duration):
       Promise<Data> {
     const excludeList = Array.from(globals.state.ftraceFilter.excludedNames);
     const excludeListSql = excludeList.map((s) => `'${s}'`).join(',');
-    const cpuFilter =
-        this.config.cpu === undefined ? '' : `and cpu = ${this.config.cpu}`;
+    const cpuFilter = this.cpu === undefined ? '' : `and cpu = ${this.cpu}`;
 
-    const queryRes = await this.query(`
+    const queryRes = await this.engine.query(`
       select
         cast(ts / ${resolution} as integer) * ${resolution} as tsQuant,
         type,
@@ -91,21 +87,6 @@
     }
     return result;
   }
-}
-
-export class FtraceRawTrack extends TrackAdapter<Config, Data> {
-  static readonly kind = FTRACE_RAW_TRACK_KIND;
-  constructor(args: NewTrackArgs) {
-    super(args);
-  }
-
-  static create(args: NewTrackArgs): FtraceRawTrack {
-    return new FtraceRawTrack(args);
-  }
-
-  getHeight(): number {
-    return TRACK_HEIGHT;
-  }
 
   renderCanvas(ctx: CanvasRenderingContext2D): void {
     const {
@@ -113,7 +94,7 @@
       windowSpan,
     } = globals.frontendLocalState;
 
-    const data = this.data();
+    const data = this.data;
 
     if (data === undefined) return;  // Can't possibly draw anything.
 
@@ -152,10 +133,6 @@
       ctx.restore();
     }
   }
-
-  getContextMenu(): Vnode<any, {}>|null {
-    return null;
-  }
 }
 
 class FtraceRawPlugin implements Plugin {
@@ -165,18 +142,12 @@
     const cpus = await this.lookupCpuCores(ctx.engine);
     for (const cpuNum of cpus) {
       const uri = `perfetto.FtraceRaw#cpu${cpuNum}`;
-      const config: Config = {cpu: cpuNum};
 
       ctx.addTrack({
         uri,
         displayName: `Ftrace Track for CPU ${cpuNum}`,
         trackFactory: () => {
-          return new TrackWithControllerAdapter<Config, Data>(
-              ctx.engine,
-              uri,
-              config,
-              FtraceRawTrack,
-              FtraceRawTrackController);
+          return new FtraceRawTrack(ctx.engine, cpuNum);
         },
       });
     }