Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46d6d26c authored by Suren Baghdasaryan's avatar Suren Baghdasaryan Committed by android-build-merger
Browse files

Merge "lmkd: Cleanup unused code for killing processes in bulk"

am: d04b38b0

Change-Id: Icbbc888b5a2049a94e55e48eaa9510981c114ebf
parents 4d8a9caf d04b38b0
Loading
Loading
Loading
Loading
+16 −33
Original line number Diff line number Diff line
@@ -1335,14 +1335,12 @@ out:
}

/*
 * Find processes to kill to free required number of pages.
 * If pages_to_free is set to 0 only one process will be killed.
 * Returns the size of the killed processes.
 * Find one process to kill at or above the given oom_adj level.
 * Returns size of the killed process.
 */
static int find_and_kill_processes(int min_score_adj, int pages_to_free) {
static int find_and_kill_process(int min_score_adj) {
    int i;
    int killed_size;
    int pages_freed = 0;
    int killed_size = 0;

#ifdef LMKD_LOG_STATS
    bool lmk_state_change_start = false;
@@ -1367,19 +1365,11 @@ static int find_and_kill_processes(int min_score_adj, int pages_to_free) {
                                                  LMK_STATE_CHANGE_START);
                }
#endif

                pages_freed += killed_size;
                if (pages_freed >= pages_to_free) {

#ifdef LMKD_LOG_STATS
                    if (enable_stats_log && lmk_state_change_start) {
                        stats_write_lmk_state_changed(log_ctx, LMK_STATE_CHANGED,
                                LMK_STATE_CHANGE_STOP);
                    }
#endif
                    return pages_freed;
                break;
            }
        }
        if (killed_size) {
            break;
        }
    }

@@ -1389,7 +1379,7 @@ static int find_and_kill_processes(int min_score_adj, int pages_to_free) {
    }
#endif

    return pages_freed;
    return killed_size;
}

static int64_t get_memory_usage(struct reread_data *file_data) {
@@ -1480,7 +1470,6 @@ static void mp_event_common(int data, uint32_t events __unused) {
    enum vmpressure_level level = (enum vmpressure_level)data;
    long other_free = 0, other_file = 0;
    int min_score_adj;
    int pages_to_free = 0;
    int minfree = 0;
    static struct reread_data mem_usage_file_data = {
        .filename = MEMCG_MEMORY_USAGE,
@@ -1562,9 +1551,6 @@ static void mp_event_common(int data, uint32_t events __unused) {
            return;
        }

        /* Free up enough pages to push over the highest minfree level */
        pages_to_free = lowmem_minfree[lowmem_targets_size - 1] -
            ((other_free < other_file) ? other_free : other_file);
        goto do_kill;
    }

@@ -1620,7 +1606,7 @@ static void mp_event_common(int data, uint32_t events __unused) {
do_kill:
    if (low_ram_device) {
        /* For Go devices kill only one task */
        if (find_and_kill_processes(level_oomadj[level], 0) == 0) {
        if (find_and_kill_process(level_oomadj[level]) == 0) {
            if (debug_process_killing) {
                ALOGI("Nothing to kill");
            }
@@ -1644,10 +1630,7 @@ do_kill:
                return;
            }
            /* Free up enough memory to downgrate the memory pressure to low level */
            if (mi.field.nr_free_pages < low_pressure_mem.max_nr_free_pages) {
                pages_to_free = low_pressure_mem.max_nr_free_pages -
                    mi.field.nr_free_pages;
            } else {
            if (mi.field.nr_free_pages >= low_pressure_mem.max_nr_free_pages) {
                if (debug_process_killing) {
                    ALOGI("Ignoring pressure since more memory is "
                        "available (%" PRId64 ") than watermark (%" PRId64 ")",
@@ -1658,7 +1641,7 @@ do_kill:
            min_score_adj = level_oomadj[level];
        }

        pages_freed = find_and_kill_processes(min_score_adj, 0);
        pages_freed = find_and_kill_process(min_score_adj);

        if (pages_freed == 0) {
            /* Rate limit kill reports when nothing was reclaimed */
@@ -1675,15 +1658,15 @@ do_kill:
        meminfo_log(&mi);

        if (use_minfree_levels) {
            ALOGI("Killing to reclaim %ldkB, reclaimed %ldkB, cache(%ldkB) and "
            ALOGI("Reclaimed %ldkB, cache(%ldkB) and "
                "free(%" PRId64 "kB)-reserved(%" PRId64 "kB) below min(%ldkB) for oom_adj %d",
                pages_to_free * page_k, pages_freed * page_k,
                pages_freed * page_k,
                other_file * page_k, mi.field.nr_free_pages * page_k,
                zi.field.totalreserve_pages * page_k,
                minfree * page_k, min_score_adj);
        } else {
            ALOGI("Killing to reclaim %ldkB, reclaimed %ldkB at oom_adj %d",
                pages_to_free * page_k, pages_freed * page_k, min_score_adj);
            ALOGI("Reclaimed %ldkB at oom_adj %d",
                pages_freed * page_k, min_score_adj);
        }

        if (report_skip_count > 0) {