Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,11 @@ public static class IOPart extends RecyclerViewFragment implements PopupCardView

private final List<String> list = new ArrayList<>();

private PopupCardView.DPopupCard mInternalSchedulerCard, mExternalSchedulerCard;
private PopupCardView.DPopupCard mInternalSchedulerCard, mInternalSchedulerCard_SDA, mInternalSchedulerCard_DM0, mExternalSchedulerCard;

private CardViewItem.DCardView mInternalTunableCard, mExternalTunableCard;
private CardViewItem.DCardView mInternalTunableCard, mInternalTunableCard_SDA, mInternalTunableCard_DM0, mExternalTunableCard;

private PopupCardView.DPopupCard mInternalReadAheadCard, mExternalReadAheadCard, mIOAffinityCard;
private PopupCardView.DPopupCard mInternalReadAheadCard, mInternalReadAheadCard_SDA, mInternalReadAheadCard_DM0, mExternalReadAheadCard, mIOAffinityCard;

private SwitchCardView.DSwitchCard mRotationalCard, mIOStatsCard, mIORandomCard;

Expand Down Expand Up @@ -117,31 +117,79 @@ private void internalStorageInit() {

addView(mInternalStorageDivider);

mInternalSchedulerCard = new PopupCardView.DPopupCard(IO.getSchedulers(IO.StorageType.INTERNAL));
mInternalSchedulerCard.setTitle(getString(R.string.scheduler));
mInternalSchedulerCard.setDescription(getString(R.string.scheduler_summary));
mInternalSchedulerCard.setItem(IO.getScheduler(IO.StorageType.INTERNAL));
mInternalSchedulerCard.setOnDPopupCardListener(this);

addView(mInternalSchedulerCard);

mInternalTunableCard = new CardViewItem.DCardView();
mInternalTunableCard.setTitle(getString(R.string.scheduler_tunable));
mInternalTunableCard.setDescription(getString(R.string.scheduler_tunable_summary));
mInternalTunableCard.setOnDCardListener(this);

addView(mInternalTunableCard);

for (int i = 0; i < 32; i++)
readheads.add((i * 128 + 128) + getString(R.string.kb));

mInternalReadAheadCard = new PopupCardView.DPopupCard(readheads);
mInternalReadAheadCard.setTitle(getString(R.string.read_ahead));
mInternalReadAheadCard.setDescription(getString(R.string.read_ahead_summary));
mInternalReadAheadCard.setItem(IO.getReadahead(IO.StorageType.INTERNAL) + getString(R.string.kb));
mInternalReadAheadCard.setOnDPopupCardListener(this);

addView(mInternalReadAheadCard);
if (IO.getSchedulers(IO.StorageType.INTERNAL) != null) {
mInternalSchedulerCard = new PopupCardView.DPopupCard(IO.getSchedulers(IO.StorageType.INTERNAL));
mInternalSchedulerCard.setTitle(getString(R.string.scheduler));
mInternalSchedulerCard.setDescription(getString(R.string.scheduler_summary));
mInternalSchedulerCard.setItem(IO.getScheduler(IO.StorageType.INTERNAL));
mInternalSchedulerCard.setOnDPopupCardListener(this);

addView(mInternalSchedulerCard);

mInternalTunableCard = new CardViewItem.DCardView();
mInternalTunableCard.setTitle(getString(R.string.scheduler_tunable));
mInternalTunableCard.setDescription(getString(R.string.scheduler_tunable_summary));
mInternalTunableCard.setOnDCardListener(this);

addView(mInternalTunableCard);

mInternalReadAheadCard = new PopupCardView.DPopupCard(readheads);
mInternalReadAheadCard.setTitle(getString(R.string.read_ahead));
mInternalReadAheadCard.setDescription(getString(R.string.read_ahead_summary));
mInternalReadAheadCard.setItem(IO.getReadahead(IO.StorageType.INTERNAL) + getString(R.string.kb));
mInternalReadAheadCard.setOnDPopupCardListener(this);

addView(mInternalReadAheadCard);
} else if (IO.getSchedulers(IO.StorageType.INTERNAL_SDA) != null) {
mInternalSchedulerCard_SDA = new PopupCardView.DPopupCard(IO.getSchedulers(IO.StorageType.INTERNAL_SDA));
mInternalSchedulerCard_SDA.setTitle(getString(R.string.scheduler));
mInternalSchedulerCard_SDA.setDescription(getString(R.string.scheduler_summary));
mInternalSchedulerCard_SDA.setItem(IO.getScheduler(IO.StorageType.INTERNAL_SDA));
mInternalSchedulerCard_SDA.setOnDPopupCardListener(this);

addView(mInternalSchedulerCard_SDA);

mInternalTunableCard_SDA = new CardViewItem.DCardView();
mInternalTunableCard_SDA.setTitle(getString(R.string.scheduler_tunable));
mInternalTunableCard_SDA.setDescription(getString(R.string.scheduler_tunable_summary));
mInternalTunableCard_SDA.setOnDCardListener(this);

addView(mInternalTunableCard_SDA);

mInternalReadAheadCard_SDA = new PopupCardView.DPopupCard(readheads);
mInternalReadAheadCard_SDA.setTitle(getString(R.string.read_ahead));
mInternalReadAheadCard_SDA.setDescription(getString(R.string.read_ahead_summary));
mInternalReadAheadCard_SDA.setItem(IO.getReadahead(IO.StorageType.INTERNAL_SDA) + getString(R.string.kb));
mInternalReadAheadCard_SDA.setOnDPopupCardListener(this);

addView(mInternalReadAheadCard_SDA);
} else if (IO.getSchedulers(IO.StorageType.INTERNAL_DM0) != null) {
mInternalSchedulerCard_DM0 = new PopupCardView.DPopupCard(IO.getSchedulers(IO.StorageType.INTERNAL_DM0));
mInternalSchedulerCard_DM0.setTitle(getString(R.string.scheduler));
mInternalSchedulerCard_DM0.setDescription(getString(R.string.scheduler_summary));
mInternalSchedulerCard_DM0.setItem(IO.getScheduler(IO.StorageType.INTERNAL_DM0));
mInternalSchedulerCard_DM0.setOnDPopupCardListener(this);

addView(mInternalSchedulerCard_DM0);

mInternalTunableCard_DM0 = new CardViewItem.DCardView();
mInternalTunableCard_DM0.setTitle(getString(R.string.scheduler_tunable));
mInternalTunableCard_DM0.setDescription(getString(R.string.scheduler_tunable_summary));
mInternalTunableCard_DM0.setOnDCardListener(this);

addView(mInternalTunableCard_DM0);

mInternalReadAheadCard_DM0 = new PopupCardView.DPopupCard(readheads);
mInternalReadAheadCard_DM0.setTitle(getString(R.string.read_ahead));
mInternalReadAheadCard_DM0.setDescription(getString(R.string.read_ahead_summary));
mInternalReadAheadCard_DM0.setItem(IO.getReadahead(IO.StorageType.INTERNAL_DM0) + getString(R.string.kb));
mInternalReadAheadCard_DM0.setOnDPopupCardListener(this);

addView(mInternalReadAheadCard_DM0);
}
}

