diff options
3 files changed, 87 insertions, 49 deletions
diff --git a/src/com/android/settings/applications/ProcessStatsUi.java b/src/com/android/settings/applications/ProcessStatsUi.java index 03e4b75..30a8817 100644 --- a/src/com/android/settings/applications/ProcessStatsUi.java +++ b/src/com/android/settings/applications/ProcessStatsUi.java @@ -404,10 +404,11 @@ public class ProcessStatsUi extends PreferenceFragment mAppListGroup.removeAll(); mAppListGroup.setOrderingAsAdded(false); + final long elapsedTime = mStats.mTimePeriodEndRealtime-mStats.mTimePeriodStartRealtime; + mMemStatusPref.setOrder(-2); mAppListGroup.addPreference(mMemStatusPref); - String durationString = Utils.formatElapsedTime(getActivity(), - mStats.mTimePeriodEndRealtime-mStats.mTimePeriodStartRealtime, false); + String durationString = Utils.formatElapsedTime(getActivity(), elapsedTime, false); CharSequence memString; CharSequence[] memStatesStr = getResources().getTextArray(R.array.ram_states); if (mMemState >= 0 && mMemState < memStatesStr.length) { @@ -480,6 +481,15 @@ public class ProcessStatsUi extends PreferenceFragment int badnessColor = badColors[1 + Math.round(memBadness*(badColors.length-2))]; colors.setColors(badnessColor, badnessColor, badnessColor); + // We are now going to scale the mMemTimes to match the total elapsed time. + // These are in uptime, so they will often be smaller than the elapsed time, + // but if the user taps on the bar we want to show the times to them. It is confusing + // to see them be smaller than what we told them the measured duration is, so just + // scaling them up with make things look reasonable with them none the wiser. + for (int i=0; i<ProcessStats.ADJ_MEM_FACTOR_COUNT; i++) { + mMemTimes[i] = (long)((mMemTimes[i]*(double)elapsedTime)/mTotalTime); + } + ProcessStats.TotalMemoryUseCollection totalMem = new ProcessStats.TotalMemoryUseCollection( ProcessStats.ALL_SCREEN_ADJ, memStates); mStats.computeTotalMemoryUse(totalMem, now); @@ -728,15 +738,22 @@ public class ProcessStatsUi extends PreferenceFragment if (DEBUG) Log.d(TAG, "-------------------- BUILDING UI"); - for (int i=0, N=(entries != null ? entries.size() : 0); i<N; i++) { - ProcStatsEntry proc = entries.get(i); + // Find where we should stop. Because we have two properties we are looking at, + // we need to go from the back looking for the first place either holds. + int end = entries != null ? entries.size()-1 : -1; + while (end >= 0) { + ProcStatsEntry proc = entries.get(end); final double percentOfWeight = (((double)proc.mWeight) / mMaxWeight) * 100; final double percentOfTime = (((double)proc.mDuration) / memTotalTime) * 100; - if (percentOfWeight < 1 && percentOfTime < 33) { - if (DEBUG) Log.d(TAG, "Skipping " + proc.mName + " weight=" + percentOfWeight - + " time=" + percentOfTime); - continue; + if (percentOfWeight >= 1 || percentOfTime >= 25) { + break; } + end--; + } + for (int i=0; i<=end; i++) { + ProcStatsEntry proc = entries.get(i); + final double percentOfWeight = (((double)proc.mWeight) / mMaxWeight) * 100; + final double percentOfTime = (((double)proc.mDuration) / memTotalTime) * 100; ProcessStatsPreference pref = new ProcessStatsPreference(getActivity()); pref.init(null, proc); proc.evaluateTargetPackage(pm, mStats, totals, sEntryCompare, mUseUss, diff --git a/src/com/android/settings/applications/RunningProcessesView.java b/src/com/android/settings/applications/RunningProcessesView.java index 58b37ec..13d9655 100644 --- a/src/com/android/settings/applications/RunningProcessesView.java +++ b/src/com/android/settings/applications/RunningProcessesView.java @@ -75,18 +75,19 @@ public class RunningProcessesView extends FrameLayout View mHeader; ServiceListAdapter mAdapter; LinearColorBar mColorBar; + TextView mBackgroundProcessPrefix; + TextView mAppsProcessPrefix; + TextView mForegroundProcessPrefix; TextView mBackgroundProcessText; TextView mAppsProcessText; TextView mForegroundProcessText; - - int mLastNumBackgroundProcesses = -1; - int mLastNumForegroundProcesses = -1; - int mLastNumServiceProcesses = -1; - long mLastBackgroundProcessMemory = -1; - long mLastForegroundProcessMemory = -1; - long mLastServiceProcessMemory = -1; - long mLastAvailMemory = -1; - + + long mCurTotalRam = -1; + long mCurHighRam = -1; // "System" or "Used" + long mCurMedRam = -1; // "Apps" or "Cached" + long mCurLowRam = -1; // "Free" + boolean mCurShowCached = false; + Dialog mCurDialog; MemInfoReader mMemInfoReader = new MemInfoReader(); @@ -98,7 +99,7 @@ public class RunningProcessesView extends FrameLayout ViewHolder mHolder; long mFirstRunTime; boolean mSetBackground; - + void updateTime(Context context, StringBuilder builder) { TextView uptimeView = null; @@ -126,7 +127,7 @@ public class RunningProcessesView extends FrameLayout uptimeView = mHolder.uptime; } } - + if (uptimeView != null) { mSetBackground = false; if (mFirstRunTime >= 0) { @@ -228,8 +229,7 @@ public class RunningProcessesView extends FrameLayout mShowBackground = showBackground; mState.setWatchingBackgroundItems(showBackground); refreshItems(); - notifyDataSetChanged(); - mColorBar.setShowingGreen(mShowBackground); + refreshUi(true); } } @@ -329,53 +329,71 @@ public class RunningProcessesView extends FrameLayout mDataAvail = null; } + mMemInfoReader.readMemInfo(); + + /* // This is the amount of available memory until we start killing // background services. - mMemInfoReader.readMemInfo(); long availMem = mMemInfoReader.getFreeSize() + mMemInfoReader.getCachedSize() - SECONDARY_SERVER_MEM; if (availMem < 0) { availMem = 0; } + */ synchronized (mState.mLock) { - if (mLastNumBackgroundProcesses != mState.mNumBackgroundProcesses - || mLastBackgroundProcessMemory != mState.mBackgroundProcessMemory - || mLastNumForegroundProcesses != mState.mNumForegroundProcesses - || mLastForegroundProcessMemory != mState.mForegroundProcessMemory - || mLastNumServiceProcesses != mState.mNumServiceProcesses - || mLastServiceProcessMemory != mState.mServiceProcessMemory - || mLastAvailMemory != availMem) { - mLastNumBackgroundProcesses = mState.mNumBackgroundProcesses; - mLastBackgroundProcessMemory = mState.mBackgroundProcessMemory; - mLastForegroundProcessMemory = mState.mForegroundProcessMemory; - mLastServiceProcessMemory = mState.mServiceProcessMemory; - mLastAvailMemory = availMem; - long freeMem = mLastAvailMemory + mLastBackgroundProcessMemory; + if (mCurShowCached != mAdapter.mShowBackground) { + mCurShowCached = mAdapter.mShowBackground; + if (mCurShowCached) { + mForegroundProcessPrefix.setText(getResources().getText( + R.string.running_processes_header_used_prefix)); + mAppsProcessPrefix.setText(getResources().getText( + R.string.running_processes_header_cached_prefix)); + } else { + mForegroundProcessPrefix.setText(getResources().getText( + R.string.running_processes_header_system_prefix)); + mAppsProcessPrefix.setText(getResources().getText( + R.string.running_processes_header_apps_prefix)); + } + } + + final long totalRam = mMemInfoReader.getTotalSize(); + final long medRam; + final long lowRam; + if (mCurShowCached) { + lowRam = mMemInfoReader.getFreeSize() + mMemInfoReader.getCachedSize(); + medRam = mState.mBackgroundProcessMemory; + } else { + lowRam = mMemInfoReader.getFreeSize() + mMemInfoReader.getCachedSize() + + mState.mBackgroundProcessMemory; + medRam = mState.mServiceProcessMemory; + + } + final long highRam = totalRam - medRam - lowRam; + + if (mCurTotalRam != totalRam || mCurHighRam != highRam || mCurMedRam != medRam + || mCurLowRam != lowRam) { + mCurTotalRam = totalRam; + mCurHighRam = highRam; + mCurMedRam = medRam; + mCurLowRam = lowRam; BidiFormatter bidiFormatter = BidiFormatter.getInstance(); String sizeStr = bidiFormatter.unicodeWrap( - Formatter.formatShortFileSize(getContext(), freeMem)); + Formatter.formatShortFileSize(getContext(), lowRam)); mBackgroundProcessText.setText(getResources().getString( R.string.running_processes_header_ram, sizeStr)); sizeStr = bidiFormatter.unicodeWrap( - Formatter.formatShortFileSize(getContext(), - mLastForegroundProcessMemory + mLastServiceProcessMemory)); + Formatter.formatShortFileSize(getContext(), medRam)); mAppsProcessText.setText(getResources().getString( R.string.running_processes_header_ram, sizeStr)); sizeStr = bidiFormatter.unicodeWrap( - Formatter.formatShortFileSize(getContext(), - mMemInfoReader.getTotalSize() - freeMem - - mLastForegroundProcessMemory - mLastServiceProcessMemory)); + Formatter.formatShortFileSize(getContext(), highRam)); mForegroundProcessText.setText(getResources().getString( R.string.running_processes_header_ram, sizeStr)); + mColorBar.setRatios(highRam/(float)totalRam, + medRam/(float)totalRam, + lowRam/(float)totalRam); } - - float totalMem = mMemInfoReader.getTotalSize(); - float totalShownMem = availMem + mLastBackgroundProcessMemory - + mLastServiceProcessMemory; - mColorBar.setRatios((totalMem-totalShownMem)/totalMem, - mLastServiceProcessMemory/totalMem, - mLastBackgroundProcessMemory/totalMem); } } @@ -435,6 +453,9 @@ public class RunningProcessesView extends FrameLayout mColorBar.setColors(res.getColor(R.color.running_processes_system_ram), res.getColor(R.color.running_processes_apps_ram), res.getColor(R.color.running_processes_free_ram)); + mBackgroundProcessPrefix = (TextView)mHeader.findViewById(R.id.freeSizePrefix); + mAppsProcessPrefix = (TextView)mHeader.findViewById(R.id.appsSizePrefix); + mForegroundProcessPrefix = (TextView)mHeader.findViewById(R.id.systemSizePrefix); mBackgroundProcessText = (TextView)mHeader.findViewById(R.id.freeSize); mAppsProcessText = (TextView)mHeader.findViewById(R.id.appsSize); mForegroundProcessText = (TextView)mHeader.findViewById(R.id.systemSize); diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java index 7aebb17..c16708d 100644 --- a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java +++ b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java @@ -1011,7 +1011,7 @@ public class BatteryHistoryChart extends View { mTimeRemainPath.close(); } - if (mStartWallTime > 0) { + if (mStartWallTime > 0 && mEndWallTime > mStartWallTime) { // Create the time labels at the bottom. boolean is24hr = is24Hour(); Calendar calStart = Calendar.getInstance(); |