Merge changes I1aa11f40,Ia707a806 into qt-dev
* changes:
Fix dumpstate tests
dumpstate: Increase timeout for lshal
diff --git a/include/android/hardware_buffer_jni.h b/include/android/hardware_buffer_jni.h
index 7c4be24..aedf369 100644
--- a/include/android/hardware_buffer_jni.h
+++ b/include/android/hardware_buffer_jni.h
@@ -15,7 +15,13 @@
*/
/**
+ * @addtogroup AHardwareBuffer
+ * @{
+ */
+
+/**
* @file hardware_buffer_jni.h
+ * @brief JNI glue for native hardware buffers.
*/
#ifndef ANDROID_HARDWARE_BUFFER_JNI_H
@@ -30,23 +36,25 @@
__BEGIN_DECLS
/**
- * Return the AHardwareBuffer associated with a Java HardwareBuffer object,
- * for interacting with it through native code. This method does not acquire any
- * additional reference to the AHardwareBuffer that is returned. To keep the
- * AHardwareBuffer live after the Java HardwareBuffer object got garbage
- * collected, be sure to use AHardwareBuffer_acquire() to acquire an additional
- * reference.
+ * Return the AHardwareBuffer wrapped by a Java HardwareBuffer object.
+ *
+ * This method does not acquire any additional reference to the AHardwareBuffer
+ * that is returned. To keep the AHardwareBuffer live after the Java
+ * HardwareBuffer object got garbage collected, be sure to use AHardwareBuffer_acquire()
+ * to acquire an additional reference.
*/
AHardwareBuffer* AHardwareBuffer_fromHardwareBuffer(JNIEnv* env,
- jobject hardwareBufferObj);
+ jobject hardwareBufferObj) __INTRODUCED_IN(26);
/**
* Return a new Java HardwareBuffer object that wraps the passed native
* AHardwareBuffer object.
*/
jobject AHardwareBuffer_toHardwareBuffer(JNIEnv* env,
- AHardwareBuffer* hardwareBuffer);
+ AHardwareBuffer* hardwareBuffer) __INTRODUCED_IN(26);
__END_DECLS
#endif // ANDROID_HARDWARE_BUFFER_JNI_H
+
+/** @} */
diff --git a/libs/dumputils/dump_utils.cpp b/libs/dumputils/dump_utils.cpp
index 26c2a0d..40f6b43 100644
--- a/libs/dumputils/dump_utils.cpp
+++ b/libs/dumputils/dump_utils.cpp
@@ -32,6 +32,7 @@
"/system/bin/mediametrics", // media.metrics
"/system/bin/mediaserver",
"/system/bin/netd",
+ "/system/bin/vold",
"/system/bin/sdcard",
"/system/bin/statsd",
"/system/bin/surfaceflinger",
@@ -110,13 +111,15 @@
}
bool IsZygote(int pid) {
- static const std::string kZygotePrefix = "zygote";
-
std::string cmdline;
if (!android::base::ReadFileToString(android::base::StringPrintf("/proc/%d/cmdline", pid),
&cmdline)) {
return true;
}
- return (cmdline.find(kZygotePrefix) == 0);
+ // cmdline has embedded nulls; only consider argv[0].
+ cmdline = std::string(cmdline.c_str());
+
+ return cmdline == "zygote" || cmdline == "zygote64" || cmdline == "usap32" ||
+ cmdline == "usap64";
}
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp
index fa1e232..c11b88e 100644
--- a/services/sensorservice/SensorService.cpp
+++ b/services/sensorservice/SensorService.cpp
@@ -1550,7 +1550,8 @@
if (err == NO_ERROR) {
connection->updateLooperRegistration(mLooper);
- if (sensor->getSensor().getRequiredPermission().size() > 0) {
+ if (sensor->getSensor().getRequiredPermission().size() > 0 &&
+ sensor->getSensor().getRequiredAppOp() >= 0) {
connection->mHandleToAppOp[handle] = sensor->getSensor().getRequiredAppOp();
}
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 820ccc5..dd75868 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1049,6 +1049,7 @@
}
std::vector<ColorMode> modes;
+ bool isInternalDisplay = false;
{
ConditionalLock lock(mStateLock, std::this_thread::get_id() != mMainThreadId);
@@ -1058,9 +1059,20 @@
}
modes = getHwComposer().getColorModes(*displayId);
+ isInternalDisplay = displayId == getInternalDisplayIdLocked();
}
outColorModes->clear();
- std::copy(modes.cbegin(), modes.cend(), std::back_inserter(*outColorModes));
+
+ // If it's built-in display and the configuration claims it's not wide color capable,
+ // filter out all wide color modes. The typical reason why this happens is that the
+ // hardware is not good enough to support GPU composition of wide color, and thus the
+ // OEMs choose to disable this capability.
+ if (isInternalDisplay && !hasWideColorDisplay) {
+ std::remove_copy_if(modes.cbegin(), modes.cend(), std::back_inserter(*outColorModes),
+ isWideColorMode);
+ } else {
+ std::copy(modes.cbegin(), modes.cend(), std::back_inserter(*outColorModes));
+ }
return NO_ERROR;
}
@@ -1207,6 +1219,13 @@
if (!display) {
return BAD_VALUE;
}
+
+ // Use hasWideColorDisplay to override built-in display.
+ const auto displayId = display->getId();
+ if (displayId && displayId == getInternalDisplayIdLocked()) {
+ *outIsWideColorDisplay = hasWideColorDisplay;
+ return NO_ERROR;
+ }
*outIsWideColorDisplay = display->hasWideColorGamut();
return NO_ERROR;
}
@@ -4746,7 +4765,7 @@
}
void SurfaceFlinger::dumpWideColorInfo(std::string& result) const {
- StringAppendF(&result, "Device has wide color display: %d\n", hasWideColorDisplay);
+ StringAppendF(&result, "Device has wide color built-in display: %d\n", hasWideColorDisplay);
StringAppendF(&result, "Device uses color management: %d\n", useColorManagement);
StringAppendF(&result, "DisplayColorSetting: %s\n",
decodeDisplayColorSetting(mDisplayColorSetting).c_str());