[igt-dev] [PATCH i-g-t] tests/kms_setmode: Limit the execution on simulation
Modem, Bhanuprakash
bhanuprakash.modem at intel.com
Wed Mar 23 15:08:19 UTC 2022
On Wed-23-03-2022 02:53 pm, Karthik B S wrote:
> On 3/23/2022 12:52 PM, Bhanuprakash Modem wrote:
>> Restrict the execution of all subtests to two pipes on simulation
>> environment.
>>
>> If we want to execute on all pipes, need to pass an extra flag "-e"
>> as a command line argument.
>>
>> Example: ./build/tests/kms_setmode -e --r basic
>>
>> Cc: Karthik B S <karthik.b.s at intel.com>
>> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem at intel.com>
>> ---
>> tests/kms_setmode.c | 38 +++++++++++++++++++++++++++++---------
>> 1 file changed, 29 insertions(+), 9 deletions(-)
>>
>> diff --git a/tests/kms_setmode.c b/tests/kms_setmode.c
>> index d5cb45d438..5f879fb633 100644
>> --- a/tests/kms_setmode.c
>> +++ b/tests/kms_setmode.c
>> @@ -37,10 +37,14 @@
>> /* max combinations with repetitions */
>> #define MAX_COMBINATION_ELEMS MAX_CRTCS
>> +/* restricted pipe count */
>> +#define CRTC_RESTRICT_CNT 2
>> +
>> static int drm_fd;
>> static drmModeRes *drm_resources;
>> static int filter_test_id;
>> static bool dry_run;
>> +static bool extended = false;
>> const drmModeModeInfo mode_640_480 = {
>> .name = "640x480",
>> @@ -801,6 +805,18 @@ static void get_combinations(int n, int k, bool
>> allow_repetitions,
>> iterate_combinations(n, k, allow_repetitions, 0, 0, &comb, set);
>> }
>> +static int get_crtc_count(int count_crtcs, bool extend)
>> +{
>> + if (igt_run_in_simulation()) {
>
> Hi,
>
> I agree with this idea of restricting the execution to 2 pipes. IMHO, we
> could remove this simulation check also and restrict the execution to 2
> pipes in all cases to optimize execution time on CI. Otherwise the
> execution time on CI for this test will be very high, especially if we
> configurations in which we have displays connected to all the pipes.
Hmm, in that case we must limit the execution on connector basis not on
pipe basis.
Example: In 4 display config
If we restrict the execution to 2 pipes, subtests will run on pipe A & B
only. So we'll loose the coverage of pipe C & D as well as 3 & 4 display
coverage in CI.
pipe-A-DP-1-pipe-B-DP-2
pipe-B-DP-1-pipe-A-DP-2
pipe-A-DP-1-pipe-B-DP-3
pipe-B-DP-1-pipe-A-DP-3
pipe-A-DP-1-pipe-B-DP-4
pipe-B-DP-1-pipe-A-DP-4
pipe-A-DP-2-pipe-B-DP-3
pipe-B-DP-2-pipe-A-DP-3
pipe-A-DP-2-pipe-B-DP-4
pipe-B-DP-2-pipe-A-DP-4
pipe-A-DP-3-pipe-B-DP-4
pipe-B-DP-3-pipe-A-DP-4
If we limit the execution to 2 connectors, we don't loose the coverage
of pipe C & D.
pipe-A-DP-1-pipe-B-DP-2
pipe-A-DP-1-pipe-C-DP-2
pipe-A-DP-1-pipe-D-DP-2
pipe-B-DP-1-pipe-A-DP-2
pipe-B-DP-1-pipe-C-DP-2
pipe-B-DP-1-pipe-D-DP-2
pipe-C-DP-1-pipe-A-DP-2
pipe-C-DP-1-pipe-B-DP-2
pipe-C-DP-1-pipe-D-DP-2
pipe-D-DP-1-pipe-A-DP-2
pipe-D-DP-1-pipe-B-DP-2
pipe-D-DP-1-pipe-C-DP-2
pipe-A-DP-1-pipe-B-DP-3
pipe-A-DP-1-pipe-C-DP-3
pipe-A-DP-1-pipe-D-DP-3
pipe-B-DP-1-pipe-A-DP-3
pipe-B-DP-1-pipe-C-DP-3
pipe-B-DP-1-pipe-D-DP-3
pipe-C-DP-1-pipe-A-DP-3
pipe-C-DP-1-pipe-B-DP-3
pipe-C-DP-1-pipe-D-DP-3
pipe-D-DP-1-pipe-A-DP-3
pipe-D-DP-1-pipe-B-DP-3
pipe-D-DP-1-pipe-C-DP-3
pipe-A-DP-1-pipe-B-DP-4
pipe-A-DP-1-pipe-C-DP-4
pipe-A-DP-1-pipe-D-DP-4
pipe-B-DP-1-pipe-A-DP-4
pipe-B-DP-1-pipe-C-DP-4
pipe-B-DP-1-pipe-D-DP-4
pipe-C-DP-1-pipe-A-DP-4
pipe-C-DP-1-pipe-B-DP-4
pipe-C-DP-1-pipe-D-DP-4
pipe-D-DP-1-pipe-A-DP-4
pipe-D-DP-1-pipe-B-DP-4
pipe-D-DP-1-pipe-C-DP-4
pipe-A-DP-2-pipe-B-DP-3
pipe-A-DP-2-pipe-C-DP-3
pipe-A-DP-2-pipe-D-DP-3
pipe-B-DP-2-pipe-A-DP-3
pipe-B-DP-2-pipe-C-DP-3
pipe-B-DP-2-pipe-D-DP-3
pipe-C-DP-2-pipe-A-DP-3
pipe-C-DP-2-pipe-B-DP-3
pipe-C-DP-2-pipe-D-DP-3
pipe-D-DP-2-pipe-A-DP-3
pipe-D-DP-2-pipe-B-DP-3
pipe-D-DP-2-pipe-C-DP-3
pipe-A-DP-2-pipe-B-DP-4
pipe-A-DP-2-pipe-C-DP-4
pipe-A-DP-2-pipe-D-DP-4
pipe-B-DP-2-pipe-A-DP-4
pipe-B-DP-2-pipe-C-DP-4
pipe-B-DP-2-pipe-D-DP-4
pipe-C-DP-2-pipe-A-DP-4
pipe-C-DP-2-pipe-B-DP-4
pipe-C-DP-2-pipe-D-DP-4
pipe-D-DP-2-pipe-A-DP-4
pipe-D-DP-2-pipe-B-DP-4
pipe-D-DP-2-pipe-C-DP-4
pipe-A-DP-3-pipe-B-DP-4
pipe-A-DP-3-pipe-C-DP-4
pipe-A-DP-3-pipe-D-DP-4
pipe-B-DP-3-pipe-A-DP-4
pipe-B-DP-3-pipe-C-DP-4
pipe-B-DP-3-pipe-D-DP-4
pipe-C-DP-3-pipe-A-DP-4
pipe-C-DP-3-pipe-B-DP-4
pipe-C-DP-3-pipe-D-DP-4
pipe-D-DP-3-pipe-A-DP-4
pipe-D-DP-3-pipe-B-DP-4
pipe-D-DP-3-pipe-C-DP-4
Still we need to pass an extra flag as a command line argument to cover
3 & 4 display configs.
I'll float a new rev with this change.
- Bhanu
>
> Thanks,
>
> Karthik.B.S
>
>> + if ((count_crtcs <= CRTC_RESTRICT_CNT) || extend)
>> + return count_crtcs;
>> + else
>> + return CRTC_RESTRICT_CNT;
>> + }
>> +
>> + return count_crtcs;
>> +}
>> +
>> static void test_combinations(const struct test_config *tconf,
>> int connector_count)
>> {
>> @@ -808,6 +824,7 @@ static void test_combinations(const struct
>> test_config *tconf,
>> struct combination_set crtc_combs;
>> struct connector_config *cconfs;
>> int i;
>> + int crtc_count = get_crtc_count(tconf->resources->count_crtcs,
>> extended);
>> if (connector_count > 2 && (tconf->flags & TEST_STEALING))
>> return;
>> @@ -815,17 +832,15 @@ static void test_combinations(const struct
>> test_config *tconf,
>> igt_assert(tconf->resources);
>> connector_combs.capacity = pow(tconf->resources->count_connectors,
>> - tconf->resources->count_crtcs + 1);
>> - crtc_combs.capacity = pow(tconf->resources->count_crtcs,
>> - tconf->resources->count_crtcs + 1);
>> -
>> + crtc_count + 1);
>> + crtc_combs.capacity = pow(crtc_count,
>> + crtc_count + 1);
>> connector_combs.items = malloc(connector_combs.capacity *
>> sizeof(struct combination));
>> crtc_combs.items = malloc(crtc_combs.capacity * sizeof(struct
>> combination));
>> get_combinations(tconf->resources->count_connectors,
>> connector_count,
>> false, &connector_combs);
>> - get_combinations(tconf->resources->count_crtcs, connector_count,
>> - true, &crtc_combs);
>> + get_combinations(crtc_count, connector_count, true, &crtc_combs);
>> igt_info("Testing: %s %d connector combinations\n", tconf->name,
>> connector_count);
>> @@ -866,9 +881,10 @@ free_cconfs:
>> static void run_test(const struct test_config *tconf)
>> {
>> int connector_num;
>> + int crtc_count = get_crtc_count(tconf->resources->count_crtcs,
>> extended);
>> connector_num = tconf->flags & TEST_CLONE ? 2 : 1;
>> - for (; connector_num <= tconf->resources->count_crtcs;
>> connector_num++)
>> + for (; connector_num <= crtc_count; connector_num++)
>> test_combinations(tconf, connector_num);
>> }
>> @@ -878,6 +894,9 @@ static int opt_handler(int opt, int opt_index,
>> void *data)
>> case 'd':
>> dry_run = true;
>> break;
>> + case 'e':
>> + extended = true;
>> + break;
>> case 't':
>> filter_test_id = atoi(optarg);
>> break;
>> @@ -890,9 +909,10 @@ static int opt_handler(int opt, int opt_index,
>> void *data)
>> const char *help_str =
>> " -d\t\tDon't run any test, only print what would be done.
>> (still needs DRM access)\n"
>> - " -t <test id>\tRun only the test with this id.";
>> + " -t <test id>\tRun only the test with this id\n"
>> + " -e \t\tRun on all pipes. (Default it will Run only two pipes)\n";
>> -igt_main_args("dt:", NULL, help_str, opt_handler, NULL)
>> +igt_main_args("det:", NULL, help_str, opt_handler, NULL)
>> {
>> const struct {
>> enum test_flags flags;
>
>
More information about the igt-dev
mailing list