• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2024 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/android/memory_purge_manager_android.h"
6 
7 #include "base/android/build_info.h"
8 #include "base/android/pre_freeze_background_memory_trimmer.h"
9 #include "base/functional/bind.h"
10 #include "third_party/jni_zero/jni_zero.h"
11 
12 // Must come after all headers that specialize FromJniType() / ToJniType().
13 #include "base/memory_jni/MemoryPurgeManager_jni.h"
14 
JNI_MemoryPurgeManager_PostDelayedPurgeTaskOnUiThread(JNIEnv * env,jlong delay)15 static void JNI_MemoryPurgeManager_PostDelayedPurgeTaskOnUiThread(JNIEnv* env,
16                                                                   jlong delay) {
17   auto task_runner = base::SequencedTaskRunner::GetCurrentDefault();
18   base::android::PreFreezeBackgroundMemoryTrimmer::PostDelayedBackgroundTask(
19       task_runner, FROM_HERE,
20       base::BindOnce([](base::MemoryReductionTaskContext task_type) {
21         const bool called_from_pre_freeze =
22             task_type == base::MemoryReductionTaskContext::kProactive;
23         Java_MemoryPurgeManager_doDelayedPurge(jni_zero::AttachCurrentThread(),
24                                                called_from_pre_freeze);
25       }),
26       base::Milliseconds(static_cast<long>(delay)));
27 }
28 
JNI_MemoryPurgeManager_IsOnPreFreezeMemoryTrimEnabled(JNIEnv * env)29 static jboolean JNI_MemoryPurgeManager_IsOnPreFreezeMemoryTrimEnabled(
30     JNIEnv* env) {
31   return base::android::PreFreezeBackgroundMemoryTrimmer::ShouldUseModernTrim();
32 }
33 
JNI_MemoryPurgeManager_IsSelfFreezeEnabled(JNIEnv * env)34 static jboolean JNI_MemoryPurgeManager_IsSelfFreezeEnabled(JNIEnv* env) {
35   return base::FeatureList::IsEnabled(base::android::kShouldFreezeSelf);
36 }
37