summaryrefslogtreecommitdiff
path: root/services/java/com/android/server/LoadAverageService.java
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2011-07-13 19:33:41 -0700
committerDianne Hackborn <hackbod@google.com>2011-07-14 10:39:39 -0700
commitce86ba86df61de8b34b226a4eb6c23ec33e866e0 (patch)
treebd6a8d599da38dd78c28f82cf0575b4294ff7199 /services/java/com/android/server/LoadAverageService.java
parentf7537bccb2b2ca2fa6c0205c4b24acd0836c0006 (diff)
Improve handling of low memory.
Now classify background processes into a set of bins of how much memory they should try to clear. The last bin also involves destroying all activities in that process. Removed the old code for the simulator that is no longer needed (yay). The debugging features it had are now integrated into the regular oom adj code. Small fixes to load average service. Change-Id: Ic8df401714b188c73b50dbc8f8e6345b58f1f3a0
Diffstat (limited to 'services/java/com/android/server/LoadAverageService.java')
-rw-r--r--services/java/com/android/server/LoadAverageService.java59
1 files changed, 37 insertions, 22 deletions
diff --git a/services/java/com/android/server/LoadAverageService.java b/services/java/com/android/server/LoadAverageService.java
index da9fc99adcd0..e05b57061155 100644
--- a/services/java/com/android/server/LoadAverageService.java
+++ b/services/java/com/android/server/LoadAverageService.java
@@ -28,7 +28,6 @@ import android.os.Message;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
-import android.view.WindowManagerImpl;
public class LoadAverageService extends Service {
private View mView;
@@ -91,32 +90,46 @@ public class LoadAverageService extends Service {
setPadding(4, 4, 4, 4);
//setBackgroundResource(com.android.internal.R.drawable.load_average_background);
+ // Need to scale text size by density... but we won't do it
+ // linearly, because with higher dps it is nice to squeeze the
+ // text a bit to fit more of it. And with lower dps, trying to
+ // go much smaller will result in unreadable text.
+ int textSize = 10;
+ float density = c.getResources().getDisplayMetrics().density;
+ if (density < 1) {
+ textSize = 9;
+ } else {
+ textSize = (int)(10*density);
+ if (textSize < 10) {
+ textSize = 10;
+ }
+ }
mLoadPaint = new Paint();
mLoadPaint.setAntiAlias(true);
- mLoadPaint.setTextSize(10);
+ mLoadPaint.setTextSize(textSize);
mLoadPaint.setARGB(255, 255, 255, 255);
mAddedPaint = new Paint();
mAddedPaint.setAntiAlias(true);
- mAddedPaint.setTextSize(10);
+ mAddedPaint.setTextSize(textSize);
mAddedPaint.setARGB(255, 128, 255, 128);
mRemovedPaint = new Paint();
mRemovedPaint.setAntiAlias(true);
mRemovedPaint.setStrikeThruText(true);
- mRemovedPaint.setTextSize(10);
+ mRemovedPaint.setTextSize(textSize);
mRemovedPaint.setARGB(255, 255, 128, 128);
mShadowPaint = new Paint();
mShadowPaint.setAntiAlias(true);
- mShadowPaint.setTextSize(10);
+ mShadowPaint.setTextSize(textSize);
//mShadowPaint.setFakeBoldText(true);
mShadowPaint.setARGB(192, 0, 0, 0);
mLoadPaint.setShadowLayer(4, 0, 0, 0xff000000);
mShadow2Paint = new Paint();
mShadow2Paint.setAntiAlias(true);
- mShadow2Paint.setTextSize(10);
+ mShadow2Paint.setTextSize(textSize);
//mShadow2Paint.setFakeBoldText(true);
mShadow2Paint.setARGB(192, 0, 0, 0);
mLoadPaint.setShadowLayer(2, 0, 0, 0xff000000);
@@ -153,14 +166,16 @@ public class LoadAverageService extends Service {
}
@Override
- protected void onMeasure(int widthMeasureSpect, int heightMeasureSpec) {
- setMeasuredDimension(mNeededWidth, mNeededHeight);
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ setMeasuredDimension(resolveSize(mNeededWidth, widthMeasureSpec),
+ resolveSize(mNeededHeight, heightMeasureSpec));
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
- final int W = getWidth();
+ final int W = mNeededWidth;
+ final int RIGHT = getWidth()-1;
final Stats stats = mStats;
final int userTime = stats.getLastUserTime();
@@ -178,7 +193,7 @@ public class LoadAverageService extends Service {
int systemW = (systemTime*W)/totalTime;
int irqW = ((iowaitTime+irqTime+softIrqTime)*W)/totalTime;
- int x = W - mPaddingRight;
+ int x = RIGHT - mPaddingRight;
int top = mPaddingTop + 2;
int bottom = mPaddingTop + mFH - 2;
@@ -196,15 +211,15 @@ public class LoadAverageService extends Service {
}
int y = mPaddingTop - (int)mAscent;
- canvas.drawText(stats.mLoadText, W-mPaddingRight-stats.mLoadWidth-1,
+ canvas.drawText(stats.mLoadText, RIGHT-mPaddingRight-stats.mLoadWidth-1,
y-1, mShadowPaint);
- canvas.drawText(stats.mLoadText, W-mPaddingRight-stats.mLoadWidth-1,
+ canvas.drawText(stats.mLoadText, RIGHT-mPaddingRight-stats.mLoadWidth-1,
y+1, mShadowPaint);
- canvas.drawText(stats.mLoadText, W-mPaddingRight-stats.mLoadWidth+1,
+ canvas.drawText(stats.mLoadText, RIGHT-mPaddingRight-stats.mLoadWidth+1,
y-1, mShadow2Paint);
- canvas.drawText(stats.mLoadText, W-mPaddingRight-stats.mLoadWidth+1,
+ canvas.drawText(stats.mLoadText, RIGHT-mPaddingRight-stats.mLoadWidth+1,
y+1, mShadow2Paint);
- canvas.drawText(stats.mLoadText, W-mPaddingRight-stats.mLoadWidth,
+ canvas.drawText(stats.mLoadText, RIGHT-mPaddingRight-stats.mLoadWidth,
y, mLoadPaint);
int N = stats.countWorkingStats();
@@ -216,7 +231,7 @@ public class LoadAverageService extends Service {
userW = (st.rel_utime*W)/totalTime;
systemW = (st.rel_stime*W)/totalTime;
- x = W - mPaddingRight;
+ x = RIGHT - mPaddingRight;
if (systemW > 0) {
canvas.drawRect(x-systemW, top, x, bottom, mSystemPaint);
x -= systemW;
@@ -226,18 +241,18 @@ public class LoadAverageService extends Service {
x -= userW;
}
- canvas.drawText(st.name, W-mPaddingRight-st.nameWidth-1,
+ canvas.drawText(st.name, RIGHT-mPaddingRight-st.nameWidth-1,
y-1, mShadowPaint);
- canvas.drawText(st.name, W-mPaddingRight-st.nameWidth-1,
+ canvas.drawText(st.name, RIGHT-mPaddingRight-st.nameWidth-1,
y+1, mShadowPaint);
- canvas.drawText(st.name, W-mPaddingRight-st.nameWidth+1,
+ canvas.drawText(st.name, RIGHT-mPaddingRight-st.nameWidth+1,
y-1, mShadow2Paint);
- canvas.drawText(st.name, W-mPaddingRight-st.nameWidth+1,
+ canvas.drawText(st.name, RIGHT-mPaddingRight-st.nameWidth+1,
y+1, mShadow2Paint);
Paint p = mLoadPaint;
if (st.added) p = mAddedPaint;
if (st.removed) p = mRemovedPaint;
- canvas.drawText(st.name, W-mPaddingRight-st.nameWidth, y, p);
+ canvas.drawText(st.name, RIGHT-mPaddingRight-st.nameWidth, y, p);
}
}
@@ -270,7 +285,7 @@ public class LoadAverageService extends Service {
super.onCreate();
mView = new LoadView(this);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
- WindowManager.LayoutParams.WRAP_CONTENT,
+ WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|