#include "ui/ozone/platform/dri/chromeos/display_message_handler.h"
-#include "ui/display/types/chromeos/display_mode.h"
-#include "ui/display/types/chromeos/display_snapshot.h"
+#include "ui/display/types/display_mode.h"
+#include "ui/display/types/display_snapshot.h"
#include "ui/ozone/common/chromeos/display_util.h"
#include "ui/ozone/common/gpu/ozone_gpu_message_params.h"
#include "ui/ozone/common/gpu/ozone_gpu_messages.h"
namespace ui {
+namespace {
+
+class FindDisplayById {
+ public:
+ FindDisplayById(int64_t display_id) : display_id_(display_id) {}
+
+ bool operator()(const DisplaySnapshot_Params& display) const {
+ return display.display_id == display_id_;
+ }
+
+ private:
+ int64_t display_id_;
+};
+
+} // namespace
+
DisplayMessageHandler::DisplayMessageHandler(
scoped_ptr<NativeDisplayDelegateDri> ndd)
: sender_(NULL),
ndd_->ForceDPMSOn();
}
-void DisplayMessageHandler::OnRefreshNativeDisplays() {
+void DisplayMessageHandler::OnRefreshNativeDisplays(
+ const std::vector<DisplaySnapshot_Params>& cached_displays) {
std::vector<DisplaySnapshot_Params> displays;
std::vector<DisplaySnapshot*> native_displays = ndd_->GetDisplays();
+
+ // If any of the cached displays are in the list of new displays then apply
+ // their configuration immediately.
+ for (size_t i = 0; i < native_displays.size(); ++i) {
+ std::vector<DisplaySnapshot_Params>::const_iterator it =
+ std::find_if(cached_displays.begin(),
+ cached_displays.end(),
+ FindDisplayById(native_displays[i]->display_id()));
+
+ if (it == cached_displays.end())
+ continue;
+
+ if (it->has_current_mode)
+ OnConfigureNativeDisplay(it->display_id, it->current_mode, it->origin);
+ else
+ OnDisableNativeDisplay(it->display_id);
+ }
+
for (size_t i = 0; i < native_displays.size(); ++i)
displays.push_back(GetDisplaySnapshotParams(*native_displays[i]));