1// Copyright 2013 The Chromium Authors. All rights reserved. 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 <android/log.h> 6#include <jni.h> 7#include <stdio.h> 8#include <string.h> 9 10extern "C" { 11JNIEXPORT void JNICALL 12 Java_org_chromium_memconsumer_ResidentService_nativeUseMemory(JNIEnv* env, 13 jobject clazz, 14 jlong memory); 15} 16 17namespace { 18 19uint32_t get_random() { 20 static uint32_t m_w = 1; 21 static uint32_t m_z = 1; 22 m_z = 36969 * (m_z & 65535) + (m_z >> 16); 23 m_w = 18000 * (m_w & 65535) + (m_w >> 16); 24 return (m_z << 16) + m_w; 25} 26 27} // namespace 28 29JNIEXPORT void JNICALL 30 Java_org_chromium_memconsumer_ResidentService_nativeUseMemory( 31 JNIEnv* env, 32 jobject clazz, 33 jlong memory) { 34 static uint32_t* g_memory = NULL; 35 if (g_memory) 36 free(g_memory); 37 if (memory == 0) { 38 g_memory = NULL; 39 return; 40 } 41 g_memory = static_cast<uint32_t*>(malloc(memory)); 42 if (!g_memory) { 43 __android_log_print(ANDROID_LOG_WARN, 44 "MemConsumer", 45 "Unable to allocate %ld bytes", 46 memory); 47 } 48 // If memory allocation failed, try to allocate as much as possible. 49 while (!g_memory) { 50 memory /= 2; 51 g_memory = static_cast<uint32_t*>(malloc(memory)); 52 } 53 for (int i = 0; i < memory / sizeof(uint32_t); ++i) 54 *(g_memory + i) = get_random(); 55} 56