blob: 502b70b5918c5ef62eb49201247978b07e1faf14 [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <jni.h>
#include "base/android/jni_android.h"
#include "base/bind.h"
#include "base/task/post_task.h"
#include "base/time/time.h"
#include "chrome/android/features/start_surface/jni_headers/StartSurfaceConfiguration_jni.h"
#include "chrome/browser/flags/android/chrome_feature_list.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_android.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_process_host.h"
using base::android::JavaParamRef;
namespace {
int SPARE_RENDERER_DELAY_MS = 1000;
void WarmUpRenderProcess(Profile* profile) {
// It is ok for this to get called multiple times since all the requests
// will get de-duplicated to the first one.
content::RenderProcessHost::WarmupSpareRenderProcessHost(profile);
}
} // namespace
static void JNI_StartSurfaceConfiguration_WarmupRenderer(
JNIEnv* env,
const JavaParamRef<jobject>& jprofile) {
Profile* profile = ProfileAndroid::FromProfileAndroid(jprofile);
auto renderer_delay_ms = base::GetFieldTrialParamByFeatureAsInt(
chrome::android::kStartSurfaceAndroid, "spare_renderer_delay_ms",
SPARE_RENDERER_DELAY_MS);
base::PostDelayedTask(FROM_HERE, {content::BrowserThread::UI},
base::BindOnce(&WarmUpRenderProcess, profile),
base::Milliseconds(renderer_delay_ms));
}