MediaMetrics: limit maximum memory used
Use media utility function limitProcessMemory().
Test: restrict mediametrics memory by property, ensure restart
Bug: 152084875
Change-Id: I20b51cecd67e9ac5e03ab34c1c68b1cfd0b8a964
diff --git a/media/audioserver/Android.mk b/media/audioserver/Android.mk
index f44f0d5..cf1c14c 100644
--- a/media/audioserver/Android.mk
+++ b/media/audioserver/Android.mk
@@ -39,7 +39,7 @@
frameworks/av/media/libaaudio/include \
frameworks/av/media/libaaudio/src \
frameworks/av/media/libaaudio/src/binding \
- frameworks/av/media/libmedia \
+ frameworks/av/media/libmedia/include \
external/sonic \
LOCAL_MODULE := audioserver
diff --git a/media/audioserver/main_audioserver.cpp b/media/audioserver/main_audioserver.cpp
index 4a2ac1d..70ea60d 100644
--- a/media/audioserver/main_audioserver.cpp
+++ b/media/audioserver/main_audioserver.cpp
@@ -26,6 +26,7 @@
#include <binder/ProcessState.h>
#include <binder/IServiceManager.h>
#include <hidl/HidlTransportSupport.h>
+#include <media/MediaUtils.h>
#include <utils/Log.h>
// from LOCAL_C_INCLUDES
@@ -35,7 +36,6 @@
#include "AAudioService.h"
#include "utility/AAudioUtilities.h"
#include "MediaLogService.h"
-#include "MediaUtils.h"
using namespace android;
diff --git a/media/libmedia/MediaUtils.cpp b/media/libmedia/MediaUtils.cpp
index 2efb30e..5f339a5 100644
--- a/media/libmedia/MediaUtils.cpp
+++ b/media/libmedia/MediaUtils.cpp
@@ -23,8 +23,7 @@
#include <unistd.h>
#include <bionic/malloc.h>
-
-#include "MediaUtils.h"
+#include <media/MediaUtils.h>
extern "C" void __scudo_set_rss_limit(size_t, int) __attribute__((weak));
diff --git a/media/libmedia/MediaUtils.h b/media/libmedia/include/media/MediaUtils.h
similarity index 100%
rename from media/libmedia/MediaUtils.h
rename to media/libmedia/include/media/MediaUtils.h
diff --git a/services/mediaextractor/Android.bp b/services/mediaextractor/Android.bp
index 548b7f6..b909ea4 100644
--- a/services/mediaextractor/Android.bp
+++ b/services/mediaextractor/Android.bp
@@ -50,8 +50,6 @@
},
init_rc: ["mediaextractor.rc"],
- include_dirs: ["frameworks/av/media/libmedia"],
-
cflags: [
"-Wall",
"-Werror",
diff --git a/services/mediaextractor/main_extractorservice.cpp b/services/mediaextractor/main_extractorservice.cpp
index afb7692..b116b14 100644
--- a/services/mediaextractor/main_extractorservice.cpp
+++ b/services/mediaextractor/main_extractorservice.cpp
@@ -21,7 +21,7 @@
#include <binder/IPCThreadState.h>
#include <binder/ProcessState.h>
#include <binder/IServiceManager.h>
-
+#include <media/MediaUtils.h>
#include <string>
#include <android-base/logging.h>
@@ -32,7 +32,6 @@
// from LOCAL_C_INCLUDES
#include "MediaExtractorService.h"
-#include "MediaUtils.h"
#include "minijail.h"
using namespace android;
diff --git a/services/mediametrics/Android.bp b/services/mediametrics/Android.bp
index ec59ec1..30ec5b7 100644
--- a/services/mediametrics/Android.bp
+++ b/services/mediametrics/Android.bp
@@ -11,6 +11,7 @@
shared_libs: [
"libbinder",
"liblog",
+ "libmedia", // limitProcessMemory
"libmediametricsservice",
"libmediautils",
"libutils",
diff --git a/services/mediametrics/main_mediametrics.cpp b/services/mediametrics/main_mediametrics.cpp
index ec392e2..3c71e42 100644
--- a/services/mediametrics/main_mediametrics.cpp
+++ b/services/mediametrics/main_mediametrics.cpp
@@ -23,12 +23,17 @@
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>
#include <binder/ProcessState.h>
-
+#include <media/MediaUtils.h>
int main(int argc __unused, char **argv __unused)
{
using namespace android;
+ limitProcessMemory(
+ "media.metrics.maxmem", /* property that defines limit */
+ (size_t)128 * (1 << 20), /* SIZE_MAX, upper limit in bytes */
+ 10 /* upper limit as percentage of physical RAM */);
+
signal(SIGPIPE, SIG_IGN);
// to match the service name