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 10 extern "C" { 11 JNIEXPORT void JNICALL 12 Java_org_chromium_memconsumer_ResidentService_nativeUseMemory(JNIEnv* env, 13 jobject clazz, 14 jlong memory); 15 } 16 17 namespace { 18 19 uint32_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 29 JNIEXPORT 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