diff --git a/doc/testcase_develop_manual/codelab_host_driven_test.md b/doc/testcase_develop_manual/codelab_host_driven_test.md
index 4cfea62..5971133 100644
--- a/doc/testcase_develop_manual/codelab_host_driven_test.md
+++ b/doc/testcase_develop_manual/codelab_host_driven_test.md
@@ -1,8 +1,8 @@
 # Codelab - VTS Host-Driven, Structural Test
 
-##1. Project setup
+## 1. Project setup
 
-###1.1. Setup a local Android repository
+### 1.1. Setup a local Android repository
 
 `$ export branch=master`  # currently, internal master is mainly supported.
 
@@ -18,7 +18,7 @@
 
 `$ ls test/vts`
 
-###1.2. Create a test project
+### 1.2. Create a test project
 
 Create your test project directory under,
 
@@ -30,7 +30,7 @@
 
 - `test/vts/testcases/**kernel**/<your project name>` if your project is for kernel or kernel modules
 
-###1.3. Create Android.mk file
+### 1.3. Create Android.mk file
 
 `$ vi test/vts/testcases/host/codelab/hello_world/Android.mk`
 
@@ -64,7 +64,7 @@
 so that the Android build system can store the compiled executable to
 a designated output directory (under `out/` directory) for packaging.
 
-###1.4. Create AndroidTest.xml file
+### 1.4. Create AndroidTest.xml file
 
 `$ vi test/vts/testcases/host/codelab/hello_world/AndroidTest.xml`
 
@@ -111,13 +111,13 @@
 ```
 ---
 
-##2. Design your test case
+## 2. Design your test case
 
-###2.1. Declare a python module
+### 2.1. Declare a python module
 
 `$ touch test/vts/testcases/host/codelab/hello_world/__init__.py`
 
-###2.2. Actual test case code
+### 2.2. Actual test case code
 
 `$ vi test/vts/testcases/host/codelab/hello_world/CodeLabHelloWorldTest.py`
 
@@ -166,7 +166,7 @@
 ```
 ---
 
-###2.3. Test case config
+### 2.3. Test case config
 
 `$ vi test/vts/testcases/host/codelab/hello_world/CodeLabHelloWorldTest.config`
 
