summaryrefslogtreecommitdiffstats
path: root/VolumeManager.cpp
diff options
context:
space:
mode:
authorMike Lockwood <lockwood@google.com>2010-10-28 15:21:24 -0400
committerMike Lockwood <lockwood@google.com>2010-10-28 15:21:24 -0400
commita28056b38275003895ff5d9576681aca01544822 (patch)
tree8179cf23a1b0906d8e4fc7d186a6df2203a6bb9a /VolumeManager.cpp
parent918e5f9f10b9c1ff929683743ffbf229027ce240 (diff)
downloadsystem_vold-a28056b38275003895ff5d9576681aca01544822.zip
system_vold-a28056b38275003895ff5d9576681aca01544822.tar.gz
system_vold-a28056b38275003895ff5d9576681aca01544822.tar.bz2
Set VM dirty ratio to zero when UMS is active
Improves UI responsiveness when copying large amount of data to the device. BUG: 3131847 Change-Id: I4aa5ade7e2cd7e5110c8f0f7ee43bdc57577e11d Signed-off-by: Mike Lockwood <lockwood@google.com>
Diffstat (limited to 'VolumeManager.cpp')
-rw-r--r--VolumeManager.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/VolumeManager.cpp b/VolumeManager.cpp
index 3b229b7..32b5679 100644
--- a/VolumeManager.cpp
+++ b/VolumeManager.cpp
@@ -57,6 +57,10 @@ VolumeManager::VolumeManager() {
mBroadcaster = NULL;
mUsbMassStorageEnabled = false;
mUsbConnected = false;
+ mUmsSharingCount = 0;
+ mSavedDirtyRatio = -1;
+ // set dirty ratio to 0 when UMS is active
+ mUmsDirtyRatio = 0;
readInitialState();
}
@@ -1064,6 +1068,21 @@ int VolumeManager::shareVolume(const char *label, const char *method) {
close(fd);
v->handleVolumeShared();
+ if (mUmsSharingCount++ == 0) {
+ FILE* fp;
+ mSavedDirtyRatio = -1; // in case we fail
+ if ((fp = fopen("/proc/sys/vm/dirty_ratio", "r+"))) {
+ char line[16];
+ if (fgets(line, sizeof(line), fp) && sscanf(line, "%d", &mSavedDirtyRatio)) {
+ fprintf(fp, "%d\n", mUmsDirtyRatio);
+ } else {
+ SLOGE("Failed to read dirty_ratio (%s)", strerror(errno));
+ }
+ fclose(fp);
+ } else {
+ SLOGE("Failed to open /proc/sys/vm/dirty_ratio (%s)", strerror(errno));
+ }
+ }
return 0;
}
@@ -1100,6 +1119,16 @@ int VolumeManager::unshareVolume(const char *label, const char *method) {
close(fd);
v->handleVolumeUnshared();
+ if (--mUmsSharingCount == 0 && mSavedDirtyRatio != -1) {
+ FILE* fp;
+ if ((fp = fopen("/proc/sys/vm/dirty_ratio", "r+"))) {
+ fprintf(fp, "%d\n", mSavedDirtyRatio);
+ fclose(fp);
+ } else {
+ SLOGE("Failed to open /proc/sys/vm/dirty_ratio (%s)", strerror(errno));
+ }
+ mSavedDirtyRatio = -1;
+ }
return 0;
}