ozone/display: Plumb Internal Modeset Flag

This CL plumbs an internal modeset flag to allow ui/display and ozone
to adjust the behavior of modeset commits. Or, in language more fitting
to these layers, adjust the behavior of display configurations.

The flags will allow us to request configuration tests and seamless
display configurations in following work.

Otherwise, this CL does not changes any functionality.

Bug: b:236674622, b:238361145
Test: display_unittests && ozone_unittests
Change-Id: I2b6da071d5187ba0b1bea7727501d60d4806f39f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3763044
Commit-Queue: Gil Dekel <[email protected]>
Reviewed-by: Daniel Nicoara <[email protected]>
Reviewed-by: Robert Kroeger <[email protected]>
Reviewed-by: Robert Sesek <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1025832}
diff --git a/ui/display/fake/fake_display_delegate.cc b/ui/display/fake/fake_display_delegate.cc
index 220aa120..88cf0aa 100644
--- a/ui/display/fake/fake_display_delegate.cc
+++ b/ui/display/fake/fake_display_delegate.cc
@@ -130,7 +130,8 @@
 
 void FakeDisplayDelegate::Configure(
     const std::vector<display::DisplayConfigurationParams>& config_requests,
-    ConfigureCallback callback) {
+    ConfigureCallback callback,
+    uint32_t modeset_flag) {
   bool config_success = true;
   for (const auto& config : config_requests) {
     bool request_success = false;
diff --git a/ui/display/fake/fake_display_delegate.h b/ui/display/fake/fake_display_delegate.h
index d1e6998b..431873e 100644
--- a/ui/display/fake/fake_display_delegate.h
+++ b/ui/display/fake/fake_display_delegate.h
@@ -88,7 +88,8 @@
   void GetDisplays(GetDisplaysCallback callback) override;
   void Configure(
       const std::vector<display::DisplayConfigurationParams>& config_requests,
-      ConfigureCallback callback) override;
+      ConfigureCallback callback,
+      uint32_t modeset_flag) override;
   void GetHDCPState(const DisplaySnapshot& output,
                     GetHDCPStateCallback callback) override;
   void SetHDCPState(const DisplaySnapshot& output,
diff --git a/ui/display/manager/configure_displays_task.cc b/ui/display/manager/configure_displays_task.cc
index 292e721..37a2dbec 100644
--- a/ui/display/manager/configure_displays_task.cc
+++ b/ui/display/manager/configure_displays_task.cc
@@ -272,7 +272,8 @@
 
   delegate_->Configure(
       config_requests,
-      base::BindOnce(on_configured, weak_ptr_factory_.GetWeakPtr()));
+      base::BindOnce(on_configured, weak_ptr_factory_.GetWeakPtr()),
+      display::kTestModeset | display::kCommitModeset);
 }
 
 void ConfigureDisplaysTask::OnConfigurationChanged() {}
diff --git a/ui/display/manager/test/test_native_display_delegate.cc b/ui/display/manager/test/test_native_display_delegate.cc
index ee30adb6..4492df2 100644
--- a/ui/display/manager/test/test_native_display_delegate.cc
+++ b/ui/display/manager/test/test_native_display_delegate.cc
@@ -108,7 +108,8 @@
 
 void TestNativeDisplayDelegate::Configure(
     const std::vector<display::DisplayConfigurationParams>& config_requests,
-    ConfigureCallback callback) {
+    ConfigureCallback callback,
+    uint32_t modeset_flag) {
   bool config_success = true;
   for (const auto& config : config_requests)
     config_success &= Configure(config);
diff --git a/ui/display/manager/test/test_native_display_delegate.h b/ui/display/manager/test/test_native_display_delegate.h
index 3fa1757..bb6c520 100644
--- a/ui/display/manager/test/test_native_display_delegate.h
+++ b/ui/display/manager/test/test_native_display_delegate.h
@@ -76,7 +76,8 @@
   void GetDisplays(GetDisplaysCallback callback) override;
   void Configure(
       const std::vector<display::DisplayConfigurationParams>& config_requests,
-      ConfigureCallback callback) override;
+      ConfigureCallback callback,
+      uint32_t modeset_flag) override;
   void GetHDCPState(const DisplaySnapshot& output,
                     GetHDCPStateCallback callback) override;
   void SetHDCPState(const DisplaySnapshot& output,
diff --git a/ui/display/types/display_constants.h b/ui/display/types/display_constants.h
index b747f92..f13516c 100644
--- a/ui/display/types/display_constants.h
+++ b/ui/display/types/display_constants.h
@@ -123,6 +123,13 @@
   kRefreshRateThrottleDisabled,
 };
 
+// A flag to allow ui/display and ozone to adjust the behavior of display
+// configurations.
+enum ModesetFlag {
+  kTestModeset = 1 << 0,
+  kCommitModeset = 1 << 1,
+};
+
 // Defines the float values closest to repeating decimal scale factors.
 constexpr float kDsf_1_777 = 1.77777779102325439453125f;
 constexpr float kDsf_2_252 = 2.2522523403167724609375f;
diff --git a/ui/display/types/native_display_delegate.h b/ui/display/types/native_display_delegate.h
index eddfe5a..0e3e78a 100644
--- a/ui/display/types/native_display_delegate.h
+++ b/ui/display/types/native_display_delegate.h
@@ -53,13 +53,14 @@
   // Note the query operation may be expensive and take over 60 milliseconds.
   virtual void GetDisplays(GetDisplaysCallback callback) = 0;
 
