TEST_F(PaletteClientTest, Ashmem) { #ifndef ART_TARGET_ANDROID
GTEST_SKIP() << "ashmem is only supported on Android"; #else int fd;
EXPECT_EQ(PALETTE_STATUS_OK, PaletteAshmemCreateRegion("ashmem-test", 4096, &fd));
EXPECT_EQ(PALETTE_STATUS_OK, PaletteAshmemSetProtRegion(fd, PROT_READ | PROT_EXEC));
EXPECT_EQ(0, close(fd)); #endif
}
TEST_F(PaletteClientTest, JniInvocation) { #ifndef ART_TARGET_ANDROID // On host we need to use the runtime linked into the test to start a VM (e.g. // by inheriting CommonArtTest), while on device it needs to launch the // runtime through libnativehelper. Let's not bother on host since this test // is only for native API coverage on device.
GTEST_SKIP() << "Will only spin up a VM on Android"; #else bool enabled;
EXPECT_EQ(PALETTE_STATUS_OK, PaletteShouldReportJniInvocations(&enabled));
// Run with the expectation to be both root and non-root, skipping the // inapplicable one. Useful when expected results depend on rootness, to make it // clear in test results which variant was executed. class PaletteClientRootParamTest : public ::testing::TestWithParam<bool> { protected: bool TestAsRoot() { return GetParam(); } bool RunningAsRoot() { return getuid() == 0; } bool ShouldSkip() { return TestAsRoot() != RunningAsRoot(); }
};
TEST_P(PaletteClientRootParamTest, SetTaskProfiles) { #ifndef ART_TARGET_ANDROID
GTEST_SKIP() << "SetTaskProfiles is only supported on Android"; #else if (ShouldSkip()) {
GTEST_SKIP() << (RunningAsRoot() ? "Running as root" : "Not running as root");
} constchar* profiles[] = {"ProcessCapacityHigh", "TimerSlackNormal"};
palette_status_t res = PaletteSetTaskProfiles(GetTid(), &profiles[0], 2); if (PaletteSetTaskProfilesIsSupported(res)) { // SetTaskProfiles will only work fully if we run as root. Otherwise it'll // return false which is mapped to PALETTE_STATUS_FAILED_CHECK_LOG. if (TestAsRoot()) {
EXPECT_EQ(PALETTE_STATUS_OK, res);
} else {
EXPECT_EQ(PALETTE_STATUS_FAILED_CHECK_LOG, res);
}
} #endif
}
TEST_P(PaletteClientRootParamTest, SetTaskProfilesCpp) { #ifndef ART_TARGET_ANDROID
GTEST_SKIP() << "SetTaskProfiles is only supported on Android"; #else if (ShouldSkip()) {
GTEST_SKIP() << (RunningAsRoot() ? "Running as root" : "Not running as root");
}
std::vector<std::string> profiles = {"ProcessCapacityHigh", "TimerSlackNormal"};
palette_status_t res = PaletteSetTaskProfiles(GetTid(), profiles); if (PaletteSetTaskProfilesIsSupported(res)) { // SetTaskProfiles will only work fully if we run as root. Otherwise it'll // return false which is mapped to PALETTE_STATUS_FAILED_CHECK_LOG. if (TestAsRoot()) {
EXPECT_EQ(PALETTE_STATUS_OK, res);
} else {
EXPECT_EQ(PALETTE_STATUS_FAILED_CHECK_LOG, res);
}
} #endif
}
TEST_F(PaletteClientTest, DebugStore) { #ifndef ART_TARGET_ANDROID
GTEST_SKIP() << "DebugStore is only supported on Android"; #else
std::array<char, 20> result{}; // Make sure the we are on a correct API level. if (!PaletteDebugStoreIsSupported()) {
GTEST_SKIP() << "DebugStore is only supported on API 36+";
}
palette_status_t pstatus = PaletteDebugStoreGetString(result.data(), result.size());
EXPECT_EQ(PALETTE_STATUS_OK, pstatus);
size_t len = strnlen(result.data(), result.size());
EXPECT_TRUE(len < result.size());
TEST_F(PaletteClientTest, MapPriority) { // Make sure the we are on a correct API level. if (!PaletteMapPriorityIsSupported()) {
GTEST_SKIP() << "GetPriorityMapping is only supported on API 36.1+";
} int result; int last_result = 100; // > any plausible niceness value.
palette_status_t pstatus; for (int32_t i = art::palette::kMinManagedThreadPriority;
i <= art::palette::kMaxManagedThreadPriority;
++i) {
pstatus = PaletteMapPriority(i, &result);
EXPECT_EQ(PALETTE_STATUS_OK, pstatus); if (i == art::palette::kMinManagedThreadPriority) {
EXPECT_GT(result, 0);
} if (i == art::palette::kMaxManagedThreadPriority) {
EXPECT_LT(result, 0);
}
EXPECT_LT(result, last_result);
last_result = result;
}
// This time with invalid Java priorities.
pstatus = PaletteMapPriority(art::palette::kMinManagedThreadPriority - 1, &result);
EXPECT_EQ(PALETTE_STATUS_INVALID_ARGUMENT, pstatus);
pstatus = PaletteMapPriority(art::palette::kMaxManagedThreadPriority + 1, &result);
EXPECT_EQ(PALETTE_STATUS_INVALID_ARGUMENT, pstatus);
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-06-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.