blob: a23acfd80f4ac9634b863b89cd506bfb7f163f14 [file] [log] [blame]
// Copyright (C) 2021 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 {
oneOf,
num,
bool,
arrayOf,
str,
requiredStr,
record,
runValidator,
ValidatedType,
} from './validators';
const recordModes = ['STOP_WHEN_FULL', 'RING_BUFFER', 'LONG_TRACE'] as const;
export const recordConfigValidator = record({
mode: oneOf(recordModes, 'STOP_WHEN_FULL'),
durationMs: num(10000.0),
maxFileSizeMb: num(100),
fileWritePeriodMs: num(2500),
bufferSizeMb: num(64.0),
cpuSched: bool(),
cpuFreq: bool(),
cpuFreqPollMs: num(1000),
cpuSyscall: bool(),
gpuFreq: bool(),
gpuMemTotal: bool(),
ftrace: bool(),
atrace: bool(),
ftraceEvents: arrayOf(str()),
ftraceExtraEvents: str(),
atraceCats: arrayOf(str()),
allAtraceApps: bool(true),
atraceApps: str(),
ftraceBufferSizeKb: num(0),
ftraceDrainPeriodMs: num(0),
androidLogs: bool(),
androidLogBuffers: arrayOf(str()),
androidFrameTimeline: bool(),
androidGameInterventionList: bool(),
androidNetworkTracing: bool(),
androidNetworkTracingPollMs: num(250),
cpuCoarse: bool(),
cpuCoarsePollMs: num(1000),
batteryDrain: bool(),
batteryDrainPollMs: num(1000),
boardSensors: bool(),
memHiFreq: bool(),
meminfo: bool(),
meminfoPeriodMs: num(1000),
meminfoCounters: arrayOf(str()),
vmstat: bool(),
vmstatPeriodMs: num(1000),
vmstatCounters: arrayOf(str()),
heapProfiling: bool(),
hpSamplingIntervalBytes: num(4096),
hpProcesses: str(),
hpContinuousDumpsPhase: num(),
hpContinuousDumpsInterval: num(),
hpSharedMemoryBuffer: num(8 * 1048576),
hpBlockClient: bool(true),
hpAllHeaps: bool(),
javaHeapDump: bool(),
jpProcesses: str(),
jpContinuousDumpsPhase: num(),
jpContinuousDumpsInterval: num(),
memLmk: bool(),
procStats: bool(),
procStatsPeriodMs: num(1000),
chromeCategoriesSelected: arrayOf(str()),
chromeHighOverheadCategoriesSelected: arrayOf(str()),
chromePrivacyFiltering: bool(),
chromeLogs: bool(),
taskScheduling: bool(),
ipcFlows: bool(),
jsExecution: bool(),
webContentRendering: bool(),
uiRendering: bool(),
inputEvents: bool(),
navigationAndLoading: bool(),
symbolizeKsyms: bool(),
});
export const namedRecordConfigValidator = record(
{title: requiredStr, key: requiredStr, config: recordConfigValidator});
export type NamedRecordConfig =
ValidatedType<typeof namedRecordConfigValidator>;
export type RecordConfig = ValidatedType<typeof recordConfigValidator>;
export function createEmptyRecordConfig(): RecordConfig {
return runValidator(recordConfigValidator, {}).result;
}