-  // Configures the display represented by |output| to use |mode| and positions
-  // the display to |origin| in the framebuffer. |mode| can be NULL, which
-  // represents disabling the display. The callback will return the status of
-  // the operation.
+  // Configures the displays represented by |config_requests| to use |mode| and
+  // positions the display to |origin| in the framebuffer. The callback will
+  // return the status of the operation. Adjusts the behavior of the commit
+  // according to |modeset_flag| (see display::ModesetFlag).
   virtual void Configure(
       const std::vector<display::DisplayConfigurationParams>& config_requests,
-      ConfigureCallback callback) = 0;
+      ConfigureCallback callback,
+      uint32_t modeset_flag) = 0;
 
   // Gets HDCP state of output.
   virtual void GetHDCPState(const DisplaySnapshot& output,
diff --git a/ui/ozone/demo/window_manager.cc b/ui/ozone/demo/window_manager.cc
index d99ec80bd..a3dd478 100644
--- a/ui/ozone/demo/window_manager.cc
+++ b/ui/ozone/demo/window_manager.cc
@@ -96,7 +96,8 @@
         config_request,
         base::BindOnce(&WindowManager::OnDisplayConfigured,
                        base::Unretained(this), display->display_id(),
-                       gfx::Rect(origin, display->native_mode()->size())));
+                       gfx::Rect(origin, display->native_mode()->size())),
+        display::kTestModeset | display::kCommitModeset);
     origin.Offset(display->native_mode()->size().width(), 0);
   }
   is_configuring_ = false;
diff --git a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc
index 7958340..54c70e6e 100644
--- a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc
+++ b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc
@@ -266,7 +266,8 @@
 }
 
 bool DrmGpuDisplayManager::ConfigureDisplays(
-    const std::vector<display::DisplayConfigurationParams>& config_requests) {
+    const std::vector<display::DisplayConfigurationParams>& config_requests,
+    uint32_t modeset_flag) {
   ScreenManager::ControllerConfigsList controllers_to_configure;
   for (const auto& config : config_requests) {
     int64_t display_id = config.id;
@@ -293,17 +294,16 @@
     controllers_to_configure.push_back(std::move(params));
   }
 
-  bool config_success =
-      screen_manager_->ConfigureDisplayControllers(controllers_to_configure);
+  bool config_success = screen_manager_->ConfigureDisplayControllers(
+      controllers_to_configure, modeset_flag);
 
-  if (displays_configured_callback_) {
+  if (displays_configured_callback_)
     displays_configured_callback_.Run();
-  }
 
-  for (const auto& controller : controllers_to_configure) {
-    if (config_success) {
+  const bool test_only = modeset_flag == display::kTestModeset;
+  if (!test_only && config_success) {
+    for (const auto& controller : controllers_to_configure)
       FindDisplay(controller.display_id)->SetOrigin(controller.origin);
-    }
   }
 
   return config_success;
diff --git a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.h b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.h
index 8bc7f5c..75d65c2 100644
--- a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.h
+++ b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.h
@@ -60,7 +60,8 @@
       const EventPropertyMap& event_props);
 
   bool ConfigureDisplays(
-      const std::vector<display::DisplayConfigurationParams>& config_requests);
+      const std::vector<display::DisplayConfigurationParams>& config_requests,
+      uint32_t modeset_flag);
   bool GetHDCPState(int64_t display_id,
                     display::HDCPState* state,
                     display::ContentProtectionMethod* protection_method);
