// 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(); 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 { view({attrs}: m.CVnode) { 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))); } }