summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/current.txt11
-rw-r--r--api/system-current.txt11
-rw-r--r--api/test-current.txt11
-rw-r--r--core/java/android/app/timezone/Callback.java1
-rw-r--r--core/java/android/app/timezone/DistroFormatVersion.java1
-rw-r--r--core/java/android/app/timezone/DistroRulesVersion.java1
-rw-r--r--core/java/android/app/timezone/RulesManager.java1
-rw-r--r--core/java/android/app/timezone/RulesState.java1
-rw-r--r--core/java/android/app/timezone/RulesUpdaterContract.java1
-rw-r--r--core/java/android/bluetooth/IBluetoothStateChangeCallback.aidl2
-rw-r--r--core/java/android/os/Debug.java71
-rw-r--r--core/java/android/provider/TimeZoneRulesDataContract.java1
-rw-r--r--core/java/com/android/server/BootReceiver.java6
-rw-r--r--core/jni/android_os_Debug.cpp56
-rw-r--r--core/jni/android_text_AndroidBidi.cpp2
-rw-r--r--core/jni/android_view_InputDevice.cpp2
-rw-r--r--core/jni/android_view_KeyCharacterMap.cpp2
-rw-r--r--core/jni/android_view_SurfaceControl.cpp4
-rw-r--r--core/jni/include/android_runtime/AndroidRuntime.h2
-rw-r--r--core/tests/coretests/src/android/app/timezone/DistroFormatVersionTest.java1
-rw-r--r--core/tests/coretests/src/android/app/timezone/DistroRulesVersionTest.java1
-rw-r--r--core/tests/coretests/src/android/app/timezone/RulesStateTest.java1
-rw-r--r--core/tests/coretests/src/android/app/timezone/RulesUpdaterContractTest.java1
-rw-r--r--media/jni/audioeffect/android_media_AudioEffect.cpp2
-rw-r--r--media/jni/audioeffect/android_media_Visualizer.cpp2
-rw-r--r--media/jni/soundpool/android_media_SoundPool.cpp2
-rw-r--r--services/core/java/com/android/server/IpSecService.java25
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java42
-rw-r--r--services/core/java/com/android/server/timezone/PackageStatusStorage.java24
-rw-r--r--services/core/java/com/android/server/timezone/RulesManagerServiceHelperImpl.java6
-rw-r--r--services/core/jni/com_android_server_lights_LightsService.cpp4
-rw-r--r--services/core/jni/com_android_server_power_PowerManagerService.cpp21
32 files changed, 231 insertions, 88 deletions
diff --git a/api/current.txt b/api/current.txt
index e48aad3cc49d..40fd30837fbb 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -36685,14 +36685,18 @@ package android.system {
public final class StructStat {
ctor public StructStat(long, long, int, long, int, int, long, long, long, long, long, long, long);
+ ctor public StructStat(long, long, int, long, int, int, long, long, android.system.StructTimespec, android.system.StructTimespec, android.system.StructTimespec, long, long);
+ field public final android.system.StructTimespec st_atim;
field public final long st_atime;
field public final long st_blksize;
field public final long st_blocks;
+ field public final android.system.StructTimespec st_ctim;
field public final long st_ctime;
field public final long st_dev;
field public final int st_gid;
field public final long st_ino;
field public final int st_mode;
+ field public final android.system.StructTimespec st_mtim;
field public final long st_mtime;
field public final long st_nlink;
field public final long st_rdev;
@@ -36715,6 +36719,13 @@ package android.system {
field public final long f_namemax;
}
+ public final class StructTimespec implements java.lang.Comparable {
+ ctor public StructTimespec(long, long);
+ method public int compareTo(android.system.StructTimespec);
+ field public final long tv_nsec;
+ field public final long tv_sec;
+ }
+
public final class StructUtsname {
ctor public StructUtsname(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String);
field public final java.lang.String machine;
diff --git a/api/system-current.txt b/api/system-current.txt
index ae772dd03f60..13e283c46761 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -39636,14 +39636,18 @@ package android.system {
public final class StructStat {
ctor public StructStat(long, long, int, long, int, int, long, long, long, long, long, long, long);
+ ctor public StructStat(long, long, int, long, int, int, long, long, android.system.StructTimespec, android.system.StructTimespec, android.system.StructTimespec, long, long);
+ field public final android.system.StructTimespec st_atim;
field public final long st_atime;
field public final long st_blksize;
field public final long st_blocks;
+ field public final android.system.StructTimespec st_ctim;
field public final long st_ctime;
field public final long st_dev;
field public final int st_gid;
field public final long st_ino;
field public final int st_mode;
+ field public final android.system.StructTimespec st_mtim;
field public final long st_mtime;
field public final long st_nlink;
field public final long st_rdev;
@@ -39666,6 +39670,13 @@ package android.system {
field public final long f_namemax;
}
+ public final class StructTimespec implements java.lang.Comparable {
+ ctor public StructTimespec(long, long);
+ method public int compareTo(android.system.StructTimespec);
+ field public final long tv_nsec;
+ field public final long tv_sec;
+ }
+
public final class StructUtsname {
ctor public StructUtsname(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String);
field public final java.lang.String machine;
diff --git a/api/test-current.txt b/api/test-current.txt
index 63322af883c7..9d23dc83ec66 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -36768,14 +36768,18 @@ package android.system {
public final class StructStat {
ctor public StructStat(long, long, int, long, int, int, long, long, long, long, long, long, long);
+ ctor public StructStat(long, long, int, long, int, int, long, long, android.system.StructTimespec, android.system.StructTimespec, android.system.StructTimespec, long, long);
+ field public final android.system.StructTimespec st_atim;
field public final long st_atime;
field public final long st_blksize;
field public final long st_blocks;
+ field public final android.system.StructTimespec st_ctim;
field public final long st_ctime;
field public final long st_dev;
field public final int st_gid;
field public final long st_ino;
field public final int st_mode;
+ field public final android.system.StructTimespec st_mtim;
field public final long st_mtime;
field public final long st_nlink;
field public final long st_rdev;
@@ -36798,6 +36802,13 @@ package android.system {
field public final long f_namemax;
}
+ public final class StructTimespec implements java.lang.Comparable {
+ ctor public StructTimespec(long, long);
+ method public int compareTo(android.system.StructTimespec);
+ field public final long tv_nsec;
+ field public final long tv_sec;
+ }
+
public final class StructUtsname {
ctor public StructUtsname(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String);
field public final java.lang.String machine;
diff --git a/core/java/android/app/timezone/Callback.java b/core/java/android/app/timezone/Callback.java
index b51e5bad0f69..aea8038056ab 100644
--- a/core/java/android/app/timezone/Callback.java
+++ b/core/java/android/app/timezone/Callback.java
@@ -27,7 +27,6 @@ import java.lang.annotation.RetentionPolicy;
*
* @hide
*/
-// TODO(nfuller): Expose necessary APIs for OEMs with @SystemApi. http://b/31008728
public abstract class Callback {
@Retention(RetentionPolicy.SOURCE)
diff --git a/core/java/android/app/timezone/DistroFormatVersion.java b/core/java/android/app/timezone/DistroFormatVersion.java
index e879e8f8adbc..be732e4c0188 100644
--- a/core/java/android/app/timezone/DistroFormatVersion.java
+++ b/core/java/android/app/timezone/DistroFormatVersion.java
@@ -35,7 +35,6 @@ import android.os.Parcelable;
*
* @hide
*/
-// TODO(nfuller): Expose necessary APIs for OEMs with @SystemApi. http://b/31008728
public final class DistroFormatVersion implements Parcelable {
private final int mMajorVersion;
diff --git a/core/java/android/app/timezone/DistroRulesVersion.java b/core/java/android/app/timezone/DistroRulesVersion.java
index 1eb9f45f48f1..a680594657ae 100644
--- a/core/java/android/app/timezone/DistroRulesVersion.java
+++ b/core/java/android/app/timezone/DistroRulesVersion.java
@@ -36,7 +36,6 @@ import android.os.Parcelable;
*
* @hide
*/
-// TODO(nfuller): Expose necessary APIs for OEMs with @SystemApi. http://b/31008728
public final class DistroRulesVersion implements Parcelable {
private final String mRulesVersion;
diff --git a/core/java/android/app/timezone/RulesManager.java b/core/java/android/app/timezone/RulesManager.java
index 649d894ca685..ad9b698a8fd7 100644
--- a/core/java/android/app/timezone/RulesManager.java
+++ b/core/java/android/app/timezone/RulesManager.java
@@ -64,7 +64,6 @@ import java.util.Arrays;
* {@link Context#TIME_ZONE_RULES_MANAGER_SERVICE}.
* @hide
*/
-// TODO(nfuller): Expose necessary APIs for OEMs with @SystemApi. http://b/31008728
public final class RulesManager {
private static final String TAG = "timezone.RulesManager";
private static final boolean DEBUG = false;
diff --git a/core/java/android/app/timezone/RulesState.java b/core/java/android/app/timezone/RulesState.java
index 7d6ad2119fb7..ec247ebf502f 100644
--- a/core/java/android/app/timezone/RulesState.java
+++ b/core/java/android/app/timezone/RulesState.java
@@ -60,7 +60,6 @@ import java.lang.annotation.RetentionPolicy;
*
* @hide
*/
-// TODO(nfuller): Expose necessary APIs for OEMs with @SystemApi. http://b/31008728
public final class RulesState implements Parcelable {
@Retention(RetentionPolicy.SOURCE)
diff --git a/core/java/android/app/timezone/RulesUpdaterContract.java b/core/java/android/app/timezone/RulesUpdaterContract.java
index 07b2f33ef5e0..9c62f46b6e36 100644
--- a/core/java/android/app/timezone/RulesUpdaterContract.java
+++ b/core/java/android/app/timezone/RulesUpdaterContract.java
@@ -27,7 +27,6 @@ import android.os.UserHandle;
*
* @hide
*/
-// TODO(nfuller): Expose necessary APIs for OEMs with @SystemApi. http://b/31008728
public final class RulesUpdaterContract {
/**
diff --git a/core/java/android/bluetooth/IBluetoothStateChangeCallback.aidl b/core/java/android/bluetooth/IBluetoothStateChangeCallback.aidl
index feccdce57b98..0da4e8843282 100644
--- a/core/java/android/bluetooth/IBluetoothStateChangeCallback.aidl
+++ b/core/java/android/bluetooth/IBluetoothStateChangeCallback.aidl
@@ -21,7 +21,7 @@ package android.bluetooth;
*
* {@hide}
*/
-interface IBluetoothStateChangeCallback
+oneway interface IBluetoothStateChangeCallback
{
void onBluetoothStateChange(boolean on);
}
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java
index e05bd89079af..55b6dc817e5c 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -221,28 +221,69 @@ public final class Debug
/** @hide */
public static final int OTHER_OTHER_MEMTRACK = 16;
+ // Needs to be declared here for the DVK_STAT ranges below.
+ /** @hide */
+ public static final int NUM_OTHER_STATS = 17;
+
+ // Dalvik subsections.
/** @hide */
public static final int OTHER_DALVIK_NORMAL = 17;
/** @hide */
public static final int OTHER_DALVIK_LARGE = 18;
/** @hide */
- public static final int OTHER_DALVIK_LINEARALLOC = 19;
+ public static final int OTHER_DALVIK_ZYGOTE = 19;
+ /** @hide */
+ public static final int OTHER_DALVIK_NON_MOVING = 20;
+ // Section begins and ends for dumpsys, relative to the DALVIK categories.
+ /** @hide */
+ public static final int OTHER_DVK_STAT_DALVIK_START =
+ OTHER_DALVIK_NORMAL - NUM_OTHER_STATS;
/** @hide */
- public static final int OTHER_DALVIK_ACCOUNTING = 20;
+ public static final int OTHER_DVK_STAT_DALVIK_END =
+ OTHER_DALVIK_NON_MOVING - NUM_OTHER_STATS;
+
+ // Dalvik Other subsections.
+ /** @hide */
+ public static final int OTHER_DALVIK_OTHER_LINEARALLOC = 21;
+ /** @hide */
+ public static final int OTHER_DALVIK_OTHER_ACCOUNTING = 22;
/** @hide */
- public static final int OTHER_DALVIK_CODE_CACHE = 21;
+ public static final int OTHER_DALVIK_OTHER_CODE_CACHE = 23;
/** @hide */
- public static final int OTHER_DALVIK_ZYGOTE = 22;
+ public static final int OTHER_DALVIK_OTHER_COMPILER_METADATA = 24;
/** @hide */
- public static final int OTHER_DALVIK_NON_MOVING = 23;
+ public static final int OTHER_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE = 25;
/** @hide */
- public static final int OTHER_DALVIK_INDIRECT_REFERENCE_TABLE = 24;
+ public static final int OTHER_DVK_STAT_DALVIK_OTHER_START =
+ OTHER_DALVIK_OTHER_LINEARALLOC - NUM_OTHER_STATS;
+ /** @hide */
+ public static final int OTHER_DVK_STAT_DALVIK_OTHER_END =
+ OTHER_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE - NUM_OTHER_STATS;
+ // Dex subsections (Boot vdex, App dex, and App vdex).
/** @hide */
- public static final int NUM_OTHER_STATS = 17;
+ public static final int OTHER_DEX_BOOT_VDEX = 26;
+ /** @hide */
+ public static final int OTHER_DEX_APP_DEX = 27;
+ /** @hide */
+ public static final int OTHER_DEX_APP_VDEX = 28;
+ /** @hide */
+ public static final int OTHER_DVK_STAT_DEX_START = OTHER_DEX_BOOT_VDEX - NUM_OTHER_STATS;
+ /** @hide */
+ public static final int OTHER_DVK_STAT_DEX_END = OTHER_DEX_APP_VDEX - NUM_OTHER_STATS;
+
+ // Art subsections (App image, boot image).
+ /** @hide */
+ public static final int OTHER_ART_APP = 29;
+ /** @hide */
+ public static final int OTHER_ART_BOOT = 30;
+ /** @hide */
+ public static final int OTHER_DVK_STAT_ART_START = OTHER_ART_APP - NUM_OTHER_STATS;
+ /** @hide */
+ public static final int OTHER_DVK_STAT_ART_END = OTHER_ART_BOOT - NUM_OTHER_STATS;
/** @hide */
- public static final int NUM_DVK_STATS = 8;
+ public static final int NUM_DVK_STATS = 14;
/** @hide */
public static final int NUM_CATEGORIES = 8;
@@ -406,12 +447,18 @@ public final class Debug
case OTHER_OTHER_MEMTRACK: return "Other mtrack";
case OTHER_DALVIK_NORMAL: return ".Heap";
case OTHER_DALVIK_LARGE: return ".LOS";
- case OTHER_DALVIK_LINEARALLOC: return ".LinearAlloc";
- case OTHER_DALVIK_ACCOUNTING: return ".GC";
- case OTHER_DALVIK_CODE_CACHE: return ".JITCache";
case OTHER_DALVIK_ZYGOTE: return ".Zygote";
case OTHER_DALVIK_NON_MOVING: return ".NonMoving";
- case OTHER_DALVIK_INDIRECT_REFERENCE_TABLE: return ".IndirectRef";
+ case OTHER_DALVIK_OTHER_LINEARALLOC: return ".LinearAlloc";
+ case OTHER_DALVIK_OTHER_ACCOUNTING: return ".GC";
+ case OTHER_DALVIK_OTHER_CODE_CACHE: return ".JITCache";
+ case OTHER_DALVIK_OTHER_COMPILER_METADATA: return ".CompilerMetadata";
+ case OTHER_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE: return ".IndirectRef";
+ case OTHER_DEX_BOOT_VDEX: return ".Boot vdex";
+ case OTHER_DEX_APP_DEX: return ".App dex";
+ case OTHER_DEX_APP_VDEX: return ".App vdex";
+ case OTHER_ART_APP: return ".App art";
+ case OTHER_ART_BOOT: return ".Boot art";
default: return "????";
}
}
diff --git a/core/java/android/provider/TimeZoneRulesDataContract.java b/core/java/android/provider/TimeZoneRulesDataContract.java
index a60756312310..789638523905 100644
--- a/core/java/android/provider/TimeZoneRulesDataContract.java
+++ b/core/java/android/provider/TimeZoneRulesDataContract.java
@@ -24,7 +24,6 @@ import android.net.Uri;
*
* @hide
*/
-// TODO(nfuller): Expose necessary APIs for OEMs with @SystemApi. http://b/31008728
public final class TimeZoneRulesDataContract {
private TimeZoneRulesDataContract() {}
diff --git a/core/java/com/android/server/BootReceiver.java b/core/java/com/android/server/BootReceiver.java
index 5a50fbfd5277..9151cee84986 100644
--- a/core/java/com/android/server/BootReceiver.java
+++ b/core/java/com/android/server/BootReceiver.java
@@ -195,6 +195,8 @@ public class BootReceiver extends BroadcastReceiver {
"/proc/last_kmsg", -LOG_SIZE, "SYSTEM_LAST_KMSG");
addFileWithFootersToDropBox(db, timestamps, headers, lastKmsgFooter,
"/sys/fs/pstore/console-ramoops", -LOG_SIZE, "SYSTEM_LAST_KMSG");
+ addFileWithFootersToDropBox(db, timestamps, headers, lastKmsgFooter,
+ "/sys/fs/pstore/console-ramoops-0", -LOG_SIZE, "SYSTEM_LAST_KMSG");
addFileToDropBox(db, timestamps, headers, "/cache/recovery/log", -LOG_SIZE,
"SYSTEM_RECOVERY_LOG");
addFileToDropBox(db, timestamps, headers, "/cache/recovery/last_kmsg",
@@ -276,6 +278,10 @@ public class BootReceiver extends BroadcastReceiver {
if (fileTime <= 0) {
file = new File("/sys/fs/pstore/console-ramoops");
fileTime = file.lastModified();
+ if (fileTime <= 0) {
+ file = new File("/sys/fs/pstore/console-ramoops-0");
+ fileTime = file.lastModified();
+ }
}
if (fileTime <= 0) return; // File does not exist
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index 821d0e515d09..120962390ef3 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -75,14 +75,27 @@ enum {
HEAP_GL,
HEAP_OTHER_MEMTRACK,
+ // Dalvik extra sections (heap).
HEAP_DALVIK_NORMAL,
HEAP_DALVIK_LARGE,
- HEAP_DALVIK_LINEARALLOC,
- HEAP_DALVIK_ACCOUNTING,
- HEAP_DALVIK_CODE_CACHE,
HEAP_DALVIK_ZYGOTE,
HEAP_DALVIK_NON_MOVING,
- HEAP_DALVIK_INDIRECT_REFERENCE_TABLE,
+
+ // Dalvik other extra sections.
+ HEAP_DALVIK_OTHER_LINEARALLOC,
+ HEAP_DALVIK_OTHER_ACCOUNTING,
+ HEAP_DALVIK_OTHER_CODE_CACHE,
+ HEAP_DALVIK_OTHER_COMPILER_METADATA,
+ HEAP_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE,
+
+ // Boot vdex / app dex / app vdex
+ HEAP_DEX_BOOT_VDEX,
+ HEAP_DEX_APP_DEX,
+ HEAP_DEX_APP_VDEX,
+
+ // App art, boot art.
+ HEAP_ART_APP,
+ HEAP_ART_BOOT,
_NUM_HEAP,
_NUM_EXCLUSIVE_HEAP = HEAP_OTHER_MEMTRACK+1,
@@ -297,15 +310,30 @@ static void read_mapinfo(FILE *fp, stats_t* stats, bool* foundSwapPss)
whichHeap = HEAP_TTF;
is_swappable = true;
} else if ((nameLen > 4 && strstr(name, ".dex") != NULL) ||
- (nameLen > 5 && strcmp(name+nameLen-5, ".odex") == 0) ||
- (nameLen > 5 && strcmp(name+nameLen-5, ".vdex") == 0)) {
+ (nameLen > 5 && strcmp(name+nameLen-5, ".odex") == 0)) {
whichHeap = HEAP_DEX;
+ subHeap = HEAP_DEX_APP_DEX;
+ is_swappable = true;
+ } else if (nameLen > 5 && strcmp(name+nameLen-5, ".vdex") == 0) {
+ whichHeap = HEAP_DEX;
+ // Handle system@framework@boot* and system/framework/boot*
+ if (strstr(name, "@boot") != NULL || strstr(name, "/boot") != NULL) {
+ subHeap = HEAP_DEX_BOOT_VDEX;
+ } else {
+ subHeap = HEAP_DEX_APP_VDEX;
+ }
is_swappable = true;
} else if (nameLen > 4 && strcmp(name+nameLen-4, ".oat") == 0) {
whichHeap = HEAP_OAT;
is_swappable = true;
} else if (nameLen > 4 && strcmp(name+nameLen-4, ".art") == 0) {
whichHeap = HEAP_ART;
+ // Handle system@framework@boot* and system/framework/boot*
+ if (strstr(name, "@boot") != NULL || strstr(name, "/boot") != NULL) {
+ subHeap = HEAP_ART_BOOT;
+ } else {
+ subHeap = HEAP_ART_APP;
+ }
is_swappable = true;
} else if (strncmp(name, "/dev/", 5) == 0) {
if (strncmp(name, "/dev/kgsl-3d0", 13) == 0) {
@@ -314,7 +342,7 @@ static void read_mapinfo(FILE *fp, stats_t* stats, bool* foundSwapPss)
if (strncmp(name, "/dev/ashmem/dalvik-", 19) == 0) {
whichHeap = HEAP_DALVIK_OTHER;
if (strstr(name, "/dev/ashmem/dalvik-LinearAlloc") == name) {
- subHeap = HEAP_DALVIK_LINEARALLOC;
+ subHeap = HEAP_DALVIK_OTHER_LINEARALLOC;
} else if ((strstr(name, "/dev/ashmem/dalvik-alloc space") == name) ||
(strstr(name, "/dev/ashmem/dalvik-main space") == name)) {
// This is the regular Dalvik heap.
@@ -332,13 +360,14 @@ static void read_mapinfo(FILE *fp, stats_t* stats, bool* foundSwapPss)
whichHeap = HEAP_DALVIK;
subHeap = HEAP_DALVIK_ZYGOTE;
} else if (strstr(name, "/dev/ashmem/dalvik-indirect ref") == name) {
- subHeap = HEAP_DALVIK_INDIRECT_REFERENCE_TABLE;
+ subHeap = HEAP_DALVIK_OTHER_INDIRECT_REFERENCE_TABLE;
} else if (strstr(name, "/dev/ashmem/dalvik-jit-code-cache") == name ||
- strstr(name, "/dev/ashmem/dalvik-data-code-cache") == name ||
- strstr(name, "/dev/ashmem/dalvik-CompilerMetadata") == name) {
- subHeap = HEAP_DALVIK_CODE_CACHE;
+ strstr(name, "/dev/ashmem/dalvik-data-code-cache") == name) {
+ subHeap = HEAP_DALVIK_OTHER_CODE_CACHE;
+ } else if (strstr(name, "/dev/ashmem/dalvik-CompilerMetadata") == name) {
+ subHeap = HEAP_DALVIK_OTHER_COMPILER_METADATA;
} else {
- subHeap = HEAP_DALVIK_ACCOUNTING; // Default to accounting.
+ subHeap = HEAP_DALVIK_OTHER_ACCOUNTING; // Default to accounting.
}
} else if (strncmp(name, "/dev/ashmem/CursorWindow", 24) == 0) {
whichHeap = HEAP_CURSOR;
@@ -423,7 +452,8 @@ static void read_mapinfo(FILE *fp, stats_t* stats, bool* foundSwapPss)
stats[whichHeap].sharedClean += shared_clean;
stats[whichHeap].swappedOut += swapped_out;
stats[whichHeap].swappedOutPss += swapped_out_pss;
- if (whichHeap == HEAP_DALVIK || whichHeap == HEAP_DALVIK_OTHER) {
+ if (whichHeap == HEAP_DALVIK || whichHeap == HEAP_DALVIK_OTHER ||
+ whichHeap == HEAP_DEX || whichHeap == HEAP_ART) {
stats[subHeap].pss += pss;
stats[subHeap].swappablePss += swappable_pss;
stats[subHeap].privateDirty += private_dirty;
diff --git a/core/jni/android_text_AndroidBidi.cpp b/core/jni/android_text_AndroidBidi.cpp
index 2a3f0361a9cd..3b97a5e6442e 100644
--- a/core/jni/android_text_AndroidBidi.cpp
+++ b/core/jni/android_text_AndroidBidi.cpp
@@ -38,7 +38,7 @@ static jint runBidi(JNIEnv* env, jobject obj, jint dir, jcharArray chsArray,
if (info != NULL) {
UErrorCode status = U_ZERO_ERROR;
UBiDi* bidi = ubidi_openSized(n, 0, &status);
- ubidi_setPara(bidi, chs, n, dir, NULL, &status);
+ ubidi_setPara(bidi, reinterpret_cast<const UChar*>(chs), n, dir, NULL, &status);
if (U_SUCCESS(status)) {
for (int i = 0; i < n; ++i) {
info[i] = ubidi_getLevelAt(bidi, i);
diff --git a/core/jni/android_view_InputDevice.cpp b/core/jni/android_view_InputDevice.cpp
index 9cf6a9d08890..4e6e512b69df 100644
--- a/core/jni/android_view_InputDevice.cpp
+++ b/core/jni/android_view_InputDevice.cpp
@@ -17,7 +17,7 @@
#include <input/Input.h>
#include <android_runtime/AndroidRuntime.h>
-#include <nativehelper/jni.h>
+#include <jni.h>
#include <nativehelper/JNIHelp.h>
#include <ScopedLocalRef.h>
diff --git a/core/jni/android_view_KeyCharacterMap.cpp b/core/jni/android_view_KeyCharacterMap.cpp
index e5519a752c39..586b26ef328f 100644
--- a/core/jni/android_view_KeyCharacterMap.cpp
+++ b/core/jni/android_view_KeyCharacterMap.cpp
@@ -20,7 +20,7 @@
#include <input/Input.h>
#include <binder/Parcel.h>
-#include <nativehelper/jni.h>
+#include <jni.h>
#include <nativehelper/JNIHelp.h>
#include "android_os_Parcel.h"
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index 73b3f52f078b..bc3593977a99 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -23,6 +23,7 @@
#include "android/graphics/Region.h"
#include "core_jni_helpers.h"
+#include <android-base/chrono_utils.h>
#include <JNIHelp.h>
#include <ScopedUtfChars.h>
#include <android_runtime/android_view_Surface.h>
@@ -495,8 +496,9 @@ static void nativeSetDisplayPowerMode(JNIEnv* env, jclass clazz, jobject tokenOb
sp<IBinder> token(ibinderForJavaObject(env, tokenObj));
if (token == NULL) return;
- ALOGD_IF_SLOW(100, "Excessive delay in setPowerMode()");
+ android::base::Timer t;
SurfaceComposerClient::setDisplayPowerMode(token, mode);
+ if (t.duration() > 100ms) ALOGD("Excessive delay in setPowerMode()");
}
static jboolean nativeClearContentFrameStats(JNIEnv* env, jclass clazz, jlong nativeObject) {
diff --git a/core/jni/include/android_runtime/AndroidRuntime.h b/core/jni/include/android_runtime/AndroidRuntime.h
index c2189d4af86d..3ec8b1fe903f 100644
--- a/core/jni/include/android_runtime/AndroidRuntime.h
+++ b/core/jni/include/android_runtime/AndroidRuntime.h
@@ -26,7 +26,7 @@
#include <utils/Vector.h>
#include <utils/threads.h>
#include <pthread.h>
-#include <nativehelper/jni.h>
+#include <jni.h>
namespace android {
diff --git a/core/tests/coretests/src/android/app/timezone/DistroFormatVersionTest.java b/core/tests/coretests/src/android/app/timezone/DistroFormatVersionTest.java
index 9bbcd3d2d2e9..70a0877beb5f 100644
--- a/core/tests/coretests/src/android/app/timezone/DistroFormatVersionTest.java
+++ b/core/tests/coretests/src/android/app/timezone/DistroFormatVersionTest.java
@@ -27,7 +27,6 @@ import org.junit.Test;
/**
* Tests for {@link DistroFormatVersion}.
*/
-// TODO(nfuller) Move to CTS once this class is part of the SystemApi. http://b/31008728
public class DistroFormatVersionTest {
@Test
diff --git a/core/tests/coretests/src/android/app/timezone/DistroRulesVersionTest.java b/core/tests/coretests/src/android/app/timezone/DistroRulesVersionTest.java
index 2fbc9a1f8e7a..eecae46910fd 100644
--- a/core/tests/coretests/src/android/app/timezone/DistroRulesVersionTest.java
+++ b/core/tests/coretests/src/android/app/timezone/DistroRulesVersionTest.java
@@ -27,7 +27,6 @@ import org.junit.Test;
/**
* Tests for {@link DistroRulesVersion}.
*/
-// TODO(nfuller) Move to CTS once this class is part of the SystemApi. http://b/31008728
public class DistroRulesVersionTest {
@Test
diff --git a/core/tests/coretests/src/android/app/timezone/RulesStateTest.java b/core/tests/coretests/src/android/app/timezone/RulesStateTest.java
index 7f4819bf63a1..99abe243556c 100644
--- a/core/tests/coretests/src/android/app/timezone/RulesStateTest.java
+++ b/core/tests/coretests/src/android/app/timezone/RulesStateTest.java
@@ -29,7 +29,6 @@ import org.junit.Test;
/**
* Tests for {@link RulesState}.
*/
-// TODO(nfuller) Move to CTS once this class is part of the SystemApi. http://b/31008728
public class RulesStateTest {
@Test
diff --git a/core/tests/coretests/src/android/app/timezone/RulesUpdaterContractTest.java b/core/tests/coretests/src/android/app/timezone/RulesUpdaterContractTest.java
index e7a839c3e9fb..91f8ebc9ec1c 100644
--- a/core/tests/coretests/src/android/app/timezone/RulesUpdaterContractTest.java
+++ b/core/tests/coretests/src/android/app/timezone/RulesUpdaterContractTest.java
@@ -33,7 +33,6 @@ import org.junit.Test;
/**
* Tests for {@link RulesUpdaterContract}.
*/
-// TODO(nfuller) Move to CTS once this class is part of the SystemApi. http://b/31008728
public class RulesUpdaterContractTest {
@Test
diff --git a/media/jni/audioeffect/android_media_AudioEffect.cpp b/media/jni/audioeffect/android_media_AudioEffect.cpp
index a9b7062509b2..5f2656337db7 100644
--- a/media/jni/audioeffect/android_media_AudioEffect.cpp
+++ b/media/jni/audioeffect/android_media_AudioEffect.cpp
@@ -20,7 +20,7 @@
#define LOG_TAG "AudioEffects-JNI"
#include <utils/Log.h>
-#include <nativehelper/jni.h>
+#include <jni.h>
#include <nativehelper/JNIHelp.h>
#include <android_runtime/AndroidRuntime.h>
#include "media/AudioEffect.h"
diff --git a/media/jni/audioeffect/android_media_Visualizer.cpp b/media/jni/audioeffect/android_media_Visualizer.cpp
index 0645543d4a74..f0cfeef197d8 100644
--- a/media/jni/audioeffect/android_media_Visualizer.cpp
+++ b/media/jni/audioeffect/android_media_Visualizer.cpp
@@ -20,7 +20,7 @@
#define LOG_TAG "visualizers-JNI"
#include <utils/Log.h>
-#include <nativehelper/jni.h>
+#include <jni.h>
#include <nativehelper/JNIHelp.h>
#include <android_runtime/AndroidRuntime.h>
#include <utils/threads.h>
diff --git a/media/jni/soundpool/android_media_SoundPool.cpp b/media/jni/soundpool/android_media_SoundPool.cpp
index ab3e3408bcac..703a0158a13f 100644
--- a/media/jni/soundpool/android_media_SoundPool.cpp
+++ b/media/jni/soundpool/android_media_SoundPool.cpp
@@ -20,7 +20,7 @@
#define LOG_TAG "SoundPool-JNI"
#include <utils/Log.h>
-#include <nativehelper/jni.h>
+#include <jni.h>
#include <nativehelper/JNIHelp.h>
#include <android_runtime/AndroidRuntime.h>
#include "SoundPool.h"
diff --git a/services/core/java/com/android/server/IpSecService.java b/services/core/java/com/android/server/IpSecService.java
index b88bbc1bdd69..ac5da9361c4d 100644
--- a/services/core/java/com/android/server/IpSecService.java
+++ b/services/core/java/com/android/server/IpSecService.java
@@ -206,7 +206,11 @@ public class IpSecService extends IIpSecService.Stub {
T get(int key) {
T val = mArray.get(key);
- val.checkOwnerOrSystemAndThrow();
+ // The value should never be null unless the resource doesn't exist
+ // (since we do not allow null resources to be added).
+ if (val != null) {
+ val.checkOwnerOrSystemAndThrow();
+ }
return val;
}
@@ -402,17 +406,14 @@ public class IpSecService extends IIpSecService.Stub {
private void connectNativeNetdService() {
// Avoid blocking the system server to do this
- Thread t =
- new Thread(
- new Runnable() {
- @Override
- public void run() {
- synchronized (IpSecService.this) {
- NetdService.get(NETD_FETCH_TIMEOUT);
- }
- }
- });
- t.run();
+ new Thread() {
+ @Override
+ public void run() {
+ synchronized (IpSecService.this) {
+ NetdService.get(NETD_FETCH_TIMEOUT);
+ }
+ }
+ }.start();
}
INetd getNetdInstance() throws RemoteException {
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index c5fc038028e2..784a7104bba4 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -16447,23 +16447,41 @@ public final class ActivityManagerService extends ActivityManagerNative
ArrayList<MemItem> catMems = new ArrayList<MemItem>();
catMems.add(new MemItem("Native", "Native", nativePss, nativeSwapPss, -1));
- final MemItem dalvikItem =
- new MemItem("Dalvik", "Dalvik", dalvikPss, dalvikSwapPss, -2);
- if (dalvikSubitemPss.length > 0) {
- dalvikItem.subitems = new ArrayList<MemItem>();
- for (int j=0; j<dalvikSubitemPss.length; j++) {
- final String name = Debug.MemoryInfo.getOtherLabel(
- Debug.MemoryInfo.NUM_OTHER_STATS + j);
- dalvikItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j],
- dalvikSubitemSwapPss[j], j));
- }
- }
- catMems.add(dalvikItem);
+ final int dalvikId = -2;
+ catMems.add(new MemItem("Dalvik", "Dalvik", dalvikPss, dalvikSwapPss, dalvikId));
catMems.add(new MemItem("Unknown", "Unknown", otherPss, otherSwapPss, -3));
for (int j=0; j<Debug.MemoryInfo.NUM_OTHER_STATS; j++) {
String label = Debug.MemoryInfo.getOtherLabel(j);
catMems.add(new MemItem(label, label, miscPss[j], miscSwapPss[j], j));
}
+ if (dalvikSubitemPss.length > 0) {
+ // Add dalvik subitems.
+ for (MemItem memItem : catMems) {
+ int memItemStart = 0, memItemEnd = 0;
+ if (memItem.id == dalvikId) {
+ memItemStart = Debug.MemoryInfo.OTHER_DVK_STAT_DALVIK_START;
+ memItemEnd = Debug.MemoryInfo.OTHER_DVK_STAT_DALVIK_END;
+ } else if (memItem.id == Debug.MemoryInfo.OTHER_DALVIK_OTHER) {
+ memItemStart = Debug.MemoryInfo.OTHER_DVK_STAT_DALVIK_OTHER_START;
+ memItemEnd = Debug.MemoryInfo.OTHER_DVK_STAT_DALVIK_OTHER_END;
+ } else if (memItem.id == Debug.MemoryInfo.OTHER_DEX) {
+ memItemStart = Debug.MemoryInfo.OTHER_DVK_STAT_DEX_START;
+ memItemEnd = Debug.MemoryInfo.OTHER_DVK_STAT_DEX_END;
+ } else if (memItem.id == Debug.MemoryInfo.OTHER_ART) {
+ memItemStart = Debug.MemoryInfo.OTHER_DVK_STAT_ART_START;
+ memItemEnd = Debug.MemoryInfo.OTHER_DVK_STAT_ART_END;
+ } else {
+ continue; // No subitems, continue.
+ }
+ memItem.subitems = new ArrayList<MemItem>();
+ for (int j=memItemStart; j<=memItemEnd; j++) {
+ final String name = Debug.MemoryInfo.getOtherLabel(
+ Debug.MemoryInfo.NUM_OTHER_STATS + j);
+ memItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j],
+ dalvikSubitemSwapPss[j], j));
+ }
+ }
+ }
ArrayList<MemItem> oomMems = new ArrayList<MemItem>();
for (int j=0; j<oomPss.length; j++) {
diff --git a/services/core/java/com/android/server/timezone/PackageStatusStorage.java b/services/core/java/com/android/server/timezone/PackageStatusStorage.java
index fe82dc4f1572..cac7f7b811bf 100644
--- a/services/core/java/com/android/server/timezone/PackageStatusStorage.java
+++ b/services/core/java/com/android/server/timezone/PackageStatusStorage.java
@@ -16,6 +16,7 @@
package com.android.server.timezone;
+import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.FastXmlSerializer;
import org.xmlpull.v1.XmlPullParser;
@@ -80,7 +81,7 @@ final class PackageStatusStorage {
private final AtomicFile mPackageStatusFile;
PackageStatusStorage(File storageDir) {
- mPackageStatusFile = new AtomicFile(new File(storageDir, "packageStatus.xml"));
+ mPackageStatusFile = new AtomicFile(new File(storageDir, "package-status.xml"));
if (!mPackageStatusFile.getBaseFile().exists()) {
try {
insertInitialPackageStatus();
@@ -103,7 +104,7 @@ final class PackageStatusStorage {
PackageStatus getPackageStatus() {
synchronized (this) {
try {
- return getPackageStatusInternal();
+ return getPackageStatusLocked();
} catch (ParseException e) {
// This means that data exists in the file but it was bad.
Slog.e(LOG_TAG, "Package status invalid, resetting and retrying", e);
@@ -111,7 +112,7 @@ final class PackageStatusStorage {
// Reset the storage so it is in a good state again.
recoverFromBadData(e);
try {
- return getPackageStatusInternal();
+ return getPackageStatusLocked();
} catch (ParseException e2) {
throw new IllegalStateException("Recovery from bad file failed", e2);
}
@@ -119,7 +120,8 @@ final class PackageStatusStorage {
}
}
- private PackageStatus getPackageStatusInternal() throws ParseException {
+ @GuardedBy("this")
+ private PackageStatus getPackageStatusLocked() throws ParseException {
try (FileInputStream fis = mPackageStatusFile.openRead()) {
XmlPullParser parser = parseToPackageStatusTag(fis);
Integer checkStatus = getNullableIntAttribute(parser, ATTRIBUTE_CHECK_STATUS);
@@ -137,7 +139,7 @@ final class PackageStatusStorage {
}
}
- // Callers should be synchronized(this).
+ @GuardedBy("this")
private int recoverFromBadData(Exception cause) {
mPackageStatusFile.delete();
try {
@@ -155,7 +157,7 @@ final class PackageStatusStorage {
// is reset to ensure that old tokens are unlikely to work.
final int initialOptimisticLockId = (int) System.currentTimeMillis();
- writePackageStatusInternal(null /* status */, initialOptimisticLockId,
+ writePackageStatusLocked(null /* status */, initialOptimisticLockId,
null /* packageVersions */);
return initialOptimisticLockId;
}
@@ -243,7 +245,7 @@ final class PackageStatusStorage {
}
}
- // Caller should be synchronized(this).
+ @GuardedBy("this")
private int getCurrentOptimisticLockId() throws ParseException {
try (FileInputStream fis = mPackageStatusFile.openRead()) {
XmlPullParser parser = parseToPackageStatusTag(fis);
@@ -278,7 +280,7 @@ final class PackageStatusStorage {
}
}
- // Caller should be synchronized(this).
+ @GuardedBy("this")
private boolean writePackageStatusWithOptimisticLockCheck(int optimisticLockId,
int newOptimisticLockId, Integer status, PackageVersions packageVersions)
throws IOException {
@@ -294,12 +296,12 @@ final class PackageStatusStorage {
return false;
}
- writePackageStatusInternal(status, newOptimisticLockId, packageVersions);
+ writePackageStatusLocked(status, newOptimisticLockId, packageVersions);
return true;
}
- // Caller should be synchronized(this).
- private void writePackageStatusInternal(Integer status, int optimisticLockId,
+ @GuardedBy("this")
+ private void writePackageStatusLocked(Integer status, int optimisticLockId,
PackageVersions packageVersions) throws IOException {
if ((status == null) != (packageVersions == null)) {
throw new IllegalArgumentException(
diff --git a/services/core/java/com/android/server/timezone/RulesManagerServiceHelperImpl.java b/services/core/java/com/android/server/timezone/RulesManagerServiceHelperImpl.java
index 767f0e0993ef..b89ce1cd0f89 100644
--- a/services/core/java/com/android/server/timezone/RulesManagerServiceHelperImpl.java
+++ b/services/core/java/com/android/server/timezone/RulesManagerServiceHelperImpl.java
@@ -18,6 +18,7 @@ package com.android.server.timezone;
import android.content.Context;
import android.content.pm.PackageManager;
+import android.os.AsyncTask;
import android.os.Binder;
import android.os.ParcelFileDescriptor;
@@ -56,10 +57,9 @@ final class RulesManagerServiceHelperImpl implements PermissionHelper, Executor
return true;
}
- // TODO Wake lock required?
+ // TODO(nfuller): Wake lock required while running in background thread?
@Override
public void execute(Runnable runnable) {
- // TODO Is there a better way?
- new Thread(runnable).start();
+ AsyncTask.execute(runnable);
}
}
diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp
index bf91fe3fd0b4..dc6bc2ee42cf 100644
--- a/services/core/jni/com_android_server_lights_LightsService.cpp
+++ b/services/core/jni/com_android_server_lights_LightsService.cpp
@@ -20,6 +20,7 @@
#include "JNIHelp.h"
#include "android_runtime/AndroidRuntime.h"
+#include <android-base/chrono_utils.h>
#include <utils/misc.h>
#include <utils/Log.h>
#include <hardware/hardware.h>
@@ -137,8 +138,9 @@ static void setLight_native(JNIEnv* /* env */, jobject /* clazz */, jlong ptr,
state.brightnessMode = brightnessMode;
{
- ALOGD_IF_SLOW(50, "Excessive delay setting light");
+ android::base::Timer t;
devices->lights[light]->set_light(devices->lights[light], &state);
+ if (t.duration() > 50ms) ALOGD("Excessive delay setting light");
}
}
diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp
index 048ef76ed426..4bd7b63f8a27 100644
--- a/services/core/jni/com_android_server_power_PowerManagerService.cpp
+++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp
@@ -25,6 +25,7 @@
#include <limits.h>
+#include <android-base/chrono_utils.h>
#include <android_runtime/AndroidRuntime.h>
#include <android_runtime/Log.h>
#include <utils/Timers.h>
@@ -125,22 +126,34 @@ static void nativeReleaseSuspendBlocker(JNIEnv *env, jclass /* clazz */, jstring
static void nativeSetInteractive(JNIEnv* /* env */, jclass /* clazz */, jboolean enable) {
if (gPowerModule) {
if (enable) {
- ALOGD_IF_SLOW(20, "Excessive delay in setInteractive(true) while turning screen on");
+ android::base::Timer t;
gPowerModule->setInteractive(gPowerModule, true);
+ if (t.duration() > 20ms) {
+ ALOGD("Excessive delay in setInteractive(true) while turning screen on");
+ }
} else {
- ALOGD_IF_SLOW(20, "Excessive delay in setInteractive(false) while turning screen off");
+ android::base::Timer t;
gPowerModule->setInteractive(gPowerModule, false);
+ if (t.duration() > 20ms) {
+ ALOGD("Excessive delay in setInteractive(false) while turning screen off");
+ }
}
}
}
static void nativeSetAutoSuspend(JNIEnv* /* env */, jclass /* clazz */, jboolean enable) {
if (enable) {
- ALOGD_IF_SLOW(100, "Excessive delay in autosuspend_enable() while turning screen off");
+ android::base::Timer t;
autosuspend_enable();
+ if (t.duration() > 100ms) {
+ ALOGD("Excessive delay in autosuspend_enable() while turning screen off");
+ }
} else {
- ALOGD_IF_SLOW(100, "Excessive delay in autosuspend_disable() while turning screen on");
+ android::base::Timer t;
autosuspend_disable();
+ if (t.duration() > 100ms) {
+ ALOGD("Excessive delay in autosuspend_disable() while turning screen on");
+ }
}
}