diff --git a/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc b/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc
index 5a84f956..96ed4bc1 100644
--- a/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc
+++ b/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc
@@ -236,7 +236,8 @@
   controllers_to_enable.emplace_back(
       1 /*display_id*/, drm_, kCrtcIdBase, kConnectorIdBase, gfx::Point(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   drm_device_manager_ = std::make_unique<ui::DrmDeviceManager>(nullptr);
 
diff --git a/ui/ozone/platform/drm/gpu/drm_thread.cc b/ui/ozone/platform/drm/gpu/drm_thread.cc
index 1ec26a5..46488b1 100644
--- a/ui/ozone/platform/drm/gpu/drm_thread.cc
+++ b/ui/ozone/platform/drm/gpu/drm_thread.cc
@@ -390,10 +390,12 @@
 
 void DrmThread::ConfigureNativeDisplays(
     const std::vector<display::DisplayConfigurationParams>& config_requests,
+    uint32_t modeset_flag,
     base::OnceCallback<void(bool)> callback) {
   TRACE_EVENT0("drm", "DrmThread::ConfigureNativeDisplays");
 
-  bool config_success = display_manager_->ConfigureDisplays(config_requests);
+  bool config_success =
+      display_manager_->ConfigureDisplays(config_requests, modeset_flag);
   std::move(callback).Run(config_success);
 }
 
diff --git a/ui/ozone/platform/drm/gpu/drm_thread.h b/ui/ozone/platform/drm/gpu/drm_thread.h
index 44a2262..08e05452 100644
--- a/ui/ozone/platform/drm/gpu/drm_thread.h
+++ b/ui/ozone/platform/drm/gpu/drm_thread.h
@@ -161,6 +161,7 @@
   void RemoveGraphicsDevice(const base::FilePath& path) override;
   void ConfigureNativeDisplays(
       const std::vector<display::DisplayConfigurationParams>& config_requests,
+      uint32_t modeset_flag,
       ConfigureNativeDisplaysCallback callback) override;
   void GetHDCPState(int64_t display_id,
                     base::OnceCallback<void(int64_t,
diff --git a/ui/ozone/platform/drm/gpu/drm_window_unittest.cc b/ui/ozone/platform/drm/gpu/drm_window_unittest.cc
index 6419ab2..76d2e37d 100644
--- a/ui/ozone/platform/drm/gpu/drm_window_unittest.cc
+++ b/ui/ozone/platform/drm/gpu/drm_window_unittest.cc
@@ -136,7 +136,8 @@
   controllers_to_enable.emplace_back(
       1 /*display_id*/, drm_, kDefaultCrtc, kDefaultConnector, gfx::Point(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   drm_device_manager_ = std::make_unique<ui::DrmDeviceManager>(nullptr);
 
@@ -296,7 +297,8 @@
       2 /*display_id*/, drm, kDefaultCrtc, kDefaultConnector,
       gfx::Point(0, kDefaultMode.vdisplay),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   // Move window to the display on the new device.
   screen_manager_->GetWindow(kDefaultWidgetHandle)
diff --git a/ui/ozone/platform/drm/gpu/screen_manager.cc b/ui/ozone/platform/drm/gpu/screen_manager.cc
index 2bf960f..2b3cd7d 100644
--- a/ui/ozone/platform/drm/gpu/screen_manager.cc
+++ b/ui/ozone/platform/drm/gpu/screen_manager.cc
@@ -107,9 +107,11 @@
 }
 
 std::unique_ptr<base::trace_event::TracedValue> ParamsToTracedValue(
-    const ScreenManager::ControllerConfigsList& controllers_params) {
+    const ScreenManager::ControllerConfigsList& controllers_params,
+    uint32_t modeset_flag) {
   auto value = std::make_unique<base::trace_event::TracedValue>();
   auto scoped_array = value->BeginArrayScoped("param");
+  value->SetInteger("modeset_flag", modeset_flag);
   for (const auto& param : controllers_params) {
     auto scoped_dict = value->AppendDictionaryScoped();
     value->SetInteger("display_id", param.display_id);
@@ -314,9 +316,11 @@
 }
 
 bool ScreenManager::ConfigureDisplayControllers(
-    const ControllerConfigsList& controllers_params) {
+    const ControllerConfigsList& controllers_params,
+    uint32_t modeset_flag) {
   TRACE_EVENT_BEGIN2("drm", "ScreenManager::ConfigureDisplayControllers",
-                     "params", ParamsToTracedValue(controllers_params),
+                     "params",
+                     ParamsToTracedValue(controllers_params, modeset_flag),
                      "before", base::trace_event::ToTracedValue(this));
 
   // Split them to different lists unique to each DRM Device.
@@ -332,34 +336,39 @@
     displays_for_drm_devices[params.drm].emplace_back(params);
   }
 
+  const bool commit_modeset = modeset_flag & display::kCommitModeset;
   bool config_success = true;
   // Perform display configurations together for the same DRM only.
   for (const auto& configs_on_drm : displays_for_drm_devices) {
     const ControllerConfigsList& drm_controllers_params = configs_on_drm.second;
-    VLOG(1) << "DRM configuring: "
+    VLOG(1) << "DRM " << (commit_modeset ? "configuring: " : "testing: ")
             << GenerateConfigurationLogForController(drm_controllers_params);
 
-    bool test_modeset = TestAndSetPreferredModifiers(drm_controllers_params) ||
-                        TestAndSetLinearModifier(drm_controllers_params);
-    config_success &= test_modeset;
-    if (!test_modeset) {
-      VLOG(1) << "Test modeset failed.";
-      continue;
+    if (modeset_flag & display::kTestModeset) {
+      bool test_modeset =
+          TestAndSetPreferredModifiers(drm_controllers_params) ||
+          TestAndSetLinearModifier(drm_controllers_params);
+      config_success &= test_modeset;
+      VLOG(1) << "Test-modeset " << (test_modeset ? "succeeded." : "failed.");
+      if (!test_modeset)
+        continue;
     }
 
-    bool can_modeset_with_overlays =
-        TestModesetWithOverlays(drm_controllers_params);
-    bool real_modeset =
-        Modeset(drm_controllers_params, can_modeset_with_overlays);
-    config_success &= real_modeset;
-    if (real_modeset) {
-      VLOG(1) << "Modeset succeeded.";
-    } else {
-      LOG(ERROR) << "Modeset failed after a successful test-modeset for.";
+    if (commit_modeset) {
+      bool can_modeset_with_overlays =
+          TestModesetWithOverlays(drm_controllers_params);
+      bool modeset_commit_result =
+          Modeset(drm_controllers_params, can_modeset_with_overlays);
+      config_success &= modeset_commit_result;
+      if (modeset_commit_result) {
+        VLOG(1) << "Modeset succeeded.";
+      } else {
+        LOG(ERROR) << "Modeset commit failed after a successful test-modeset.";
+      }
     }
   }
 
-  if (config_success)
+  if (commit_modeset && config_success)
     UpdateControllerToWindowMapping();
 
   TRACE_EVENT_END2("drm", "ScreenManager::ConfigureDisplayControllers", "after",
diff --git a/ui/ozone/platform/drm/gpu/screen_manager.h b/ui/ozone/platform/drm/gpu/screen_manager.h
index 6c3881f..ada15d9 100644
--- a/ui/ozone/platform/drm/gpu/screen_manager.h
+++ b/ui/ozone/platform/drm/gpu/screen_manager.h
@@ -72,9 +72,12 @@
   // controllers are removed since they were disconnected.
   void RemoveDisplayControllers(const CrtcsWithDrmList& controllers_to_remove);
 
-  // Enables/Disables the display controller based on if a mode exists.
+  // Enables/Disables the display controller based on if a mode exists. Adjusts
+  // the behavior of the commit according to |modeset_flag| (see
+  // display::ModesetFlag).
   bool ConfigureDisplayControllers(
-      const ControllerConfigsList& controllers_params);
+      const ControllerConfigsList& controllers_params,
+      uint32_t modeset_flag);
 
   // Returns a reference to the display controller configured to display within
   // |bounds|. If the caller caches the controller it must also register as an
diff --git a/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc b/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc
index dc0c7ff0..3d0258b8 100644
--- a/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc
+++ b/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc
@@ -253,7 +253,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
   EXPECT_EQ(drm_->get_test_modeset_count(), 1);
   EXPECT_EQ(drm_->get_commit_modeset_count(), 1);
 
@@ -274,7 +275,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds()));
   EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds()));
@@ -297,7 +299,8 @@
       kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
       GetSecondaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(secondary_mode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   EXPECT_EQ(drm_->get_test_modeset_count(), 1);
   EXPECT_EQ(drm_->get_commit_modeset_count(), 1);
@@ -329,8 +332,8 @@
       kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
       GetSecondaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(secondary_mode));
-  EXPECT_TRUE(
-      screen_manager_->ConfigureDisplayControllers(controllers_to_enable));
+  EXPECT_TRUE(screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset));
 
   EXPECT_EQ(drm_->get_test_modeset_count(), 1);
   EXPECT_EQ(drm_->get_commit_modeset_count(), 1);
@@ -358,8 +361,8 @@
       kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
       GetSecondaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(secondary_mode));
-  EXPECT_TRUE(
-      screen_manager_->ConfigureDisplayControllers(controllers_to_enable));
+  EXPECT_TRUE(screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset));
 
   // Testing for a failed test-modeset with modifiers + a fallback to Linear
   // Modifier and a modeset commit.
@@ -387,8 +390,8 @@
       kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
       GetSecondaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(secondary_mode));