@@ -188,7 +188,7 @@
 ```
 ---
 
-###2.4. Create a test suite
+### 2.4. Create a test suite
 
 `$ vi test/vts/tools/vts-tradefed/res/config/vts-codelab.xml`
 
@@ -206,9 +206,9 @@
 ---
 
 
-##3. Build and Run
+## 3. Build and Run
 
-###3.1. Build
+### 3.1. Build
 
 `$ . build/envsetup.sh`
 
@@ -220,7 +220,7 @@
 
 `$ make vts -j 10`
 
-###3.2. Run
+### 3.2. Run
 
 `$ vts-tradefed`
 
@@ -234,7 +234,7 @@
 
 `target$ setenforce 0`
 
-##4. Serving
+## 4. Serving
 
 [Dashboard](https://android-vts-internal.googleplex.com)
 
diff --git a/proto/InterfaceSpecificationMessage.proto b/proto/InterfaceSpecificationMessage.proto
index 598a21e..e660403 100644
--- a/proto/InterfaceSpecificationMessage.proto
+++ b/proto/InterfaceSpecificationMessage.proto
@@ -92,6 +92,16 @@
 }
 
 
+// To specify the measured native code coverage raw data.
+message NativeCodeCoverageRawDataMessage {
+  // gcno file path.
+  optional bytes file_path = 1;
+
+  // content of a gcda file.
+  optional bytes gcda = 11;
+}
+
+
 // To specify a function.
 message FunctionSpecificationMessage {
   // the function name.
@@ -112,8 +122,11 @@
   // profiling data.
   repeated float profiling_data = 101;
 
-  // coverage measurement data.
-  repeated uint32 coverage_data = 201;
+  // measured processed coverage data.
+  repeated uint32 processed_coverage_data = 201;
+
+  // measured raw coverage data.
+  repeated NativeCodeCoverageRawDataMessage raw_coverage_data = 202;
 
   // not a user-provided variable. used by the frameworks to tell the sub
   // struct hierarchy.
diff --git a/proto/InterfaceSpecificationMessage_pb2.py b/proto/InterfaceSpecificationMessage_pb2.py
index ed68097..0647901 100644
--- a/proto/InterfaceSpecificationMessage_pb2.py
+++ b/proto/InterfaceSpecificationMessage_pb2.py
@@ -14,7 +14,7 @@
 DESCRIPTOR = _descriptor.FileDescriptor(
   name='InterfaceSpecificationMessage.proto',
   package='android.vts',
-  serialized_pb='\n#InterfaceSpecificationMessage.proto\x12\x0b\x61ndroid.vts\"e\n\x1c\x43\x61llFlowSpecificationMessage\x12\x14\n\x05\x65ntry\x18\x01 \x01(\x08:\x05\x66\x61lse\x12\x13\n\x04\x65xit\x18\x02 \x01(\x08:\x05\x66\x61lse\x12\x0c\n\x04next\x18\x0b \x03(\x0c\x12\x0c\n\x04prev\x18\x0c \x03(\x0c\"\xec\x02\n\x1c\x46unctionSpecificationMessage\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12>\n\x0breturn_type\x18\x0b \x01(\x0b\x32).android.vts.VariableSpecificationMessage\x12\x43\n\x10return_type_hidl\x18\x0c \x03(\x0b\x32).android.vts.VariableSpecificationMessage\x12\x36\n\x03\x61rg\x18\x15 \x03(\x0b\x32).android.vts.VariableSpecificationMessage\x12;\n\x08\x63\x61llflow\x18\x1f \x03(\x0b\x32).android.vts.CallFlowSpecificationMessage\x12\x16\n\x0eprofiling_data\x18\x65 \x03(\x02\x12\x16\n\rcoverage_data\x18\xc9\x01 \x03(\r\x12\x14\n\x0bparent_path\x18\xad\x02 \x01(\x0c\"\xea\x02\n\x16ScalarDataValueMessage\x12\x0c\n\x04\x62ool\x18\x01 \x01(\x05\x12\x0e\n\x06int8_t\x18\x0b \x01(\x05\x12\x0f\n\x07uint8_t\x18\x0c \x01(\r\x12\x0c\n\x04\x63har\x18\r \x01(\x05\x12\r\n\x05uchar\x18\x0e \x01(\r\x12\x0f\n\x07int16_t\x18\x15 \x01(\x05\x12\x10\n\x08uint16_t\x18\x16 \x01(\r\x12\x0f\n\x07int32_t\x18\x1f \x01(\x05\x12\x10\n\x08uint32_t\x18  \x01(\r\x12\x0f\n\x07int64_t\x18) \x01(\x03\x12\x10\n\x08uint64_t\x18* \x01(\x04\x12\x0f\n\x07\x66loat_t\x18\x65 \x01(\x02\x12\x10\n\x08\x64ouble_t\x18\x66 \x01(\x01\x12\x10\n\x07pointer\x18\xc9\x01 \x01(\r\x12\x0f\n\x06opaque\x18\xca\x01 \x01(\r\x12\x15\n\x0cvoid_pointer\x18\xd3\x01 \x01(\r\x12\x15\n\x0c\x63har_pointer\x18\xd4\x01 \x01(\r\x12\x18\n\x0fpointer_pointer\x18\xfb\x01 \x01(\r\x12\r\n\x04\x62its\x18\xe9\x07 \x01(\r\"\xee\x01\n\x16VectorDataValueMessage\x12\'\n\x04type\x18\x01 \x01(\x0e\x32\x19.android.vts.VariableType\x12\x0c\n\x04size\x18\x02 \x01(\r\x12\x13\n\x0bscalar_type\x18\x0b \x01(\x0c\x12\x32\n\x05value\x18\x0c \x03(\x0b\x32#.android.vts.ScalarDataValueMessage\x12\x13\n\x0bstruct_type\x18\x15 \x01(\x0c\x12?\n\x0cstruct_value\x18\x16 \x03(\x0b\x32).android.vts.VariableSpecificationMessage\"\xd1\x01\n#FunctionPointerSpecificationMessage\x12\x15\n\rfunction_name\x18\x01 \x01(\x0c\x12\x0f\n\x07\x61\x64\x64ress\x18\x0b \x01(\r\x12\n\n\x02id\x18\x15 \x01(\x0c\x12\x36\n\x03\x61rg\x18\x65 \x03(\x0b\x32).android.vts.VariableSpecificationMessage\x12>\n\x0breturn_type\x18o \x01(\x0b\x32).android.vts.VariableSpecificationMessage\"9\n\x16StringDataValueMessage\x12\x0f\n\x07message\x18\x01 \x01(\x0c\x12\x0e\n\x06length\x18\x0b \x01(\r\"9\n\x14\x45numDataValueMessage\x12\x12\n\nenumerator\x18\x01 \x03(\x0c\x12\r\n\x05value\x18\x02 \x03(\r\"\xbe\x05\n\x1cVariableSpecificationMessage\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\'\n\x04type\x18\x02 \x01(\x0e\x32\x19.android.vts.VariableType\x12\x39\n\x0cscalar_value\x18\x65 \x01(\x0b\x32#.android.vts.ScalarDataValueMessage\x12\x13\n\x0bscalar_type\x18\x66 \x01(\x0c\x12\x39\n\x0cstring_value\x18o \x01(\x0b\x32#.android.vts.StringDataValueMessage\x12\x35\n\nenum_value\x18y \x01(\x0b\x32!.android.vts.EnumDataValueMessage\x12:\n\x0cvector_value\x18\x83\x01 \x03(\x0b\x32#.android.vts.VectorDataValueMessage\x12@\n\x0cstruct_value\x18\x8d\x01 \x03(\x0b\x32).android.vts.VariableSpecificationMessage\x12\x14\n\x0bstruct_type\x18\x8e\x01 \x01(\x0c\x12?\n\x0bunion_value\x18\x97\x01 \x03(\x0b\x32).android.vts.VariableSpecificationMessage\x12\x18\n\x0fpredefined_type\x18\xc9\x01 \x01(\x0c\x12K\n\x10\x66unction_pointer\x18\xdd\x01 \x03(\x0b\x32\x30.android.vts.FunctionPointerSpecificationMessage\x12\x17\n\x08is_input\x18\xad\x02 \x01(\x08:\x04true\x12\x19\n\tis_output\x18\xae\x02 \x01(\x08:\x05\x66\x61lse\x12\x18\n\x08is_const\x18\xaf\x02 \x01(\x08:\x05\x66\x61lse\x12\x1b\n\x0bis_callback\x18\xb0\x02 \x01(\x08:\x05\x66\x61lse\"\xfb\x01\n\x1aStructSpecificationMessage\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x19\n\nis_pointer\x18\x02 \x01(\x08:\x05\x66\x61lse\x12\x37\n\x03\x61pi\x18\xe9\x07 \x03(\x0b\x32).android.vts.FunctionSpecificationMessage\x12<\n\nsub_struct\x18\xd1\x0f \x03(\x0b\x32\'.android.vts.StructSpecificationMessage\x12=\n\tattribute\x18\xb9\x17 \x03(\x0b\x32).android.vts.VariableSpecificationMessage\"\xd3\x03\n\x1dInterfaceSpecificationMessage\x12\x34\n\x0f\x63omponent_class\x18\x01 \x01(\x0e\x32\x1b.android.vts.ComponentClass\x12\x32\n\x0e\x63omponent_type\x18\x02 \x01(\x0e\x32\x1a.android.vts.ComponentType\x12!\n\x16\x63omponent_type_version\x18\x03 \x01(\x02:\x01\x31\x12\x16\n\x0e\x63omponent_name\x18\x04 \x01(\x0c\x12\x0f\n\x07package\x18\x0b \x01(\x0c\x12\x0e\n\x06import\x18\x0c \x03(\x0c\x12%\n\x1coriginal_data_structure_name\x18\xe9\x07 \x01(\x0c\x12\x0f\n\x06header\x18\xea\x07 \x03(\x0c\x12\x37\n\x03\x61pi\x18\xd1\x0f \x03(\x0b\x32).android.vts.FunctionSpecificationMessage\x12=\n\tattribute\x18\xb9\x17 \x03(\x0b\x32).android.vts.VariableSpecificationMessage\x12<\n\nsub_struct\x18\xa1\x1f \x03(\x0b\x32\'.android.vts.StructSpecificationMessage*\xaa\x01\n\x0e\x43omponentClass\x12\x11\n\rUNKNOWN_CLASS\x10\x00\x12\x14\n\x10HAL_CONVENTIONAL\x10\x01\x12\x1e\n\x1aHAL_CONVENTIONAL_SUBMODULE\x10\x02\x12\x0e\n\nHAL_LEGACY\x10\x03\x12\x0c\n\x08HAL_HIDL\x10\x04\x12!\n\x1dHAL_HIDL_WRAPPED_CONVENTIONAL\x10\x05\x12\x0e\n\nLIB_SHARED\x10\x0b*\x8c\x01\n\rComponentType\x12\x10\n\x0cUNKNOWN_TYPE\x10\x00\x12\t\n\x05\x41UDIO\x10\x01\x12\n\n\x06\x43\x41MERA\x10\x02\x12\x07\n\x03GPS\x10\x03\x12\t\n\x05LIGHT\x10\x04\x12\x08\n\x04WIFI\x10\x05\x12\n\n\x06MOBILE\x10\x06\x12\r\n\tBLUETOOTH\x10\x07\x12\x07\n\x03NFC\x10\x08\x12\x10\n\x0b\x42IONIC_LIBM\x10\xe9\x07*\xe3\x01\n\x0cVariableType\x12\x19\n\x15UNKNOWN_VARIABLE_TYPE\x10\x00\x12\x13\n\x0fTYPE_PREDEFINED\x10\x01\x12\x0f\n\x0bTYPE_SCALAR\x10\x02\x12\x0f\n\x0bTYPE_STRING\x10\x03\x12\r\n\tTYPE_ENUM\x10\x04\x12\x0e\n\nTYPE_ARRAY\x10\x05\x12\x0f\n\x0bTYPE_VECTOR\x10\x06\x12\x0f\n\x0bTYPE_STRUCT\x10\x07\x12\x19\n\x15TYPE_FUNCTION_POINTER\x10\x08\x12\r\n\tTYPE_VOID\x10\t\x12\x16\n\x12TYPE_HIDL_CALLBACK\x10\n')
+  serialized_pb='\n#InterfaceSpecificationMessage.proto\x12\x0b\x61ndroid.vts\"e\n\x1c\x43\x61llFlowSpecificationMessage\x12\x14\n\x05\x65ntry\x18\x01 \x01(\x08:\x05\x66\x61lse\x12\x13\n\x04\x65xit\x18\x02 \x01(\x08:\x05\x66\x61lse\x12\x0c\n\x04next\x18\x0b \x03(\x0c\x12\x0c\n\x04prev\x18\x0c \x03(\x0c\"C\n NativeCodeCoverageRawDataMessage\x12\x11\n\tfile_path\x18\x01 \x01(\x0c\x12\x0c\n\x04gcno\x18\x0b \x01(\x0c\"\xc1\x03\n\x1c\x46unctionSpecificationMessage\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12>\n\x0breturn_type\x18\x0b \x01(\x0b\x32).android.vts.VariableSpecificationMessage\x12\x43\n\x10return_type_hidl\x18\x0c \x03(\x0b\x32).android.vts.VariableSpecificationMessage\x12\x36\n\x03\x61rg\x18\x15 \x03(\x0b\x32).android.vts.VariableSpecificationMessage\x12;\n\x08\x63\x61llflow\x18\x1f \x03(\x0b\x32).android.vts.CallFlowSpecificationMessage\x12\x16\n\x0eprofiling_data\x18\x65 \x03(\x02\x12 \n\x17processed_coverage_data\x18\xc9\x01 \x03(\r\x12I\n\x11raw_coverage_data\x18\xca\x01 \x03(\x0b\x32-.android.vts.NativeCodeCoverageRawDataMessage\x12\x14\n\x0bparent_path\x18\xad\x02 \x01(\x0c\"\xea\x02\n\x16ScalarDataValueMessage\x12\x0c\n\x04\x62ool\x18\x01 \x01(\x05\x12\x0e\n\x06int8_t\x18\x0b \x01(\x05\x12\x0f\n\x07uint8_t\x18\x0c \x01(\r\x12\x0c\n\x04\x63har\x18\r \x01(\x05\x12\r\n\x05uchar\x18\x0e \x01(\r\x12\x0f\n\x07int16_t\x18\x15 \x01(\x05\x12\x10\n\x08uint16_t\x18\x16 \x01(\r\x12\x0f\n\x07int32_t\x18\x1f \x01(\x05\x12\x10\n\x08uint32_t\x18  \x01(\r\x12\x0f\n\x07int64_t\x18) \x01(\x03\x12\x10\n\x08uint64_t\x18* \x01(\x04\x12\x0f\n\x07\x66loat_t\x18\x65 \x01(\x02\x12\x10\n\x08\x64ouble_t\x18\x66 \x01(\x01\x12\x10\n\x07pointer\x18\xc9\x01 \x01(\r\x12\x0f\n\x06opaque\x18\xca\x01 \x01(\r\x12\x15\n\x0cvoid_pointer\x18\xd3\x01 \x01(\r\x12\x15\n\x0c\x63har_pointer\x18\xd4\x01 \x01(\r\x12\x18\n\x0fpointer_pointer\x18\xfb\x01 \x01(\r\x12\r\n\x04\x62its\x18\xe9\x07 \x01(\r\"\xee\x01\n\x16VectorDataValueMessage\x12\'\n\x04type\x18\x01 \x01(\x0e\x32\x19.android.vts.VariableType\x12\x0c\n\x04size\x18\x02 \x01(\r\x12\x13\n\x0bscalar_type\x18\x0b \x01(\x0c\x12\x32\n\x05value\x18\x0c \x03(\x0b\x32#.android.vts.ScalarDataValueMessage\x12\x13\n\x0bstruct_type\x18\x15 \x01(\x0c\x12?\n\x0cstruct_value\x18\x16 \x03(\x0b\x32).android.vts.VariableSpecificationMessage\"\xd1\x01\n#FunctionPointerSpecificationMessage\x12\x15\n\rfunction_name\x18\x01 \x01(\x0c\x12\x0f\n\x07\x61\x64\x64ress\x18\x0b \x01(\r\x12\n\n\x02id\x18\x15 \x01(\x0c\x12\x36\n\x03\x61rg\x18\x65 \x03(\x0b\x32).android.vts.VariableSpecificationMessage\x12>\n\x0breturn_type\x18o \x01(\x0b\x32).android.vts.VariableSpecificationMessage\"9\n\x16StringDataValueMessage\x12\x0f\n\x07message\x18\x01 \x01(\x0c\x12\x0e\n\x06length\x18\x0b \x01(\r\"9\n\x14\x45numDataValueMessage\x12\x12\n\nenumerator\x18\x01 \x03(\x0c\x12\r\n\x05value\x18\x02 \x03(\r\"\xbe\x05\n\x1cVariableSpecificationMessage\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\'\n\x04type\x18\x02 \x01(\x0e\x32\x19.android.vts.VariableType\x12\x39\n\x0cscalar_value\x18\x65 \x01(\x0b\x32#.android.vts.ScalarDataValueMessage\x12\x13\n\x0bscalar_type\x18\x66 \x01(\x0c\x12\x39\n\x0cstring_value\x18o \x01(\x0b\x32#.android.vts.StringDataValueMessage\x12\x35\n\nenum_value\x18y \x01(\x0b\x32!.android.vts.EnumDataValueMessage\x12:\n\x0cvector_value\x18\x83\x01 \x03(\x0b\x32#.android.vts.VectorDataValueMessage\x12@\n\x0cstruct_value\x18\x8d\x01 \x03(\x0b\x32).android.vts.VariableSpecificationMessage\x12\x14\n\x0bstruct_type\x18\x8e\x01 \x01(\x0c\x12?\n\x0bunion_value\x18\x97\x01 \x03(\x0b\x32).android.vts.VariableSpecificationMessage\x12\x18\n\x0fpredefined_type\x18\xc9\x01 \x01(\x0c\x12K\n\x10\x66unction_pointer\x18\xdd\x01 \x03(\x0b\x32\x30.android.vts.FunctionPointerSpecificationMessage\x12\x17\n\x08is_input\x18\xad\x02 \x01(\x08:\x04true\x12\x19\n\tis_output\x18\xae\x02 \x01(\x08:\x05\x66\x61lse\x12\x18\n\x08is_const\x18\xaf\x02 \x01(\x08:\x05\x66\x61lse\x12\x1b\n\x0bis_callback\x18\xb0\x02 \x01(\x08:\x05\x66\x61lse\"\xfb\x01\n\x1aStructSpecificationMessage\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x19\n\nis_pointer\x18\x02 \x01(\x08:\x05\x66\x61lse\x12\x37\n\x03\x61pi\x18\xe9\x07 \x03(\x0b\x32).android.vts.FunctionSpecificationMessage\x12<\n\nsub_struct\x18\xd1\x0f \x03(\x0b\x32\'.android.vts.StructSpecificationMessage\x12=\n\tattribute\x18\xb9\x17 \x03(\x0b\x32).android.vts.VariableSpecificationMessage\"\xd3\x03\n\x1dInterfaceSpecificationMessage\x12\x34\n\x0f\x63omponent_class\x18\x01 \x01(\x0e\x32\x1b.android.vts.ComponentClass\x12\x32\n\x0e\x63omponent_type\x18\x02 \x01(\x0e\x32\x1a.android.vts.ComponentType\x12!\n\x16\x63omponent_type_version\x18\x03 \x01(\x02:\x01\x31\x12\x16\n\x0e\x63omponent_name\x18\x04 \x01(\x0c\x12\x0f\n\x07package\x18\x0b \x01(\x0c\x12\x0e\n\x06import\x18\x0c \x03(\x0c\x12%\n\x1coriginal_data_structure_name\x18\xe9\x07 \x01(\x0c\x12\x0f\n\x06header\x18\xea\x07 \x03(\x0c\x12\x37\n\x03\x61pi\x18\xd1\x0f \x03(\x0b\x32).android.vts.FunctionSpecificationMessage\x12=\n\tattribute\x18\xb9\x17 \x03(\x0b\x32).android.vts.VariableSpecificationMessage\x12<\n\nsub_struct\x18\xa1\x1f \x03(\x0b\x32\'.android.vts.StructSpecificationMessage*\xaa\x01\n\x0e\x43omponentClass\x12\x11\n\rUNKNOWN_CLASS\x10\x00\x12\x14\n\x10HAL_CONVENTIONAL\x10\x01\x12\x1e\n\x1aHAL_CONVENTIONAL_SUBMODULE\x10\x02\x12\x0e\n\nHAL_LEGACY\x10\x03\x12\x0c\n\x08HAL_HIDL\x10\x04\x12!\n\x1dHAL_HIDL_WRAPPED_CONVENTIONAL\x10\x05\x12\x0e\n\nLIB_SHARED\x10\x0b*\x8c\x01\n\rComponentType\x12\x10\n\x0cUNKNOWN_TYPE\x10\x00\x12\t\n\x05\x41UDIO\x10\x01\x12\n\n\x06\x43\x41MERA\x10\x02\x12\x07\n\x03GPS\x10\x03\x12\t\n\x05LIGHT\x10\x04\x12\x08\n\x04WIFI\x10\x05\x12\n\n\x06MOBILE\x10\x06\x12\r\n\tBLUETOOTH\x10\x07\x12\x07\n\x03NFC\x10\x08\x12\x10\n\x0b\x42IONIC_LIBM\x10\xe9\x07*\xe3\x01\n\x0cVariableType\x12\x19\n\x15UNKNOWN_VARIABLE_TYPE\x10\x00\x12\x13\n\x0fTYPE_PREDEFINED\x10\x01\x12\x0f\n\x0bTYPE_SCALAR\x10\x02\x12\x0f\n\x0bTYPE_STRING\x10\x03\x12\r\n\tTYPE_ENUM\x10\x04\x12\x0e\n\nTYPE_ARRAY\x10\x05\x12\x0f\n\x0bTYPE_VECTOR\x10\x06\x12\x0f\n\x0bTYPE_STRUCT\x10\x07\x12\x19\n\x15TYPE_FUNCTION_POINTER\x10\x08\x12\r\n\tTYPE_VOID\x10\t\x12\x16\n\x12TYPE_HIDL_CALLBACK\x10\n')
 
 _COMPONENTCLASS = _descriptor.EnumDescriptor(
   name='ComponentClass',
@@ -53,8 +53,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=2888,
-  serialized_end=3058,
+  serialized_start=3042,
+  serialized_end=3212,
 )
 
 ComponentClass = enum_type_wrapper.EnumTypeWrapper(_COMPONENTCLASS)
@@ -107,8 +107,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=3061,
-  serialized_end=3201,
+  serialized_start=3215,
+  serialized_end=3355,
 )
 
 ComponentType = enum_type_wrapper.EnumTypeWrapper(_COMPONENTTYPE)
@@ -165,8 +165,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=3204,
-  serialized_end=3431,
+  serialized_start=3358,
+  serialized_end=3585,
 )
 
 VariableType = enum_type_wrapper.EnumTypeWrapper(_VARIABLETYPE)
@@ -250,6 +250,41 @@
 )
 
 
+_NATIVECODECOVERAGERAWDATAMESSAGE = _descriptor.Descriptor(
+  name='NativeCodeCoverageRawDataMessage',
+  full_name='android.vts.NativeCodeCoverageRawDataMessage',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='file_path', full_name='android.vts.NativeCodeCoverageRawDataMessage.file_path', index=0,
+      number=1, type=12, cpp_type=9, label=1,
+      has_default_value=False, default_value="",
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='gcno', full_name='android.vts.NativeCodeCoverageRawDataMessage.gcno', index=1,
+      number=11, type=12, cpp_type=9, label=1,
+      has_default_value=False, default_value="",
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  serialized_start=155,
+  serialized_end=222,
+)
+
+
 _FUNCTIONSPECIFICATIONMESSAGE = _descriptor.Descriptor(
   name='FunctionSpecificationMessage',
   full_name='android.vts.FunctionSpecificationMessage',
@@ -300,14 +335,21 @@
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='coverage_data', full_name='android.vts.FunctionSpecificationMessage.coverage_data', index=6,
+      name='processed_coverage_data', full_name='android.vts.FunctionSpecificationMessage.processed_coverage_data', index=6,
       number=201, type=13, cpp_type=3, label=3,
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='parent_path', full_name='android.vts.FunctionSpecificationMessage.parent_path', index=7,
+      name='raw_coverage_data', full_name='android.vts.FunctionSpecificationMessage.raw_coverage_data', index=7,
+      number=202, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='parent_path', full_name='android.vts.FunctionSpecificationMessage.parent_path', index=8,
       number=301, type=12, cpp_type=9, label=1,
       has_default_value=False, default_value="",
       message_type=None, enum_type=None, containing_type=None,
@@ -322,8 +364,8 @@
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=156,
-  serialized_end=520,
+  serialized_start=225,
+  serialized_end=674,
 )
 
 
@@ -476,8 +518,8 @@
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=523,
-  serialized_end=885,
+  serialized_start=677,
+  serialized_end=1039,
 )
 
 
@@ -539,8 +581,8 @@
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=888,
-  serialized_end=1126,
+  serialized_start=1042,
+  serialized_end=1280,
 )
 
 
@@ -595,8 +637,8 @@
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=1129,
-  serialized_end=1338,
+  serialized_start=1283,
+  serialized_end=1492,
 )
 
 
@@ -630,8 +672,8 @@
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=1340,
-  serialized_end=1397,
+  serialized_start=1494,
+  serialized_end=1551,
 )
 
 
@@ -665,8 +707,8 @@
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=1399,
-  serialized_end=1456,
+  serialized_start=1553,
+  serialized_end=1610,
 )
 
 
@@ -798,8 +840,8 @@
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=1459,
-  serialized_end=2161,
+  serialized_start=1613,
+  serialized_end=2315,
 )
 
 
@@ -854,8 +896,8 @@
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=2164,
-  serialized_end=2415,
+  serialized_start=2318,
+  serialized_end=2569,
 )
 
 
@@ -952,14 +994,15 @@
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=2418,
-  serialized_end=2885,
+  serialized_start=2572,
+  serialized_end=3039,
 )
 
 _FUNCTIONSPECIFICATIONMESSAGE.fields_by_name['return_type'].message_type = _VARIABLESPECIFICATIONMESSAGE
 _FUNCTIONSPECIFICATIONMESSAGE.fields_by_name['return_type_hidl'].message_type = _VARIABLESPECIFICATIONMESSAGE
 _FUNCTIONSPECIFICATIONMESSAGE.fields_by_name['arg'].message_type = _VARIABLESPECIFICATIONMESSAGE
 _FUNCTIONSPECIFICATIONMESSAGE.fields_by_name['callflow'].message_type = _CALLFLOWSPECIFICATIONMESSAGE
+_FUNCTIONSPECIFICATIONMESSAGE.fields_by_name['raw_coverage_data'].message_type = _NATIVECODECOVERAGERAWDATAMESSAGE
 _VECTORDATAVALUEMESSAGE.fields_by_name['type'].enum_type = _VARIABLETYPE
 _VECTORDATAVALUEMESSAGE.fields_by_name['value'].message_type = _SCALARDATAVALUEMESSAGE
 _VECTORDATAVALUEMESSAGE.fields_by_name['struct_value'].message_type = _VARIABLESPECIFICATIONMESSAGE
@@ -982,6 +1025,7 @@
 _INTERFACESPECIFICATIONMESSAGE.fields_by_name['attribute'].message_type = _VARIABLESPECIFICATIONMESSAGE
 _INTERFACESPECIFICATIONMESSAGE.fields_by_name['sub_struct'].message_type = _STRUCTSPECIFICATIONMESSAGE
 DESCRIPTOR.message_types_by_name['CallFlowSpecificationMessage'] = _CALLFLOWSPECIFICATIONMESSAGE
+DESCRIPTOR.message_types_by_name['NativeCodeCoverageRawDataMessage'] = _NATIVECODECOVERAGERAWDATAMESSAGE
 DESCRIPTOR.message_types_by_name['FunctionSpecificationMessage'] = _FUNCTIONSPECIFICATIONMESSAGE
 DESCRIPTOR.message_types_by_name['ScalarDataValueMessage'] = _SCALARDATAVALUEMESSAGE
 DESCRIPTOR.message_types_by_name['VectorDataValueMessage'] = _VECTORDATAVALUEMESSAGE
@@ -998,6 +1042,12 @@
 
   # @@protoc_insertion_point(class_scope:android.vts.CallFlowSpecificationMessage)
 
+class NativeCodeCoverageRawDataMessage(_message.Message):
+  __metaclass__ = _reflection.GeneratedProtocolMessageType
+  DESCRIPTOR = _NATIVECODECOVERAGERAWDATAMESSAGE
+
+  # @@protoc_insertion_point(class_scope:android.vts.NativeCodeCoverageRawDataMessage)
+
 class FunctionSpecificationMessage(_message.Message):
   __metaclass__ = _reflection.GeneratedProtocolMessageType
   DESCRIPTOR = _FUNCTIONSPECIFICATIONMESSAGE
diff --git a/runners/host/base_test_with_webdb.py b/runners/host/base_test_with_webdb.py
index 1cc712c..41313d8 100644
--- a/runners/host/base_test_with_webdb.py
+++ b/runners/host/base_test_with_webdb.py
@@ -157,53 +157,7 @@
                     logging.warning("data_file_path not set. PATH=%s",
                                     os.environ["PATH"])
                 else:
-                    for src_file in getattr(self, self.COVERAGE_SRC_FILES):
-                        src_file_name = str(src_file)
-                        logging.info("coverage - src file: %s", src_file_name)
-                        coverage = self._current_test_report_msg.coverage.add()
-
-                        coverage.file_name = src_file_name
-                        abs_path = os.path.join(self.data_file_path,
-                                                src_file_name)
-                        src_file_content = None
-                        if not os.path.exists(abs_path):
-                            logging.error("couldn't find src file %s",
-                                          abs_path)
-                            continue
-                        with open(abs_path, "rb") as f:
-                            src_file_content = f.read()
-
-                        if src_file_name.endswith(".c"):
-                            gcov_file_name = src_file_name.replace(".c",
-                                                                   ".gcno")
-                        elif src_file_name.endswith(".cpp"):
-                            gcov_file_name = src_file_name.replace(".cpp",
-                                                                   ".gcno")
-                        elif src_file_name.endswith(".cc"):
-                            gcov_file_name = src_file_name.replace(".cc",
-                                                                   ".gcno")
-                        else:
-                            logging.error("unsupported source file type %s",
-                                          src_file_name)
-                            continue
-
-                        abs_path = os.path.join(self.data_file_path,
-                                                gcov_file_name)
-                        gcov_file_content = None
-                        if not os.path.exists(abs_path):
-                            logging.error("couldn't find gcno file %s",
-                                          abs_path)
-                            continue
-                        with open(abs_path, "rb") as f:
-                            gcov_file_content = f.read()
-
-                        basic_block_id_list = getattr(
-                            self, self.COVERAGE_ATTRIBUTE, [])
-                        if not basic_block_id_list:
-                            logging.error("no basic block info found")
-                        coverage.html = GCNO.GenerateCoverageReport(
-                            src_file_content, gcov_file_content,
-                            basic_block_id_list)
+                    self.ProcessCoverageData()
             else:
                 logging.info("coverage - no coverage src file specified")
         return super(BaseTestWithWebDbClass, self)._tearDownTest(test_name)
@@ -303,16 +257,71 @@
         self._profiling[name].end_timestamp = self.GetTimestamp()
         return True
 
-    def AddCoverageData(self, coverage_data):
-      """Adds the given coverage to the class-level list attribute.
+    def SetCoverageData(self, raw_coverage_data):
+      """Sets the given coverage data to the class-level list attribute.
 
-      Currently, only basic block ID is supported.
+      In case of gcda, the file is always appended so the last one alone is
+      sufficient for coverage visualization.
 
       Args:
-          coverage_data: a list of strings, each string is for coverage data
-                         (e.g., basic block ID or control flow event ID).
+          raw_coverage_data: a list of NativeCodeCoverageRawDataMessage.
       """
-      logging.info("AddCoverageData %s", coverage_data)
-      coverage_data_list = getattr(self, self.COVERAGE_ATTRIBUTE)
-      if coverage_data not in coverage_data_list:
-          coverage_data_list.append(coverage_data)
+      logging.info("AddCoverageData %s", raw_coverage_data)
+      setattr(self, self.COVERAGE_ATTRIBUTE, raw_coverage_data)
+
+    def ProcessCoverageData(self):
+        """Process reported coverage data and store the produced html(s).
+
+        Returns:
+            True if successful, False otherwise.
+        """
+        coverage_data_list = getattr(
+            self, self.COVERAGE_ATTRIBUTE, [])
+        if not coverage_data_list:
+            logging.error("no coverage data found")
+            return False
+        for src_file in getattr(self, self.COVERAGE_SRC_FILES):
+            src_file_name = str(src_file)
+            logging.info("coverage - src file: %s", src_file_name)
+            coverage = self._current_test_report_msg.coverage.add()
+
+            coverage.file_name = src_file_name
+            abs_path = os.path.join(self.data_file_path,
+                                    src_file_name)
+            src_file_content = None
+            if not os.path.exists(abs_path):
+                logging.error("couldn't find src file %s", abs_path)
+                return False
+            with open(abs_path, "rb") as f:
+                src_file_content = f.read()
+
+            if src_file_name.endswith(".c"):
+                gcno_file_name = src_file_name.replace(".c", ".gcno")
+                gcda_file_name = src_file_name.replace(".c", ".gcda")
+            elif src_file_name.endswith(".cpp"):
+                gcno_file_name = src_file_name.replace(".cpp", ".gcno")
+                gcda_file_name = src_file_name.replace(".cpp", ".gcda")
+            elif src_file_name.endswith(".cc"):
+                gcno_file_name = src_file_name.replace(".cc", ".gcno")
+                gcda_file_name = src_file_name.replace(".cc", ".gcda")
+            else:
+                logging.error("unsupported source file type %s",
+                              src_file_name)
+                return False
+
+            abs_path = os.path.join(self.data_file_path, gcno_file_name)
+            gcno_file_content = None
+            if not os.path.exists(abs_path):
+                logging.error("couldn't find gcno file %s", abs_path)
+                return False
+            with open(abs_path, "rb") as f:
+                gcno_file_content = f.read()
+
+            if coverage_data_list:
+                for coverage_data in coverage_data_list:
+                    # TODO: consider path and do exact matching
+                    if coverage_data.file_path.contains(gcda_file_name):
+                        coverage.html = GCNO.GenerateCoverageReport(
+                            src_file_name, src_file_content,
+                            gcno_file_content, coverage_data.gcda)
+                        return True
diff --git a/sysfuzzer/common/fuzz_tester/FuzzerBase.cpp b/sysfuzzer/common/fuzz_tester/FuzzerBase.cpp
index 6a09b86..f533a9d 100644
--- a/sysfuzzer/common/fuzz_tester/FuzzerBase.cpp
+++ b/sysfuzzer/common/fuzz_tester/FuzzerBase.cpp
@@ -24,7 +24,9 @@
 #include <sys/types.h>
 #include <unistd.h>
 
+#include <fstream>
 #include <iostream>
+#include <sstream>
 #include <string>
 #include <vector>
 
@@ -449,21 +451,20 @@
   cout << __func__ << ":" << __LINE__ << " end" << endl;
 }
 
-vector<unsigned>* FuzzerBase::FunctionCallEnd() {
+bool FuzzerBase::FunctionCallEnd(FunctionSpecificationMessage* msg) {
   cout << __FUNCTION__ << ": gcov flush " << endl;
-  std::vector<unsigned>* result = NULL;
   cout << __func__ << endl;
 #if USE_GCOV
   target_loader_.GcovFlush();
   // find the file.
   if (!gcov_output_basepath_) {
     cerr << __FUNCTION__ << ": no gcov basepath set" << endl;
-    return NULL;
+    return false;
   }
   DIR* srcdir = opendir(gcov_output_basepath_);
   if (!srcdir) {
     cerr << __func__ << " couln't open " << gcov_output_basepath_ << endl;
-    return NULL;
+    return false;
   }
 
   int dir_count = 0;
@@ -486,10 +487,27 @@
         if (!buffer) {
           cerr << __FUNCTION__ << ": OOM" << endl;
           closedir(srcdir);
-          return NULL;
+          return false;
         }
         sprintf(buffer, "%s/%s", gcov_output_basepath_, dent->d_name);
-        result = android::vts::parse_gcda_file(buffer);
+
+        vector<unsigned>* processed_data = android::vts::parse_gcda_file(buffer);
+        for (const auto& data : *processed_data) {
+          msg->mutable_processed_coverage_data()->Add(data);
+        }
+
+        ifstream gcda_file(buffer);
+        if (gcda_file.is_open()) {
+          cerr << "Unable to open a gcda file. " << buffer << endl;
+        } else {
+          stringstream str_stream;
+          str_stream << gcda_file.rdbuf();
+          gcda_file.close();
+          NativeCodeCoverageRawDataMessage* raw_msg =
+              msg->mutable_raw_coverage_data()->Add();
+          raw_msg->set_file_path(dent->d_name);
+          raw_msg->set_gcda(str_stream.str());
+        }
 #if USE_GCOV_DEBUG
         if (result) {
           for (unsigned int index = 0; index < result->size(); index++) {
@@ -504,7 +522,7 @@
   }
   closedir(srcdir);
 #endif
-  return result;
+  return true;
 }
 
 }  // namespace vts
diff --git a/sysfuzzer/common/fuzz_tester/FuzzerBase.h b/sysfuzzer/common/fuzz_tester/FuzzerBase.h
index 9924204..95a3f69 100644
--- a/sysfuzzer/common/fuzz_tester/FuzzerBase.h
+++ b/sysfuzzer/common/fuzz_tester/FuzzerBase.h
@@ -53,9 +53,8 @@
   // Called before calling a target function.
   void FunctionCallBegin();
 
-  // Called after calling a target function. Returns a vector which contains
-  // the code coverage info.
-  vector<unsigned>* FunctionCallEnd();
+  // Called after calling a target function. Fills in the code coverage info.
+  bool FunctionCallEnd(FunctionSpecificationMessage* msg);
 
  protected:
   // a pointer to a HAL data structure of the loaded component.
diff --git a/sysfuzzer/common/specification_parser/SpecificationBuilder.cpp b/sysfuzzer/common/specification_parser/SpecificationBuilder.cpp
index 5709a48..52f5fd7 100644
--- a/sysfuzzer/common/specification_parser/SpecificationBuilder.cpp
+++ b/sysfuzzer/common/specification_parser/SpecificationBuilder.cpp
@@ -245,12 +245,7 @@
   cout << __func__ << ": called" << endl;
 
   // set coverage data.
-  vector<unsigned>* coverage = func_fuzzer->FunctionCallEnd();
-  if (coverage && coverage->size() > 0) {
-    for (unsigned int index = 0; index < coverage->size(); index++) {
-      func_msg->mutable_coverage_data()->Add(coverage->at(index));
-    }
-  }
+  func_fuzzer->FunctionCallEnd(func_msg);
 
   if (func_msg->return_type().type() == TYPE_PREDEFINED) {
     // TODO: actually handle this case.
diff --git a/testcases/fuzz/hal_light/conventional/LightFuzzTest.py b/testcases/fuzz/hal_light/conventional/LightFuzzTest.py
index 78bc685..1f82160 100644
--- a/testcases/fuzz/hal_light/conventional/LightFuzzTest.py
+++ b/testcases/fuzz/hal_light/conventional/LightFuzzTest.py
@@ -91,10 +91,10 @@
             for gene in genes:
                 logging.debug("Gene %d", index)
                 result = self.dut.hal.light.set_light(None, gene)
-                if len(result.coverage_data) > 0:
-                    logging.info("coverage: %s", result.coverage_data)
+                if len(result.processed_coverage_data) > 0:
+                    logging.info("coverage: %s", result.processed_coverage_data)
                     gene_coverage = []
-                    for coverage_data in result.coverage_data:
+                    for coverage_data in result.processed_coverage_data:
                         gene_coverage.append(coverage_data)
                     coverages.append(gene_coverage)
                 index += 1
diff --git a/testcases/fuzz/hal_light/conventional_standalone/StandaloneLightFuzzTest.py b/testcases/fuzz/hal_light/conventional_standalone/StandaloneLightFuzzTest.py
index ebb5593..560be8d 100644
--- a/testcases/fuzz/hal_light/conventional_standalone/StandaloneLightFuzzTest.py
+++ b/testcases/fuzz/hal_light/conventional_standalone/StandaloneLightFuzzTest.py
@@ -15,6 +15,7 @@
 # limitations under the License.
 #
 
+import copy
 import logging
 import random
 import time
@@ -84,6 +85,7 @@
             flashOffMs=200,
             brightnessMode=self.dut.hal.light.BRIGHTNESS_MODE_USER)
 
+        last_coverage_data = None
         for iteration in range(self.iteartion_count):
             index = 0
             logging.info("whitebox iteration %d", iteration)
@@ -91,18 +93,20 @@
             for gene in genes:
                 logging.debug("Gene %d", index)
                 result = self.dut.hal.light.set_light(None, gene)
-                if len(result.coverage_data) > 0:
+                if len(result.processed_coverage_data) > 0:
                     gene_coverage = []
-                    logging.info("coverage: %s", result.coverage_data)
-                    for coverage_data in result.coverage_data:
-                        gene_coverage.append(coverage_data)
-                        self.AddCoverageData(coverage_data)
+                    logging.info("coverage: %s", result.processed_coverage_data)
+                    for processed_coverage_data in result.processed_coverage_data:
+                        gene_coverage.append(processed_coverage_data)
                     coverages.append(gene_coverage)
+                    last_coverage_data = copy.copy(result.raw_coverage_data)
                 index += 1
             evolution = GenePool.Evolution()
             genes = evolution.Evolve(genes,
                                      self.dut.hal.light.light_state_t_fuzz,
                                      coverages=coverages)
+        if len(last_coverage_data) > 0:
+            self.SetCoverageData(last_coverage_data)
 
 
 if __name__ == "__main__":
diff --git a/testcases/kernel/ltp/KernelLtpTestCase.py b/testcases/kernel/ltp/KernelLtpTestCase.py
index a660001..bf1f079 100644
--- a/testcases/kernel/ltp/KernelLtpTestCase.py
+++ b/testcases/kernel/ltp/KernelLtpTestCase.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3.4
 #
 # Copyright (C) 2016 The Android Open Source Project
 #
@@ -17,7 +18,6 @@
 import os
 import logging
 import copy
-from enum import Enum
 
 from vts.runners.host import const
 from vts.testcases.kernel.ltp import KernelLtpTestCaseRequirements
@@ -27,7 +27,7 @@
 LTPTMP = "/data/local/tmp/ltp/temp"
 
 
-class RequirementState(Enum):
+class RequirementState(object):
     """Enum for test case requirement check state
 
     Attributes:
diff --git a/utils/python/coverage/GCNO.py b/utils/python/coverage/GCNO.py
index 197ef7d..93ba478 100644
--- a/utils/python/coverage/GCNO.py
+++ b/utils/python/coverage/GCNO.py
@@ -292,14 +292,30 @@
         return Parser(stream).parse()
 
 
-def GenerateCoverageReport(src_file_content, gcov_file_content, basicblock_id_list):
-    """Returns the produced html file contents."""
+def GenerateCoverageReport(src_file_name, src_file_content, gcov_file_content,
+                           gcda_file_content):
+    """Returns the produced html file contents.
+
+    This merges the given GCDA files and produces merged coverage html file for
+    each source file.
+
+    Args:
+        src_file_name: string, the source file name.
+        src_file_content: string, the C/C++ source file content.
+        gcov_file_content: string, the raw gcov binary file content.
+        gcda_file_content: string, the raw gcda binary file content.
+
+    Returns:
+        the coverage HTML produced for 'src_file_name'.
+    """
     logging.info("GenerateCoverageReport: src_file_content %s",
                  src_file_content)
-    logging.info("GenerateCoverageReport: gcov_file_content %s",
-                 gcov_file_content)
-    logging.info("GenerateCoverageReport: basicblock_id_list %s",
-                 basicblock_id_list)
+    if gcov_file_content:
+        logging.info("GenerateCoverageReport: gcov_file_content %d bytes",
+                     len(gcov_file_content))
+    if gcda_file_content:
+        logging.info("GenerateCoverageReport: gcda_file_content %d bytes",
+                     len(gcda_file_content))
     return "<table border=0><tr><td>Code coverage will show up at here</table>"
 
 
diff --git a/web/dashboard/appengine/servlet/src/main/java/com/google/android/vts/proto/VtsReportMessage.java b/web/dashboard/appengine/servlet/src/main/java/com/google/android/vts/proto/VtsReportMessage.java
index 208c8d4..ca7fb80 100644
--- a/web/dashboard/appengine/servlet/src/main/java/com/google/android/vts/proto/VtsReportMessage.java
+++ b/web/dashboard/appengine/servlet/src/main/java/com/google/android/vts/proto/VtsReportMessage.java
@@ -2353,7 +2353,7 @@
      * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
      *
      * <pre>
-     * coverage reports
+     * coverage report per file
      * </pre>
      */
     java.util.List<com.google.android.vts.proto.VtsReportMessage.CoverageReportMessage> 
@@ -2362,7 +2362,7 @@
      * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
      *
      * <pre>
-     * coverage reports
+     * coverage report per file
      * </pre>
      */
     com.google.android.vts.proto.VtsReportMessage.CoverageReportMessage getCoverage(int index);
@@ -2370,7 +2370,7 @@
      * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
      *
      * <pre>
-     * coverage reports
+     * coverage report per file
      * </pre>
      */
     int getCoverageCount();
@@ -2378,7 +2378,7 @@
      * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
      *
      * <pre>
-     * coverage reports
+     * coverage report per file
      * </pre>
      */
     java.util.List<? extends com.google.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder> 
@@ -2387,7 +2387,7 @@
      * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
      *
      * <pre>
-     * coverage reports
+     * coverage report per file
      * </pre>
      */
     com.google.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder getCoverageOrBuilder(
@@ -2620,7 +2620,7 @@
      * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
      *
      * <pre>
-     * coverage reports
+     * coverage report per file
      * </pre>
      */
     public java.util.List<com.google.android.vts.proto.VtsReportMessage.CoverageReportMessage> getCoverageList() {
@@ -2630,7 +2630,7 @@
      * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
      *
      * <pre>
-     * coverage reports
+     * coverage report per file
      * </pre>
      */
     public java.util.List<? extends com.google.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder> 
@@ -2641,7 +2641,7 @@
      * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
      *
      * <pre>
-     * coverage reports
+     * coverage report per file
      * </pre>
      */
     public int getCoverageCount() {
@@ -2651,7 +2651,7 @@
      * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
      *
      * <pre>
-     * coverage reports
+     * coverage report per file
      * </pre>
      */
     public com.google.android.vts.proto.VtsReportMessage.CoverageReportMessage getCoverage(int index) {
@@ -2661,7 +2661,7 @@
      * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
      *
      * <pre>
-     * coverage reports
+     * coverage report per file
      * </pre>
      */
     public com.google.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder getCoverageOrBuilder(
@@ -3204,7 +3204,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public java.util.List<com.google.android.vts.proto.VtsReportMessage.CoverageReportMessage> getCoverageList() {
@@ -3218,7 +3218,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public int getCoverageCount() {
@@ -3232,7 +3232,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public com.google.android.vts.proto.VtsReportMessage.CoverageReportMessage getCoverage(int index) {
@@ -3246,7 +3246,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public Builder setCoverage(
@@ -3267,7 +3267,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public Builder setCoverage(
@@ -3285,7 +3285,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public Builder addCoverage(com.google.android.vts.proto.VtsReportMessage.CoverageReportMessage value) {
@@ -3305,7 +3305,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public Builder addCoverage(
@@ -3326,7 +3326,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public Builder addCoverage(
@@ -3344,7 +3344,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public Builder addCoverage(
@@ -3362,7 +3362,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public Builder addAllCoverage(
@@ -3380,7 +3380,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public Builder clearCoverage() {
@@ -3397,7 +3397,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public Builder removeCoverage(int index) {
@@ -3414,7 +3414,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public com.google.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder getCoverageBuilder(
@@ -3425,7 +3425,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public com.google.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder getCoverageOrBuilder(
@@ -3439,7 +3439,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public java.util.List<? extends com.google.android.vts.proto.VtsReportMessage.CoverageReportMessageOrBuilder> 
@@ -3454,7 +3454,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public com.google.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder addCoverageBuilder() {
@@ -3465,7 +3465,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public com.google.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder addCoverageBuilder(
@@ -3477,7 +3477,7 @@
        * <code>repeated .android.vts.CoverageReportMessage coverage = 31;</code>
        *
        * <pre>
-       * coverage reports
+       * coverage report per file
        * </pre>
        */
       public java.util.List<com.google.android.vts.proto.VtsReportMessage.CoverageReportMessage.Builder> 
@@ -4146,27 +4146,81 @@
   public interface CoverageReportMessageOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
 
-    // optional bytes file_name = 1;
+    // optional bytes dir_path = 1;
     /**
-     * <code>optional bytes file_name = 1;</code>
+     * <code>optional bytes dir_path = 1;</code>
      *
      * <pre>
-     * source or object file name.
+     * the directory path of a source file.
+     * </pre>
+     */
+    boolean hasDirPath();
+    /**
+     * <code>optional bytes dir_path = 1;</code>
+     *
+     * <pre>
+     * the directory path of a source file.
+     * </pre>
+     */
+    com.google.protobuf.ByteString getDirPath();
+
+    // optional bytes file_name = 2;
+    /**
+     * <code>optional bytes file_name = 2;</code>
+     *
+     * <pre>
+     * the name of the source file.
      * </pre>
      */
     boolean hasFileName();
     /**
-     * <code>optional bytes file_name = 1;</code>
+     * <code>optional bytes file_name = 2;</code>
      *
      * <pre>
-     * source or object file name.
+     * the name of the source file.
      * </pre>
      */
     com.google.protobuf.ByteString getFileName();
 
-    // optional bytes gcno = 11;
+    // optional bytes html = 3;
     /**
-     * <code>optional bytes gcno = 11;</code>
+     * <code>optional bytes html = 3;</code>
+     *
+     * <pre>
+     * produced html report.
+     * </pre>
+     */
+    boolean hasHtml();
+    /**
+     * <code>optional bytes html = 3;</code>
+     *
+     * <pre>
+     * produced html report.
+     * </pre>
+     */
+    com.google.protobuf.ByteString getHtml();
+
+    // optional bytes source_code = 11;
+    /**
+     * <code>optional bytes source_code = 11;</code>
+     *
+     * <pre>
+     * the source file content.
+     * </pre>
+     */
+    boolean hasSourceCode();
+    /**
+     * <code>optional bytes source_code = 11;</code>
+     *
+     * <pre>
+     * the source file content.
+     * </pre>
+     */
+    com.google.protobuf.ByteString getSourceCode();
+
+    // optional bytes gcno = 21;
+    /**
+     * <code>optional bytes gcno = 21;</code>
      *
      * <pre>
      * gcov produced data files.
@@ -4174,7 +4228,7 @@
      */
     boolean hasGcno();
     /**
-     * <code>optional bytes gcno = 11;</code>
+     * <code>optional bytes gcno = 21;</code>
      *
      * <pre>
      * gcov produced data files.
@@ -4182,19 +4236,19 @@
      */
     com.google.protobuf.ByteString getGcno();
 
-    // optional bytes gcda = 12;
+    // optional bytes gcda = 22;
     /**
-     * <code>optional bytes gcda = 12;</code>
+     * <code>optional bytes gcda = 22;</code>
      */
     boolean hasGcda();
     /**
-     * <code>optional bytes gcda = 12;</code>
+     * <code>optional bytes gcda = 22;</code>
      */
     com.google.protobuf.ByteString getGcda();
 
-    // repeated bytes data = 101;
+    // repeated bytes data = 31;
     /**
-     * <code>repeated bytes data = 101;</code>
+     * <code>repeated bytes data = 31;</code>
      *
      * <pre>
      * measured coverage data.
@@ -4202,7 +4256,7 @@
      */
     java.util.List<com.google.protobuf.ByteString> getDataList();
     /**
-     * <code>repeated bytes data = 101;</code>
+     * <code>repeated bytes data = 31;</code>
      *
      * <pre>
      * measured coverage data.
@@ -4210,13 +4264,31 @@
      */
     int getDataCount();
     /**
-     * <code>repeated bytes data = 101;</code>
+     * <code>repeated bytes data = 31;</code>
      *
      * <pre>
      * measured coverage data.
      * </pre>
      */
     com.google.protobuf.ByteString getData(int index);
+
+    // optional bytes gcov = 32;
+    /**
+     * <code>optional bytes gcov = 32;</code>
+     *
+     * <pre>
+     * generated gcov data file.
+     * </pre>
+     */
+    boolean hasGcov();
+    /**
+     * <code>optional bytes gcov = 32;</code>
+     *
+     * <pre>
+     * generated gcov data file.
+     * </pre>
+     */
+    com.google.protobuf.ByteString getGcov();
   }
   /**
    * Protobuf type {@code android.vts.CoverageReportMessage}
@@ -4275,27 +4347,47 @@
             }
             case 10: {
               bitField0_ |= 0x00000001;
+              dirPath_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              bitField0_ |= 0x00000002;
               fileName_ = input.readBytes();
               break;
             }
+            case 26: {
+              bitField0_ |= 0x00000004;
+              html_ = input.readBytes();
+              break;
+            }
             case 90: {
-              bitField0_ |= 0x00000002;
+              bitField0_ |= 0x00000008;
+              sourceCode_ = input.readBytes();
+              break;
+            }
+            case 170: {
+              bitField0_ |= 0x00000010;
               gcno_ = input.readBytes();
               break;
             }
-            case 98: {
-              bitField0_ |= 0x00000004;
+            case 178: {
+              bitField0_ |= 0x00000020;
               gcda_ = input.readBytes();
               break;
             }
-            case 810: {
-              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
+            case 250: {
+              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                 data_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
-                mutable_bitField0_ |= 0x00000008;
+                mutable_bitField0_ |= 0x00000040;
               }
               data_.add(input.readBytes());
               break;
             }
+            case 258: {
+              bitField0_ |= 0x00000040;
+              gcov_ = input.readBytes();
+              break;
+            }
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
@@ -4304,7 +4396,7 @@
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e.getMessage()).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
+        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
           data_ = java.util.Collections.unmodifiableList(data_);
         }
         this.unknownFields = unknownFields.build();
@@ -4339,45 +4431,117 @@
     }
 
     private int bitField0_;
-    // optional bytes file_name = 1;
-    public static final int FILE_NAME_FIELD_NUMBER = 1;
-    private com.google.protobuf.ByteString fileName_;
+    // optional bytes dir_path = 1;
+    public static final int DIR_PATH_FIELD_NUMBER = 1;
+    private com.google.protobuf.ByteString dirPath_;
     /**
-     * <code>optional bytes file_name = 1;</code>
+     * <code>optional bytes dir_path = 1;</code>
      *
      * <pre>
-     * source or object file name.
+     * the directory path of a source file.
      * </pre>
      */
-    public boolean hasFileName() {
+    public boolean hasDirPath() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
     /**
-     * <code>optional bytes file_name = 1;</code>
+     * <code>optional bytes dir_path = 1;</code>
      *
      * <pre>
-     * source or object file name.
+     * the directory path of a source file.
+     * </pre>
+     */
+    public com.google.protobuf.ByteString getDirPath() {
+      return dirPath_;
+    }
+
+    // optional bytes file_name = 2;
+    public static final int FILE_NAME_FIELD_NUMBER = 2;
+    private com.google.protobuf.ByteString fileName_;
+    /**
+     * <code>optional bytes file_name = 2;</code>
+     *
+     * <pre>
+     * the name of the source file.
+     * </pre>
+     */
+    public boolean hasFileName() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional bytes file_name = 2;</code>
+     *
+     * <pre>
+     * the name of the source file.
      * </pre>
      */
     public com.google.protobuf.ByteString getFileName() {
       return fileName_;
     }
 
-    // optional bytes gcno = 11;
-    public static final int GCNO_FIELD_NUMBER = 11;
+    // optional bytes html = 3;
+    public static final int HTML_FIELD_NUMBER = 3;
+    private com.google.protobuf.ByteString html_;
+    /**
+     * <code>optional bytes html = 3;</code>
+     *
+     * <pre>
+     * produced html report.
+     * </pre>
+     */
+    public boolean hasHtml() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>optional bytes html = 3;</code>
+     *
+     * <pre>
+     * produced html report.
+     * </pre>
+     */
+    public com.google.protobuf.ByteString getHtml() {
+      return html_;
+    }
+
+    // optional bytes source_code = 11;
+    public static final int SOURCE_CODE_FIELD_NUMBER = 11;
+    private com.google.protobuf.ByteString sourceCode_;
+    /**
+     * <code>optional bytes source_code = 11;</code>
+     *
+     * <pre>
+     * the source file content.
+     * </pre>
+     */
+    public boolean hasSourceCode() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    /**
+     * <code>optional bytes source_code = 11;</code>
+     *
+     * <pre>
+     * the source file content.
+     * </pre>
+     */
+    public com.google.protobuf.ByteString getSourceCode() {
+      return sourceCode_;
+    }
+
+    // optional bytes gcno = 21;
+    public static final int GCNO_FIELD_NUMBER = 21;
     private com.google.protobuf.ByteString gcno_;
     /**
-     * <code>optional bytes gcno = 11;</code>
+     * <code>optional bytes gcno = 21;</code>
      *
      * <pre>
      * gcov produced data files.
      * </pre>
      */
     public boolean hasGcno() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
+      return ((bitField0_ & 0x00000010) == 0x00000010);
     }
     /**
-     * <code>optional bytes gcno = 11;</code>
+     * <code>optional bytes gcno = 21;</code>
      *
      * <pre>
      * gcov produced data files.
@@ -4387,27 +4551,27 @@
       return gcno_;
     }
 
-    // optional bytes gcda = 12;
-    public static final int GCDA_FIELD_NUMBER = 12;
+    // optional bytes gcda = 22;
+    public static final int GCDA_FIELD_NUMBER = 22;
     private com.google.protobuf.ByteString gcda_;
     /**
-     * <code>optional bytes gcda = 12;</code>
+     * <code>optional bytes gcda = 22;</code>
      */
     public boolean hasGcda() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
+      return ((bitField0_ & 0x00000020) == 0x00000020);
     }
     /**
-     * <code>optional bytes gcda = 12;</code>
+     * <code>optional bytes gcda = 22;</code>
      */
     public com.google.protobuf.ByteString getGcda() {
       return gcda_;
     }
 
-    // repeated bytes data = 101;
-    public static final int DATA_FIELD_NUMBER = 101;
+    // repeated bytes data = 31;
+    public static final int DATA_FIELD_NUMBER = 31;
     private java.util.List<com.google.protobuf.ByteString> data_;
     /**
-     * <code>repeated bytes data = 101;</code>
+     * <code>repeated bytes data = 31;</code>
      *
      * <pre>
      * measured coverage data.
@@ -4418,7 +4582,7 @@
       return data_;
     }
     /**
-     * <code>repeated bytes data = 101;</code>
+     * <code>repeated bytes data = 31;</code>
      *
      * <pre>
      * measured coverage data.
@@ -4428,7 +4592,7 @@
       return data_.size();
     }
     /**
-     * <code>repeated bytes data = 101;</code>
+     * <code>repeated bytes data = 31;</code>
      *
      * <pre>
      * measured coverage data.
@@ -4438,11 +4602,39 @@
       return data_.get(index);
     }
 
+    // optional bytes gcov = 32;
+    public static final int GCOV_FIELD_NUMBER = 32;
+    private com.google.protobuf.ByteString gcov_;
+    /**
+     * <code>optional bytes gcov = 32;</code>
+     *
+     * <pre>
+     * generated gcov data file.
+     * </pre>
+     */
+    public boolean hasGcov() {
+      return ((bitField0_ & 0x00000040) == 0x00000040);
+    }
+    /**
+     * <code>optional bytes gcov = 32;</code>
+     *
+     * <pre>
+     * generated gcov data file.
+     * </pre>
+     */
+    public com.google.protobuf.ByteString getGcov() {
+      return gcov_;
+    }
+
     private void initFields() {
+      dirPath_ = com.google.protobuf.ByteString.EMPTY;
       fileName_ = com.google.protobuf.ByteString.EMPTY;
+      html_ = com.google.protobuf.ByteString.EMPTY;
+      sourceCode_ = com.google.protobuf.ByteString.EMPTY;
       gcno_ = com.google.protobuf.ByteString.EMPTY;
       gcda_ = com.google.protobuf.ByteString.EMPTY;
       data_ = java.util.Collections.emptyList();
+      gcov_ = com.google.protobuf.ByteString.EMPTY;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -4457,16 +4649,28 @@
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, fileName_);
+        output.writeBytes(1, dirPath_);
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBytes(11, gcno_);
+        output.writeBytes(2, fileName_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeBytes(12, gcda_);
+        output.writeBytes(3, html_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeBytes(11, sourceCode_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeBytes(21, gcno_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeBytes(22, gcda_);
       }
       for (int i = 0; i < data_.size(); i++) {
-        output.writeBytes(101, data_.get(i));
+        output.writeBytes(31, data_.get(i));
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        output.writeBytes(32, gcov_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -4479,15 +4683,27 @@
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, fileName_);
+          .computeBytesSize(1, dirPath_);
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(11, gcno_);
+          .computeBytesSize(2, fileName_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(12, gcda_);
+          .computeBytesSize(3, html_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(11, sourceCode_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(21, gcno_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(22, gcda_);
       }
       {
         int dataSize = 0;
@@ -4498,6 +4714,10 @@
         size += dataSize;
         size += 2 * getDataList().size();
       }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(32, gcov_);
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -4618,14 +4838,22 @@
 
       public Builder clear() {
         super.clear();
-        fileName_ = com.google.protobuf.ByteString.EMPTY;
+        dirPath_ = com.google.protobuf.ByteString.EMPTY;
         bitField0_ = (bitField0_ & ~0x00000001);
-        gcno_ = com.google.protobuf.ByteString.EMPTY;
+        fileName_ = com.google.protobuf.ByteString.EMPTY;
         bitField0_ = (bitField0_ & ~0x00000002);
-        gcda_ = com.google.protobuf.ByteString.EMPTY;
+        html_ = com.google.protobuf.ByteString.EMPTY;
         bitField0_ = (bitField0_ & ~0x00000004);
-        data_ = java.util.Collections.emptyList();
+        sourceCode_ = com.google.protobuf.ByteString.EMPTY;
         bitField0_ = (bitField0_ & ~0x00000008);
+        gcno_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        gcda_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000020);
+        data_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000040);
+        gcov_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000080);
         return this;
       }
 
@@ -4657,20 +4885,36 @@
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.fileName_ = fileName_;
+        result.dirPath_ = dirPath_;
         if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
           to_bitField0_ |= 0x00000002;
         }
-        result.gcno_ = gcno_;
+        result.fileName_ = fileName_;
         if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
           to_bitField0_ |= 0x00000004;
         }
+        result.html_ = html_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.sourceCode_ = sourceCode_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.gcno_ = gcno_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000020;
+        }
         result.gcda_ = gcda_;
-        if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        if (((bitField0_ & 0x00000040) == 0x00000040)) {
           data_ = java.util.Collections.unmodifiableList(data_);
-          bitField0_ = (bitField0_ & ~0x00000008);
+          bitField0_ = (bitField0_ & ~0x00000040);
         }
         result.data_ = data_;
+        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
+          to_bitField0_ |= 0x00000040;
+        }
+        result.gcov_ = gcov_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -4687,9 +4931,18 @@
 
       public Builder mergeFrom(com.google.android.vts.proto.VtsReportMessage.CoverageReportMessage other) {
         if (other == com.google.android.vts.proto.VtsReportMessage.CoverageReportMessage.getDefaultInstance()) return this;
+        if (other.hasDirPath()) {
+          setDirPath(other.getDirPath());
+        }
         if (other.hasFileName()) {
           setFileName(other.getFileName());
         }
+        if (other.hasHtml()) {
+          setHtml(other.getHtml());
+        }
+        if (other.hasSourceCode()) {
+          setSourceCode(other.getSourceCode());
+        }
         if (other.hasGcno()) {
           setGcno(other.getGcno());
         }
@@ -4699,13 +4952,16 @@
         if (!other.data_.isEmpty()) {
           if (data_.isEmpty()) {
             data_ = other.data_;
-            bitField0_ = (bitField0_ & ~0x00000008);
+            bitField0_ = (bitField0_ & ~0x00000040);
           } else {
             ensureDataIsMutable();
             data_.addAll(other.data_);
           }
           onChanged();
         }
+        if (other.hasGcov()) {
+          setGcov(other.getGcov());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -4733,72 +4989,228 @@
       }
       private int bitField0_;
 
-      // optional bytes file_name = 1;
-      private com.google.protobuf.ByteString fileName_ = com.google.protobuf.ByteString.EMPTY;
+      // optional bytes dir_path = 1;
+      private com.google.protobuf.ByteString dirPath_ = com.google.protobuf.ByteString.EMPTY;
       /**
-       * <code>optional bytes file_name = 1;</code>
+       * <code>optional bytes dir_path = 1;</code>
        *
        * <pre>
-       * source or object file name.
+       * the directory path of a source file.
        * </pre>
        */
-      public boolean hasFileName() {
+      public boolean hasDirPath() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
       /**
-       * <code>optional bytes file_name = 1;</code>
+       * <code>optional bytes dir_path = 1;</code>
        *
        * <pre>
-       * source or object file name.
+       * the directory path of a source file.
+       * </pre>
+       */
+      public com.google.protobuf.ByteString getDirPath() {
+        return dirPath_;
+      }
+      /**
+       * <code>optional bytes dir_path = 1;</code>
+       *
+       * <pre>
+       * the directory path of a source file.
+       * </pre>
+       */
+      public Builder setDirPath(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        dirPath_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional bytes dir_path = 1;</code>
+       *
+       * <pre>
+       * the directory path of a source file.
+       * </pre>
+       */
+      public Builder clearDirPath() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        dirPath_ = getDefaultInstance().getDirPath();
+        onChanged();
+        return this;
+      }
+
+      // optional bytes file_name = 2;
+      private com.google.protobuf.ByteString fileName_ = com.google.protobuf.ByteString.EMPTY;
+      /**
+       * <code>optional bytes file_name = 2;</code>
+       *
+       * <pre>
+       * the name of the source file.
+       * </pre>
+       */
+      public boolean hasFileName() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      /**
+       * <code>optional bytes file_name = 2;</code>
+       *
+       * <pre>
+       * the name of the source file.
        * </pre>
        */
       public com.google.protobuf.ByteString getFileName() {
         return fileName_;
       }
       /**
-       * <code>optional bytes file_name = 1;</code>
+       * <code>optional bytes file_name = 2;</code>
        *
        * <pre>
-       * source or object file name.
+       * the name of the source file.
        * </pre>
        */
       public Builder setFileName(com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
-  bitField0_ |= 0x00000001;
+  bitField0_ |= 0x00000002;
         fileName_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>optional bytes file_name = 1;</code>
+       * <code>optional bytes file_name = 2;</code>
        *
        * <pre>
-       * source or object file name.
+       * the name of the source file.
        * </pre>
        */
       public Builder clearFileName() {
-        bitField0_ = (bitField0_ & ~0x00000001);
+        bitField0_ = (bitField0_ & ~0x00000002);
         fileName_ = getDefaultInstance().getFileName();
         onChanged();
         return this;
       }
 
-      // optional bytes gcno = 11;
+      // optional bytes html = 3;
+      private com.google.protobuf.ByteString html_ = com.google.protobuf.ByteString.EMPTY;
+      /**
+       * <code>optional bytes html = 3;</code>
+       *
+       * <pre>
+       * produced html report.
+       * </pre>
+       */
+      public boolean hasHtml() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      /**
+       * <code>optional bytes html = 3;</code>
+       *
+       * <pre>
+       * produced html report.
+       * </pre>
+       */
+      public com.google.protobuf.ByteString getHtml() {
+        return html_;
+      }
+      /**
+       * <code>optional bytes html = 3;</code>
+       *
+       * <pre>
+       * produced html report.
+       * </pre>
+       */
+      public Builder setHtml(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000004;
+        html_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional bytes html = 3;</code>
+       *
+       * <pre>
+       * produced html report.
+       * </pre>
+       */
+      public Builder clearHtml() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        html_ = getDefaultInstance().getHtml();
+        onChanged();
+        return this;
+      }
+
+      // optional bytes source_code = 11;
+      private com.google.protobuf.ByteString sourceCode_ = com.google.protobuf.ByteString.EMPTY;
+      /**
+       * <code>optional bytes source_code = 11;</code>
+       *
+       * <pre>
+       * the source file content.
+       * </pre>
+       */
+      public boolean hasSourceCode() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      /**
+       * <code>optional bytes source_code = 11;</code>
+       *
+       * <pre>
+       * the source file content.
+       * </pre>
+       */
+      public com.google.protobuf.ByteString getSourceCode() {
+        return sourceCode_;
+      }
+      /**
+       * <code>optional bytes source_code = 11;</code>
+       *
+       * <pre>
+       * the source file content.
+       * </pre>
+       */
+      public Builder setSourceCode(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000008;
+        sourceCode_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional bytes source_code = 11;</code>
+       *
+       * <pre>
+       * the source file content.
+       * </pre>
+       */
+      public Builder clearSourceCode() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        sourceCode_ = getDefaultInstance().getSourceCode();
+        onChanged();
+        return this;
+      }
+
+      // optional bytes gcno = 21;
       private com.google.protobuf.ByteString gcno_ = com.google.protobuf.ByteString.EMPTY;
       /**
-       * <code>optional bytes gcno = 11;</code>
+       * <code>optional bytes gcno = 21;</code>
        *
        * <pre>
        * gcov produced data files.
        * </pre>
        */
       public boolean hasGcno() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
+        return ((bitField0_ & 0x00000010) == 0x00000010);
       }
       /**
-       * <code>optional bytes gcno = 11;</code>
+       * <code>optional bytes gcno = 21;</code>
        *
        * <pre>
        * gcov produced data files.
@@ -4808,7 +5220,7 @@
         return gcno_;
       }
       /**
-       * <code>optional bytes gcno = 11;</code>
+       * <code>optional bytes gcno = 21;</code>
        *
        * <pre>
        * gcov produced data files.
@@ -4818,71 +5230,71 @@
         if (value == null) {
     throw new NullPointerException();
   }
-  bitField0_ |= 0x00000002;
+  bitField0_ |= 0x00000010;
         gcno_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>optional bytes gcno = 11;</code>
+       * <code>optional bytes gcno = 21;</code>
        *
        * <pre>
        * gcov produced data files.
        * </pre>
        */
       public Builder clearGcno() {
-        bitField0_ = (bitField0_ & ~0x00000002);
+        bitField0_ = (bitField0_ & ~0x00000010);
         gcno_ = getDefaultInstance().getGcno();
         onChanged();
         return this;
       }
 
-      // optional bytes gcda = 12;
+      // optional bytes gcda = 22;
       private com.google.protobuf.ByteString gcda_ = com.google.protobuf.ByteString.EMPTY;
       /**
-       * <code>optional bytes gcda = 12;</code>
+       * <code>optional bytes gcda = 22;</code>
        */
       public boolean hasGcda() {
-        return ((bitField0_ & 0x00000004) == 0x00000004);
+        return ((bitField0_ & 0x00000020) == 0x00000020);
       }
       /**
-       * <code>optional bytes gcda = 12;</code>
+       * <code>optional bytes gcda = 22;</code>
        */
       public com.google.protobuf.ByteString getGcda() {
         return gcda_;
       }
       /**
-       * <code>optional bytes gcda = 12;</code>
+       * <code>optional bytes gcda = 22;</code>
        */
       public Builder setGcda(com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
-  bitField0_ |= 0x00000004;
+  bitField0_ |= 0x00000020;
         gcda_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>optional bytes gcda = 12;</code>
+       * <code>optional bytes gcda = 22;</code>
        */
       public Builder clearGcda() {
-        bitField0_ = (bitField0_ & ~0x00000004);
+        bitField0_ = (bitField0_ & ~0x00000020);
         gcda_ = getDefaultInstance().getGcda();
         onChanged();
         return this;
       }
 
-      // repeated bytes data = 101;
+      // repeated bytes data = 31;
       private java.util.List<com.google.protobuf.ByteString> data_ = java.util.Collections.emptyList();
       private void ensureDataIsMutable() {
-        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
+        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
           data_ = new java.util.ArrayList<com.google.protobuf.ByteString>(data_);
-          bitField0_ |= 0x00000008;
+          bitField0_ |= 0x00000040;
          }
       }
       /**
-       * <code>repeated bytes data = 101;</code>
+       * <code>repeated bytes data = 31;</code>
        *
        * <pre>
        * measured coverage data.
@@ -4893,7 +5305,7 @@
         return java.util.Collections.unmodifiableList(data_);
       }
       /**
-       * <code>repeated bytes data = 101;</code>
+       * <code>repeated bytes data = 31;</code>
        *
        * <pre>
        * measured coverage data.
@@ -4903,7 +5315,7 @@
         return data_.size();
       }
       /**
-       * <code>repeated bytes data = 101;</code>
+       * <code>repeated bytes data = 31;</code>
        *
        * <pre>
        * measured coverage data.
@@ -4913,7 +5325,7 @@
         return data_.get(index);
       }
       /**
-       * <code>repeated bytes data = 101;</code>
+       * <code>repeated bytes data = 31;</code>
        *
        * <pre>
        * measured coverage data.
@@ -4930,7 +5342,7 @@
         return this;
       }
       /**
-       * <code>repeated bytes data = 101;</code>
+       * <code>repeated bytes data = 31;</code>
        *
        * <pre>
        * measured coverage data.
@@ -4946,7 +5358,7 @@
         return this;
       }
       /**
-       * <code>repeated bytes data = 101;</code>
+       * <code>repeated bytes data = 31;</code>
        *
        * <pre>
        * measured coverage data.
@@ -4960,7 +5372,7 @@
         return this;
       }
       /**
-       * <code>repeated bytes data = 101;</code>
+       * <code>repeated bytes data = 31;</code>
        *
        * <pre>
        * measured coverage data.
@@ -4968,7 +5380,59 @@
        */
       public Builder clearData() {
         data_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000008);
+        bitField0_ = (bitField0_ & ~0x00000040);
+        onChanged();
+        return this;
+      }
+
+      // optional bytes gcov = 32;
+      private com.google.protobuf.ByteString gcov_ = com.google.protobuf.ByteString.EMPTY;
+      /**
+       * <code>optional bytes gcov = 32;</code>
+       *
+       * <pre>
+       * generated gcov data file.
+       * </pre>
+       */
+      public boolean hasGcov() {
+        return ((bitField0_ & 0x00000080) == 0x00000080);
+      }
+      /**
+       * <code>optional bytes gcov = 32;</code>
+       *
+       * <pre>
+       * generated gcov data file.
+       * </pre>
+       */
+      public com.google.protobuf.ByteString getGcov() {
+        return gcov_;
+      }
+      /**
+       * <code>optional bytes gcov = 32;</code>
+       *
+       * <pre>
+       * generated gcov data file.
+       * </pre>
+       */
+      public Builder setGcov(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000080;
+        gcov_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional bytes gcov = 32;</code>
+       *
+       * <pre>
+       * generated gcov data file.
+       * </pre>
+       */
+      public Builder clearGcov() {
+        bitField0_ = (bitField0_ & ~0x00000080);
+        gcov_ = getDefaultInstance().getGcov();
         onChanged();
         return this;
       }
@@ -7582,28 +8046,30 @@
       "\026 \001(\003\0224\n\010coverage\030\037 \003(\0132\".android.vts.Co" +
       "verageReportMessage\"V\n\026ProfilingReportMe" +
       "ssage\022\014\n\004name\030\001 \001(\014\022\027\n\017start_timestamp\030\013" +
-      " \001(\003\022\025\n\rend_timestamp\030\014 \001(\003\"T\n\025CoverageR" +
-      "eportMessage\022\021\n\tfile_name\030\001 \001(\014\022\014\n\004gcno\030" +
-      "\013 \001(\014\022\014\n\004gcda\030\014 \001(\014\022\014\n\004data\030e \003(\014\"\360\002\n\021Te" +
-      "stReportMessage\022\022\n\ntest_suite\030\001 \001(\014\022\014\n\004t" +
-      "est\030\002 \001(\014\022+\n\ttest_type\030\003 \001(\0162\030.android.v" +
-      "ts.VtsTestType\022:\n\013device_info\030\004 \003(\0132%.an",
-      "droid.vts.AndroidDeviceInfoMessage\0221\n\nbu" +
-      "ild_info\030\005 \001(\0132\035.android.vts.AndroidBuil" +
-      "dInfo\0225\n\ttest_case\030\013 \003(\0132\".android.vts.T" +
-      "estCaseReportMessage\0226\n\tprofiling\030\025 \003(\0132" +
-      "#.android.vts.ProfilingReportMessage\022\027\n\017" +
-      "start_timestamp\030e \001(\003\022\025\n\rend_timestamp\030f" +
-      " \001(\003*\263\001\n\016TestCaseResult\022\022\n\016UNKNOWN_RESUL" +
-      "T\020\000\022\031\n\025TEST_CASE_RESULT_PASS\020\001\022\031\n\025TEST_C" +
-      "ASE_RESULT_FAIL\020\002\022\031\n\025TEST_CASE_RESULT_SK" +
-      "IP\020\003\022\036\n\032TEST_CASE_RESULT_EXCEPTION\020\004\022\034\n\030",
-      "TEST_CASE_RESULT_TIMEOUT\020\005*\234\001\n\013VtsTestTy" +
-      "pe\022\030\n\024UNKNOWN_VTS_TESTTYPE\020\000\022\036\n\032VTS_HOST" +
-      "_DRIVEN_STRUCTURAL\020\001\022\033\n\027VTS_HOST_DRIVEN_" +
-      "FUZZING\020\002\022\031\n\025VTS_TARGET_SIDE_GTEST\020\003\022\033\n\027" +
-      "VTS_TARGET_SIDE_FUZZING\020\004B0\n\034com.google." +
-      "android.vts.protoB\020VtsReportMessage"
+      " \001(\003\022\025\n\rend_timestamp\030\014 \001(\003\"\227\001\n\025Coverage" +
+      "ReportMessage\022\020\n\010dir_path\030\001 \001(\014\022\021\n\tfile_" +
+      "name\030\002 \001(\014\022\014\n\004html\030\003 \001(\014\022\023\n\013source_code\030" +
+      "\013 \001(\014\022\014\n\004gcno\030\025 \001(\014\022\014\n\004gcda\030\026 \001(\014\022\014\n\004dat" +
+      "a\030\037 \003(\014\022\014\n\004gcov\030  \001(\014\"\360\002\n\021TestReportMess" +
+      "age\022\022\n\ntest_suite\030\001 \001(\014\022\014\n\004test\030\002 \001(\014\022+\n",
+      "\ttest_type\030\003 \001(\0162\030.android.vts.VtsTestTy" +
+      "pe\022:\n\013device_info\030\004 \003(\0132%.android.vts.An" +
+      "droidDeviceInfoMessage\0221\n\nbuild_info\030\005 \001" +
+      "(\0132\035.android.vts.AndroidBuildInfo\0225\n\ttes" +
+      "t_case\030\013 \003(\0132\".android.vts.TestCaseRepor" +
+      "tMessage\0226\n\tprofiling\030\025 \003(\0132#.android.vt" +
+      "s.ProfilingReportMessage\022\027\n\017start_timest" +
+      "amp\030e \001(\003\022\025\n\rend_timestamp\030f \001(\003*\263\001\n\016Tes" +
+      "tCaseResult\022\022\n\016UNKNOWN_RESULT\020\000\022\031\n\025TEST_" +
+      "CASE_RESULT_PASS\020\001\022\031\n\025TEST_CASE_RESULT_F",
+      "AIL\020\002\022\031\n\025TEST_CASE_RESULT_SKIP\020\003\022\036\n\032TEST" +
+      "_CASE_RESULT_EXCEPTION\020\004\022\034\n\030TEST_CASE_RE" +
+      "SULT_TIMEOUT\020\005*\234\001\n\013VtsTestType\022\030\n\024UNKNOW" +
+      "N_VTS_TESTTYPE\020\000\022\036\n\032VTS_HOST_DRIVEN_STRU" +
+      "CTURAL\020\001\022\033\n\027VTS_HOST_DRIVEN_FUZZING\020\002\022\031\n" +
+      "\025VTS_TARGET_SIDE_GTEST\020\003\022\033\n\027VTS_TARGET_S" +
+      "IDE_FUZZING\020\004B0\n\034com.google.android.vts." +
+      "protoB\020VtsReportMessage"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
       new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -7639,7 +8105,7 @@
           internal_static_android_vts_CoverageReportMessage_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_android_vts_CoverageReportMessage_descriptor,
-              new java.lang.String[] { "FileName", "Gcno", "Gcda", "Data", });
+              new java.lang.String[] { "DirPath", "FileName", "Html", "SourceCode", "Gcno", "Gcda", "Data", "Gcov", });
           internal_static_android_vts_TestReportMessage_descriptor =
             getDescriptor().getMessageTypes().get(5);
           internal_static_android_vts_TestReportMessage_fieldAccessorTable = new
