Index: tools/android/memconsumer/java/src/org/chromium/memconsumer/ResidentService.java |
diff --git a/tools/android/memconsumer/java/src/org/chromium/memconsumer/ResidentService.java b/tools/android/memconsumer/java/src/org/chromium/memconsumer/ResidentService.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..45e0eb81ac1db0c74937034545d87dea60682526 |
--- /dev/null |
+++ b/tools/android/memconsumer/java/src/org/chromium/memconsumer/ResidentService.java |
@@ -0,0 +1,62 @@ |
+// 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. |
+ |
+package org.chromium.memconsumer; |
+ |
+import android.app.Notification; |
+import android.app.PendingIntent; |
+import android.app.Service; |
+import android.content.Intent; |
+import android.os.Binder; |
+import android.os.IBinder; |
+ |
+public class ResidentService extends Service { |
+ static { |
+ // Loading the native library. |
+ System.loadLibrary("memconsumer"); |
+ } |
+ |
+ public class ServiceBinder extends Binder { |
+ ResidentService getService() { |
+ return ResidentService.this; |
+ } |
+ } |
+ |
+ private static final int RESIDENT_NOTIFICATION_ID = 1; |
+ |
+ private final IBinder mBinder = new ServiceBinder(); |
+ private boolean mIsInForeground = false; |
+ |
+ @Override |
+ public IBinder onBind(Intent intent) { |
+ return mBinder; |
+ } |
+ |
+ public void useMemory(long memory) { |
+ if (memory > 0) { |
+ Intent notificationIntent = new Intent(this, MemConsumer.class); |
+ notificationIntent.setAction(MemConsumer.NOTIFICATION_ACTION); |
+ PendingIntent pendingIntent = |
+ PendingIntent.getActivity(this, 0, notificationIntent, 0); |
+ Notification notification = |
+ new Notification.Builder(getApplicationContext()) |
+ .setContentTitle("MC running (" + memory + "Mb)") |
+ .setSmallIcon(R.drawable.notification_icon) |
+ .setDeleteIntent(pendingIntent) |
+ .setContentIntent(pendingIntent) |
+ .build(); |
+ startForeground(RESIDENT_NOTIFICATION_ID, notification); |
+ mIsInForeground = true; |
+ } |
+ if (mIsInForeground && memory == 0) { |
+ stopForeground(true); |
+ mIsInForeground = false; |
+ } |
+ nativeUseMemory(memory * 1024 * 1024); |
+ } |
+ |
+ // Allocate the amount of memory in native code. Otherwise the memory |
+ // allocation is limited by the framework. |
+ private native void nativeUseMemory(long memory); |
+} |