| // Copyright 2026 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "android_webview/browser/aw_render_process_lifecycle.h" |
| |
| #include "android_webview/browser/aw_render_process_keep_alive.h" |
| #include "base/notreached.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/render_process_host.h" |
| |
| namespace android_webview { |
| |
| std::string_view AwRenderProcessLifecycleStateToString( |
| AwRenderProcessLifecycleState state) { |
| switch (state) { |
| case AwRenderProcessLifecycleState::kSpareNeverUsed: |
| return "SpareNeverUsed"; |
| case AwRenderProcessLifecycleState::kSpareKeptAlive: |
| return "SpareKeptAlive"; |
| case AwRenderProcessLifecycleState::kActive: |
| return "Active"; |
| case AwRenderProcessLifecycleState::kUnknown: |
| return "Unknown"; |
| } |
| NOTREACHED(); |
| } |
| |
| AwRenderProcessLifecycleState GetAwRenderProcessLifecycleState( |
| content::RenderProcessHost* host) { |
| CHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| |
| if (!host) { |
| return AwRenderProcessLifecycleState::kUnknown; |
| } |
| |
| if (host->IsSpare()) { |
| return AwRenderProcessLifecycleState::kSpareNeverUsed; |
| } |
| |
| AwRenderProcessKeepAlive* keep_alive = |
| AwRenderProcessKeepAlive::GetInstanceForRenderProcessHost(host); |
| if (keep_alive->kept_alive() && !keep_alive->has_aw_contents()) { |
| return AwRenderProcessLifecycleState::kSpareKeptAlive; |
| } |
| |
| return AwRenderProcessLifecycleState::kActive; |
| } |
| |
| std::string_view GetAwRenderProcessLifecycleStateString( |
| content::RenderProcessHost* host) { |
| return AwRenderProcessLifecycleStateToString( |
| GetAwRenderProcessLifecycleState(host)); |
| } |
| |
| } // namespace android_webview |