Merge "Update makefiles (vibrator open)." into oc-dr1-dev
diff --git a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
index 02c38a4..8695e4e 100644
--- a/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
+++ b/camera/provider/2.4/vts/functional/VtsHalCameraProviderV2_4TargetTest.cpp
@@ -1678,7 +1678,8 @@
                     ASSERT_EQ(Status::OK, status);
                     const camera_metadata_t* metadata = (camera_metadata_t*) chars.data();
                     size_t expectedSize = chars.size();
-                    ASSERT_EQ(0, validate_camera_metadata_structure(metadata, &expectedSize));
+                    int result = validate_camera_metadata_structure(metadata, &expectedSize);
+                    ASSERT_TRUE(result == 0 || result == CAMERA_METADATA_VALIDATION_SHIFTED);
                     size_t entryCount = get_camera_metadata_entry_count(metadata);
                     // TODO: we can do better than 0 here. Need to check how many required
                     // characteristics keys we've defined.
@@ -1995,8 +1996,9 @@
                             const camera_metadata_t* metadata =
                                 (camera_metadata_t*) req.data();
                             size_t expectedSize = req.size();
-                            ASSERT_EQ(0, validate_camera_metadata_structure(
-                                    metadata, &expectedSize));
+                            int result = validate_camera_metadata_structure(
+                                    metadata, &expectedSize);
+                            ASSERT_TRUE(result == 0 || result == CAMERA_METADATA_VALIDATION_SHIFTED);
                             size_t entryCount = get_camera_metadata_entry_count(metadata);
                             // TODO: we can do better than 0 here. Need to check how many required
                             // request keys we've defined for each template
diff --git a/graphics/mapper/2.0/default/GrallocMapper.cpp b/graphics/mapper/2.0/default/GrallocMapper.cpp
index d16143d..e06fbcb 100644
--- a/graphics/mapper/2.0/default/GrallocMapper.cpp
+++ b/graphics/mapper/2.0/default/GrallocMapper.cpp
@@ -293,20 +293,31 @@
     return Void();
 }
 
-IMapper* HIDL_FETCH_IMapper(const char* /* name */) {
-    const hw_module_t* module = nullptr;
-    int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
-    if (err) {
-        ALOGE("failed to get gralloc module");
-        return nullptr;
+namespace {
+// Load the gralloc module when this shared library is loaded, rather than
+// waiting until HIDL_FETCH_IMapper is called. This allows it (and its
+// dependencies) to be loaded by Zygote, reducing app startup time and sharing
+// pages dirtied during library load between all apps.
+struct GrallocModule {
+    const hw_module_t* module;
+    GrallocModule() : module(nullptr) {
+        int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
+        ALOGE_IF(err, "failed to get gralloc module: %s (%d)", strerror(-err),
+                 err);
     }
+};
+GrallocModule gGralloc;
+}  // namespace
 
-    uint8_t major = (module->module_api_version >> 8) & 0xff;
+IMapper* HIDL_FETCH_IMapper(const char* /* name */) {
+    if (!gGralloc.module) return nullptr;
+
+    uint8_t major = (gGralloc.module->module_api_version >> 8) & 0xff;
     switch (major) {
         case 1:
-            return new Gralloc1Mapper(module);
+            return new Gralloc1Mapper(gGralloc.module);
         case 0:
-            return new Gralloc0Mapper(module);
+            return new Gralloc0Mapper(gGralloc.module);
         default:
             ALOGE("unknown gralloc module major version %d", major);
             return nullptr;
diff --git a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
index 094e8a1..e67f94f 100644
--- a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
+++ b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
@@ -46,8 +46,6 @@
     { 0x20, 0x01, 0x00 }
 #define INVALID_COMMAND \
   { 0x20, 0x00, 0x00 }
-#define FAULTY_DATA_PACKET \
-  { 0x00, 0x00, 0xFF }
 
 #define LOOP_BACK_HEADER_SIZE 3
 #define SYNTAX_ERROR 5
@@ -271,8 +269,8 @@
 
 /*
  * WriteInvalidAndThenValidCommand:
- * Sends an Faulty Data Packet
- * Waits for CORE_INTERFACE_ERROR_NTF
+ * Sends an Invalid command
+ * Waits for response
  * Checks SYNTAX_ERROR status
  * Repeat for 100 times appending 0xFF each time to the packet
  * Send CORE_CONN_CREATE_CMD for loop-back mode
@@ -303,7 +301,7 @@
     EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
 
     // Send an Error Data Packet
-    cmd = FAULTY_DATA_PACKET;
+    cmd = INVALID_COMMAND;
     data = cmd;
     size_t size = data.size();
 
@@ -311,13 +309,10 @@
         data.resize(++size);
         data[size - 1] = 0xFF;
         EXPECT_EQ(data.size(), nfc_->write(data));
-        // Wait for CORE_INTERFACE_ERROR_NTF
+        // Wait for response with SYNTAX_ERROR
         res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
         EXPECT_TRUE(res.no_timeout);
-        EXPECT_EQ(5ul, res.args->last_data_.size());
-        EXPECT_EQ(0x60, res.args->last_data_[0]);
-        EXPECT_EQ(0x08, res.args->last_data_[1]);
-        EXPECT_EQ(0x02, res.args->last_data_[2]);
+        EXPECT_EQ(4ul, res.args->last_data_.size());
         EXPECT_EQ(SYNTAX_ERROR, res.args->last_data_[3]);
   }