diff --git a/tutorials/MoarRam/Android.mk b/tutorials/MoarRam/Android.mk new file mode 100644 index 000000000..c3bace94c --- /dev/null +++ b/tutorials/MoarRam/Android.mk @@ -0,0 +1,31 @@ +# Copyright (C) 2013 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +# We only want this apk build for tests. +LOCAL_MODULE_TAGS := optional + +# Include all test java files. +LOCAL_SRC_FILES := $(call all-java-files-under, src) + +LOCAL_PACKAGE_NAME := MoarRam + +include $(BUILD_PACKAGE) + +include $(CLEAR_VARS) + +include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tutorials/MoarRam/AndroidManifest.xml b/tutorials/MoarRam/AndroidManifest.xml new file mode 100644 index 000000000..ae48aceed --- /dev/null +++ b/tutorials/MoarRam/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + diff --git a/tutorials/MoarRam/README.txt b/tutorials/MoarRam/README.txt new file mode 100644 index 000000000..028389b2b --- /dev/null +++ b/tutorials/MoarRam/README.txt @@ -0,0 +1,14 @@ +This is a simple app that can be used as a tutorial or reference benchmark +for the development of the DDMS native heap tracker feature. It contains 3 +unique paths to allocate heap chunks: + +1) Java_com_android_benchmark_moarram_MainActivity_add32ByteBlocksNative in + foo.c (libmoarram-foo.so). Each invocation will allocate 32 bytes. +2) Java_com_android_benchmark_moarram_MainActivity_add2MByteBlocksNative in + bar.c (libmoarram-bar.so). Each invocation will allocate 2M bytes. +3) Java_com_android_benchmark_moarram_MainActivity_addVariableSizedBlocksNative + in baz.c (libmoarram-baz.so). Each invocation will allocate 17 or 71 bytes, + depending on the active button in a radio group. + +Each allocation can be freed by clicking the corresponding free button in the +UI. diff --git a/tutorials/MoarRam/jni/Android.mk b/tutorials/MoarRam/jni/Android.mk new file mode 100644 index 000000000..933cbdf3c --- /dev/null +++ b/tutorials/MoarRam/jni/Android.mk @@ -0,0 +1,43 @@ +# Copyright (C) 2013 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE := libmoarram-32 +LOCAL_SRC_FILES := foo.c +LOCAL_SHARED_LIBRARIES += liblog + +include $(BUILD_SHARED_LIBRARY) + +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE := libmoarram-2M +LOCAL_SRC_FILES := bar.c +LOCAL_SHARED_LIBRARIES += liblog + +include $(BUILD_SHARED_LIBRARY) + +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE := libmoarram-17_71 +LOCAL_SRC_FILES := baz.c +LOCAL_SHARED_LIBRARIES += liblog + +include $(BUILD_SHARED_LIBRARY) diff --git a/tutorials/MoarRam/jni/bar.c b/tutorials/MoarRam/jni/bar.c new file mode 100644 index 000000000..7b00e6299 --- /dev/null +++ b/tutorials/MoarRam/jni/bar.c @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include + +#if defined(LOG_TAG) +#undef LOG_TAG +#define LOG_TAG "MOARRAM" +#endif + +char *gPtr2; +static int num2MByteBlocks; + +void +Java_com_android_benchmark_moarram_MainActivity_add2MByteBlocksNative( + JNIEnv* env, + jobject this) +{ + char **ptr = malloc(2*1024*1024); + *ptr = gPtr2; + gPtr2 = (char *) ptr; + num2MByteBlocks++; + ALOGW("%d 2M-byte blocks allocated so far (just allocated %p)", + num2MByteBlocks, gPtr2); +} + +void +Java_com_android_benchmark_moarram_MainActivity_free2MByteBlocksNative( + JNIEnv* env, + jobject this) +{ + if (gPtr2 == NULL) { + ALOGW("All 2M-byte blocks are freed"); + return; + } + + char **ptr = (char **) gPtr2; + gPtr2 = *ptr; + free(ptr); + num2MByteBlocks--; + ALOGW("%d 2M-byte blocks allocated so far (just freed %p)", + num2MByteBlocks, ptr); +} diff --git a/tutorials/MoarRam/jni/baz.c b/tutorials/MoarRam/jni/baz.c new file mode 100644 index 000000000..1262e40fb --- /dev/null +++ b/tutorials/MoarRam/jni/baz.c @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include + +#if defined(LOG_TAG) +#undef LOG_TAG +#define LOG_TAG "MOARRAM" +#endif + +char *gPtr17; +char *gPtr71; +static int num17ByteBlocks; +static int num71ByteBlocks; + +void +Java_com_android_benchmark_moarram_MainActivity_addVariableSizedBlocksNative( + JNIEnv* env, + jobject this, + jint id) +{ + int size; + char **gPtr; + char **ptr; + if (id == 0) { + size = 17; + gPtr = &gPtr17; + } else { + size = 71; + gPtr = &gPtr71; + } + ptr = malloc(size); + *ptr = *gPtr; + *gPtr = (char *) ptr; + ALOGW("%d %d-byte blocks allocated so far (just allocated %p)", + id == 0 ? ++num17ByteBlocks : ++num71ByteBlocks, + size, ptr); +} + +void +Java_com_android_benchmark_moarram_MainActivity_freeVariableSizedBlocksNative( + JNIEnv* env, + jobject this, + jint id) +{ + int size; + char **ptr; + char **gPtr; + if (id == 0) { + size = 17; + gPtr = &gPtr17; + } else { + size = 71; + gPtr = &gPtr71; + } + if (*gPtr == NULL) { + ALOGW("All %d-byte blocks are freed", size); + return; + } + ptr = (char **) *gPtr; + *gPtr = *ptr; + free(ptr); + ALOGW("%d %d-byte blocks allocated so far (just freed %p)", + id == 0 ? --num17ByteBlocks : --num71ByteBlocks, + size, ptr); +} diff --git a/tutorials/MoarRam/jni/foo.c b/tutorials/MoarRam/jni/foo.c new file mode 100644 index 000000000..a318c748d --- /dev/null +++ b/tutorials/MoarRam/jni/foo.c @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include + +#if defined(LOG_TAG) +#undef LOG_TAG +#define LOG_TAG "MOARRAM" +#endif + +char *gPtr; +static int num32ByteBlocks; + +void +Java_com_android_benchmark_moarram_MainActivity_add32ByteBlocksNative( + JNIEnv* env, + jobject this) +{ + char **ptr = malloc(32); + *ptr = gPtr; + gPtr = (char *) ptr; + num32ByteBlocks++; + ALOGW("%d 32-byte blocks allocated so far (just allocated %p)", + num32ByteBlocks, gPtr); +} + +void +Java_com_android_benchmark_moarram_MainActivity_free32ByteBlocksNative( + JNIEnv* env, + jobject this) +{ + if (gPtr == NULL) { + ALOGW("All 32-byte blocks are freed"); + return; + } + + char **ptr = (char **) gPtr; + gPtr = *ptr; + free(ptr); + num32ByteBlocks--; + ALOGW("%d 32-byte blocks allocated so far (just freed %p)", + num32ByteBlocks, ptr); +} diff --git a/tutorials/MoarRam/res/drawable-hdpi/ic_launcher.png b/tutorials/MoarRam/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 000000000..288b66551 Binary files /dev/null and b/tutorials/MoarRam/res/drawable-hdpi/ic_launcher.png differ diff --git a/tutorials/MoarRam/res/drawable-mdpi/ic_launcher.png b/tutorials/MoarRam/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 000000000..6ae570b4d Binary files /dev/null and b/tutorials/MoarRam/res/drawable-mdpi/ic_launcher.png differ diff --git a/tutorials/MoarRam/res/drawable-xhdpi/ic_launcher.png b/tutorials/MoarRam/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 000000000..d4fb7cd9d Binary files /dev/null and b/tutorials/MoarRam/res/drawable-xhdpi/ic_launcher.png differ diff --git a/tutorials/MoarRam/res/drawable-xxhdpi/ic_launcher.png b/tutorials/MoarRam/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..85a608158 Binary files /dev/null and b/tutorials/MoarRam/res/drawable-xxhdpi/ic_launcher.png differ diff --git a/tutorials/MoarRam/res/layout/activity_main.xml b/tutorials/MoarRam/res/layout/activity_main.xml new file mode 100644 index 000000000..8319bd76e --- /dev/null +++ b/tutorials/MoarRam/res/layout/activity_main.xml @@ -0,0 +1,104 @@ + + + + +