sscanf(buf, "cpu %llu %llu %llu %llu", &u, &n, &s, &i);
- u -= system->st.user;
- n -= system->st.nice;
- s -= system->st.system;
- i -= system->st.idle;
+ u = u > system->st.user ? u - system->st.user : 0;
+ n = n > system->st.nice ? n - system->st.nice : 0;
+ s = s > system->st.system ? s - system->st.system : 0;
+ i = i > system->st.idle ? i - system->st.idle : 0;
system->st.user += u;
system->st.nice += n;
system->st.system += s;
system->st.idle += i;
- system->st.usage = (int)100 * (u + n + s) / (u + n + s + i);
+ if (u + n + s + i == 0) {
+ LOGD("[#%d] cpu usage is 0%%", system->st.counter);
+ return G_SOURCE_REMOVE;
+ }
+
+ system->st.usage = (int)(100 * ((double)(u + n + s) / (u + n + s + i)));
LOGD("[#%d] cpu usage %d %%", system->st.counter, system->st.usage);
- if (system->st.usage < cpu_threshold)
+ if (system->st.usage < cpu_threshold) {
+ LOGD("[#%d] cpu usage (%d) < cpu_threshold (%d)", system->st.counter, system->st.usage, cpu_threshold);
return G_SOURCE_REMOVE;
+ }
system->st.counter++;
if (system->st.counter >= MUSE_STAT_CHECK_COUNT) {
- ms_log_process_info(ms_get_instance()->pid);
+ if (ms_get_instance())
+ ms_log_process_info(ms_get_instance()->pid);
snprintf(err_msg, sizeof(err_msg), "[CPU BUSY] %d >= %d %%", system->st.usage, cpu_threshold);