private void externalStorageInit() {
Expand Down Expand Up @@ -205,7 +253,6 @@ private void IOAffintyInit() {
List<String> list = new ArrayList<>();
for (int i = 0; i < 3; i++) list.add(String.valueOf(i));


mIOAffinityCard = new PopupCardView.DPopupCard(list);
mIOAffinityCard.setTitle(getString(R.string.ioaffitiny));
mIOAffinityCard.setDescription(getString(R.string.ioraffinity_summary));
Expand All @@ -220,12 +267,24 @@ public void onItemSelected(PopupCardView.DPopupCard dPopupCard, int position) {
if (dPopupCard == mInternalSchedulerCard)
IO.setScheduler(IO.StorageType.INTERNAL, IO.getSchedulers(IO.StorageType.INTERNAL)
.get(position), getActivity());
else if (dPopupCard == mInternalSchedulerCard_SDA)
IO.setScheduler(IO.StorageType.INTERNAL_SDA, IO.getSchedulers(IO.StorageType.INTERNAL_SDA)
.get(position), getActivity());
else if (dPopupCard == mInternalSchedulerCard_DM0)
IO.setScheduler(IO.StorageType.INTERNAL_DM0, IO.getSchedulers(IO.StorageType.INTERNAL_DM0)
.get(position), getActivity());
else if (dPopupCard == mExternalSchedulerCard)
IO.setScheduler(IO.StorageType.EXTERNAL, IO.getSchedulers(IO.StorageType.EXTERNAL)
.get(position), getActivity());
else if (dPopupCard == mInternalReadAheadCard)
IO.setReadahead(IO.StorageType.INTERNAL, Utils.stringToInt(readheads.get(position)
.replace(getString(R.string.kb), "")), getActivity());
else if (dPopupCard == mInternalReadAheadCard_SDA)
IO.setReadahead(IO.StorageType.INTERNAL_SDA, Utils.stringToInt(readheads.get(position)
.replace(getString(R.string.kb), "")), getActivity());
else if (dPopupCard == mInternalReadAheadCard_DM0)
IO.setReadahead(IO.StorageType.INTERNAL_DM0, Utils.stringToInt(readheads.get(position)
.replace(getString(R.string.kb), "")), getActivity());
else if (dPopupCard == mExternalReadAheadCard)
IO.setReadahead(IO.StorageType.EXTERNAL, Utils.stringToInt(readheads.get(position)
.replace(getString(R.string.kb), "")), getActivity());
Expand All @@ -235,9 +294,16 @@ else if (dPopupCard == mIOAffinityCard)

@Override
public void onClick(CardViewItem.DCardView dCardView) {
ioFragment.storageType = dCardView == mInternalTunableCard ? IO.StorageType.INTERNAL : IO.StorageType.EXTERNAL;
ioFragment.schedulerPart.reload();
ioFragment.setCurrentItem(1);
if (dCardView == mInternalTunableCard)
ioFragment.storageType = IO.StorageType.INTERNAL;
else if (dCardView == mInternalTunableCard_DM0)
ioFragment.storageType = IO.StorageType.INTERNAL_DM0;
else if (dCardView == mInternalTunableCard_SDA)
ioFragment.storageType = IO.StorageType.INTERNAL_SDA;
else
ioFragment.storageType = IO.StorageType.EXTERNAL;
ioFragment.schedulerPart.reload();
ioFragment.setCurrentItem(1);
}

@Override
Expand All @@ -255,14 +321,26 @@ public static class SchedulerPart extends PathReaderFragment {

@Override
public String getName() {
return IO.getScheduler(ioFragment.storageType == IO.StorageType.INTERNAL ? IO.StorageType.INTERNAL :
IO.StorageType.EXTERNAL);
if (ioFragment.storageType == IO.StorageType.INTERNAL)
return IO.getScheduler(IO.StorageType.INTERNAL);
else if (ioFragment.storageType == IO.StorageType.INTERNAL_DM0)
return IO.getScheduler(IO.StorageType.INTERNAL_DM0);
else if (ioFragment.storageType == IO.StorageType.INTERNAL_SDA)
return IO.getScheduler(IO.StorageType.INTERNAL_SDA);
else
return IO.getScheduler(IO.StorageType.EXTERNAL);
}

@Override
public String getPath() {
return ioFragment.storageType == IO.StorageType.INTERNAL ? IO_INTERNAL_SCHEDULER_TUNABLE :
IO_EXTERNAL_SCHEDULER_TUNABLE;
if (ioFragment.storageType == IO.StorageType.INTERNAL)
return IO_INTERNAL_SCHEDULER_TUNABLE;
else if (ioFragment.storageType == IO.StorageType.INTERNAL_DM0)
return IO_INTERNAL_SCHEDULER_TUNABLE_DM0;
else if (ioFragment.storageType == IO.StorageType.INTERNAL_SDA)
return IO_INTERNAL_SCHEDULER_TUNABLE_SDA;
else
return IO_EXTERNAL_SCHEDULER_TUNABLE;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,10 @@ private void vibrationInit() {

mVibrationCard = new SeekBarCardView.DSeekBarCard(list);
mVibrationCard.setTitle(getString(R.string.vibration_strength));
mVibrationCard.setProgress(Math.round((Misc.getCurVibration() - min) / offset));
if ((max - min) == 100)
mVibrationCard.setProgress(Misc.getCurVibration());
else
mVibrationCard.setProgress(Math.round((Misc.getCurVibration() - min) / offset));
mVibrationCard.setOnDSeekBarCardListener(this);

addView(mVibrationCard);
Expand Down Expand Up @@ -290,7 +293,11 @@ public void onStop(SeekBarCardView.DSeekBarCard dSeekBarCard, int position) {
int max = Misc.getVibrationMax();
int min = Misc.getVibrationMin();
float offset = (max - min) / (float) 101;
Misc.setVibration(Math.round(offset * position) + min, getActivity());

if ((max - min) == 100)
Misc.setVibration(position, getActivity());
else
Misc.setVibration(Math.round(offset * position) + min, getActivity());

// Vibrate
new Thread(new Runnable() {
Expand Down
12 changes: 10 additions & 2 deletions app/src/main/java/com/grarak/kerneladiutor/utils/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -791,19 +791,26 @@ public interface Constants {

// I/O
String IO_INTERNAL_SCHEDULER = "/sys/block/mmcblk0/queue/scheduler";
String IO_INTERNAL_SCHEDULER_SDA = "/sys/block/sda/queue/scheduler";
String IO_INTERNAL_SCHEDULER_DM0 = "/sys/block/dm-0/queue/scheduler";

String IO_EXTERNAL_SCHEDULER = "/sys/block/mmcblk1/queue/scheduler";
String IO_INTERNAL_SCHEDULER_TUNABLE = "/sys/block/mmcblk0/queue/iosched";
String IO_INTERNAL_SCHEDULER_TUNABLE_SDA = "/sys/block/sda/queue/iosched";
String IO_INTERNAL_SCHEDULER_TUNABLE_DM0 = "/sys/block/dm-0/queue/iosched";
String IO_EXTERNAL_SCHEDULER_TUNABLE = "/sys/block/mmcblk1/queue/iosched";
String IO_INTERNAL_READ_AHEAD = "/sys/block/mmcblk0/queue/read_ahead_kb";
String IO_INTERNAL_READ_AHEAD_SDA = "/sys/block/sda/queue/read_ahead_kb";
String IO_INTERNAL_READ_AHEAD_DM0 = "/sys/block/dm-0/queue/read_ahead_kb";
String IO_EXTERNAL_READ_AHEAD = "/sys/block/mmcblk1/queue/read_ahead_kb";

String IO_ROTATIONAL = "/sys/block/mmcblk0/queue/rotational";
String IO_STATS = "/sys/block/mmcblk0/queue/iostats";
String IO_RANDOM = "/sys/block/mmcblk0/queue/add_random";
String IO_AFFINITY = "/sys/block/mmcblk0/queue/rq_affinity";

String[] IO_ARRAY = {IO_INTERNAL_SCHEDULER, IO_EXTERNAL_SCHEDULER, IO_INTERNAL_SCHEDULER_TUNABLE,
IO_EXTERNAL_SCHEDULER_TUNABLE, IO_INTERNAL_READ_AHEAD, IO_EXTERNAL_READ_AHEAD, IO_ROTATIONAL,
String[] IO_ARRAY = {IO_INTERNAL_SCHEDULER, IO_INTERNAL_SCHEDULER_DM0, IO_INTERNAL_SCHEDULER_SDA, IO_EXTERNAL_SCHEDULER, IO_INTERNAL_SCHEDULER_TUNABLE, IO_INTERNAL_SCHEDULER_TUNABLE_DM0, IO_INTERNAL_SCHEDULER_TUNABLE_SDA,
IO_EXTERNAL_SCHEDULER_TUNABLE, IO_INTERNAL_READ_AHEAD, IO_INTERNAL_READ_AHEAD_DM0, IO_INTERNAL_READ_AHEAD_SDA, IO_EXTERNAL_READ_AHEAD, IO_ROTATIONAL,
IO_STATS, IO_RANDOM, IO_AFFINITY };

// Kernel Samepage Merging
Expand Down Expand Up @@ -907,6 +914,7 @@ public interface Constants {

// Vibration
String[] VIBRATION_ARRAY = {
"/sys/devices/virtual/timed_output/vibrator/vib_strength",
"/sys/module/qpnp_vibrator/parameters/vib_voltage",
"/sys/vibrator/pwmvalue",
"/sys/class/timed_output/vibrator/amp",
Expand Down
71 changes: 60 additions & 11 deletions app/src/main/java/com/grarak/kerneladiutor/utils/kernel/IO.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,37 @@
public class IO implements Constants {

public enum StorageType {
INTERNAL, EXTERNAL
INTERNAL, INTERNAL_SDA, INTERNAL_DM0, EXTERNAL
}

public static void setReadahead(StorageType type, int readahead, Context context) {
Control.runCommand(String.valueOf(readahead), type == StorageType.INTERNAL ? IO_INTERNAL_READ_AHEAD :
IO_EXTERNAL_READ_AHEAD, Control.CommandType.GENERIC, context);
String file;

if (type == StorageType.INTERNAL)
file = IO_INTERNAL_READ_AHEAD;
else if (type == StorageType.INTERNAL_DM0)
file = IO_INTERNAL_READ_AHEAD_DM0;
else if (type == StorageType.INTERNAL_SDA)
file = IO_INTERNAL_READ_AHEAD_SDA;
else
file = IO_EXTERNAL_READ_AHEAD;

if (file != null)
Control.runCommand(String.valueOf(readahead), file, Control.CommandType.GENERIC, context);
}

public static int getReadahead(StorageType type) {
String file = type == StorageType.INTERNAL ? IO_INTERNAL_READ_AHEAD
: IO_EXTERNAL_READ_AHEAD;
String file;

if (type == StorageType.INTERNAL)
file = IO_INTERNAL_READ_AHEAD;
else if (type == StorageType.INTERNAL_DM0)
file = IO_INTERNAL_READ_AHEAD_DM0;
else if (type == StorageType.INTERNAL_SDA)
file = IO_INTERNAL_READ_AHEAD_SDA;
else
file = IO_EXTERNAL_READ_AHEAD;

if (Utils.existFile(file)) {
String values = Utils.readFile(file);
if (values != null) return Utils.stringToInt(values);
Expand All @@ -52,13 +72,33 @@ public static int getReadahead(StorageType type) {
}

public static void setScheduler(StorageType type, String scheduler, Context context) {
Control.runCommand(scheduler, type == StorageType.INTERNAL ? IO_INTERNAL_SCHEDULER :
IO_EXTERNAL_SCHEDULER, Control.CommandType.GENERIC, context);
String file;

if (type == StorageType.INTERNAL)
file = IO_INTERNAL_SCHEDULER;
else if (type == StorageType.INTERNAL_DM0)
file = IO_INTERNAL_SCHEDULER_DM0;
else if (type == StorageType.INTERNAL_SDA)
file = IO_INTERNAL_SCHEDULER_SDA;
else
file = IO_EXTERNAL_SCHEDULER;

if (file != null)
Control.runCommand(scheduler, file, Control.CommandType.GENERIC, context);
}

public static List<String> getSchedulers(StorageType type) {
String file = type == StorageType.INTERNAL ? IO_INTERNAL_SCHEDULER
: IO_EXTERNAL_SCHEDULER;
String file;

if (type == StorageType.INTERNAL)
file = IO_INTERNAL_SCHEDULER;
else if (type == StorageType.INTERNAL_DM0)
file = IO_INTERNAL_SCHEDULER_DM0;
else if (type == StorageType.INTERNAL_SDA)
file = IO_INTERNAL_SCHEDULER_SDA;
else
file = IO_EXTERNAL_SCHEDULER;

if (Utils.existFile(file)) {
String values = Utils.readFile(file);
if (values != null) {
Expand All @@ -75,8 +115,17 @@ public static List<String> getSchedulers(StorageType type) {
}

public static String getScheduler(StorageType type) {
String file = type == StorageType.INTERNAL ? IO_INTERNAL_SCHEDULER
: IO_EXTERNAL_SCHEDULER;
String file;

if (type == StorageType.INTERNAL)
file = IO_INTERNAL_SCHEDULER;
else if (type == StorageType.INTERNAL_DM0)
file = IO_INTERNAL_SCHEDULER_DM0;
else if (type == StorageType.INTERNAL_SDA)
file = IO_INTERNAL_SCHEDULER_SDA;
else
file = IO_EXTERNAL_SCHEDULER;

if (Utils.existFile(file)) {
String values = Utils.readFile(file);
if (values != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,9 @@ public static int getVibrationMin() {
return VIBRATION_MIN;
}

if (VIBRATION_PATH.equals("/sys/devices/virtual/timed_output/vibrator/vib_strength"))
return 0;

for (int i = 0; i < VIBRATION_ARRAY.length; i++)
if (VIBRATION_PATH.equals(VIBRATION_ARRAY[i]))
VIBRATION_MIN = VIBRATION_MAX_MIN_ARRAY[i][1];
Expand All @@ -325,6 +328,9 @@ public static int getVibrationMax() {
return VIBRATION_MAX;
}

if (VIBRATION_PATH.equals("/sys/devices/virtual/timed_output/vibrator/vib_strength"))
return 100;

for (int i = 0; i < VIBRATION_ARRAY.length; i++)
if (VIBRATION_PATH.equals(VIBRATION_ARRAY[i]))
VIBRATION_MAX = VIBRATION_MAX_MIN_ARRAY[i][0];
Expand Down