Snap for 7360053 from 965713390056bfd27dd4bc22558169eade3ff2f5 to sc-release

Change-Id: I74bb9b8dbbe4e5c7d862a86636e980d2fdd768be
diff --git a/create/avd_spec.py b/create/avd_spec.py
index ee34153..7be4ece 100644
--- a/create/avd_spec.py
+++ b/create/avd_spec.py
@@ -110,6 +110,7 @@
         self._flavor = None
         self._image_source = None
         self._instance_type = None
+        self._launch_args = None
         self._local_image_dir = None
         self._local_image_artifact = None
         self._local_instance_dir = None
@@ -333,6 +334,8 @@
 
         self._boot_timeout_secs = args.boot_timeout_secs
         self._ins_timeout_secs = args.ins_timeout_secs
+        self._launch_args = " ".join(
+            list(filter(None, [self._cfg.launch_args, args.launch_args])))
 
         if args.reuse_gce:
             if args.reuse_gce != constants.SELECT_ONE_GCE_INSTANCE:
@@ -942,3 +945,8 @@
     def oxygen(self):
         """Return oxygen."""
         return self._oxygen
+
+    @property
+    def launch_args(self):
+        """Return launch_args."""
+        return self._launch_args
diff --git a/create/avd_spec_test.py b/create/avd_spec_test.py
index e167ef9..4c48006 100644
--- a/create/avd_spec_test.py
+++ b/create/avd_spec_test.py
@@ -46,6 +46,7 @@
         self.args.config_file = ""
         self.args.build_target = "fake_build_target"
         self.args.adb_port = None
+        self.args.launch_args = None
         self.Patch(list_instances, "ChooseOneRemoteInstance", return_value=mock.MagicMock())
         self.Patch(list_instances, "GetInstancesFromInstanceNames", return_value=mock.MagicMock())
         self.AvdSpec = avd_spec.AVDSpec(self.args)
@@ -337,6 +338,7 @@
         """Test _ProcessRemoteBuildArgs."""
         self.args.branch = "git_master"
         self.args.build_id = "1234"
+        self.args.launch_args = None
 
         # Verify auto-assigned avd_type if build_targe contains "_gce_".
         self.args.build_target = "aosp_gce_x86_phone-userdebug"
@@ -379,6 +381,7 @@
         # Setup acloud config with betty_image spec
         cfg = mock.MagicMock()
         cfg.betty_image = 'foobarbaz'
+        cfg.launch_args = None
         self.Patch(config, 'GetAcloudConfig', return_value=cfg)
         self.AvdSpec = avd_spec.AVDSpec(self.args)
         # --betty-image from cmdline should override config
diff --git a/create/create_args.py b/create/create_args.py
index f2c885f..8071f55 100644
--- a/create/create_args.py
+++ b/create/create_args.py
@@ -197,6 +197,12 @@
         help="'cuttlefish only' System image build target, specify if different "
         "from --build-target",
         required=False)
+    parser.add_argument(
+        "--launch-args",
+        type=str,
+        dest="launch_args",
+        help="'cuttlefish only' Add extra args to launch_cvd command.",
+        required=False)
     # TODO(146314062): Remove --multi-stage-launch after infra don't use this
     # args.
     parser.add_argument(
diff --git a/create/local_image_local_instance.py b/create/local_image_local_instance.py
index 0370734..c8c38cd 100644
--- a/create/local_image_local_instance.py
+++ b/create/local_image_local_instance.py
@@ -236,7 +236,7 @@
                                        avd_spec.connect_vnc,
                                        super_image_path,
                                        artifact_paths.boot_image,
-                                       avd_spec.cfg.launch_args,
+                                       avd_spec.launch_args,
                                        avd_spec.flavor)
 
         result_report = report.Report(command="create")
diff --git a/internal/lib/cvd_compute_client_multi_stage.py b/internal/lib/cvd_compute_client_multi_stage.py
index 2abb901..cc86a21 100644
--- a/internal/lib/cvd_compute_client_multi_stage.py
+++ b/internal/lib/cvd_compute_client_multi_stage.py
@@ -321,13 +321,15 @@
             if avd_spec.num_avds_per_instance > 1:
                 launch_cvd_args.append(
                     _NUM_AVDS_ARG % {"num_AVD": avd_spec.num_avds_per_instance})
+            if avd_spec.launch_args:
+                launch_cvd_args.append(avd_spec.launch_args)
         else:
             resolution = self._resolution.split("x")
             launch_cvd_args.append("-x_res=" + resolution[0])
             launch_cvd_args.append("-y_res=" + resolution[1])
             launch_cvd_args.append("-dpi=" + resolution[3])
 
-        if self._launch_args:
+        if not avd_spec and self._launch_args:
             launch_cvd_args.append(self._launch_args)
 
         if decompress_kernel:
