Merge "support the ping command in runner"
diff --git a/proto/VtsReportMessage.proto b/proto/VtsReportMessage.proto
index 18a2dbe..e3edee7 100644
--- a/proto/VtsReportMessage.proto
+++ b/proto/VtsReportMessage.proto
@@ -134,6 +134,13 @@
   repeated bytes data = 31;
   // generated gcov data file.
   optional bytes gcov = 32;
+
+  // the number of source code lines that are instrumented for code coverage
+  // measurement.
+  optional int32 total_line_count = 101;
+
+  // the number of source code lines that are executed.
+  optional int32 covered_line_count = 102;
 }
 
 
diff --git a/proto/VtsReportMessage_pb2.py b/proto/VtsReportMessage_pb2.py
index dc88887..de79727 100644
--- a/proto/VtsReportMessage_pb2.py
+++ b/proto/VtsReportMessage_pb2.py
@@ -14,7 +14,7 @@
 DESCRIPTOR = _descriptor.FileDescriptor(
   name='VtsReportMessage.proto',
   package='android.vts',
-  serialized_pb='\n\x16VtsReportMessage.proto\x12\x0b\x61ndroid.vts\"\xb9\x01\n\x18\x41ndroidDeviceInfoMessage\x12\x14\n\x0cproduct_type\x18\x01 \x01(\x0c\x12\x17\n\x0fproduct_variant\x18\x02 \x01(\x0c\x12\x14\n\x0c\x62uild_flavor\x18\x0b \x01(\x0c\x12\x10\n\x08\x62uild_id\x18\x0c \x01(\x0c\x12\x0e\n\x06\x62ranch\x18\x15 \x01(\x0c\x12\x13\n\x0b\x62uild_alias\x18\x16 \x01(\x0c\x12\x11\n\tapi_level\x18\x1f \x01(\x0c\x12\x0e\n\x06serial\x18\x65 \x01(\x0c\"P\n\x10\x41ndroidBuildInfo\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0c\n\x04name\x18\x0b \x01(\x0c\x12\x12\n\nbuild_type\x18\x0c \x01(\x0c\x12\x0e\n\x06\x62ranch\x18\r \x01(\x0c\"\xbd\x01\n\x15TestCaseReportMessage\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x30\n\x0btest_result\x18\x0b \x01(\x0e\x32\x1b.android.vts.TestCaseResult\x12\x17\n\x0fstart_timestamp\x18\x15 \x01(\x03\x12\x15\n\rend_timestamp\x18\x16 \x01(\x03\x12\x34\n\x08\x63overage\x18\x1f \x03(\x0b\x32\".android.vts.CoverageReportMessage\"V\n\x16ProfilingReportMessage\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x17\n\x0fstart_timestamp\x18\x0b \x01(\x03\x12\x15\n\rend_timestamp\x18\x0c \x01(\x03\"\x97\x01\n\x15\x43overageReportMessage\x12\x10\n\x08\x64ir_path\x18\x01 \x01(\x0c\x12\x11\n\tfile_name\x18\x02 \x01(\x0c\x12\x0c\n\x04html\x18\x03 \x01(\x0c\x12\x13\n\x0bsource_code\x18\x0b \x01(\x0c\x12\x0c\n\x04gcno\x18\x15 \x01(\x0c\x12\x0c\n\x04gcda\x18\x16 \x01(\x0c\x12\x0c\n\x04\x64\x61ta\x18\x1f \x03(\x0c\x12\x0c\n\x04gcov\x18  \x01(\x0c\"\xf0\x02\n\x11TestReportMessage\x12\x12\n\ntest_suite\x18\x01 \x01(\x0c\x12\x0c\n\x04test\x18\x02 \x01(\x0c\x12+\n\ttest_type\x18\x03 \x01(\x0e\x32\x18.android.vts.VtsTestType\x12:\n\x0b\x64\x65vice_info\x18\x04 \x03(\x0b\x32%.android.vts.AndroidDeviceInfoMessage\x12\x31\n\nbuild_info\x18\x05 \x01(\x0b\x32\x1d.android.vts.AndroidBuildInfo\x12\x35\n\ttest_case\x18\x0b \x03(\x0b\x32\".android.vts.TestCaseReportMessage\x12\x36\n\tprofiling\x18\x15 \x03(\x0b\x32#.android.vts.ProfilingReportMessage\x12\x17\n\x0fstart_timestamp\x18\x65 \x01(\x03\x12\x15\n\rend_timestamp\x18\x66 \x01(\x03*\xb3\x01\n\x0eTestCaseResult\x12\x12\n\x0eUNKNOWN_RESULT\x10\x00\x12\x19\n\x15TEST_CASE_RESULT_PASS\x10\x01\x12\x19\n\x15TEST_CASE_RESULT_FAIL\x10\x02\x12\x19\n\x15TEST_CASE_RESULT_SKIP\x10\x03\x12\x1e\n\x1aTEST_CASE_RESULT_EXCEPTION\x10\x04\x12\x1c\n\x18TEST_CASE_RESULT_TIMEOUT\x10\x05*\x9c\x01\n\x0bVtsTestType\x12\x18\n\x14UNKNOWN_VTS_TESTTYPE\x10\x00\x12\x1e\n\x1aVTS_HOST_DRIVEN_STRUCTURAL\x10\x01\x12\x1b\n\x17VTS_HOST_DRIVEN_FUZZING\x10\x02\x12\x19\n\x15VTS_TARGET_SIDE_GTEST\x10\x03\x12\x1b\n\x17VTS_TARGET_SIDE_FUZZING\x10\x04\x42\x30\n\x1c\x63om.google.android.vts.protoB\x10VtsReportMessage')
+  serialized_pb='\n\x16VtsReportMessage.proto\x12\x0b\x61ndroid.vts\"\xb9\x01\n\x18\x41ndroidDeviceInfoMessage\x12\x14\n\x0cproduct_type\x18\x01 \x01(\x0c\x12\x17\n\x0fproduct_variant\x18\x02 \x01(\x0c\x12\x14\n\x0c\x62uild_flavor\x18\x0b \x01(\x0c\x12\x10\n\x08\x62uild_id\x18\x0c \x01(\x0c\x12\x0e\n\x06\x62ranch\x18\x15 \x01(\x0c\x12\x13\n\x0b\x62uild_alias\x18\x16 \x01(\x0c\x12\x11\n\tapi_level\x18\x1f \x01(\x0c\x12\x0e\n\x06serial\x18\x65 \x01(\x0c\"P\n\x10\x41ndroidBuildInfo\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0c\n\x04name\x18\x0b \x01(\x0c\x12\x12\n\nbuild_type\x18\x0c \x01(\x0c\x12\x0e\n\x06\x62ranch\x18\r \x01(\x0c\"\xbd\x01\n\x15TestCaseReportMessage\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x30\n\x0btest_result\x18\x0b \x01(\x0e\x32\x1b.android.vts.TestCaseResult\x12\x17\n\x0fstart_timestamp\x18\x15 \x01(\x03\x12\x15\n\rend_timestamp\x18\x16 \x01(\x03\x12\x34\n\x08\x63overage\x18\x1f \x03(\x0b\x32\".android.vts.CoverageReportMessage\"V\n\x16ProfilingReportMessage\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x17\n\x0fstart_timestamp\x18\x0b \x01(\x03\x12\x15\n\rend_timestamp\x18\x0c \x01(\x03\"\xcd\x01\n\x15\x43overageReportMessage\x12\x10\n\x08\x64ir_path\x18\x01 \x01(\x0c\x12\x11\n\tfile_name\x18\x02 \x01(\x0c\x12\x0c\n\x04html\x18\x03 \x01(\x0c\x12\x13\n\x0bsource_code\x18\x0b \x01(\x0c\x12\x0c\n\x04gcno\x18\x15 \x01(\x0c\x12\x0c\n\x04gcda\x18\x16 \x01(\x0c\x12\x0c\n\x04\x64\x61ta\x18\x1f \x03(\x0c\x12\x0c\n\x04gcov\x18  \x01(\x0c\x12\x18\n\x10total_line_count\x18\x65 \x01(\x05\x12\x1a\n\x12\x63overed_line_count\x18\x66 \x01(\x05\"\xf0\x02\n\x11TestReportMessage\x12\x12\n\ntest_suite\x18\x01 \x01(\x0c\x12\x0c\n\x04test\x18\x02 \x01(\x0c\x12+\n\ttest_type\x18\x03 \x01(\x0e\x32\x18.android.vts.VtsTestType\x12:\n\x0b\x64\x65vice_info\x18\x04 \x03(\x0b\x32%.android.vts.AndroidDeviceInfoMessage\x12\x31\n\nbuild_info\x18\x05 \x01(\x0b\x32\x1d.android.vts.AndroidBuildInfo\x12\x35\n\ttest_case\x18\x0b \x03(\x0b\x32\".android.vts.TestCaseReportMessage\x12\x36\n\tprofiling\x18\x15 \x03(\x0b\x32#.android.vts.ProfilingReportMessage\x12\x17\n\x0fstart_timestamp\x18\x65 \x01(\x03\x12\x15\n\rend_timestamp\x18\x66 \x01(\x03*\xb3\x01\n\x0eTestCaseResult\x12\x12\n\x0eUNKNOWN_RESULT\x10\x00\x12\x19\n\x15TEST_CASE_RESULT_PASS\x10\x01\x12\x19\n\x15TEST_CASE_RESULT_FAIL\x10\x02\x12\x19\n\x15TEST_CASE_RESULT_SKIP\x10\x03\x12\x1e\n\x1aTEST_CASE_RESULT_EXCEPTION\x10\x04\x12\x1c\n\x18TEST_CASE_RESULT_TIMEOUT\x10\x05*\x9c\x01\n\x0bVtsTestType\x12\x18\n\x14UNKNOWN_VTS_TESTTYPE\x10\x00\x12\x1e\n\x1aVTS_HOST_DRIVEN_STRUCTURAL\x10\x01\x12\x1b\n\x17VTS_HOST_DRIVEN_FUZZING\x10\x02\x12\x19\n\x15VTS_TARGET_SIDE_GTEST\x10\x03\x12\x1b\n\x17VTS_TARGET_SIDE_FUZZING\x10\x04\x42\x30\n\x1c\x63om.google.android.vts.protoB\x10VtsReportMessage')
 
 _TESTCASERESULT = _descriptor.EnumDescriptor(
   name='TestCaseResult',
@@ -49,8 +49,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=1115,
-  serialized_end=1294,
+  serialized_start=1169,
+  serialized_end=1348,
 )
 
 TestCaseResult = enum_type_wrapper.EnumTypeWrapper(_TESTCASERESULT)
