diff options
| -rw-r--r-- | core/java/android/os/SharedMemory.java | 18 | ||||
| -rw-r--r-- | core/res/AndroidManifest.xml | 2 | ||||
| -rw-r--r-- | media/jni/android_media_MediaCodec.cpp | 106 | ||||
| -rw-r--r-- | services/core/java/com/android/server/OWNERS | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/StorageManagerService.java | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/AppBatteryTracker.java | 12 | ||||
| -rw-r--r-- | services/core/java/com/android/server/memory/OWNERS | 3 | ||||
| -rw-r--r-- | services/core/java/com/android/server/memory/ZramMaintenance.java (renamed from services/core/java/com/android/server/ZramMaintenance.java) | 2 | ||||
| -rw-r--r-- | services/core/java/com/android/server/power/stats/OWNERS | 3 | ||||
| -rw-r--r-- | services/core/java/com/android/server/sensorprivacy/SensorPrivacyService.java | 8 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/memory/OWNERS | 3 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/memory/ZramMaintenanceTest.kt (renamed from services/tests/servicestests/src/com/android/server/zram/ZramMaintenanceTest.kt) | 3 |
12 files changed, 94 insertions, 68 deletions
diff --git a/core/java/android/os/SharedMemory.java b/core/java/android/os/SharedMemory.java index 46ae9d8682ee..320641ded0f9 100644 --- a/core/java/android/os/SharedMemory.java +++ b/core/java/android/os/SharedMemory.java @@ -25,8 +25,6 @@ import android.system.OsConstants; import dalvik.system.VMRuntime; -import libcore.io.IoUtils; - import java.io.Closeable; import java.io.FileDescriptor; import java.io.IOException; @@ -65,7 +63,7 @@ public final class SharedMemory implements Parcelable, Closeable { mMemoryRegistration = new MemoryRegistration(mSize); mCleaner = Cleaner.create(mFileDescriptor, - new Closer(mFileDescriptor, mMemoryRegistration)); + new Closer(mFileDescriptor.getInt$(), mMemoryRegistration)); } /** @@ -278,6 +276,7 @@ public final class SharedMemory implements Parcelable, Closeable { */ @Override public void close() { + mFileDescriptor.setInt$(-1); if (mCleaner != null) { mCleaner.clean(); mCleaner = null; @@ -327,20 +326,21 @@ public final class SharedMemory implements Parcelable, Closeable { * Cleaner that closes the FD */ private static final class Closer implements Runnable { - private FileDescriptor mFd; + private int mFd; private MemoryRegistration mMemoryReference; - private Closer(FileDescriptor fd, MemoryRegistration memoryReference) { + private Closer(int fd, MemoryRegistration memoryReference) { mFd = fd; - IoUtils.setFdOwner(mFd, this); mMemoryReference = memoryReference; } @Override public void run() { - IoUtils.closeQuietly(mFd); - mFd = null; - + try { + FileDescriptor fd = new FileDescriptor(); + fd.setInt$(mFd); + Os.close(fd); + } catch (ErrnoException e) { /* swallow error */ } mMemoryReference.release(); mMemoryReference = null; } diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 45c4ea08c09b..c084bdda5c01 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -8910,7 +8910,7 @@ android:permission="android.permission.BIND_JOB_SERVICE" > </service> - <service android:name="com.android.server.ZramMaintenance" + <service android:name="com.android.server.memory.ZramMaintenance" android:exported="false" android:permission="android.permission.BIND_JOB_SERVICE" > </service> diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp index 3bc238a812d9..61c287b9633c 100644 --- a/media/jni/android_media_MediaCodec.cpp +++ b/media/jni/android_media_MediaCodec.cpp @@ -1232,63 +1232,73 @@ static void AMessageToCryptoInfo(JNIEnv * env, const jobject & obj, sp<ABuffer> ivBuffer; CryptoPlugin::Mode mode; CryptoPlugin::Pattern pattern; - CHECK(msg->findInt32("mode", (int*)&mode)); - CHECK(msg->findSize("numSubSamples", &numSubSamples)); - CHECK(msg->findBuffer("subSamples", &subSamplesBuffer)); - CHECK(msg->findInt32("encryptBlocks", (int32_t *)&pattern.mEncryptBlocks)); - CHECK(msg->findInt32("skipBlocks", (int32_t *)&pattern.mSkipBlocks)); - CHECK(msg->findBuffer("iv", &ivBuffer)); - CHECK(msg->findBuffer("key", &keyBuffer)); - - // subsamples + CryptoPlugin::SubSample *samplesArray = nullptr; + ScopedLocalRef<jbyteArray> keyArray(env, env->NewByteArray(16)); + ScopedLocalRef<jbyteArray> ivArray(env, env->NewByteArray(16)); + jboolean isCopy; + sp<RefBase> cryptoInfosObj; + if (msg->findObject("cryptoInfos", &cryptoInfosObj)) { + sp<CryptoInfosWrapper> cryptoInfos((CryptoInfosWrapper*)cryptoInfosObj.get()); + CHECK(!cryptoInfos->value.empty() && (cryptoInfos->value[0] != nullptr)); + std::unique_ptr<CodecCryptoInfo> &info = cryptoInfos->value[0]; + mode = info->mMode; + numSubSamples = info->mNumSubSamples; + samplesArray = info->mSubSamples; + pattern = info->mPattern; + if (info->mKey != nullptr) { + jbyte * dstKey = env->GetByteArrayElements(keyArray.get(), &isCopy); + memcpy(dstKey, info->mKey, 16); + env->ReleaseByteArrayElements(keyArray.get(), dstKey, 0); + } + if (info->mIv != nullptr) { + jbyte * dstIv = env->GetByteArrayElements(ivArray.get(), &isCopy); + memcpy(dstIv, info->mIv, 16); + env->ReleaseByteArrayElements(ivArray.get(), dstIv, 0); + } + } else { + CHECK(msg->findInt32("mode", (int*)&mode)); + CHECK(msg->findSize("numSubSamples", &numSubSamples)); + CHECK(msg->findBuffer("subSamples", &subSamplesBuffer)); + CHECK(msg->findInt32("encryptBlocks", (int32_t *)&pattern.mEncryptBlocks)); + CHECK(msg->findInt32("skipBlocks", (int32_t *)&pattern.mSkipBlocks)); + CHECK(msg->findBuffer("iv", &ivBuffer)); + CHECK(msg->findBuffer("key", &keyBuffer)); + samplesArray = + (CryptoPlugin::SubSample*)(subSamplesBuffer.get()->data()); + if (keyBuffer.get() != nullptr && keyBuffer->size() > 0) { + jbyte * dstKey = env->GetByteArrayElements(keyArray.get(), &isCopy); + memcpy(dstKey, keyBuffer->data(), keyBuffer->size()); + env->ReleaseByteArrayElements(keyArray.get(), dstKey, 0); + } + if (ivBuffer.get() != nullptr && ivBuffer->size() > 0) { + jbyte * dstIv = env->GetByteArrayElements(ivArray.get(), &isCopy); + memcpy(dstIv, ivBuffer->data(), ivBuffer->size()); + env->ReleaseByteArrayElements(ivArray.get(), dstIv, 0); + } + } ScopedLocalRef<jintArray> samplesOfEncryptedDataArr(env, env->NewIntArray(numSubSamples)); ScopedLocalRef<jintArray> samplesOfClearDataArr(env, env->NewIntArray(numSubSamples)); - jboolean isCopy; - jint *dstEncryptedSamples = - env->GetIntArrayElements(samplesOfEncryptedDataArr.get(), &isCopy); - jint * dstClearSamples = - env->GetIntArrayElements(samplesOfClearDataArr.get(), &isCopy); - - CryptoPlugin::SubSample * samplesArray = - (CryptoPlugin::SubSample*)(subSamplesBuffer.get()->data()); - - for(int i = 0 ; i < numSubSamples ; i++) { - dstEncryptedSamples[i] = samplesArray[i].mNumBytesOfEncryptedData; - dstClearSamples[i] = samplesArray[i].mNumBytesOfClearData; - } - env->ReleaseIntArrayElements(samplesOfEncryptedDataArr.get(), dstEncryptedSamples, 0); - env->ReleaseIntArrayElements(samplesOfClearDataArr.get(), dstClearSamples, 0); - // key and iv - jbyteArray keyArray = NULL; - jbyteArray ivArray = NULL; - if (keyBuffer.get() != nullptr && keyBuffer->size() > 0) { - keyArray = env->NewByteArray(keyBuffer->size()); - jbyte * dstKey = env->GetByteArrayElements(keyArray, &isCopy); - memcpy(dstKey, keyBuffer->data(), keyBuffer->size()); - env->ReleaseByteArrayElements(keyArray,dstKey,0); - } - if (ivBuffer.get() != nullptr && ivBuffer->size() > 0) { - ivArray = env->NewByteArray(ivBuffer->size()); - jbyte *dstIv = env->GetByteArrayElements(ivArray, &isCopy); - memcpy(dstIv, ivBuffer->data(), ivBuffer->size()); - env->ReleaseByteArrayElements(ivArray, dstIv,0); - } - // set samples, key and iv + if (numSubSamples > 0) { + jint *dstEncryptedSamples = + env->GetIntArrayElements(samplesOfEncryptedDataArr.get(), &isCopy); + jint * dstClearSamples = + env->GetIntArrayElements(samplesOfClearDataArr.get(), &isCopy); + for(int i = 0 ; i < numSubSamples ; i++) { + dstEncryptedSamples[i] = samplesArray[i].mNumBytesOfEncryptedData; + dstClearSamples[i] = samplesArray[i].mNumBytesOfClearData; + } + env->ReleaseIntArrayElements(samplesOfEncryptedDataArr.get(), dstEncryptedSamples, 0); + env->ReleaseIntArrayElements(samplesOfClearDataArr.get(), dstClearSamples, 0); + } env->CallVoidMethod( obj, gFields.cryptoInfoSetID, (jint)numSubSamples, samplesOfClearDataArr.get(), samplesOfEncryptedDataArr.get(), - keyArray, - ivArray, + keyArray.get(), + ivArray.get(), mode); - if (keyArray != NULL) { - env->DeleteLocalRef(keyArray); - } - if (ivArray != NULL) { - env->DeleteLocalRef(ivArray); - } // set pattern env->CallVoidMethod( obj, diff --git a/services/core/java/com/android/server/OWNERS b/services/core/java/com/android/server/OWNERS index ef769cf6217c..6858e2941ff9 100644 --- a/services/core/java/com/android/server/OWNERS +++ b/services/core/java/com/android/server/OWNERS @@ -9,7 +9,6 @@ per-file DisplayThread.java = michaelwr@google.com, ogunwale@google.com # Zram writeback per-file ZramWriteback.java = minchan@google.com, rajekumar@google.com -per-file ZramMaintenance.java = kawasin@google.com # ServiceWatcher per-file ServiceWatcher.java = sooniln@google.com diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index 6045f63439f3..441fe4f7723c 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -155,6 +155,7 @@ import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; import com.android.modules.utils.TypedXmlPullParser; import com.android.modules.utils.TypedXmlSerializer; +import com.android.server.memory.ZramMaintenance; import com.android.server.pm.Installer; import com.android.server.pm.UserManagerInternal; import com.android.server.storage.AppFuseBridge; diff --git a/services/core/java/com/android/server/am/AppBatteryTracker.java b/services/core/java/com/android/server/am/AppBatteryTracker.java index 374abe0256c1..0bc816e78e7b 100644 --- a/services/core/java/com/android/server/am/AppBatteryTracker.java +++ b/services/core/java/com/android/server/am/AppBatteryTracker.java @@ -818,8 +818,10 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy> void dump(PrintWriter pw, String prefix) { pw.print(prefix); pw.println("APP BATTERY STATE TRACKER:"); - // Force an update. - updateBatteryUsageStatsIfNecessary(mInjector.currentTimeMillis(), true); + if (mInjector.getActivityManagerInternal().isBooted()) { + // Force an update. + updateBatteryUsageStatsIfNecessary(mInjector.currentTimeMillis(), true); + } // Force a check. scheduleBgBatteryUsageStatsCheck(); // Wait for its completion (as it runs in handler thread for the sake of thread safe) @@ -878,8 +880,10 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy> @Override void dumpAsProto(ProtoOutputStream proto, int uid) { - // Force an update. - updateBatteryUsageStatsIfNecessary(mInjector.currentTimeMillis(), true); + if (mInjector.getActivityManagerInternal().isBooted()) { + // Force an update. + updateBatteryUsageStatsIfNecessary(mInjector.currentTimeMillis(), true); + } synchronized (mLock) { final SparseArray<ImmutableBatteryUsage> uidConsumers = mUidBatteryUsageInWindow; if (uid != android.os.Process.INVALID_UID) { diff --git a/services/core/java/com/android/server/memory/OWNERS b/services/core/java/com/android/server/memory/OWNERS new file mode 100644 index 000000000000..dc0e89892e43 --- /dev/null +++ b/services/core/java/com/android/server/memory/OWNERS @@ -0,0 +1,3 @@ +include /MEMORY_OWNERS + +per-file ZramMaintenance.java = kawasin@google.com diff --git a/services/core/java/com/android/server/ZramMaintenance.java b/services/core/java/com/android/server/memory/ZramMaintenance.java index 099e5b3fe440..48358d130987 100644 --- a/services/core/java/com/android/server/ZramMaintenance.java +++ b/services/core/java/com/android/server/memory/ZramMaintenance.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server; +package com.android.server.memory; import android.app.job.JobInfo; import android.app.job.JobParameters; diff --git a/services/core/java/com/android/server/power/stats/OWNERS b/services/core/java/com/android/server/power/stats/OWNERS index 4068e2bc03b7..208b2ddb5e54 100644 --- a/services/core/java/com/android/server/power/stats/OWNERS +++ b/services/core/java/com/android/server/power/stats/OWNERS @@ -1 +1,4 @@ +# Bug component: 987260 +set noparent + include /BATTERY_STATS_OWNERS diff --git a/services/core/java/com/android/server/sensorprivacy/SensorPrivacyService.java b/services/core/java/com/android/server/sensorprivacy/SensorPrivacyService.java index 81217014bafe..16658e360cba 100644 --- a/services/core/java/com/android/server/sensorprivacy/SensorPrivacyService.java +++ b/services/core/java/com/android/server/sensorprivacy/SensorPrivacyService.java @@ -536,8 +536,12 @@ public final class SensorPrivacyService extends SystemService { user.getIdentifier()); String inputMethodPackageName = null; if (inputMethodComponent != null) { - inputMethodPackageName = ComponentName.unflattenFromString( - inputMethodComponent).getPackageName(); + ComponentName component = ComponentName.unflattenFromString(inputMethodComponent); + if (component != null) { + inputMethodPackageName = component.getPackageName(); + } else { + Log.w(TAG, "Failed to parse inputMethodComponent: " + inputMethodComponent); + } } int capability; diff --git a/services/tests/servicestests/src/com/android/server/memory/OWNERS b/services/tests/servicestests/src/com/android/server/memory/OWNERS new file mode 100644 index 000000000000..4df08c1fbc2e --- /dev/null +++ b/services/tests/servicestests/src/com/android/server/memory/OWNERS @@ -0,0 +1,3 @@ +include /MEMORY_OWNERS + +per-file ZramMaintenanceTest.kt = kawasin@google.com diff --git a/services/tests/servicestests/src/com/android/server/zram/ZramMaintenanceTest.kt b/services/tests/servicestests/src/com/android/server/memory/ZramMaintenanceTest.kt index 5448a05aafc3..1f59f45b05bf 100644 --- a/services/tests/servicestests/src/com/android/server/zram/ZramMaintenanceTest.kt +++ b/services/tests/servicestests/src/com/android/server/memory/ZramMaintenanceTest.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.zram +package com.android.server.memory import android.app.job.JobInfo import android.app.job.JobParameters @@ -26,7 +26,6 @@ import android.testing.TestableContext import androidx.test.filters.SmallTest import androidx.test.platform.app.InstrumentationRegistry -import com.android.server.ZramMaintenance import com.google.common.truth.Truth.assertThat import org.junit.Before |