From e6efa0540af4833076038538db6a21b1b834df5e Mon Sep 17 00:00:00 2001 From: Andrei Onea Date: Wed, 6 Feb 2019 14:44:22 +0000 Subject: [PATCH] Fix regression in Dalvik:HEAP_TOTAL Make HiddenApiUsageLogger a singleton initialised in Zygote pre-fork and rely on copy-on-write to prevent heap size increases Test: atest google/perf/memory/memory-test Bug: 123705750 Change-Id: I384d3bdefa6525fcce494783c548e85979bce4d5 Merged-In: Idc5ad13d4e158659009290f410ce721013345308 --- core/java/com/android/internal/os/ZygoteConnection.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java index 2bb075989f35c..d067ae792e2d4 100644 --- a/core/java/com/android/internal/os/ZygoteConnection.java +++ b/core/java/com/android/internal/os/ZygoteConnection.java @@ -315,9 +315,14 @@ class ZygoteConnection { } } - private class HiddenApiUsageLogger implements VMRuntime.HiddenApiUsageLogger { + private static class HiddenApiUsageLogger implements VMRuntime.HiddenApiUsageLogger { private final MetricsLogger mMetricsLogger = new MetricsLogger(); + private static HiddenApiUsageLogger sInstance = new HiddenApiUsageLogger(); + + public static HiddenApiUsageLogger getInstance() { + return HiddenApiUsageLogger.sInstance; + } public void hiddenApiUsed(String packageName, String signature, int accessMethod, boolean accessDenied) { @@ -351,7 +356,7 @@ class ZygoteConnection { private void handleHiddenApiAccessLogSampleRate(int samplingRate) { try { ZygoteInit.setHiddenApiAccessLogSampleRate(samplingRate); - ZygoteInit.setHiddenApiUsageLogger(new HiddenApiUsageLogger()); + ZygoteInit.setHiddenApiUsageLogger(HiddenApiUsageLogger.getInstance()); mSocketOutStream.writeInt(0); } catch (IOException ioe) { throw new IllegalStateException("Error writing to command socket", ioe);