Skip to content
This repository has been archived by the owner on Feb 25, 2025. It is now read-only.

Widen CPU affinity set. #53136

Merged
merged 2 commits into from
Jun 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions fml/cpu_affinity.cc
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ CPUSpeedTracker::CPUSpeedTracker(std::vector<CpuIndexAndSpeed> data)
}
if (data.speed == min_speed_value) {
efficiency_.push_back(data.index);
} else {
not_efficiency_.push_back(data.index);
}
}

Expand All @@ -77,6 +79,8 @@ const std::vector<size_t>& CPUSpeedTracker::GetIndices(
return efficiency_;
case CpuAffinity::kNotPerformance:
return not_performance_;
case CpuAffinity::kNotEfficiency:
return not_efficiency_;
}
}

Expand Down
4 changes: 4 additions & 0 deletions fml/cpu_affinity.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ enum class CpuAffinity {

/// @brief Request affinity for all non-performance cores.
kNotPerformance,

/// @brief Request affinity for all non-efficiency cores.
kNotEfficiency,
};

/// @brief Request count of efficiency cores.
Expand Down Expand Up @@ -79,6 +82,7 @@ class CPUSpeedTracker {
std::vector<size_t> efficiency_;
std::vector<size_t> performance_;
std::vector<size_t> not_performance_;
std::vector<size_t> not_efficiency_;
};

/// @note Visible for testing.
Expand Down
3 changes: 3 additions & 0 deletions fml/cpu_affinity_unittests.cc
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ TEST(CpuAffinity, NormalSlowMedFastCores) {
ASSERT_EQ(tracker.GetIndices(CpuAffinity::kNotPerformance).size(), 2u);
ASSERT_EQ(tracker.GetIndices(CpuAffinity::kNotPerformance)[0], 0u);
ASSERT_EQ(tracker.GetIndices(CpuAffinity::kNotPerformance)[1], 1u);
ASSERT_EQ(tracker.GetIndices(CpuAffinity::kNotEfficiency).size(), 2u);
ASSERT_EQ(tracker.GetIndices(CpuAffinity::kNotEfficiency)[0], 1u);
ASSERT_EQ(tracker.GetIndices(CpuAffinity::kNotEfficiency)[1], 2u);
}

TEST(CpuAffinity, NoCpuData) {
Expand Down
4 changes: 2 additions & 2 deletions shell/platform/android/android_shell_holder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,14 @@ static void AndroidPlatformThreadConfigSetter(
break;
}
case fml::Thread::ThreadPriority::kDisplay: {
fml::RequestAffinity(fml::CpuAffinity::kPerformance);
fml::RequestAffinity(fml::CpuAffinity::kNotEfficiency);
if (::setpriority(PRIO_PROCESS, 0, -1) != 0) {
FML_LOG(ERROR) << "Failed to set UI task runner priority";
}
break;
}
case fml::Thread::ThreadPriority::kRaster: {
fml::RequestAffinity(fml::CpuAffinity::kPerformance);
fml::RequestAffinity(fml::CpuAffinity::kNotEfficiency);
// Android describes -8 as "most important display threads, for
// compositing the screen and retrieving input events". Conservatively
// set the raster thread to slightly lower priority than it.
Expand Down