1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include <audio_utils/roundup.h> 18 #include "FastThreadDumpState.h" 19 20 namespace android { 21 22 FastThreadDumpState::FastThreadDumpState() : 23 mCommand(FastThreadState::INITIAL), mUnderruns(0), mOverruns(0), 24 /* mMeasuredWarmupTs({0, 0}), */ 25 mWarmupCycles(0) 26 #ifdef FAST_THREAD_STATISTICS 27 , mSamplingN(0), mBounds(0) 28 #endif 29 { 30 mMeasuredWarmupTs.tv_sec = 0; 31 mMeasuredWarmupTs.tv_nsec = 0; 32 #ifdef FAST_THREAD_STATISTICS 33 increaseSamplingN(1); 34 #endif 35 } 36 37 FastThreadDumpState::~FastThreadDumpState() 38 { 39 } 40 41 #ifdef FAST_THREAD_STATISTICS 42 void FastThreadDumpState::increaseSamplingN(uint32_t samplingN) 43 { 44 if (samplingN <= mSamplingN || samplingN > kSamplingN || roundup(samplingN) != samplingN) { 45 return; 46 } 47 uint32_t additional = samplingN - mSamplingN; 48 // sample arrays aren't accessed atomically with respect to the bounds, 49 // so clearing reduces chance for dumpsys to read random uninitialized samples 50 memset(&mMonotonicNs[mSamplingN], 0, sizeof(mMonotonicNs[0]) * additional); 51 memset(&mLoadNs[mSamplingN], 0, sizeof(mLoadNs[0]) * additional); 52 #ifdef CPU_FREQUENCY_STATISTICS 53 memset(&mCpukHz[mSamplingN], 0, sizeof(mCpukHz[0]) * additional); 54 #endif 55 mSamplingN = samplingN; 56 } 57 #endif 58 59 } // android 60