Merge "DvrBufferQueue: Add basic event callbacks"
diff --git a/cmds/atrace/atrace.cpp b/cmds/atrace/atrace.cpp
index 457d203..ca799c9 100644
--- a/cmds/atrace/atrace.cpp
+++ b/cmds/atrace/atrace.cpp
@@ -89,7 +89,9 @@
/* Tracing categories */
static const TracingCategory k_categories[] = {
- { "gfx", "Graphics", ATRACE_TAG_GRAPHICS, { } },
+ { "gfx", "Graphics", ATRACE_TAG_GRAPHICS, {
+ { OPT, "events/mdss/enable" },
+ } },
{ "input", "Input", ATRACE_TAG_INPUT, { } },
{ "view", "View System", ATRACE_TAG_VIEW, { } },
{ "webview", "WebView", ATRACE_TAG_WEBVIEW, { } },
diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp
index b76e2c6..7510069 100644
--- a/libs/gui/BufferQueueProducer.cpp
+++ b/libs/gui/BufferQueueProducer.cpp
@@ -513,7 +513,7 @@
{ // Autolock scope
Mutex::Autolock lock(mCore->mMutex);
- if (graphicBuffer != NULL && !mCore->mIsAbandoned) {
+ if (error == NO_ERROR && !mCore->mIsAbandoned) {
graphicBuffer->setGenerationNumber(mCore->mGenerationNumber);
mSlots[*outSlot].mGraphicBuffer = graphicBuffer;
}
@@ -521,7 +521,7 @@
mCore->mIsAllocating = false;
mCore->mIsAllocatingCondition.broadcast();
- if (graphicBuffer == NULL) {
+ if (error != NO_ERROR) {
mCore->mFreeSlots.insert(*outSlot);
mCore->clearBufferSlotLocked(*outSlot);
BQ_LOGE("dequeueBuffer: createGraphicBuffer failed");
diff --git a/libs/sensor/ISensorServer.cpp b/libs/sensor/ISensorServer.cpp
index 74186df..f20668d 100644
--- a/libs/sensor/ISensorServer.cpp
+++ b/libs/sensor/ISensorServer.cpp
@@ -119,10 +119,12 @@
return interface_cast<ISensorEventConnection>(reply.readStrongBinder());
}
- virtual int setOperationParameter(
- int32_t type, const Vector<float> &floats, const Vector<int32_t> &ints) {
+ virtual int setOperationParameter(int32_t handle, int32_t type,
+ const Vector<float> &floats,
+ const Vector<int32_t> &ints) {
Parcel data, reply;
data.writeInterfaceToken(ISensorServer::getInterfaceDescriptor());
+ data.writeInt32(handle);
data.writeInt32(type);
data.writeUint32(static_cast<uint32_t>(floats.size()));
for (auto i : floats) {
@@ -203,10 +205,12 @@
}
case SET_OPERATION_PARAMETER: {
CHECK_INTERFACE(ISensorServer, data, reply);
+ int32_t handle;
int32_t type;
Vector<float> floats;
Vector<int32_t> ints;
+ handle = data.readInt32();
type = data.readInt32();
floats.resize(data.readUint32());
for (auto &i : floats) {
@@ -217,7 +221,7 @@
i = data.readInt32();
}
- int32_t ret = setOperationParameter(type, floats, ints);
+ int32_t ret = setOperationParameter(handle, type, floats, ints);
reply->writeInt32(ret);
return NO_ERROR;
}
diff --git a/libs/sensor/SensorManager.cpp b/libs/sensor/SensorManager.cpp
index 3fbc5eb..6fe72a1 100644
--- a/libs/sensor/SensorManager.cpp
+++ b/libs/sensor/SensorManager.cpp
@@ -305,12 +305,13 @@
}
int SensorManager::setOperationParameter(
- int type, const Vector<float> &floats, const Vector<int32_t> &ints) {
+ int handle, int type,
+ const Vector<float> &floats, const Vector<int32_t> &ints) {
Mutex::Autolock _l(mLock);
if (assertStateLocked() != NO_ERROR) {
return NO_INIT;
}
- return mSensorServer->setOperationParameter(type, floats, ints);
+ return mSensorServer->setOperationParameter(handle, type, floats, ints);
}
// ----------------------------------------------------------------------------
diff --git a/libs/sensor/include/sensor/ISensorServer.h b/libs/sensor/include/sensor/ISensorServer.h
index 8d50062..edf3e0f 100644
--- a/libs/sensor/include/sensor/ISensorServer.h
+++ b/libs/sensor/include/sensor/ISensorServer.h
@@ -52,7 +52,7 @@
uint32_t size, int32_t type, int32_t format, const native_handle_t *resource) = 0;
virtual int setOperationParameter(
- int32_t type, const Vector<float> &floats, const Vector<int32_t> &ints) = 0;
+ int32_t handle, int32_t type, const Vector<float> &floats, const Vector<int32_t> &ints) = 0;
};
// ----------------------------------------------------------------------------
diff --git a/libs/sensor/include/sensor/SensorManager.h b/libs/sensor/include/sensor/SensorManager.h
index 5fc85d3..23f7a91 100644
--- a/libs/sensor/include/sensor/SensorManager.h
+++ b/libs/sensor/include/sensor/SensorManager.h
@@ -64,7 +64,7 @@
int createDirectChannel(size_t size, int channelType, const native_handle_t *channelData);
void destroyDirectChannel(int channelNativeHandle);
int configureDirectChannel(int channelNativeHandle, int sensorHandle, int rateLevel);
- int setOperationParameter(int type, const Vector<float> &floats, const Vector<int32_t> &ints);
+ int setOperationParameter(int handle, int type, const Vector<float> &floats, const Vector<int32_t> &ints);
private:
// DeathRecipient interface
diff --git a/libs/vr/libdvr/include/dvr/dvr_api.h b/libs/vr/libdvr/include/dvr/dvr_api.h
index 4595421..47a2a60 100644
--- a/libs/vr/libdvr/include/dvr/dvr_api.h
+++ b/libs/vr/libdvr/include/dvr/dvr_api.h
@@ -7,7 +7,7 @@
#include <cstdio>
#include <dvr/dvr_display_types.h>
-#include <dvr/dvr_hardware_composer_defs.h>
+#include <dvr/dvr_hardware_composer_types.h>
#include <dvr/dvr_pose.h>
#ifdef __cplusplus
@@ -210,7 +210,7 @@
int64_t* next_timestamp_ns,
uint32_t* next_vsync_count);
-// pose_client.h
+// libs/vr/libvrsensor/include/dvr/pose_client.h
typedef DvrPoseClient* (*DvrPoseClientCreatePtr)(void);
typedef void (*DvrPoseClientDestroyPtr)(DvrPoseClient* client);
typedef int (*DvrPoseClientGetPtr)(DvrPoseClient* client, uint32_t vsync_count,
@@ -221,7 +221,7 @@
uint32_t vsync_count,
DvrPoseAsync* out_pose);
-// virtual_touchpad_client.h
+// services/vr/virtual_touchpad/include/dvr/virtual_touchpad_client.h
typedef DvrVirtualTouchpad* (*DvrVirtualTouchpadCreatePtr)(void);
typedef void (*DvrVirtualTouchpadDestroyPtr)(DvrVirtualTouchpad* client);
typedef int (*DvrVirtualTouchpadAttachPtr)(DvrVirtualTouchpad* client);
@@ -336,7 +336,6 @@
// Defines an API entry for V1 (no version suffix).
#define DVR_V1_API_ENTRY(name) Dvr##name##Ptr name
-// Include file with API entries.
#include "dvr_api_entries.h"
// Undefine macro definitions to play nice with Google3 style rules.
diff --git a/libs/vr/libdvr/include/dvr/dvr_api_entries.h b/libs/vr/libdvr/include/dvr/dvr_api_entries.h
index f7be2c1..8cdad7d 100644
--- a/libs/vr/libdvr/include/dvr/dvr_api_entries.h
+++ b/libs/vr/libdvr/include/dvr/dvr_api_entries.h
@@ -8,6 +8,7 @@
#error Do not include this header directly.
#endif
+// Do not delete this line: BEGIN CODEGEN OUTPUT
// Display manager client
DVR_V1_API_ENTRY(DisplayManagerCreate);
DVR_V1_API_ENTRY(DisplayManagerDestroy);
diff --git a/libs/vr/libdvr/include/dvr/dvr_hardware_composer_client.h b/libs/vr/libdvr/include/dvr/dvr_hardware_composer_client.h
index 7ee7f9e..60e22de 100644
--- a/libs/vr/libdvr/include/dvr/dvr_hardware_composer_client.h
+++ b/libs/vr/libdvr/include/dvr/dvr_hardware_composer_client.h
@@ -1,7 +1,7 @@
#ifndef ANDROID_DVR_HARDWARE_COMPOSER_CLIENT_H
#define ANDROID_DVR_HARDWARE_COMPOSER_CLIENT_H
-#include <dvr/dvr_hardware_composer_defs.h>
+#include <dvr/dvr_hardware_composer_types.h>
#include <stdbool.h>
#ifdef __cplusplus
diff --git a/libs/vr/libdvr/include/dvr/dvr_hardware_composer_defs.h b/libs/vr/libdvr/include/dvr/dvr_hardware_composer_types.h
similarity index 100%
rename from libs/vr/libdvr/include/dvr/dvr_hardware_composer_defs.h
rename to libs/vr/libdvr/include/dvr/dvr_hardware_composer_types.h
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp
index b5baba8..209eea5 100644
--- a/services/sensorservice/SensorService.cpp
+++ b/services/sensorservice/SensorService.cpp
@@ -1033,17 +1033,16 @@
}
int SensorService::setOperationParameter(
- int32_t type, const Vector<float> &floats, const Vector<int32_t> &ints) {
+ int32_t handle, int32_t type,
+ const Vector<float> &floats, const Vector<int32_t> &ints) {
Mutex::Autolock _l(mLock);
- // check permission
- int32_t uid;
- bool hasPermission = checkCallingPermission(sLocationHardwarePermission, nullptr, &uid);
- if (!hasPermission || (uid != 1000 && uid != 0)) {
+ if (!checkCallingPermission(sLocationHardwarePermission, nullptr, nullptr)) {
return PERMISSION_DENIED;
}
bool isFloat = true;
+ bool isCustom = false;
size_t expectSize = INT32_MAX;
switch (type) {
case AINFO_LOCAL_GEOMAGNETIC_FIELD:
@@ -1061,7 +1060,21 @@
expectSize = 1;
break;
default:
- return BAD_VALUE;
+ // CUSTOM events must only contain float data; it may have variable size
+ if (type < AINFO_CUSTOM_START || type >= AINFO_DEBUGGING_START ||
+ ints.size() ||
+ sizeof(additional_info_event_t::data_float)/sizeof(float) < floats.size() ||
+ handle < 0) {
+ return BAD_VALUE;
+ }
+ isFloat = true;
+ isCustom = true;
+ expectSize = floats.size();
+ break;
+ }
+
+ if (!isCustom && handle != -1) {
+ return BAD_VALUE;
}
// three events: first one is begin tag, last one is end tag, the one in the middle
@@ -1071,7 +1084,7 @@
for (sensors_event_t* i = event; i < event + 3; i++) {
*i = (sensors_event_t) {
.version = sizeof(sensors_event_t),
- .sensor = SENSORS_HANDLE_BASE - 1, // sensor that never exists
+ .sensor = handle,
.type = SENSOR_TYPE_ADDITIONAL_INFO,
.timestamp = timestamp++,
.additional_info = (additional_info_event_t) {
diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h
index 2a9d6e8..3e18394 100644
--- a/services/sensorservice/SensorService.h
+++ b/services/sensorservice/SensorService.h
@@ -159,7 +159,7 @@
virtual sp<ISensorEventConnection> createSensorDirectConnection(const String16& opPackageName,
uint32_t size, int32_t type, int32_t format, const native_handle *resource);
virtual int setOperationParameter(
- int32_t type, const Vector<float> &floats, const Vector<int32_t> &ints);
+ int32_t handle, int32_t type, const Vector<float> &floats, const Vector<int32_t> &ints);
virtual status_t dump(int fd, const Vector<String16>& args);
String8 getSensorName(int handle) const;