diff options
Diffstat (limited to 'src/com/android/settings/applications/ProcessStatsMemDetail.java')
-rw-r--r-- | src/com/android/settings/applications/ProcessStatsMemDetail.java | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/src/com/android/settings/applications/ProcessStatsMemDetail.java b/src/com/android/settings/applications/ProcessStatsMemDetail.java new file mode 100644 index 0000000..ab7dbdb --- /dev/null +++ b/src/com/android/settings/applications/ProcessStatsMemDetail.java @@ -0,0 +1,152 @@ +/* + * Copyright (C) 2014 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. + */ + +package com.android.settings.applications; + +import android.app.Fragment; +import android.os.Bundle; +import android.text.format.Formatter; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ProgressBar; +import android.widget.TextView; +import com.android.internal.app.ProcessStats; +import com.android.settings.R; + +import static com.android.settings.Utils.prepareCustomPreferencesList; + +public class ProcessStatsMemDetail extends Fragment { + public static final String EXTRA_MEM_TIMES = "mem_times"; + public static final String EXTRA_MEM_STATE_WEIGHTS = "mem_state_weights"; + public static final String EXTRA_MEM_CACHED_WEIGHT = "mem_cached_weight"; + public static final String EXTRA_MEM_FREE_WEIGHT = "mem_free_weight"; + public static final String EXTRA_MEM_ZRAM_WEIGHT = "mem_zram_weight"; + public static final String EXTRA_MEM_KERNEL_WEIGHT = "mem_kernel_weight"; + public static final String EXTRA_MEM_NATIVE_WEIGHT = "mem_native_weight"; + public static final String EXTRA_MEM_TOTAL_WEIGHT = "mem_total_weight"; + public static final String EXTRA_USE_USS = "use_uss"; + public static final String EXTRA_TOTAL_TIME = "total_time"; + + long[] mMemTimes; + double[] mMemStateWeights; + double mMemCachedWeight; + double mMemFreeWeight; + double mMemZRamWeight; + double mMemKernelWeight; + double mMemNativeWeight; + double mMemTotalWeight; + boolean mUseUss; + long mTotalTime; + + private View mRootView; + private ViewGroup mMemStateParent; + private ViewGroup mMemUseParent; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + final Bundle args = getArguments(); + mMemTimes = args.getLongArray(EXTRA_MEM_TIMES); + mMemStateWeights = args.getDoubleArray(EXTRA_MEM_STATE_WEIGHTS); + mMemCachedWeight = args.getDouble(EXTRA_MEM_CACHED_WEIGHT); + mMemFreeWeight = args.getDouble(EXTRA_MEM_FREE_WEIGHT); + mMemZRamWeight = args.getDouble(EXTRA_MEM_ZRAM_WEIGHT); + mMemKernelWeight = args.getDouble(EXTRA_MEM_KERNEL_WEIGHT); + mMemNativeWeight = args.getDouble(EXTRA_MEM_NATIVE_WEIGHT); + mMemTotalWeight = args.getDouble(EXTRA_MEM_TOTAL_WEIGHT); + mUseUss = args.getBoolean(EXTRA_USE_USS); + mTotalTime = args.getLong(EXTRA_TOTAL_TIME); + } + + @Override + public View onCreateView( + LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final View view = inflater.inflate(R.layout.process_stats_mem_details, container, false); + prepareCustomPreferencesList(container, view, view, false); + + mRootView = view; + createDetails(); + return view; + } + + @Override + public void onPause() { + super.onPause(); + } + + private void createDetails() { + mMemStateParent = (ViewGroup)mRootView.findViewById(R.id.mem_state); + mMemUseParent = (ViewGroup)mRootView.findViewById(R.id.mem_use); + + fillMemStateSection(); + fillMemUseSection(); + } + + private void addDetailsItem(ViewGroup parent, CharSequence title, + float level, CharSequence value) { + LayoutInflater inflater = getActivity().getLayoutInflater(); + ViewGroup item = (ViewGroup) inflater.inflate(R.layout.app_percentage_item, + null); + parent.addView(item); + item.findViewById(android.R.id.icon).setVisibility(View.GONE); + TextView titleView = (TextView) item.findViewById(android.R.id.title); + TextView valueView = (TextView) item.findViewById(android.R.id.text1); + titleView.setText(title); + valueView.setText(value); + ProgressBar progress = (ProgressBar) item.findViewById(android.R.id.progress); + progress.setProgress(Math.round(level*100)); + } + + private void fillMemStateSection() { + CharSequence[] labels = getResources().getTextArray(R.array.proc_stats_memory_states); + for (int i=0; i<ProcessStats.ADJ_MEM_FACTOR_COUNT; i++) { + if (mMemTimes[i] > 0) { + float level = ((float)mMemTimes[i])/mTotalTime; + addDetailsItem(mMemStateParent, labels[i], level, + Formatter.formatShortElapsedTime(getActivity(), mMemTimes[i])); + } + } + } + + private void addMemUseDetailsItem(ViewGroup parent, CharSequence title, double weight) { + if (weight > 0) { + float level = (float)(weight/mMemTotalWeight); + String value = Formatter.formatShortFileSize(getActivity(), + (long)((weight * 1024) / mTotalTime)); + addDetailsItem(parent, title, level, value); + } + } + + private void fillMemUseSection() { + CharSequence[] labels = getResources().getTextArray(R.array.proc_stats_process_states); + addMemUseDetailsItem(mMemUseParent, + getResources().getText(R.string.mem_use_kernel_type), mMemKernelWeight); + addMemUseDetailsItem(mMemUseParent, + getResources().getText(R.string.mem_use_zram_type), mMemZRamWeight); + addMemUseDetailsItem(mMemUseParent, + getResources().getText(R.string.mem_use_native_type), mMemNativeWeight); + for (int i=0; i<ProcessStats.STATE_COUNT; i++) { + addMemUseDetailsItem(mMemUseParent, labels[i], mMemStateWeights[i]); + } + addMemUseDetailsItem(mMemUseParent, + getResources().getText(R.string.mem_use_kernel_cache_type), mMemCachedWeight); + addMemUseDetailsItem(mMemUseParent, + getResources().getText(R.string.mem_use_free_type), mMemFreeWeight); + addMemUseDetailsItem(mMemUseParent, + getResources().getText(R.string.mem_use_total), mMemTotalWeight); + } +} |