Merge "Snap for 6421561 from d3981c8028c48b6c3f947f97e17b706d548894c3 to android10-tests-release" into android10-tests-release
diff --git a/clearcut_client/com/android/tradefed/clearcut/ClearcutClient.java b/clearcut_client/com/android/tradefed/clearcut/ClearcutClient.java
index ee1d573..85adbbb 100644
--- a/clearcut_client/com/android/tradefed/clearcut/ClearcutClient.java
+++ b/clearcut_client/com/android/tradefed/clearcut/ClearcutClient.java
@@ -140,6 +140,20 @@
         queueEvent(request.build());
     }
 
+    /** Send the event to notify that a Tradefed invocation was started. */
+    public void notifyTradefedInvocationStartEvent() {
+        if (mDisabled) {
+            return;
+        }
+        LogRequest.Builder request = createBaseLogRequest();
+        LogEvent.Builder logEvent = LogEvent.newBuilder();
+        logEvent.setEventTimeMs(System.currentTimeMillis());
+        logEvent.setSourceExtension(
+                ClearcutEventHelper.createRunStartEvent(getGroupingKey(), mRunId, mUserType));
+        request.addLogEvent(logEvent);
+        queueEvent(request.build());
+    }
+
     /** Stop the periodic sending of clearcut events */
     public void stop() {
         if (mExecutor != null) {
diff --git a/clearcut_client/com/android/tradefed/clearcut/ClearcutEventHelper.java b/clearcut_client/com/android/tradefed/clearcut/ClearcutEventHelper.java
index e8a6ab334..23ad99e 100644
--- a/clearcut_client/com/android/tradefed/clearcut/ClearcutEventHelper.java
+++ b/clearcut_client/com/android/tradefed/clearcut/ClearcutEventHelper.java
@@ -18,6 +18,7 @@
 import com.android.asuite.clearcut.Common.UserType;
 import com.android.asuite.clearcut.ExternalUserLog.AtestLogEventExternal;
 import com.android.asuite.clearcut.ExternalUserLog.AtestLogEventExternal.AtestStartEvent;
+import com.android.asuite.clearcut.ExternalUserLog.AtestLogEventExternal.RunnerFinishEvent;
 import com.android.asuite.clearcut.InternalUserLog.AtestLogEventInternal;
 
 import com.google.protobuf.ByteString;
@@ -53,6 +54,31 @@
     }
 
     /**
+     * Create the start invocation event for Tradefed.
+     *
+     * @param userKey The unique id representing the user
+     * @param runId The current id for the session.
+     * @param userType The type of the user: internal or external.
+     * @return a ByteString representation of the even proto.
+     */
+    public static ByteString createRunStartEvent(String userKey, String runId, UserType userType) {
+        if (UserType.GOOGLE.equals(userType)) {
+            AtestLogEventInternal.Builder builder =
+                    createBaseInternalEventBuilder(userKey, runId, userType);
+            AtestLogEventInternal.RunnerFinishEvent.Builder startRunEventBuilder =
+                    AtestLogEventInternal.RunnerFinishEvent.newBuilder();
+            builder.setRunnerFinishEvent(startRunEventBuilder.build());
+            return builder.build().toByteString();
+        }
+
+        AtestLogEventExternal.Builder builder =
+                createBaseExternalEventBuilder(userKey, runId, userType);
+        RunnerFinishEvent.Builder startBuilder = RunnerFinishEvent.newBuilder();
+        builder.setRunnerFinishEvent(startBuilder.build());
+        return builder.build().toByteString();
+    }
+
+    /**
      * Create the basic event builder with all the common informations.
      *
      * @param userKey The unique id representing the user
diff --git a/src/com/android/tradefed/command/CommandScheduler.java b/src/com/android/tradefed/command/CommandScheduler.java
index 3cf777e..eae7953 100644
--- a/src/com/android/tradefed/command/CommandScheduler.java
+++ b/src/com/android/tradefed/command/CommandScheduler.java
@@ -557,6 +557,9 @@
 
         @Override
         public void run() {
+            if (mClient != null) {
+                mClient.notifyTradefedInvocationStartEvent();
+            }
             Map<ITestDevice, FreeDeviceState> deviceStates = new HashMap<>();
             for (ITestDevice device : mInvocationContext.getDevices()) {
                 deviceStates.put(device, FreeDeviceState.AVAILABLE);