diff --git a/internal/lib/cvd_compute_client_multi_stage_test.py b/internal/lib/cvd_compute_client_multi_stage_test.py
index 4692666..08875e4 100644
--- a/internal/lib/cvd_compute_client_multi_stage_test.py
+++ b/internal/lib/cvd_compute_client_multi_stage_test.py
@@ -107,6 +107,7 @@
         self.args.hw_property = "cpu:2,resolution:1080x1920,dpi:240,memory:4g,disk:10g"
         self.args.num_avds_per_instance = 2
         self.args.remote_host = False
+        self.args.launch_args = self.LAUNCH_ARGS
 
     # pylint: disable=protected-access
     @mock.patch.object(utils, "GetBuildEnvironmentVariable", return_value="fake_env_cf_x86")
diff --git a/internal/lib/cvd_compute_client_test.py b/internal/lib/cvd_compute_client_test.py
index 7b764c6..d9809b1 100644
--- a/internal/lib/cvd_compute_client_test.py
+++ b/internal/lib/cvd_compute_client_test.py
@@ -155,6 +155,7 @@
         args.flavor = "phone"
         args.adb_port = None
         args.remote_host = False
+        args.launch_args = None
         fake_avd_spec = avd_spec.AVDSpec(args)
         fake_avd_spec.hw_property[constants.HW_X_RES] = str(self.X_RES)
         fake_avd_spec.hw_property[constants.HW_Y_RES] = str(self.Y_RES)
diff --git a/public/actions/remote_instance_cf_device_factory_test.py b/public/actions/remote_instance_cf_device_factory_test.py
index 2c89139..1e0aa0b 100644
--- a/public/actions/remote_instance_cf_device_factory_test.py
+++ b/public/actions/remote_instance_cf_device_factory_test.py
@@ -66,6 +66,7 @@
         args.flavor = "phone"
         args.local_image = constants.FIND_IN_BUILD_ENV
         args.local_system_image = None
+        args.launch_args = None
         avd_spec_local_img = avd_spec.AVDSpec(args)
         fake_image_name = "/fake/aosp_cf_x86_phone-img-eng.username.zip"
         fake_host_package_name = "/fake/host_package.tar.gz"
@@ -106,6 +107,7 @@
         args.local_image = constants.FIND_IN_BUILD_ENV
         args.local_system_image = None
         args.adb_port = None
+        args.launch_args = None
         fake_avd_spec = avd_spec.AVDSpec(args)
         fake_avd_spec.cfg.enable_multi_stage = True
         fake_avd_spec._instance_name_to_reuse = None
@@ -151,6 +153,7 @@
         args.local_image = constants.FIND_IN_BUILD_ENV
         args.local_system_image = None
         args.adb_port = None
+        args.launch_args = None
         fake_avd_spec = avd_spec.AVDSpec(args)
         fake_avd_spec.cfg.enable_multi_stage = True
         fake_avd_spec._instance_name_to_reuse = None
@@ -184,6 +187,7 @@
         args.local_image = constants.FIND_IN_BUILD_ENV
         args.local_system_image = None
         args.adb_port = None
+        args.launch_args = None
         fake_avd_spec = avd_spec.AVDSpec(args)
         fake_avd_spec.cfg.enable_multi_stage = True
         fake_avd_spec._instance_name_to_reuse = "fake-1234-userbuild-fake-target"
@@ -213,6 +217,7 @@
         args.local_system_image = None
         args.adb_port = None
         args.cheeps_betty_image = None
+        args.launch_args = None
         avd_spec_local_image = avd_spec.AVDSpec(args)
         factory = remote_instance_cf_device_factory.RemoteInstanceDeviceFactory(
             avd_spec_local_image,
@@ -271,6 +276,7 @@
         args.local_image = "fake_local_image"
         args.local_system_image = None
         args.adb_port = None
+        args.launch_args = None
         avd_spec_local_image = avd_spec.AVDSpec(args)
         factory = remote_instance_cf_device_factory.RemoteInstanceDeviceFactory(
             avd_spec_local_image,
@@ -332,6 +338,7 @@
         args.local_image = "fake_local_image"
         args.local_system_image = None
         args.adb_port = None
+        args.launch_args = None
         avd_spec_local_image = avd_spec.AVDSpec(args)
         factory = remote_instance_cf_device_factory.RemoteInstanceDeviceFactory(
             avd_spec_local_image,
diff --git a/public/actions/remote_instance_fvp_device_factory_test.py b/public/actions/remote_instance_fvp_device_factory_test.py
index 72f3c61..7433073 100644
--- a/public/actions/remote_instance_fvp_device_factory_test.py
+++ b/public/actions/remote_instance_fvp_device_factory_test.py
@@ -67,6 +67,7 @@
         args.local_image = "fake_local_image"
         args.local_system_image = None
         args.adb_port = None
+        args.launch_args = None
         avd_spec_local_image = avd_spec.AVDSpec(args)
         factory = remote_instance_fvp_device_factory.RemoteInstanceDeviceFactory(
             avd_spec_local_image)