mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
56 lines
1.5 KiB
C++
56 lines
1.5 KiB
C++
// Copyright 2013 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 <android/log.h>
|
|
#include <jni.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
extern "C" {
|
|
JNIEXPORT void JNICALL
|
|
Java_org_chromium_memconsumer_ResidentService_nativeUseMemory(JNIEnv* env,
|
|
jobject clazz,
|
|
jlong memory);
|
|
}
|
|
|
|
namespace {
|
|
|
|
uint32_t get_random() {
|
|
static uint32_t m_w = 1;
|
|
static uint32_t m_z = 1;
|
|
m_z = 36969 * (m_z & 65535) + (m_z >> 16);
|
|
m_w = 18000 * (m_w & 65535) + (m_w >> 16);
|
|
return (m_z << 16) + m_w;
|
|
}
|
|
|
|
} // namespace
|
|
|
|
JNIEXPORT void JNICALL
|
|
Java_org_chromium_memconsumer_ResidentService_nativeUseMemory(
|
|
JNIEnv* env,
|
|
jobject clazz,
|
|
jlong memory) {
|
|
static uint32_t* g_memory = NULL;
|
|
if (g_memory)
|
|
free(g_memory);
|
|
if (memory == 0) {
|
|
g_memory = NULL;
|
|
return;
|
|
}
|
|
g_memory = static_cast<uint32_t*>(malloc(memory));
|
|
if (!g_memory) {
|
|
__android_log_print(ANDROID_LOG_WARN,
|
|
"MemConsumer",
|
|
"Unable to allocate %ld bytes",
|
|
memory);
|
|
}
|
|
// If memory allocation failed, try to allocate as much as possible.
|
|
while (!g_memory) {
|
|
memory /= 2;
|
|
g_memory = static_cast<uint32_t*>(malloc(memory));
|
|
}
|
|
for (int i = 0; i < memory / sizeof(uint32_t); ++i)
|
|
*(g_memory + i) = get_random();
|
|
}
|