Skip to content

Commit

Permalink
[Ozone-Dri] Store the DRM wrapper into the display snapshot
Browse files Browse the repository at this point in the history
Once multiple DRM device are present, each display will need to use its
own device to configure itself.

BUG=427959

Review URL: https://codereview.chromium.org/897023004

Cr-Commit-Position: refs/heads/master@{#315651}
  • Loading branch information
dnicoara authored and Commit bot committed Feb 10, 2015
1 parent a7f02c4 commit c9a5331
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 13 deletions.
5 changes: 3 additions & 2 deletions ui/ozone/platform/dri/display_snapshot_dri.cc
Original file line number Diff line number Diff line change
Expand Up @@ -67,20 +67,21 @@ bool IsAspectPreserving(DriWrapper* drm, drmModeConnector* connector) {

} // namespace

DisplaySnapshotDri::DisplaySnapshotDri(DriWrapper* drm,
DisplaySnapshotDri::DisplaySnapshotDri(const scoped_refptr<DriWrapper>& drm,
drmModeConnector* connector,
drmModeCrtc* crtc,
uint32_t index)
: DisplaySnapshot(index,
gfx::Point(crtc->x, crtc->y),
gfx::Size(connector->mmWidth, connector->mmHeight),
GetDisplayType(connector),
IsAspectPreserving(drm, connector),
IsAspectPreserving(drm.get(), connector),
false,
std::string(),
std::vector<const DisplayMode*>(),
nullptr,
nullptr),
drm_(drm),
connector_(connector->connector_id),
crtc_(crtc->crtc_id),
dpms_property_(drm->GetProperty(connector, "DPMS")) {
Expand Down
5 changes: 4 additions & 1 deletion ui/ozone/platform/dri/display_snapshot_dri.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#ifndef UI_OZONE_PLATFORM_DRI_DISPLAY_SNAPSHOT_DRI_H_
#define UI_OZONE_PLATFORM_DRI_DISPLAY_SNAPSHOT_DRI_H_

#include "base/memory/ref_counted.h"
#include "ui/display/types/display_snapshot.h"
#include "ui/ozone/platform/dri/scoped_drm_types.h"

Expand All @@ -14,12 +15,13 @@ class DriWrapper;

class DisplaySnapshotDri : public DisplaySnapshot {
public:
DisplaySnapshotDri(DriWrapper* drm,
DisplaySnapshotDri(const scoped_refptr<DriWrapper>& drm,
drmModeConnector* connector,
drmModeCrtc* crtc,
uint32_t index);
~DisplaySnapshotDri() override;

scoped_refptr<DriWrapper> drm() const { return drm_; }
// Native properties of a display used by the DRI implementation in
// configuring this display.
uint32_t connector() const { return connector_; }
Expand All @@ -30,6 +32,7 @@ class DisplaySnapshotDri : public DisplaySnapshot {
std::string ToString() const override;

private:
scoped_refptr<DriWrapper> drm_;
uint32_t connector_;
uint32_t crtc_;
ScopedDrmPropertyPtr dpms_property_;
Expand Down
25 changes: 15 additions & 10 deletions ui/ozone/platform/dri/native_display_delegate_dri.cc
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,9 @@ void NativeDisplayDelegateDri::ForceDPMSOn() {
for (size_t i = 0; i < cached_displays_.size(); ++i) {
DisplaySnapshotDri* dri_output = cached_displays_[i];
if (dri_output->dpms_property())
dri_->SetProperty(dri_output->connector(),
dri_output->dpms_property()->prop_id, DRM_MODE_DPMS_ON);
dri_output->drm()->SetProperty(dri_output->connector(),
dri_output->dpms_property()->prop_id,
DRM_MODE_DPMS_ON);
}
}

Expand Down Expand Up @@ -199,8 +200,9 @@ bool NativeDisplayDelegateDri::Configure(const DisplaySnapshot& output,
}
} else {
if (dri_output.dpms_property()) {
dri_->SetProperty(dri_output.connector(),
dri_output.dpms_property()->prop_id, DRM_MODE_DPMS_OFF);
dri_output.drm()->SetProperty(dri_output.connector(),
dri_output.dpms_property()->prop_id,
DRM_MODE_DPMS_OFF);
}

if (!screen_manager_->DisableDisplayController(dri_output.crtc())) {
Expand All @@ -227,14 +229,15 @@ bool NativeDisplayDelegateDri::GetHDCPState(const DisplaySnapshot& output,
const DisplaySnapshotDri& dri_output =
static_cast<const DisplaySnapshotDri&>(output);

ScopedDrmConnectorPtr connector(dri_->GetConnector(dri_output.connector()));
ScopedDrmConnectorPtr connector(
dri_output.drm()->GetConnector(dri_output.connector()));
if (!connector) {
LOG(ERROR) << "Failed to get connector " << dri_output.connector();
return false;
}

ScopedDrmPropertyPtr hdcp_property(
dri_->GetProperty(connector.get(), kContentProtection));
dri_output.drm()->GetProperty(connector.get(), kContentProtection));
if (!hdcp_property) {
LOG(ERROR) << "'" << kContentProtection << "' property doesn't exist.";
return false;
Expand Down Expand Up @@ -262,20 +265,21 @@ bool NativeDisplayDelegateDri::SetHDCPState(const DisplaySnapshot& output,
const DisplaySnapshotDri& dri_output =
static_cast<const DisplaySnapshotDri&>(output);

ScopedDrmConnectorPtr connector(dri_->GetConnector(dri_output.connector()));
ScopedDrmConnectorPtr connector(
dri_output.drm()->GetConnector(dri_output.connector()));
if (!connector) {
LOG(ERROR) << "Failed to get connector " << dri_output.connector();
return false;
}

ScopedDrmPropertyPtr hdcp_property(
dri_->GetProperty(connector.get(), kContentProtection));
dri_output.drm()->GetProperty(connector.get(), kContentProtection));
if (!hdcp_property) {
LOG(ERROR) << "'" << kContentProtection << "' property doesn't exist.";
return false;
}

return dri_->SetProperty(
return dri_output.drm()->SetProperty(
dri_output.connector(), hdcp_property->prop_id,
GetContentProtectionValue(hdcp_property.get(), state));
}
Expand Down Expand Up @@ -320,7 +324,8 @@ void NativeDisplayDelegateDri::NotifyScreenManager(
DisplaySnapshotComparator(new_displays[i]));

if (it == old_displays.end())
screen_manager_->AddDisplayController(dri_, new_displays[i]->crtc(),
screen_manager_->AddDisplayController(new_displays[i]->drm(),
new_displays[i]->crtc(),
new_displays[i]->connector());
}
}
Expand Down

0 comments on commit c9a5331

Please sign in to comment.