diff --git a/benchmarks/msgq/1.0/Android.bp b/benchmarks/msgq/1.0/Android.bp
new file mode 100644
index 0000000..7f8ea99
--- /dev/null
+++ b/benchmarks/msgq/1.0/Android.bp
@@ -0,0 +1,59 @@
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+filegroup {
+    name: "android.hardware.benchmarks.msgq@1.0_hal",
+    srcs: [
+        "IBenchmarkMsgQ.hal",
+    ],
+}
+
+genrule {
+    name: "android.hardware.benchmarks.msgq@1.0_genc++",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.benchmarks.msgq@1.0",
+    srcs: [
+        ":android.hardware.benchmarks.msgq@1.0_hal",
+    ],
+    out: [
+        "android/hardware/benchmarks/msgq/1.0/BenchmarkMsgQAll.cpp",
+    ],
+}
+
+genrule {
+    name: "android.hardware.benchmarks.msgq@1.0_genc++_headers",
+    tools: ["hidl-gen"],
+    cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.benchmarks.msgq@1.0",
+    srcs: [
+        ":android.hardware.benchmarks.msgq@1.0_hal",
+    ],
+    out: [
+        "android/hardware/benchmarks/msgq/1.0/IBenchmarkMsgQ.h",
+        "android/hardware/benchmarks/msgq/1.0/IHwBenchmarkMsgQ.h",
+        "android/hardware/benchmarks/msgq/1.0/BnHwBenchmarkMsgQ.h",
+        "android/hardware/benchmarks/msgq/1.0/BpHwBenchmarkMsgQ.h",
+        "android/hardware/benchmarks/msgq/1.0/BsBenchmarkMsgQ.h",
+    ],
+}
+
+cc_library_shared {
+    name: "android.hardware.benchmarks.msgq@1.0",
+    generated_sources: ["android.hardware.benchmarks.msgq@1.0_genc++"],
+    generated_headers: ["android.hardware.benchmarks.msgq@1.0_genc++_headers"],
+    export_generated_headers: ["android.hardware.benchmarks.msgq@1.0_genc++_headers"],
+    shared_libs: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "liblog",
+        "libutils",
+        "libcutils",
+        "android.hidl.base@1.0",
+    ],
+    export_shared_lib_headers: [
+        "libhidlbase",
+        "libhidltransport",
+        "libhwbinder",
+        "libutils",
+        "android.hidl.base@1.0",
+    ],
+}
diff --git a/benchmarks/msgq/1.0/IBenchmarkMsgQ.hal b/benchmarks/msgq/1.0/IBenchmarkMsgQ.hal
new file mode 100644
index 0000000..c4b9d95
--- /dev/null
+++ b/benchmarks/msgq/1.0/IBenchmarkMsgQ.hal
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.hardware.benchmarks.msgq@1.0;
+
+interface IBenchmarkMsgQ {
+    /*
+     * This method requests the service to set up Synchronous read/write
+     * wait-free FMQ with the client as reader.
+     * @return ret Will be true if the setup was successful, false otherwise.
+     * @return mqDescIn This structure describes the FMQ that was set up
+     * by the service. Client can use it to set up the FMQ at its end.
+     */
+    configureClientInboxSyncReadWrite()
+        generates(bool ret, fmq_sync<uint8_t> mqDescIn);
+
+    /*
+     * This method requests the service to set up Synchronous read/write
+     * wait-free FMQ with the client as writer.
+     * @return ret Will be true if the setup was successful, false otherwise.
+     * @return mqDescOut This structure describes the FMQ that was set up
+     * by the service. Client can use it to set up the FMQ at its end.
+     */
+    configureClientOutboxSyncReadWrite()
+        generates(bool ret, fmq_sync<uint8_t> mqDescOut);
+
+    /*
+     * This method request the service to write into the FMQ.
+     * @param count Number to messages to write.
+     * @return ret Will be true if the write operation was successful,
+     * false otherwise.
+     */
+    requestWrite(int32_t count) generates (bool ret);
+
+    /*
+     * This method request the service to read from the FMQ.
+     * @param count Number to messages to read.
+     * @ret Will be true if the read operation was successful, false otherwise.
+     */
+    requestRead(int32_t count) generates (bool ret);
+
+    /*
+     * This method kicks off a benchmarking experiment where
+     * the client writes a message into its outbox FMQ,
+     * the service reads it and writes it into the client's
+     * inbox FMQ and the client reads the message.
+     * The average time taken for the experiment is measured.
+     * @param numIter The number of iterations to run the experiment.
+     */
+    benchmarkPingPong(uint32_t numIter);
+
+    /*
+     * This method kicks off a benchmarking experiment where
+     * the service writes into an FMQ and the client reads the same.
+     * @param numIter The number of iterations to run the experiment.
+     */
+    benchmarkServiceWriteClientRead(uint32_t numIter);
+
+    /*
+     * This method sends a vector of time duration(in ns).
+     * @param timeData vector of time instants measured by client.
+     * Each entry is the number of ns between the epoch and a
+     * std::chrono::time_point.
+     */
+    sendTimeData(vec<int64_t> timeData);
+};