-  EXPECT_FALSE(
-      screen_manager_->ConfigureDisplayControllers(controllers_to_enable));
+  EXPECT_FALSE(screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset));
 
   // Testing for a failed test-modeset with modifiers + failed test-modeset with
   // Linear Modifier and no modeset due to failed tests.
@@ -406,7 +409,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds()));
 
@@ -427,7 +431,8 @@
         kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
         GetPrimaryBounds().origin(),
         std::make_unique<drmModeModeInfo>(kDefaultMode));
-    screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+    screen_manager_->ConfigureDisplayControllers(
+        controllers_to_enable, display::kTestModeset | display::kCommitModeset);
   }
 
   int test_modeset_count_before_disable = drm_->get_test_modeset_count();
@@ -436,7 +441,8 @@
   ScreenManager::ControllerConfigsList controllers_to_enable;
   controllers_to_enable.emplace_back(kPrimaryDisplayId, drm_, kPrimaryCrtc,
                                      kPrimaryConnector, gfx::Point(), nullptr);
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   EXPECT_EQ(drm_->get_test_modeset_count(),
             test_modeset_count_before_disable + 1);
@@ -462,7 +468,8 @@
       kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
       GetSecondaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   int modeset_count_after_enable = drm_->get_commit_modeset_count();
   ScreenManager::CrtcsWithDrmList controllers_to_remove;
@@ -493,7 +500,8 @@
         kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
         GetSecondaryBounds().origin(),
         std::make_unique<drmModeModeInfo>(kDefaultMode));
-    screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+    screen_manager_->ConfigureDisplayControllers(
+        controllers_to_enable, display::kTestModeset | display::kCommitModeset);
   }
 
   int test_modeset_count_before_disable = drm_->get_test_modeset_count();
@@ -505,7 +513,8 @@
   controllers_to_enable.emplace_back(kSecondaryDisplayId, drm_, kSecondaryCrtc,
                                      kSecondaryConnector, gfx::Point(),
                                      nullptr);
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   EXPECT_EQ(drm_->get_test_modeset_count(),
             test_modeset_count_before_disable + 1);
@@ -526,7 +535,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   uint32_t framebuffer = drm_->current_framebuffer();
 
@@ -535,7 +545,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   // Should not hold onto buffers.
   EXPECT_NE(framebuffer, drm_->current_framebuffer());
@@ -556,7 +567,8 @@
         kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
         GetPrimaryBounds().origin(),
         std::make_unique<drmModeModeInfo>(kDefaultMode));
