diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java index d067ae792e2d4..14958ca539de7 100644 --- a/core/java/com/android/internal/os/ZygoteConnection.java +++ b/core/java/com/android/internal/os/ZygoteConnection.java @@ -319,13 +319,25 @@ class ZygoteConnection { private final MetricsLogger mMetricsLogger = new MetricsLogger(); private static HiddenApiUsageLogger sInstance = new HiddenApiUsageLogger(); + private int mHiddenApiAccessLogSampleRate = 0; + + public static void setHiddenApiAccessLogSampleRate(int sampleRate) { + sInstance.mHiddenApiAccessLogSampleRate = sampleRate; + } public static HiddenApiUsageLogger getInstance() { return HiddenApiUsageLogger.sInstance; } - public void hiddenApiUsed(String packageName, String signature, + public void hiddenApiUsed(int sampledValue, String packageName, String signature, int accessMethod, boolean accessDenied) { + if (sampledValue < mHiddenApiAccessLogSampleRate) { + logUsage(packageName, signature, accessMethod, accessDenied); + } + } + + private void logUsage(String packageName, String signature, int accessMethod, + boolean accessDenied) { int accessMethodMetric = HiddenApiUsageLogger.ACCESS_METHOD_NONE; switch(accessMethod) { case HiddenApiUsageLogger.ACCESS_METHOD_NONE: @@ -356,6 +368,7 @@ class ZygoteConnection { private void handleHiddenApiAccessLogSampleRate(int samplingRate) { try { ZygoteInit.setHiddenApiAccessLogSampleRate(samplingRate); + HiddenApiUsageLogger.setHiddenApiAccessLogSampleRate(samplingRate); ZygoteInit.setHiddenApiUsageLogger(HiddenApiUsageLogger.getInstance()); mSocketOutStream.writeInt(0); } catch (IOException ioe) {