Commit 9f2fc6fb authored by Jeremy Roman's avatar Jeremy Roman Committed by Chromium LUCI CQ

arc_process: Just use switches to sort enums; unordered_set is overkill.

This generates much less code and should be faster at runtime.

Part of an ongoing quest to remove unnecessary runtime collection of
static data structures.

Change-Id: I3951f2093623f4e8a56f610c5174d2ea1458709f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2562822
Commit-Queue: Willie Koomson <wvk@google.com>
Reviewed-by: default avatarWillie Koomson <wvk@google.com>
Auto-Submit: Jeremy Roman <jbroman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#831984}
parent c096295e
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
#include "chrome/browser/chromeos/arc/process/arc_process.h" #include "chrome/browser/chromeos/arc/process/arc_process.h"
#include <unordered_set>
#include <utility> #include <utility>
#include "base/no_destructor.h" #include "base/no_destructor.h"
...@@ -15,55 +14,79 @@ namespace arc { ...@@ -15,55 +14,79 @@ namespace arc {
using mojom::ProcessState; using mojom::ProcessState;
namespace {
constexpr char kCloudDpcrocessName[] = constexpr char kCloudDpcrocessName[] =
"com.google.android.apps.work.clouddpc.arc"; "com.google.android.apps.work.clouddpc.arc";
const std::unordered_set<ProcessState>& ImportantStates() { bool IsImportantState(ProcessState state) {
static const base::NoDestructor<std::unordered_set<ProcessState>> switch (state) {
kImportantStates({ProcessState::IMPORTANT_FOREGROUND, case ProcessState::IMPORTANT_FOREGROUND:
ProcessState::BOUND_FOREGROUND_SERVICE, case ProcessState::BOUND_FOREGROUND_SERVICE:
ProcessState::FOREGROUND_SERVICE, ProcessState::TOP, case ProcessState::FOREGROUND_SERVICE:
ProcessState::PERSISTENT_UI, ProcessState::PERSISTENT}); case ProcessState::TOP:
return *kImportantStates; case ProcessState::PERSISTENT_UI:
case ProcessState::PERSISTENT:
return true;
default:
return false;
}
} }
const std::unordered_set<ProcessState>& PersistentStates() { bool IsPersistentState(ProcessState state) {
static const base::NoDestructor<std::unordered_set<ProcessState>> switch (state) {
kPersistentStates( case ProcessState::PERSISTENT_UI:
{ProcessState::PERSISTENT_UI, ProcessState::PERSISTENT}); case ProcessState::PERSISTENT:
return *kPersistentStates; return true;
default:
return false;
}
} }
bool IsProtectedBackgroundState(ProcessState state) {
const std::unordered_set<ProcessState>& ProtectedBackgroundStates() { switch (state) {
static const base::NoDestructor<std::unordered_set<ProcessState>> case ProcessState::TOP:
kProtectedBackgroundStates({ProcessState::TOP, case ProcessState::FOREGROUND_SERVICE:
ProcessState::FOREGROUND_SERVICE, case ProcessState::BOUND_FOREGROUND_SERVICE:
ProcessState::BOUND_FOREGROUND_SERVICE, case ProcessState::IMPORTANT_FOREGROUND:
ProcessState::IMPORTANT_FOREGROUND, case ProcessState::IMPORTANT_BACKGROUND:
ProcessState::IMPORTANT_BACKGROUND}); return true;
return *kProtectedBackgroundStates; default:
return false;
}
} }
const std::unordered_set<ProcessState>& BackgroundStates() { bool IsBackgroundState(ProcessState state) {
static const base::NoDestructor<std::unordered_set<ProcessState>> switch (state) {
kBackgroundStates({ProcessState::TRANSIENT_BACKGROUND, case ProcessState::TRANSIENT_BACKGROUND:
ProcessState::BACKUP, ProcessState::SERVICE, case ProcessState::BACKUP:
ProcessState::RECEIVER, ProcessState::TOP_SLEEPING, case ProcessState::SERVICE:
ProcessState::HEAVY_WEIGHT, ProcessState::HOME, case ProcessState::RECEIVER:
ProcessState::LAST_ACTIVITY, case ProcessState::TOP_SLEEPING:
ProcessState::CACHED_ACTIVITY}); case ProcessState::HEAVY_WEIGHT:
return *kBackgroundStates; case ProcessState::HOME:
case ProcessState::LAST_ACTIVITY:
case ProcessState::CACHED_ACTIVITY:
return true;
default:
return false;
}
} }
const std::unordered_set<ProcessState>& CachedStates() { bool IsCachedState(ProcessState state) {
static const base::NoDestructor<std::unordered_set<ProcessState>> switch (state) {
kCachedStates({ProcessState::CACHED_ACTIVITY_CLIENT, case ProcessState::CACHED_ACTIVITY_CLIENT:
ProcessState::CACHED_RECENT, ProcessState::CACHED_EMPTY, case ProcessState::CACHED_RECENT:
ProcessState::NONEXISTENT}); case ProcessState::CACHED_EMPTY:
return *kCachedStates; case ProcessState::NONEXISTENT:
return true;
default:
return false;
}
} }
} // namespace
ArcProcess::ArcProcess(base::ProcessId nspid, ArcProcess::ArcProcess(base::ProcessId nspid,
base::ProcessId pid, base::ProcessId pid,
const std::string& process_name, const std::string& process_name,
...@@ -90,24 +113,22 @@ bool ArcProcess::operator<(const ArcProcess& rhs) const { ...@@ -90,24 +113,22 @@ bool ArcProcess::operator<(const ArcProcess& rhs) const {
ArcProcess::ArcProcess(ArcProcess&& other) = default; ArcProcess::ArcProcess(ArcProcess&& other) = default;
ArcProcess& ArcProcess::operator=(ArcProcess&& other) = default; ArcProcess& ArcProcess::operator=(ArcProcess&& other) = default;
// TODO(wvk): Use a simple switch/case instead of std::unordered_set lookup,
// it will likely be faster.
bool ArcProcess::IsImportant() const { bool ArcProcess::IsImportant() const {
return ImportantStates().count(process_state()) == 1 || IsArcProtected(); return IsImportantState(process_state()) || IsArcProtected();
} }
bool ArcProcess::IsPersistent() const { bool ArcProcess::IsPersistent() const {
// Protect PERSISTENT, PERSISTENT_UI, our HOME and custom set of ARC processes // Protect PERSISTENT, PERSISTENT_UI, our HOME and custom set of ARC processes
// since they should have lower priority to be killed. // since they should have lower priority to be killed.
return PersistentStates().count(process_state()) == 1 || IsArcProtected(); return IsPersistentState(process_state()) || IsArcProtected();
} }
bool ArcProcess::IsCached() const { bool ArcProcess::IsCached() const {
return CachedStates().count(process_state()) == 1; return IsCachedState(process_state());
} }
bool ArcProcess::IsBackgroundProtected() const { bool ArcProcess::IsBackgroundProtected() const {
return ProtectedBackgroundStates().count(process_state()) == 1; return IsProtectedBackgroundState(process_state());
} }
bool ArcProcess::IsArcProtected() const { bool ArcProcess::IsArcProtected() const {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment