1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/android/initialize_feature_list_android.h"
#include "base/profiler/thread_group_profiler.h"
#include "base/task/thread_pool/thread_pool_instance.h"
#include "base/time/default_clock.h"
#include "chrome/browser/metrics/chrome_feature_list_creator.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/profiler/chrome_thread_group_profiler_client.h"
#include "components/variations/variations_ids_provider.h"
#include "content/public/browser/startup_helper.h"
// Must come after all headers that specialize FromJniType() / ToJniType().
#include "chrome/android/base_module_jni/InitializeFeatureList_jni.h"
namespace {
bool did_init_feature_list_early = false;
} // namespace
namespace variations::android {
static void JNI_InitializeFeatureList_InitializeFeatureList(JNIEnv* env) {
chrome::RegisterPathProvider();
// The ThreadGroupProfiler client must be set before thread pool is created.
base::ThreadGroupProfiler::SetClient(
std::make_unique<ChromeThreadGroupProfilerClient>());
base::ThreadPoolInstance::Create("Browser");
// Register the TaskExecutor for posting task to the BrowserThreads. It is
// incorrect to post to a BrowserThread before this point. This instantiates
// and binds the MessageLoopForUI on the main thread (but it's only labeled
// as BrowserThread::UI in BrowserMainLoop::CreateMainMessageLoop).
content::CreateBrowserTaskExecutor();
content::InstallPartitionAllocSchedulerLoopQuarantineTaskObserver();
variations::VariationsIdsProvider::CreateInstance(
variations::VariationsIdsProvider::Mode::kUseSignedInState,
std::make_unique<base::DefaultClock>());
ChromeFeatureListCreator* chrome_feature_list_creator =
ChromeFeatureListCreator::GetInstance();
chrome_feature_list_creator->CreateFeatureList();
// The FeatureList needs to be created before starting the ThreadPool.
content::StartThreadPool();
did_init_feature_list_early = true;
}
bool DidInitFeatureListEarly() {
return did_init_feature_list_early;
}
} // namespace variations::android
DEFINE_JNI(InitializeFeatureList)
|