@@ -83,8 +83,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=1297,
-  serialized_end=1453,
+  serialized_start=1351,
+  serialized_end=1507,
 )
 
 VtsTestType = enum_type_wrapper.EnumTypeWrapper(_VTSTESTTYPE)
@@ -389,6 +389,20 @@
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
+    _descriptor.FieldDescriptor(
+      name='total_line_count', full_name='android.vts.CoverageReportMessage.total_line_count', index=8,
+      number=101, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='covered_line_count', full_name='android.vts.CoverageReportMessage.covered_line_count', index=9,
+      number=102, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
   ],
   extensions=[
   ],
@@ -399,7 +413,7 @@
   is_extendable=False,
   extension_ranges=[],
   serialized_start=590,
-  serialized_end=741,
+  serialized_end=795,
 )
 
 
@@ -482,8 +496,8 @@
   options=None,
   is_extendable=False,
   extension_ranges=[],
-  serialized_start=744,
-  serialized_end=1112,
+  serialized_start=798,
+  serialized_end=1166,
 )
 
 _TESTCASEREPORTMESSAGE.fields_by_name['test_result'].enum_type = _TESTCASERESULT
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 ca7fb80..5a87c02 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
@@ -4289,6 +4289,44 @@
      * </pre>
      */
     com.google.protobuf.ByteString getGcov();
