FastThreadDumpState.h revision 214b406c813e5baca3e4b5cdc1d986de35f09bbb
1045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten/* 2045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten * Copyright (C) 2014 The Android Open Source Project 3045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten * 4045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten * you may not use this file except in compliance with the License. 6045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten * You may obtain a copy of the License at 7045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten * 8045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten * 10045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten * Unless required by applicable law or agreed to in writing, software 11045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten * See the License for the specific language governing permissions and 14045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten * limitations under the License. 15045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten */ 16045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten 17045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten#ifndef ANDROID_AUDIO_FAST_THREAD_DUMP_STATE_H 18045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten#define ANDROID_AUDIO_FAST_THREAD_DUMP_STATE_H 19045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten 20045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten#include "Configuration.h" 21045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten#include "FastThreadState.h" 22045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten 23045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kastennamespace android { 24045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten 25045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten// FIXME extract common part of comment at FastMixerDumpState 26045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kastenstruct FastThreadDumpState { 27045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten FastThreadDumpState(); 28045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten /*virtual*/ ~FastThreadDumpState(); 29045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten 30045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten FastThreadState::Command mCommand; // current command 31045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten uint32_t mUnderruns; // total number of underruns 32045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten uint32_t mOverruns; // total number of overruns 33045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten struct timespec mMeasuredWarmupTs; // measured warmup time 34045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten uint32_t mWarmupCycles; // number of loop cycles required to warmup 35045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten 36214b406c813e5baca3e4b5cdc1d986de35f09bbbGlenn Kasten#ifdef FAST_THREAD_STATISTICS 37045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten // Recently collected samples of per-cycle monotonic time, thread CPU time, and CPU frequency. 38045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten // kSamplingN is max size of sampling frame (statistics), and must be a power of 2 <= 0x8000. 39045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten // The sample arrays are virtually allocated based on this compile-time constant, 40045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten // but are only initialized and used based on the runtime parameter mSamplingN. 41045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten static const uint32_t kSamplingN = 0x8000; 42045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten // Corresponding runtime maximum size of sample arrays, must be a power of 2 <= kSamplingN. 43045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten uint32_t mSamplingN; 44045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten // The bounds define the interval of valid samples, and are represented as follows: 45045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten // newest open (excluded) endpoint = lower 16 bits of bounds, modulo N 46045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten // oldest closed (included) endpoint = upper 16 bits of bounds, modulo N 47045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten // Number of valid samples is newest - oldest. 48045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten uint32_t mBounds; // bounds for mMonotonicNs, mThreadCpuNs, and mCpukHz 49045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten // The elements in the *Ns arrays are in units of nanoseconds <= 3999999999. 50045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten uint32_t mMonotonicNs[kSamplingN]; // delta monotonic (wall clock) time 51045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten uint32_t mLoadNs[kSamplingN]; // delta CPU load in time 52045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten#ifdef CPU_FREQUENCY_STATISTICS 53045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten uint32_t mCpukHz[kSamplingN]; // absolute CPU clock frequency in kHz, bits 0-3 are CPU# 54045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten#endif 55045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten#endif 56045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten 57045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten}; // struct FastThreadDumpState 58045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten 59045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten} // android 60045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten 61045ee7ea3e42b8657869d81c917feed5fb0c2b4aGlenn Kasten#endif // ANDROID_AUDIO_FAST_THREAD_DUMP_STATE_H 62