-    screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+    screen_manager_->ConfigureDisplayControllers(
+        controllers_to_enable, display::kTestModeset | display::kCommitModeset);
   }
   auto new_mode = kDefaultMode;
   new_mode.vdisplay = new_mode.vdisplay++;
@@ -567,7 +579,8 @@
         kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
         GetPrimaryBounds().origin(),
         std::make_unique<drmModeModeInfo>(new_mode));
-    screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+    screen_manager_->ConfigureDisplayControllers(
+        controllers_to_enable, display::kTestModeset | display::kCommitModeset);
   }
 
   gfx::Rect new_bounds(0, 0, new_mode.hdisplay, new_mode.vdisplay);
@@ -597,7 +610,8 @@
       kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(secondary_mode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds()));
   EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds()));
@@ -625,7 +639,8 @@
       kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
       GetSecondaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(secondary_mode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds()));
   EXPECT_TRUE(screen_manager_->GetDisplayController(GetSecondaryBounds()));
@@ -641,7 +656,8 @@
       kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(transition1_secondary_mode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds()));
   EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds()));
@@ -657,7 +673,8 @@
       kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(transition2_secondary_mode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds()));
   EXPECT_TRUE(screen_manager_->GetDisplayController(GetSecondaryBounds()));
@@ -686,7 +703,8 @@
       kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(secondary_mode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   ui::HardwareDisplayController* controller =
       screen_manager_->GetDisplayController(GetPrimaryBounds());
@@ -717,7 +735,8 @@
       kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(secondary_mode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   ScreenManager::CrtcsWithDrmList controllers_to_remove;
   controllers_to_remove.emplace_back(kSecondaryCrtc, drm_);
@@ -751,14 +770,16 @@
         kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
         GetPrimaryBounds().origin(),
         std::make_unique<drmModeModeInfo>(secondary_mode));
-    screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+    screen_manager_->ConfigureDisplayControllers(
+        controllers_to_enable, display::kTestModeset | display::kCommitModeset);
   }
 
   // Disable display Controller.
   ScreenManager::ControllerConfigsList controllers_to_enable;
   controllers_to_enable.emplace_back(0, drm_, kSecondaryCrtc, 0, gfx::Point(),
                                      nullptr);
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   ui::HardwareDisplayController* controller =
       screen_manager_->GetDisplayController(GetPrimaryBounds());
@@ -788,7 +809,8 @@
         kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
         GetSecondaryBounds().origin(),
         std::make_unique<drmModeModeInfo>(secondary_mode));
-    screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+    screen_manager_->ConfigureDisplayControllers(
+        controllers_to_enable, display::kTestModeset | display::kCommitModeset);
   }
 
   {
@@ -799,7 +821,8 @@
     controllers_to_enable.emplace_back(
         kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
         GetPrimaryBounds().origin(), std::move(new_mode));
-    screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+    screen_manager_->ConfigureDisplayControllers(
+        controllers_to_enable, display::kTestModeset | display::kCommitModeset);
   }
 
   EXPECT_FALSE(
@@ -815,7 +838,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   uint32_t framebuffer = drm_->current_framebuffer();
 
@@ -823,7 +847,8 @@
   // Disable display controller.
   controllers_to_enable.emplace_back(0, drm_, kPrimaryCrtc, 0, gfx::Point(),
                                      nullptr);
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
   EXPECT_EQ(0u, drm_->current_framebuffer());
 
   controllers_to_enable.clear();
@@ -832,7 +857,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(reenable_mode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   // Buffers are released when disabled.
   EXPECT_NE(framebuffer, drm_->current_framebuffer());
@@ -855,13 +881,15 @@
         kSecondaryDisplayId, drm_, kSecondaryCrtc, kSecondaryConnector,
         GetPrimaryBounds().origin(),
         std::make_unique<drmModeModeInfo>(secondary_mode));
-    screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+    screen_manager_->ConfigureDisplayControllers(
+        controllers_to_enable, display::kTestModeset | display::kCommitModeset);
   }
   {
     ScreenManager::ControllerConfigsList controllers_to_enable;
     controllers_to_enable.emplace_back(0, drm_, kPrimaryCrtc, 0, gfx::Point(),
                                        nullptr);
-    screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+    screen_manager_->ConfigureDisplayControllers(
+        controllers_to_enable, display::kTestModeset | display::kCommitModeset);
   }
 
   ui::HardwareDisplayController* controller =
@@ -876,7 +904,8 @@
         kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
         GetPrimaryBounds().origin(),
         std::make_unique<drmModeModeInfo>(reenable_mode));
-    screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+    screen_manager_->ConfigureDisplayControllers(
+        controllers_to_enable, display::kTestModeset | display::kCommitModeset);
   }
 
   EXPECT_TRUE(controller);
@@ -916,7 +945,8 @@
       kSecondaryDisplayId + 1, drm2, kSecondaryCrtc + 1,
       kSecondaryConnector + 1, GetSecondaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(secondary_mode2));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   EXPECT_EQ(drm_->get_set_crtc_call_count(), 1);
   EXPECT_EQ(drm2->get_set_crtc_call_count(), 2);
