Commit 351c90f7 authored by Mark Yacoub's avatar Mark Yacoub Committed by Commit Bot

Do not create a display snapshot with invalid connector.

When getting displays, if an update for a Drm Display has an invalid connector, do not create a Display Snapshot for it.
This prevents attempts to use displays with invalid connectors.

Bug: 1105427
Change-Id: Id3422686b019942e924d3e98172394f6caa23eed
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2362442
Commit-Queue: Mark Yacoub <markyacoub@google.com>
Reviewed-by: default avatarDaniel Nicoara <dnicoara@chromium.org>
Cr-Commit-Position: refs/heads/master@{#799864}
parent 9f52c7e4
......@@ -105,10 +105,10 @@ DrmDisplay::DrmDisplay(ScreenManager* screen_manager,
drm_(drm),
current_color_space_(gfx::ColorSpace::CreateSRGB()) {}
DrmDisplay::~DrmDisplay() {
}
DrmDisplay::~DrmDisplay() = default;
uint32_t DrmDisplay::connector() const {
DCHECK(connector_);
return connector_->connector_id;
}
......@@ -118,12 +118,13 @@ std::unique_ptr<display::DisplaySnapshot> DrmDisplay::Update(
std::unique_ptr<display::DisplaySnapshot> params = CreateDisplaySnapshot(
info, drm_->get_fd(), drm_->device_path(), device_index, origin_);
crtc_ = info->crtc()->crtc_id;
// TODO(dcastagna): consider taking ownership of |info->connector()|
// TODO(crbug.com/1119499): consider taking ownership of |info->connector()|
connector_ = ScopedDrmConnectorPtr(
drm_->GetConnector(info->connector()->connector_id));
if (!connector_) {
PLOG(ERROR) << "Failed to get connector "
<< info->connector()->connector_id;
return nullptr;
}
display_id_ = params->display_id();
......@@ -229,7 +230,8 @@ void DrmDisplay::SetGammaCorrection(
// When both |degamma_lut| and |gamma_lut| are empty they are interpreted as
// "linear/pass-thru" [1]. If the display |is_hdr_capable_| we have to make
// sure the |current_color_space_| is considered properly.
// [1] https://www.kernel.org/doc/html/v4.19/gpu/drm-kms.html#color-management-properties
// [1]
// https://www.kernel.org/doc/html/v4.19/gpu/drm-kms.html#color-management-properties
if (degamma_lut.empty() && gamma_lut.empty() && is_hdr_capable_)
SetColorSpace(current_color_space_);
else
......
......@@ -102,8 +102,14 @@ MovableDisplaySnapshots DrmGpuDisplayManager::GetDisplays() {
} else {
displays_.push_back(std::make_unique<DrmDisplay>(screen_manager_, drm));
}
params_list.push_back(
displays_.back()->Update(display_info.get(), device_index));
auto display_snapshot =
displays_.back()->Update(display_info.get(), device_index);
if (display_snapshot) {
params_list.push_back(std::move(display_snapshot));
} else {
displays_.pop_back();
}
}
device_index++;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment