/*
* Copyright (C) 2011-2012 sakuramilk <c.sakuramilk@gmail.com>
*
* 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 net.sakuramilk.TweakGS2.General;
import android.content.Context;
import net.sakuramilk.util.Misc;
import net.sakuramilk.util.RootProcess;
import net.sakuramilk.util.SettingManager;
import net.sakuramilk.util.SysFs;
public class VirtualMemorySetting extends SettingManager {
public static final String KEY_VM_SWAPPINESS = "vm_swappiness";
public static final String KEY_VM_VFS_CACHE_PRESSURE = "vm_vfs_cache_pressure";
public static final String KEY_VM_DIRTY_EXPIRE_CENTISECS = "vm_dirty_expire_centisecs";
public static final String KEY_VM_DIRTY_RATIO = "vm_dirty_ratio";
public static final String KEY_VM_DIRTY_WRITEBACK_CENTISECS = "vm_dirty_writeback_centisecs";
public static final String KEY_VM_DIRTY_BACKGROUND_RATIO = "vm_dirty_background_ratio";
public final SysFs mSysFsVmSwappiness = new SysFs("/proc/sys/vm/swappiness");
public final SysFs mSysFsVfsCachePressure = new SysFs("/proc/sys/vm/vfs_cache_pressure");
public final SysFs mSysFsVmDirtyExpireCentisecs = new SysFs("/proc/sys/vm/dirty_expire_centisecs");
public final SysFs mSysFsVmDirtyRatio = new SysFs("/proc/sys/vm/dirty_ratio");
public final SysFs mSysFsVmDirtyWritebackCentisecs = new SysFs("/proc/sys/vm/dirty_writeback_centisecs");
public final SysFs mSysFsVmDirtyBackgroundRatio = new SysFs("/proc/sys/vm/dirty_background_ratio");
public VirtualMemorySetting(Context context, RootProcess rootProcess) {
super(context, rootProcess);
}
public VirtualMemorySetting(Context context) {
this(context, null);
}
public String getVmSwappiness() {
return mSysFsVmSwappiness.read(mRootProcess);
}
public void setVmSwappiness(String value) {
mSysFsVmSwappiness.write(value, mRootProcess);
}
public String loadVmSwappiness() {
return getStringValue(KEY_VM_SWAPPINESS);
}
public void saveVmSwappiness(String value) {
setValue(KEY_VM_SWAPPINESS, value);
}
public String loadVmVfsCachePressure() {
return getStringValue(KEY_VM_VFS_CACHE_PRESSURE);
}
public void saveVmVfsCachePressure(String value) {
setValue(KEY_VM_VFS_CACHE_PRESSURE, value);
}
public String getVmVfsCachePressure() {
return mSysFsVfsCachePressure.read(mRootProcess);
}
public void setVmVfsCachePressure(String value) {
mSysFsVfsCachePressure.write(value, mRootProcess);
}
public String getVmDirtyExpireCentisecs() {
return mSysFsVmDirtyExpireCentisecs.read(mRootProcess);
}
public void setVmDirtyExpireCentisecs(String value) {
mSysFsVmDirtyExpireCentisecs.write(value, mRootProcess);
}
public String loadVmDirtyExpireCentisecs() {
return getStringValue(KEY_VM_DIRTY_EXPIRE_CENTISECS);
}
public void saveVmDirtyExpireCentisecs(String value) {
setValue(KEY_VM_DIRTY_EXPIRE_CENTISECS, value);
}
public String getVmDirtyWritebackCentisecs() {
return mSysFsVmDirtyWritebackCentisecs.read(mRootProcess);
}
public void setVmDirtyWritebackCentisecs(String value) {
mSysFsVmDirtyWritebackCentisecs.write(value, mRootProcess);
}
public String loadVmDirtyWritebackCentisecs() {
return getStringValue(KEY_VM_DIRTY_WRITEBACK_CENTISECS);
}
public void saveVmDirtyWritebackCentisecs(String value) {
setValue(KEY_VM_DIRTY_WRITEBACK_CENTISECS, value);
}
public String loadVmDirtyRatio() {
return getStringValue(KEY_VM_DIRTY_RATIO);
}
public void saveVmDirtyRatio(String value) {
setValue(KEY_VM_DIRTY_RATIO, value);
}
public String getVmDirtyRatio() {
return mSysFsVmDirtyRatio.read(mRootProcess);
}
public void setVmDirtyRatio(String value) {
mSysFsVmDirtyRatio.write(value, mRootProcess);
}
public String loadVmDirtyBackgroundRatio() {
return getStringValue(KEY_VM_DIRTY_BACKGROUND_RATIO);
}
public void saveVmDirtyBackgroundRatio(String value) {
setValue(KEY_VM_DIRTY_BACKGROUND_RATIO, value);
}
public String getVmDirtyBackgroundRatio() {
return mSysFsVmDirtyBackgroundRatio.read(mRootProcess);
}
public void setVmDirtyBackgroundRatio(String value) {
mSysFsVmDirtyBackgroundRatio.write(value, mRootProcess);
}
@Override
public void setOnBoot() {
String value = loadVmSwappiness();
if (!Misc.isNullOfEmpty(value)) {
setVmSwappiness(value);
}
value = loadVmVfsCachePressure();
if (!Misc.isNullOfEmpty(value)) {
setVmVfsCachePressure(value);
}
value = loadVmDirtyExpireCentisecs();
if (!Misc.isNullOfEmpty(value)) {
setVmDirtyExpireCentisecs(value);
}
value = loadVmDirtyWritebackCentisecs();
if (!Misc.isNullOfEmpty(value)) {
setVmDirtyWritebackCentisecs(value);
}
value = loadVmDirtyRatio();
if (!Misc.isNullOfEmpty(value)) {
setVmDirtyRatio(value);
}
value = loadVmDirtyBackgroundRatio();
if (!Misc.isNullOfEmpty(value)) {
setVmDirtyBackgroundRatio(value);
}
}
@Override
public void setRecommend() {
setVmSwappiness("10");
saveVmSwappiness("10");
setVmVfsCachePressure("50");
saveVmVfsCachePressure("50");
setVmDirtyExpireCentisecs("3000");
saveVmDirtyExpireCentisecs("3000");
setVmDirtyWritebackCentisecs("500");
saveVmDirtyWritebackCentisecs("500");
setVmDirtyRatio("22");
saveVmDirtyRatio("22");
setVmDirtyBackgroundRatio("4");
saveVmDirtyBackgroundRatio("4");
}
@Override
public void reset() {
clearValue(KEY_VM_SWAPPINESS);
clearValue(KEY_VM_VFS_CACHE_PRESSURE);
clearValue(KEY_VM_DIRTY_EXPIRE_CENTISECS);
clearValue(KEY_VM_DIRTY_RATIO);
clearValue(KEY_VM_DIRTY_WRITEBACK_CENTISECS);
clearValue(KEY_VM_DIRTY_BACKGROUND_RATIO);
}
}