@@ -944,7 +974,8 @@
       kSecondaryDisplayId, drm2, kPrimaryCrtc, kPrimaryConnector,
       GetSecondaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(secondary_mode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   ui::HardwareDisplayController* controller1 =
       screen_manager_->GetDisplayController(GetPrimaryBounds());
@@ -971,7 +1002,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   EXPECT_TRUE(screen_manager_->GetWindow(1)->GetController());
 
@@ -996,7 +1028,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   EXPECT_FALSE(screen_manager_->GetWindow(1)->GetController());
 
@@ -1023,7 +1056,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   bool window1_has_controller = screen_manager_->GetWindow(1)->GetController();
   bool window2_has_controller = screen_manager_->GetWindow(2)->GetController();
@@ -1052,7 +1086,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   EXPECT_TRUE(screen_manager_->GetWindow(window_id)->GetController());
 
@@ -1081,7 +1116,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   EXPECT_TRUE(screen_manager_->GetWindow(1)->GetController());
   // There is a buffer after initial config.
@@ -1093,7 +1129,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   // There is a new buffer after we configured with the same mode but no
   // pending frames on the window.
@@ -1124,7 +1161,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   EXPECT_EQ(buffer->opaque_framebuffer_id(), drm_->current_framebuffer());
 
@@ -1152,7 +1190,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   // ScreenManager::GetModesetBuffer (called to get a buffer to
   // modeset the new controller) should reject the buffer with
@@ -1180,7 +1219,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  screen_manager_->ConfigureDisplayControllers(controllers_to_enable);
+  screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
   // When a window that had no controller becomes associated with a new
   // controller, expect the crtc to be modeset once.
@@ -1240,7 +1280,8 @@
     controllers_to_enable.emplace_back(kSecondaryDisplayId, drm_device2, kCrtc2,
                                        kConnector2, gfx::Point(0, 1140),
                                        std::move(secondary_mode));
-    screen_manager.ConfigureDisplayControllers(controllers_to_enable);
+    screen_manager.ConfigureDisplayControllers(
+        controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
     auto window2 =
         std::make_unique<DrmWindow>(2, &drm_device_manager, &screen_manager);
@@ -1272,7 +1313,8 @@
     controllers_to_enable.emplace_back(kSecondaryDisplayId, drm_device2, kCrtc2,
                                        kConnector2, gfx::Point(0, 0),
                                        std::move(secondary_mode));
-    screen_manager.ConfigureDisplayControllers(controllers_to_enable);
+    screen_manager.ConfigureDisplayControllers(
+        controllers_to_enable, display::kTestModeset | display::kCommitModeset);
 
     screen_manager.GetWindow(1)->SetBounds(gfx::Rect(0, 0, 1920, 1080));
     screen_manager.GetWindow(1)->SetBounds(gfx::Rect(0, 0, 1920, 1080));
@@ -1288,7 +1330,8 @@
     controllers_to_enable.emplace_back(kPrimaryDisplayId, drm_device1, kCrtc1,
                                        kConnector1, gfx::Point(0, 0),
                                        std::move(primary_mode));
-    screen_manager.ConfigureDisplayControllers(controllers_to_enable);
+    screen_manager.ConfigureDisplayControllers(
+        controllers_to_enable, display::kTestModeset | display::kCommitModeset);
     // At this point, both displays are in the same location.
     {
       HardwareDisplayController* controller =
@@ -1305,7 +1348,8 @@
     controllers_to_enable.emplace_back(kSecondaryDisplayId, drm_device2, kCrtc2,
                                        kConnector2, gfx::Point(0, 1140),
                                        std::move(secondary_mode));
-    screen_manager.ConfigureDisplayControllers(controllers_to_enable);
+    screen_manager.ConfigureDisplayControllers(
+        controllers_to_enable, display::kTestModeset | display::kCommitModeset);
     auto window3 =
         std::make_unique<DrmWindow>(3, &drm_device_manager, &screen_manager);
     window3->Initialize();
@@ -1385,7 +1429,8 @@
     controllers_to_enable.emplace_back(kSecondaryDisplayId, drm_device, kCrtc2,
                                        kConnector2, gfx::Point(0, 0),
                                        std::move(secondary_mode));
-    screen_manager.ConfigureDisplayControllers(controllers_to_enable);
+    screen_manager.ConfigureDisplayControllers(
+        controllers_to_enable, display::kTestModeset | display::kCommitModeset);
   }
 
   EXPECT_NE(0u, drm_device->GetFramebufferForCrtc(kCrtc1));
@@ -1410,8 +1455,9 @@
         kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
         GetPrimaryBounds().origin(),
         std::make_unique<drmModeModeInfo>(kDefaultMode));
-    ASSERT_TRUE(
-        screen_manager_->ConfigureDisplayControllers(controllers_to_enable));
+    ASSERT_TRUE(screen_manager_->ConfigureDisplayControllers(
+        controllers_to_enable,
+        display::kTestModeset | display::kCommitModeset));
   }
 
   scoped_refptr<DrmFramebuffer> first_post_modeset_buffer =
@@ -1427,8 +1473,9 @@
         kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
         GetSecondaryBounds().origin(),
         std::make_unique<drmModeModeInfo>(kDefaultMode));
-    ASSERT_FALSE(
-        screen_manager_->ConfigureDisplayControllers(controllers_to_enable));
+    ASSERT_FALSE(screen_manager_->ConfigureDisplayControllers(
+        controllers_to_enable,
+        display::kTestModeset | display::kCommitModeset));
   }
 
   scoped_refptr<DrmFramebuffer> second_post_modeset_buffer =
