xref: /aosp_15_r20/external/cronet/base/android/memory_purge_manager_android.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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/base_jni/MemoryPurgeManager_jni.h"
10 #include "base/functional/bind.h"
11 #include "third_party/jni_zero/jni_zero.h"
12 
JNI_MemoryPurgeManager_PostDelayedPurgeTaskOnUiThread(JNIEnv * env,jlong delay)13 static void JNI_MemoryPurgeManager_PostDelayedPurgeTaskOnUiThread(JNIEnv* env,
14                                                                   jlong delay) {
15   auto task_runner = base::SequencedTaskRunner::GetCurrentDefault();
16   base::android::PreFreezeBackgroundMemoryTrimmer::PostDelayedBackgroundTask(
17       task_runner, FROM_HERE,
18       base::BindOnce([](base::MemoryReductionTaskContext task_type) {
19         const bool called_from_pre_freeze =
20             task_type == base::MemoryReductionTaskContext::kProactive;
21         Java_MemoryPurgeManager_doDelayedPurge(jni_zero::AttachCurrentThread(),
22                                                called_from_pre_freeze);
23       }),
24       base::Milliseconds(static_cast<long>(delay)));
25 }
26 
JNI_MemoryPurgeManager_IsOnPreFreezeMemoryTrimEnabled(JNIEnv * env)27 static jboolean JNI_MemoryPurgeManager_IsOnPreFreezeMemoryTrimEnabled(
28     JNIEnv* env) {
29   return base::android::PreFreezeBackgroundMemoryTrimmer::ShouldUseModernTrim();
30 }
31