+
+    // optional int32 total_line_count = 101;
+    /**
+     * <code>optional int32 total_line_count = 101;</code>
+     *
+     * <pre>
+     * the number of source code lines that are instrumented for code coverage
+     * measurement.
+     * </pre>
+     */
+    boolean hasTotalLineCount();
+    /**
+     * <code>optional int32 total_line_count = 101;</code>
+     *
+     * <pre>
+     * the number of source code lines that are instrumented for code coverage
+     * measurement.
+     * </pre>
+     */
+    int getTotalLineCount();
+
+    // optional int32 covered_line_count = 102;
+    /**
+     * <code>optional int32 covered_line_count = 102;</code>
+     *
+     * <pre>
+     * the number of source code lines that are executed.
+     * </pre>
+     */
+    boolean hasCoveredLineCount();
+    /**
+     * <code>optional int32 covered_line_count = 102;</code>
+     *
+     * <pre>
+     * the number of source code lines that are executed.
+     * </pre>
+     */
+    int getCoveredLineCount();
   }
   /**
    * Protobuf type {@code android.vts.CoverageReportMessage}
@@ -4388,6 +4426,16 @@
               gcov_ = input.readBytes();
               break;
             }
+            case 808: {
+              bitField0_ |= 0x00000080;
+              totalLineCount_ = input.readInt32();
+              break;
+            }
+            case 816: {
+              bitField0_ |= 0x00000100;
+              coveredLineCount_ = input.readInt32();
+              break;
+            }
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
@@ -4626,6 +4674,56 @@
       return gcov_;
     }
 
+    // optional int32 total_line_count = 101;
+    public static final int TOTAL_LINE_COUNT_FIELD_NUMBER = 101;
+    private int totalLineCount_;
+    /**
+     * <code>optional int32 total_line_count = 101;</code>
+     *
+     * <pre>
+     * the number of source code lines that are instrumented for code coverage
+     * measurement.
+     * </pre>
+     */
+    public boolean hasTotalLineCount() {
+      return ((bitField0_ & 0x00000080) == 0x00000080);
+    }
+    /**
+     * <code>optional int32 total_line_count = 101;</code>
+     *
+     * <pre>
+     * the number of source code lines that are instrumented for code coverage
+     * measurement.
+     * </pre>
+     */
+    public int getTotalLineCount() {
+      return totalLineCount_;
+    }
+
+    // optional int32 covered_line_count = 102;
+    public static final int COVERED_LINE_COUNT_FIELD_NUMBER = 102;
+    private int coveredLineCount_;
+    /**
+     * <code>optional int32 covered_line_count = 102;</code>
+     *
+     * <pre>
+     * the number of source code lines that are executed.
+     * </pre>
+     */
+    public boolean hasCoveredLineCount() {
+      return ((bitField0_ & 0x00000100) == 0x00000100);
+    }
+    /**
+     * <code>optional int32 covered_line_count = 102;</code>
+     *
+     * <pre>
+     * the number of source code lines that are executed.
+     * </pre>
+     */
+    public int getCoveredLineCount() {
+      return coveredLineCount_;
+    }
+
     private void initFields() {
       dirPath_ = com.google.protobuf.ByteString.EMPTY;
       fileName_ = com.google.protobuf.ByteString.EMPTY;
@@ -4635,6 +4733,8 @@
       gcda_ = com.google.protobuf.ByteString.EMPTY;
       data_ = java.util.Collections.emptyList();
       gcov_ = com.google.protobuf.ByteString.EMPTY;
+      totalLineCount_ = 0;
+      coveredLineCount_ = 0;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -4672,6 +4772,12 @@
       if (((bitField0_ & 0x00000040) == 0x00000040)) {
         output.writeBytes(32, gcov_);
       }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        output.writeInt32(101, totalLineCount_);
+      }
+      if (((bitField0_ & 0x00000100) == 0x00000100)) {
+        output.writeInt32(102, coveredLineCount_);
+      }
       getUnknownFields().writeTo(output);
     }
 