@@ -1459,8 +1506,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  ASSERT_TRUE(
-      screen_manager_->ConfigureDisplayControllers(controllers_to_enable));
+  ASSERT_TRUE(screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset));
 
   EXPECT_TRUE(base::Contains(drm_->plane_manager()
                                  ->GetCrtcStateForCrtcId(kPrimaryCrtc)
@@ -1502,8 +1549,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  ASSERT_TRUE(
-      screen_manager_->ConfigureDisplayControllers(controllers_to_enable));
+  ASSERT_TRUE(screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset));
 
   EXPECT_TRUE(base::Contains(drm_->plane_manager()
                                  ->GetCrtcStateForCrtcId(kPrimaryCrtc)
@@ -1539,8 +1586,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  ASSERT_TRUE(
-      screen_manager_->ConfigureDisplayControllers(controllers_to_enable));
+  ASSERT_TRUE(screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset));
   ASSERT_TRUE(base::Contains(drm_->plane_manager()
                                  ->GetCrtcStateForCrtcId(kPrimaryCrtc)
                                  .modeset_framebuffers,
@@ -1584,8 +1631,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  ASSERT_TRUE(
-      screen_manager_->ConfigureDisplayControllers(controllers_to_enable));
+  ASSERT_TRUE(screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset));
 
   EXPECT_TRUE(base::Contains(drm_->plane_manager()
                                  ->GetCrtcStateForCrtcId(kPrimaryCrtc)
@@ -1635,8 +1682,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  EXPECT_TRUE(
-      screen_manager_->ConfigureDisplayControllers(controllers_to_enable));
+  EXPECT_TRUE(screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset));
 
   EXPECT_TRUE(base::Contains(drm_->plane_manager()
                                  ->GetCrtcStateForCrtcId(kPrimaryCrtc)
@@ -1686,8 +1733,8 @@
       kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
       GetPrimaryBounds().origin(),
       std::make_unique<drmModeModeInfo>(kDefaultMode));
-  ASSERT_TRUE(
-      screen_manager_->ConfigureDisplayControllers(controllers_to_enable));
+  ASSERT_TRUE(screen_manager_->ConfigureDisplayControllers(
+      controllers_to_enable, display::kTestModeset | display::kCommitModeset));
 
   EXPECT_FALSE(base::Contains(drm_->plane_manager()
                                   ->GetCrtcStateForCrtcId(kPrimaryCrtc)
diff --git a/ui/ozone/platform/drm/host/drm_display_host_manager.cc b/ui/ozone/platform/drm/host/drm_display_host_manager.cc
index bb5d36d..26e4677 100644
--- a/ui/ozone/platform/drm/host/drm_display_host_manager.cc
+++ b/ui/ozone/platform/drm/host/drm_display_host_manager.cc
@@ -311,7 +311,8 @@
 
 void DrmDisplayHostManager::ConfigureDisplays(
     const std::vector<display::DisplayConfigurationParams>& config_requests,
-    display::ConfigureCallback callback) {
+    display::ConfigureCallback callback,
+    uint32_t modeset_flag) {
   for (auto& config : config_requests) {
     if (GetDisplay(config.id)->is_dummy()) {
       std::move(callback).Run(true);
@@ -319,7 +320,8 @@
     }
   }
 
-  proxy_->GpuConfigureNativeDisplays(config_requests, std::move(callback));
+  proxy_->GpuConfigureNativeDisplays(config_requests, std::move(callback),
+                                     modeset_flag);
 }
 
 void DrmDisplayHostManager::OnDeviceEvent(const DeviceEvent& event) {
diff --git a/ui/ozone/platform/drm/host/drm_display_host_manager.h b/ui/ozone/platform/drm/host/drm_display_host_manager.h
index 1c72804..58d92b29 100644
--- a/ui/ozone/platform/drm/host/drm_display_host_manager.h
+++ b/ui/ozone/platform/drm/host/drm_display_host_manager.h
@@ -55,7 +55,8 @@
   void UpdateDisplays(display::GetDisplaysCallback callback);
   void ConfigureDisplays(
       const std::vector<display::DisplayConfigurationParams>& config_requests,
-      display::ConfigureCallback callback);
+      display::ConfigureCallback callback,
+      uint32_t modeset_flag);
 
   // DeviceEventObserver overrides:
   void OnDeviceEvent(const DeviceEvent& event) override;
diff --git a/ui/ozone/platform/drm/host/drm_native_display_delegate.cc b/ui/ozone/platform/drm/host/drm_native_display_delegate.cc
index 55c97ff..0654218 100644
--- a/ui/ozone/platform/drm/host/drm_native_display_delegate.cc
+++ b/ui/ozone/platform/drm/host/drm_native_display_delegate.cc
@@ -52,8 +52,10 @@
 
 void DrmNativeDisplayDelegate::Configure(
     const std::vector<display::DisplayConfigurationParams>& config_requests,
-    display::ConfigureCallback callback) {
-  display_manager_->ConfigureDisplays(config_requests, std::move(callback));
+    display::ConfigureCallback callback,
+    uint32_t modeset_flag) {
+  display_manager_->ConfigureDisplays(config_requests, std::move(callback),
+                                      modeset_flag);
 }
 
 void DrmNativeDisplayDelegate::GetHDCPState(
diff --git a/ui/ozone/platform/drm/host/drm_native_display_delegate.h b/ui/ozone/platform/drm/host/drm_native_display_delegate.h
index fb87ece..7638179 100644
--- a/ui/ozone/platform/drm/host/drm_native_display_delegate.h
+++ b/ui/ozone/platform/drm/host/drm_native_display_delegate.h
@@ -34,7 +34,8 @@
   void GetDisplays(display::GetDisplaysCallback callback) override;
   void Configure(
       const std::vector<display::DisplayConfigurationParams>& config_requests,
-      display::ConfigureCallback callback) override;
+      display::ConfigureCallback callback,
+      uint32_t modeset_flag) override;
   void GetHDCPState(const display::DisplaySnapshot& output,
                     display::GetHDCPStateCallback callback) override;
   void SetHDCPState(const display::DisplaySnapshot& output,
diff --git a/ui/ozone/platform/drm/host/gpu_thread_adapter.h b/ui/ozone/platform/drm/host/gpu_thread_adapter.h
index eea97b1..763fb50 100644
--- a/ui/ozone/platform/drm/host/gpu_thread_adapter.h
+++ b/ui/ozone/platform/drm/host/gpu_thread_adapter.h
@@ -51,7 +51,8 @@
   // Services needed by DrmDisplayHost
   virtual void GpuConfigureNativeDisplays(
       const std::vector<display::DisplayConfigurationParams>& config_requests,
-      display::ConfigureCallback callback) = 0;
+      display::ConfigureCallback callback,
+      uint32_t modeset_flag) = 0;
   virtual bool GpuGetHDCPState(int64_t display_id) = 0;
   virtual bool GpuSetHDCPState(
       int64_t display_id,
diff --git a/ui/ozone/platform/drm/host/host_drm_device.cc b/ui/ozone/platform/drm/host/host_drm_device.cc
index ce0b642..a29f707f 100644
--- a/ui/ozone/platform/drm/host/host_drm_device.cc
+++ b/ui/ozone/platform/drm/host/host_drm_device.cc
@@ -129,10 +129,12 @@
 
 void HostDrmDevice::GpuConfigureNativeDisplays(
     const std::vector<display::DisplayConfigurationParams>& config_requests,
-    display::ConfigureCallback callback) {
+    display::ConfigureCallback callback,
+    uint32_t modeset_flag) {
   DCHECK_CALLED_ON_VALID_THREAD(on_ui_thread_);
   if (IsConnected()) {
-    drm_device_->ConfigureNativeDisplays(config_requests, std::move(callback));
+    drm_device_->ConfigureNativeDisplays(config_requests, modeset_flag,
+                                         std::move(callback));
   } else {
     // Post this task to protect the callstack from accumulating too many
     // recursive calls to ConfigureDisplaysTask::Run() in cases in which the GPU
diff --git a/ui/ozone/platform/drm/host/host_drm_device.h b/ui/ozone/platform/drm/host/host_drm_device.h
index d34dfb6..b0f81f4d 100644
--- a/ui/ozone/platform/drm/host/host_drm_device.h
+++ b/ui/ozone/platform/drm/host/host_drm_device.h
@@ -68,7 +68,8 @@
   // Services needed by DrmDisplayHost
   void GpuConfigureNativeDisplays(
       const std::vector<display::DisplayConfigurationParams>& config_requests,
-      display::ConfigureCallback callback) override;
+      display::ConfigureCallback callback,
+      uint32_t modeset_flag) override;
   bool GpuGetHDCPState(int64_t display_id) override;
   bool GpuSetHDCPState(
       int64_t display_id,
diff --git a/ui/ozone/platform/drm/mojom/drm_device.mojom b/ui/ozone/platform/drm/mojom/drm_device.mojom
index cd64106..6d4c210 100644
--- a/ui/ozone/platform/drm/mojom/drm_device.mojom
+++ b/ui/ozone/platform/drm/mojom/drm_device.mojom
@@ -59,9 +59,11 @@
       (bool should_trigger);
 
   // Configures (Enables/Disables) DRM displays, returns whether or not the
-  // configuration was successful.
+  // configuration was successful. Adjusts the behavior of the commit according
+  // to |modeset_flag| (see display::ModesetFlag).
   ConfigureNativeDisplays(
-      array<display.mojom.DisplayConfigurationParams> config_requests) =>
+      array<display.mojom.DisplayConfigurationParams> config_requests,
+      uint32 modeset_flag) =>
     (bool config_success);
 
   // Gets high-definition content protection (HDCP) (DRM as in
diff --git a/ui/ozone/platform/drm/test/vkms_tests.cc b/ui/ozone/platform/drm/test/vkms_tests.cc
index 49940e1..d0faea4 100644
--- a/ui/ozone/platform/drm/test/vkms_tests.cc
+++ b/ui/ozone/platform/drm/test/vkms_tests.cc
@@ -72,7 +72,8 @@
       EXPECT_TRUE(success) << "Unable to set up displays.";
       run_loop.Quit();
     });
-    drm_device_->ConfigureNativeDisplays(params, callback);
+    drm_device_->ConfigureNativeDisplays(
+        params, display::kTestModeset | display::kCommitModeset, callback);
     run_loop.Run();
 
     return RefreshDisplays();