blob: ad6543305b5993609e53c984f6016afd3f6d65de [file] [log] [blame]
/*
* Copyright (C) 2011 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.internal.util;
import java.io.FileInputStream;
import android.os.Debug;
import android.os.StrictMode;
public class MemInfoReader {
byte[] mBuffer = new byte[1024];
private long mTotalSize;
private long mFreeSize;
private long mCachedSize;
private boolean matchText(byte[] buffer, int index, String text) {
int N = text.length();
if ((index+N) >= buffer.length) {
return false;
}
for (int i=0; i<N; i++) {
if (buffer[index+i] != text.charAt(i)) {
return false;
}
}
return true;
}
private long extractMemValue(byte[] buffer, int index) {
while (index < buffer.length && buffer[index] != '\n') {
if (buffer[index] >= '0' && buffer[index] <= '9') {
int start = index;
index++;
while (index < buffer.length && buffer[index] >= '0'
&& buffer[index] <= '9') {
index++;
}
String str = new String(buffer, 0, start, index-start);
return ((long)Integer.parseInt(str)) * 1024;
}
index++;
}
return 0;
}
public void readMemInfo() {
// Permit disk reads here, as /proc/meminfo isn't really "on
// disk" and should be fast. TODO: make BlockGuard ignore
// /proc/ and /sys/ files perhaps?
StrictMode.ThreadPolicy savedPolicy = StrictMode.allowThreadDiskReads();
try {
long[] infos = new long[Debug.MEMINFO_COUNT];
Debug.getMemInfo(infos);
mTotalSize = infos[Debug.MEMINFO_TOTAL] * 1024;
mFreeSize = infos[Debug.MEMINFO_FREE] * 1024;
mCachedSize = infos[Debug.MEMINFO_CACHED] * 1024;
} finally {
StrictMode.setThreadPolicy(savedPolicy);
}
}
public long getTotalSize() {
return mTotalSize;
}
public long getFreeSize() {
return mFreeSize;
}
public long getCachedSize() {
return mCachedSize;
}
}