@@ -4718,6 +4824,14 @@
         size += com.google.protobuf.CodedOutputStream
           .computeBytesSize(32, gcov_);
       }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(101, totalLineCount_);
+      }
+      if (((bitField0_ & 0x00000100) == 0x00000100)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(102, coveredLineCount_);
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -4854,6 +4968,10 @@
         bitField0_ = (bitField0_ & ~0x00000040);
         gcov_ = com.google.protobuf.ByteString.EMPTY;
         bitField0_ = (bitField0_ & ~0x00000080);
+        totalLineCount_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000100);
+        coveredLineCount_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000200);
         return this;
       }
 
@@ -4915,6 +5033,14 @@
           to_bitField0_ |= 0x00000040;
         }
         result.gcov_ = gcov_;
+        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
+          to_bitField0_ |= 0x00000080;
+        }
+        result.totalLineCount_ = totalLineCount_;
+        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
+          to_bitField0_ |= 0x00000100;
+        }
+        result.coveredLineCount_ = coveredLineCount_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -4962,6 +5088,12 @@
         if (other.hasGcov()) {
           setGcov(other.getGcov());
         }
+        if (other.hasTotalLineCount()) {
+          setTotalLineCount(other.getTotalLineCount());
+        }
+        if (other.hasCoveredLineCount()) {
+          setCoveredLineCount(other.getCoveredLineCount());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -5437,6 +5569,108 @@
         return this;
       }
 
