diff options
Diffstat (limited to 'ui/src/tracks/ftrace/index.ts')
-rw-r--r-- | ui/src/tracks/ftrace/index.ts | 44 |
1 files changed, 17 insertions, 27 deletions
diff --git a/ui/src/tracks/ftrace/index.ts b/ui/src/tracks/ftrace/index.ts index e82934dae..8cd40f330 100644 --- a/ui/src/tracks/ftrace/index.ts +++ b/ui/src/tracks/ftrace/index.ts @@ -17,7 +17,8 @@ import {Vnode} from 'mithril'; import {colorForString} from '../../common/colorizer'; import {PluginContext} from '../../common/plugin_api'; import {NUM, STR} from '../../common/query_result'; -import {fromNs, toNsCeil, toNsFloor} from '../../common/time'; +import {fromNs, TPDuration} from '../../common/time'; +import {TPTime} from '../../common/time'; import {TrackData} from '../../common/track_data'; import {LIMIT} from '../../common/track_data'; import { @@ -29,12 +30,7 @@ import {NewTrackArgs, Track} from '../../frontend/track'; export interface Data extends TrackData { - // Total number of events within [start, end], before any quantization. - numEvents: number; - - // Below: data quantized by resolution and aggregated by event priority. timestamps: Float64Array; - names: string[]; } @@ -51,14 +47,8 @@ const TRACK_HEIGHT = (RECT_HEIGHT) + (2 * MARGIN); class FtraceRawTrackController extends TrackController<Config, Data> { static readonly kind = FTRACE_RAW_TRACK_KIND; - async onBoundsChange(start: number, end: number, resolution: number): + async onBoundsChange(start: TPTime, end: TPTime, resolution: TPDuration): Promise<Data> { - const startNs = toNsFloor(start); - const endNs = toNsCeil(end); - - // |resolution| is in s/px the frontend wants. - const quantNs = toNsCeil(resolution); - const excludeList = Array.from(globals.state.ftraceFilter.excludedNames); const excludeListSql = excludeList.map((s) => `'${s}'`).join(','); const cpuFilter = @@ -66,35 +56,32 @@ class FtraceRawTrackController extends TrackController<Config, Data> { const queryRes = await this.query(` select - cast(ts / ${quantNs} as integer) * ${quantNs} as tsQuant, + cast(ts / ${resolution} as integer) * ${resolution} as tsQuant, type, - count(type) as numEvents, name from ftrace_event where name not in (${excludeListSql}) and - ts >= ${startNs} and ts <= ${endNs} ${cpuFilter} + ts >= ${start} and ts <= ${end} ${cpuFilter} group by tsQuant order by tsQuant limit ${LIMIT};`); const rowCount = queryRes.numRows(); - const result = { + const result: Data = { start, end, resolution, length: rowCount, - numEvents: 0, timestamps: new Float64Array(rowCount), names: [], - } as Data; + }; const it = queryRes.iter( - {tsQuant: NUM, type: STR, numEvents: NUM, name: STR}, + {tsQuant: NUM, type: STR, name: STR}, ); for (let row = 0; it.valid(); it.next(), row++) { result.timestamps[row] = fromNs(it.tsQuant); result.names[row] = it.name; - result.numEvents += it.numEvents; } return result; } @@ -115,16 +102,19 @@ export class FtraceRawTrack extends Track<Config, Data> { } renderCanvas(ctx: CanvasRenderingContext2D): void { - const {timeScale, visibleWindowTime} = globals.frontendLocalState; + const { + visibleTimeScale, + windowSpan, + } = globals.frontendLocalState; const data = this.data(); if (data === undefined) return; // Can't possibly draw anything. - const dataStartPx = timeScale.timeToPx(data.start); - const dataEndPx = timeScale.timeToPx(data.end); - const visibleStartPx = timeScale.timeToPx(visibleWindowTime.start); - const visibleEndPx = timeScale.timeToPx(visibleWindowTime.end); + const dataStartPx = visibleTimeScale.tpTimeToPx(data.start); + const dataEndPx = visibleTimeScale.tpTimeToPx(data.end); + const visibleStartPx = windowSpan.start; + const visibleEndPx = windowSpan.end; checkerboardExcept( ctx, @@ -145,7 +135,7 @@ export class FtraceRawTrack extends Track<Config, Data> { ${Math.min(color.l + 10, 60)}% )`; ctx.fillStyle = hsl; - const xPos = Math.floor(timeScale.timeToPx(data.timestamps[i])); + const xPos = Math.floor(visibleTimeScale.secondsToPx(data.timestamps[i])); // Draw a diamond over the event ctx.save(); |