| /* | |
| * Copyright 2022 Google LLC | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef CtsEnforcement_DEFINED | |
| #define CtsEnforcement_DEFINED | |
| #include "include/core/SkTypes.h" | |
| #include <climits> | |
| #include <cstdint> | |
| /** | |
| * Determines how unit tests are enforced by CTS. Depending on the ApiLevel, a test will be run | |
| * in one of 3 states: run without workarounds, run with workarounds or skipped. | |
| */ | |
| class CtsEnforcement { | |
| public: | |
| enum ApiLevel : int32_t { | |
| /* When used as fStrictVersion, always skip this test. It is not relevant to CTS. | |
| * When used as fWorkaroundsVersion, there are no API levels that should run the | |
| * test with workarounds. | |
| */ | |
| kNever = INT32_MAX, | |
| /* kToBeDetermined is a placeholder value that any unstable or work-in-progress tests should | |
| * use. It implies the authors aren't ready for the test to be enforced in kNextRelease, and | |
| * the team needs to make a go / no-go decision for it before bumping kNextRelease. | |
| */ | |
| kToBeDetermined = kNever - 1, | |
| /* The kApiLevel_* values are directly correlated with Android **vendor** API levels, which | |
| * are distinct from Android SDK API levels. Every new CTS/SkQP release has a corresponding | |
| * Android API level that will be captured by these enum values. | |
| */ | |
| kApiLevel_T = 33, | |
| kApiLevel_U = 34, | |
| /* Beginning with Android 14-QPR3, vendor API levels (e.g. the ro.vendor.api_level system | |
| * property checked by SkQP) now follow a YYYYMM format. | |
| * See https://source.android.com/docs/core/architecture/api-flags for more information. | |
| */ | |
| kApiLevel_202404 = 202404, | |
| kApiLevel_202504 = 202504, | |
| kApiLevel_202604 = 202604, | |
| /* kNextRelease is a placeholder value that all new unit tests should use, as long as | |
| * they are considered stable and ready to be enforced. It implies that this test will be | |
| * enforced in the next Android release. At the time of the release a new kApiLevel_* value | |
| * will be added and all current kNextRelease values will be replaced with that new value. | |
| */ | |
| kNextRelease = 202704 | |
| }; | |
| /** | |
| * Tests will run in strict (no workarounds) mode if the device API level is >= strictVersion | |
| */ | |
| constexpr CtsEnforcement(ApiLevel strictVersion) | |
| : fStrictVersion(strictVersion), fWorkaroundsVersion(kNever) {} | |
| /** | |
| * Test will run with workarounds if the device API level is >= workaroundVersion | |
| * and < strictVersion | |
| */ | |
| constexpr CtsEnforcement& withWorkarounds(ApiLevel workaroundVersion) { | |
| SkASSERT(workaroundVersion <= fStrictVersion); | |
| fWorkaroundsVersion = workaroundVersion; | |
| return *this; | |
| } | |
| enum class RunMode { kSkip = 0, kRunWithWorkarounds = 1, kRunStrict = 2 }; | |
| RunMode eval(int apiLevel) const; | |
| private: | |
| ApiLevel fStrictVersion; | |
| ApiLevel fWorkaroundsVersion; | |
| }; | |
| #endif |