+      // optional int32 total_line_count = 101;
+      private int totalLineCount_ ;
+      /**
+       * <code>optional int32 total_line_count = 101;</code>
+       *
+       * <pre>
+       * the number of source code lines that are instrumented for code coverage
+       * measurement.
+       * </pre>
+       */
+      public boolean hasTotalLineCount() {
+        return ((bitField0_ & 0x00000100) == 0x00000100);
+      }
+      /**
+       * <code>optional int32 total_line_count = 101;</code>
+       *
+       * <pre>
+       * the number of source code lines that are instrumented for code coverage
+       * measurement.
+       * </pre>
+       */
+      public int getTotalLineCount() {
+        return totalLineCount_;
+      }
+      /**
+       * <code>optional int32 total_line_count = 101;</code>
+       *
+       * <pre>
+       * the number of source code lines that are instrumented for code coverage
+       * measurement.
+       * </pre>
+       */
+      public Builder setTotalLineCount(int value) {
+        bitField0_ |= 0x00000100;
+        totalLineCount_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional int32 total_line_count = 101;</code>
+       *
+       * <pre>
+       * the number of source code lines that are instrumented for code coverage
+       * measurement.
+       * </pre>
+       */
+      public Builder clearTotalLineCount() {
+        bitField0_ = (bitField0_ & ~0x00000100);
+        totalLineCount_ = 0;
+        onChanged();
+        return this;
+      }
+
+      // optional int32 covered_line_count = 102;
+      private int coveredLineCount_ ;
+      /**
+       * <code>optional int32 covered_line_count = 102;</code>
+       *
+       * <pre>
+       * the number of source code lines that are executed.
+       * </pre>
+       */
+      public boolean hasCoveredLineCount() {
+        return ((bitField0_ & 0x00000200) == 0x00000200);
+      }
+      /**
+       * <code>optional int32 covered_line_count = 102;</code>
+       *
+       * <pre>
+       * the number of source code lines that are executed.
+       * </pre>
+       */
+      public int getCoveredLineCount() {
+        return coveredLineCount_;
+      }
+      /**
+       * <code>optional int32 covered_line_count = 102;</code>
+       *
+       * <pre>
+       * the number of source code lines that are executed.
+       * </pre>
+       */
+      public Builder setCoveredLineCount(int value) {
+        bitField0_ |= 0x00000200;
+        coveredLineCount_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional int32 covered_line_count = 102;</code>
+       *
+       * <pre>
+       * the number of source code lines that are executed.
+       * </pre>
+       */
+      public Builder clearCoveredLineCount() {
+        bitField0_ = (bitField0_ & ~0x00000200);
+        coveredLineCount_ = 0;
+        onChanged();
+        return this;
+      }
+
       // @@protoc_insertion_point(builder_scope:android.vts.CoverageReportMessage)
     }
 
@@ -8046,30 +8280,31 @@
       "\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\"\227\001\n\025Coverage" +
+      " \001(\003\022\025\n\rend_timestamp\030\014 \001(\003\"\315\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"
+      "a\030\037 \003(\014\022\014\n\004gcov\030  \001(\014\022\030\n\020total_line_coun" +
+      "t\030e \001(\005\022\032\n\022covered_line_count\030f \001(\005\"\360\002\n\021",
+      "TestReportMessage\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.VtsTestType\022:\n\013device_info\030\004 \003(\0132%." +
+      "android.vts.AndroidDeviceInfoMessage\0221\n\n" +
+      "build_info\030\005 \001(\0132\035.android.vts.AndroidBu" +
+      "ildInfo\0225\n\ttest_case\030\013 \003(\0132\".android.vts" +
+      ".TestCaseReportMessage\0226\n\tprofiling\030\025 \003(" +
+      "\0132#.android.vts.ProfilingReportMessage\022\027" +
+      "\n\017start_timestamp\030e \001(\003\022\025\n\rend_timestamp" +
+      "\030f \001(\003*\263\001\n\016TestCaseResult\022\022\n\016UNKNOWN_RES",
+      "ULT\020\000\022\031\n\025TEST_CASE_RESULT_PASS\020\001\022\031\n\025TEST" +
+      "_CASE_RESULT_FAIL\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_RESULT_TIMEOUT\020\005*\234\001\n\013VtsTest" +
+      "Type\022\030\n\024UNKNOWN_VTS_TESTTYPE\020\000\022\036\n\032VTS_HO" +
+      "ST_DRIVEN_STRUCTURAL\020\001\022\033\n\027VTS_HOST_DRIVE" +
+      "N_FUZZING\020\002\022\031\n\025VTS_TARGET_SIDE_GTEST\020\003\022\033" +
+      "\n\027VTS_TARGET_SIDE_FUZZING\020\004B0\n\034com.googl" +
+      "e.android.vts.protoB\020VtsReportMessage"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
       new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -8105,7 +8340,7 @@
           internal_static_android_vts_CoverageReportMessage_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_android_vts_CoverageReportMessage_descriptor,
-              new java.lang.String[] { "DirPath", "FileName", "Html", "SourceCode", "Gcno", "Gcda", "Data", "Gcov", });
+              new java.lang.String[] { "DirPath", "FileName", "Html", "SourceCode", "Gcno", "Gcda", "Data", "Gcov", "TotalLineCount", "CoveredLineCount", });
           internal_static_android_vts_TestReportMessage_descriptor =
             getDescriptor().getMessageTypes().get(5);
           internal_static_android_vts_TestReportMessage_fieldAccessorTable = new