diff --git a/api/current.txt b/api/current.txt index ccf7605ed78b6..34276b4f24180 100644 --- a/api/current.txt +++ b/api/current.txt @@ -29054,6 +29054,8 @@ package android.os { ctor public Process(); method public static final long getElapsedCpuTime(); method public static final int getGidForName(java.lang.String); + method public static final long getStartElapsedRealtime(); + method public static final long getStartUptimeMillis(); method public static final int getThreadPriority(int) throws java.lang.IllegalArgumentException; method public static final int getUidForName(java.lang.String); method public static final boolean is64Bit(); diff --git a/api/system-current.txt b/api/system-current.txt index 88ef16e69aaf1..dcef063fe156f 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -31345,6 +31345,8 @@ package android.os { ctor public Process(); method public static final long getElapsedCpuTime(); method public static final int getGidForName(java.lang.String); + method public static final long getStartElapsedRealtime(); + method public static final long getStartUptimeMillis(); method public static final int getThreadPriority(int) throws java.lang.IllegalArgumentException; method public static final int getUidForName(java.lang.String); method public static final boolean is64Bit(); diff --git a/api/test-current.txt b/api/test-current.txt index f8b7bcc9ea412..b1211957d37b9 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -29065,6 +29065,8 @@ package android.os { ctor public Process(); method public static final long getElapsedCpuTime(); method public static final int getGidForName(java.lang.String); + method public static final long getStartElapsedRealtime(); + method public static final long getStartUptimeMillis(); method public static final int getThreadPriority(int) throws java.lang.IllegalArgumentException; method public static final int getUidForName(java.lang.String); method public static final boolean is64Bit(); diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 1e95c983a84fd..2415ce1d946f4 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -4909,6 +4909,9 @@ public final class ActivityThread { DdmVmInternal.enableRecentAllocations(true); } + // Note when this process has started. + Process.setStartTimes(SystemClock.elapsedRealtime(), SystemClock.uptimeMillis()); + mBoundApplication = data; mConfiguration = new Configuration(data.config); mCompatConfiguration = new Configuration(data.config); diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index 9984755d316fb..8fd3b0c0035f8 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -383,6 +383,9 @@ public class Process { public static final int SIGNAL_KILL = 9; public static final int SIGNAL_USR1 = 10; + private static long sStartElapsedRealtime; + private static long sStartUptimeMillis; + /** * State for communicating with the zygote process. * @@ -771,6 +774,26 @@ public class Process { */ public static final native long getElapsedCpuTime(); + /** + * Return the {@link SystemClock#elapsedRealtime()} at which this process was started. + */ + public static final long getStartElapsedRealtime() { + return sStartElapsedRealtime; + } + + /** + * Return the {@link SystemClock#uptimeMillis()} at which this process was started. + */ + public static final long getStartUptimeMillis() { + return sStartUptimeMillis; + } + + /** @hide */ + public static final void setStartTimes(long elapsedRealtime, long uptimeMillis) { + sStartElapsedRealtime = elapsedRealtime; + sStartUptimeMillis = uptimeMillis; + } + /** * Returns true if the current process is a 64-bit runtime. */