blob: f4939483ed5be2b8e494bb726a38f3c9a06ac617 [file] [log] [blame]
// Copyright (C) 2022 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import m from 'mithril';
import {
Dropdown,
DropdownAttrs,
Probe,
ProbeAttrs,
Slider,
SliderAttrs,
Textarea,
TextareaAttrs,
Toggle,
ToggleAttrs,
} from '../record_widgets';
import {RecordingSectionAttrs} from './recording_sections';
const FTRACE_CATEGORIES = new Map<string, string>();
FTRACE_CATEGORIES.set('binder/*', 'binder');
FTRACE_CATEGORIES.set('block/*', 'block');
FTRACE_CATEGORIES.set('clk/*', 'clk');
FTRACE_CATEGORIES.set('ext4/*', 'ext4');
FTRACE_CATEGORIES.set('f2fs/*', 'f2fs');
FTRACE_CATEGORIES.set('i2c/*', 'i2c');
FTRACE_CATEGORIES.set('irq/*', 'irq');
FTRACE_CATEGORIES.set('kmem/*', 'kmem');
FTRACE_CATEGORIES.set('memory_bus/*', 'memory_bus');
FTRACE_CATEGORIES.set('mmc/*', 'mmc');
FTRACE_CATEGORIES.set('oom/*', 'oom');
FTRACE_CATEGORIES.set('power/*', 'power');
FTRACE_CATEGORIES.set('regulator/*', 'regulator');
FTRACE_CATEGORIES.set('sched/*', 'sched');
FTRACE_CATEGORIES.set('sync/*', 'sync');
FTRACE_CATEGORIES.set('task/*', 'task');
FTRACE_CATEGORIES.set('task/*', 'task');
FTRACE_CATEGORIES.set('vmscan/*', 'vmscan');
FTRACE_CATEGORIES.set('fastrpc/*', 'fastrpc');
export class AdvancedSettings implements
m.ClassComponent<RecordingSectionAttrs> {
view({attrs}: m.CVnode<RecordingSectionAttrs>) {
return m(
`.record-section${attrs.cssClass}`,
m(Probe,
{
title: 'Advanced ftrace config',
img: 'rec_ftrace.png',
descr:
`Enable individual events and tune the kernel-tracing (ftrace)
module. The events enabled here are in addition to those from
enabled by other probes.`,
setEnabled: (cfg, val) => cfg.ftrace = val,
isEnabled: (cfg) => cfg.ftrace,
} as ProbeAttrs,
m(Toggle, {
title: 'Resolve kernel symbols',
cssClass: '.thin',
descr: `Enables lookup via /proc/kallsyms for workqueue,
sched_blocked_reason and other events
(userdebug/eng builds only).`,
setEnabled: (cfg, val) => cfg.symbolizeKsyms = val,
isEnabled: (cfg) => cfg.symbolizeKsyms,
} as ToggleAttrs),
m(Slider, {
title: 'Buf size',
cssClass: '.thin',
values: [0, 512, 1024, 2 * 1024, 4 * 1024, 16 * 1024, 32 * 1024],
unit: 'KB',
zeroIsDefault: true,
set: (cfg, val) => cfg.ftraceBufferSizeKb = val,
get: (cfg) => cfg.ftraceBufferSizeKb,
} as SliderAttrs),
m(Slider, {
title: 'Drain rate',
cssClass: '.thin',
values: [0, 100, 250, 500, 1000, 2500, 5000],
unit: 'ms',
zeroIsDefault: true,
set: (cfg, val) => cfg.ftraceDrainPeriodMs = val,
get: (cfg) => cfg.ftraceDrainPeriodMs,
} as SliderAttrs),
m(Dropdown, {
title: 'Event groups',
cssClass: '.multicolumn.ftrace-events',
options: FTRACE_CATEGORIES,
set: (cfg, val) => cfg.ftraceEvents = val,
get: (cfg) => cfg.ftraceEvents,
} as DropdownAttrs),
m(Textarea, {
placeholder: 'Add extra events, one per line, e.g.:\n' +
'sched/sched_switch\n' +
'kmem/*',
set: (cfg, val) => cfg.ftraceExtraEvents = val,
get: (cfg) => cfg.ftraceExtraEvents,
} as TextareaAttrs)));
}
}