aboutsummaryrefslogtreecommitdiff
path: root/ui/src/tracks/ftrace/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'ui/src/tracks/ftrace/index.ts')
-rw-r--r--ui/src/tracks/ftrace/index.ts44
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();