// 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>
#include <cstdlib>

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 %lld bytes",
                        static_cast<long long>(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();
}
