Merge "Add API to get remaining lifetime as a percentage." into main
This commit is contained in:
commit
f75d8fc237
5 changed files with 41 additions and 0 deletions
|
@ -507,6 +507,30 @@ int32_t GetStorageLifeTime() {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t GetStorageRemainingLifetime() {
|
||||||
|
std::string path = getDevSysfsPath();
|
||||||
|
if (path.empty()) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string lifeTimeBasePath = path + "/health_descriptor/life_time_estimation_";
|
||||||
|
|
||||||
|
int32_t lifeTime = getLifeTime(lifeTimeBasePath + "c");
|
||||||
|
if (lifeTime == -1) {
|
||||||
|
int32_t lifeTimeA = getLifeTime(lifeTimeBasePath + "a");
|
||||||
|
int32_t lifeTimeB = getLifeTime(lifeTimeBasePath + "b");
|
||||||
|
lifeTime = std::max(lifeTimeA, lifeTimeB);
|
||||||
|
if (lifeTime <= 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1 = 0-10% used, 10 = 90-100% used. Subtract 1 so that a brand new
|
||||||
|
// device looks 0% used.
|
||||||
|
lifeTime = (lifeTime - 1) * 10;
|
||||||
|
}
|
||||||
|
return 100 - std::clamp(lifeTime, 0, 100);
|
||||||
|
}
|
||||||
|
|
||||||
void SetGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold, float dirtyReclaimRate,
|
void SetGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold, float dirtyReclaimRate,
|
||||||
float reclaimWeight, int32_t gcPeriod, int32_t minGCSleepTime,
|
float reclaimWeight, int32_t gcPeriod, int32_t minGCSleepTime,
|
||||||
int32_t targetDirtyRatio) {
|
int32_t targetDirtyRatio) {
|
||||||
|
|
|
@ -26,6 +26,7 @@ void Trim(const android::sp<android::os::IVoldTaskListener>& listener);
|
||||||
int RunIdleMaint(bool needGC, const android::sp<android::os::IVoldTaskListener>& listener);
|
int RunIdleMaint(bool needGC, const android::sp<android::os::IVoldTaskListener>& listener);
|
||||||
int AbortIdleMaint(const android::sp<android::os::IVoldTaskListener>& listener);
|
int AbortIdleMaint(const android::sp<android::os::IVoldTaskListener>& listener);
|
||||||
int32_t GetStorageLifeTime();
|
int32_t GetStorageLifeTime();
|
||||||
|
int32_t GetStorageRemainingLifetime();
|
||||||
void SetGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold, float dirtyReclaimRate,
|
void SetGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold, float dirtyReclaimRate,
|
||||||
float reclaimWeight, int32_t gcPeriod, int32_t minGCSleepTime,
|
float reclaimWeight, int32_t gcPeriod, int32_t minGCSleepTime,
|
||||||
int32_t targetDirtyRatio);
|
int32_t targetDirtyRatio);
|
||||||
|
|
|
@ -504,6 +504,14 @@ binder::Status VoldNativeService::getStorageLifeTime(int32_t* _aidl_return) {
|
||||||
return Ok();
|
return Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binder::Status VoldNativeService::getStorageRemainingLifetime(int32_t* _aidl_return) {
|
||||||
|
ENFORCE_SYSTEM_OR_ROOT;
|
||||||
|
ACQUIRE_LOCK;
|
||||||
|
|
||||||
|
*_aidl_return = GetStorageRemainingLifetime();
|
||||||
|
return Ok();
|
||||||
|
}
|
||||||
|
|
||||||
binder::Status VoldNativeService::setGCUrgentPace(int32_t neededSegments,
|
binder::Status VoldNativeService::setGCUrgentPace(int32_t neededSegments,
|
||||||
int32_t minSegmentThreshold,
|
int32_t minSegmentThreshold,
|
||||||
float dirtyReclaimRate, float reclaimWeight,
|
float dirtyReclaimRate, float reclaimWeight,
|
||||||
|
|
|
@ -89,6 +89,7 @@ class VoldNativeService : public BinderService<VoldNativeService>, public os::Bn
|
||||||
const android::sp<android::os::IVoldTaskListener>& listener);
|
const android::sp<android::os::IVoldTaskListener>& listener);
|
||||||
binder::Status abortIdleMaint(const android::sp<android::os::IVoldTaskListener>& listener);
|
binder::Status abortIdleMaint(const android::sp<android::os::IVoldTaskListener>& listener);
|
||||||
binder::Status getStorageLifeTime(int32_t* _aidl_return);
|
binder::Status getStorageLifeTime(int32_t* _aidl_return);
|
||||||
|
binder::Status getStorageRemainingLifetime(int32_t* _aidl_return);
|
||||||
binder::Status setGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold,
|
binder::Status setGCUrgentPace(int32_t neededSegments, int32_t minSegmentThreshold,
|
||||||
float dirtyReclaimRate, float reclaimWeight, int32_t gcPeriod,
|
float dirtyReclaimRate, float reclaimWeight, int32_t gcPeriod,
|
||||||
int32_t minGCSleepTime, int32_t targetDirtyRatio);
|
int32_t minGCSleepTime, int32_t targetDirtyRatio);
|
||||||
|
|
|
@ -66,6 +66,8 @@ interface IVold {
|
||||||
void fstrim(int fstrimFlags, IVoldTaskListener listener);
|
void fstrim(int fstrimFlags, IVoldTaskListener listener);
|
||||||
void runIdleMaint(boolean needGC, IVoldTaskListener listener);
|
void runIdleMaint(boolean needGC, IVoldTaskListener listener);
|
||||||
void abortIdleMaint(IVoldTaskListener listener);
|
void abortIdleMaint(IVoldTaskListener listener);
|
||||||
|
// Returns the amount of storage lifetime used, as a percentage.
|
||||||
|
// (eg, 10 indicates 10% of lifetime used), or -1 on failure.
|
||||||
int getStorageLifeTime();
|
int getStorageLifeTime();
|
||||||
void setGCUrgentPace(int neededSegments, int minSegmentThreshold,
|
void setGCUrgentPace(int neededSegments, int minSegmentThreshold,
|
||||||
float dirtyReclaimRate, float reclaimWeight,
|
float dirtyReclaimRate, float reclaimWeight,
|
||||||
|
@ -135,6 +137,11 @@ interface IVold {
|
||||||
|
|
||||||
long getStorageSize();
|
long getStorageSize();
|
||||||
|
|
||||||
|
// Returns the remaining storage lifetime as a percentage, rounded up as
|
||||||
|
// needed when the underlying hardware reports low precision. Returns -1
|
||||||
|
// on failure.
|
||||||
|
int getStorageRemainingLifetime();
|
||||||
|
|
||||||
const int FSTRIM_FLAG_DEEP_TRIM = 1;
|
const int FSTRIM_FLAG_DEEP_TRIM = 1;
|
||||||
|
|
||||||
const int MOUNT_FLAG_PRIMARY = 1;
|
const int MOUNT_FLAG_PRIMARY = 1;
|
||||||
|
|
Loading…
Reference in a new issue