drm/amd/display: Optimize remove_duplicates() from O(N^2) to O(N)

Replace the previous O(N^2) implementation of remove_duplicates() with
a O(N) version using a fast/slow pointer approach. The new version
keeps only the first occurrence of each element and compacts the array
in place, improving efficiency without changing functionality.

Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
Reviewed-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Kuan-Wei Chiu 2025-09-09 17:20:57 +08:00 committed by Alex Deucher
parent 51cb93aa0c
commit 43f06e8165

View File

@ -48,18 +48,19 @@ static void set_reserved_time_on_all_planes_with_stream_index(struct display_con
static void remove_duplicates(double *list_a, int *list_a_size)
{
int cur_element = 0;
// For all elements b[i] in list_b[]
while (cur_element < *list_a_size - 1) {
if (list_a[cur_element] == list_a[cur_element + 1]) {
for (int j = cur_element + 1; j < *list_a_size - 1; j++) {
list_a[j] = list_a[j + 1];
}
*list_a_size = *list_a_size - 1;
} else {
cur_element++;
int j = 0;
if (*list_a_size == 0)
return;
for (int i = 1; i < *list_a_size; i++) {
if (list_a[j] != list_a[i]) {
j++;
list_a[j] = list_a[i];
}
}
*list_a_size = j + 1;
}
static bool increase_mpc_combine_factor(unsigned int *mpc_combine_factor, unsigned int limit)