Re: [PATCH hwc v2 08/18] drm_hwcomposer: Parse and store possible_clones information

2018-04-17 Thread Alexandru-Cosmin Gheorghe
Hi Sean,

On Mon, Apr 16, 2018 at 04:19:14PM -0400, Sean Paul wrote:
> On Wed, Apr 11, 2018 at 04:22:19PM +0100, Alexandru Gheorghe wrote:
> > drmModeEncoder has a field called possible_clones. It's a bit mask
> > which tells if the encoder could be simultaneously connected, to the
> > same CRTC, with the encoders specified in the possible_clones mask.
> > 
> > Signed-off-by: Alexandru Gheorghe 
> > ---
> >  drmencoder.cpp   | 8 
> >  drmencoder.h | 4 
> >  drmresources.cpp | 9 -
> >  3 files changed, 20 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drmencoder.cpp b/drmencoder.cpp
> > index 1da7ec3..ff675f5 100644
> > --- a/drmencoder.cpp
> > +++ b/drmencoder.cpp
> > @@ -39,6 +39,14 @@ DrmCrtc *DrmEncoder::crtc() const {
> >return crtc_;
> >  }
> >  
> > +bool DrmEncoder::can_clone(DrmEncoder *encoder) {
> > +  return possible_clones_.find(encoder) != possible_clones_.end();
> > +}
> 
> The find() call is probably enough to justify CamelCase for this function. 
> FTR,
> I _hate_ this part of the style guide and wish I had just picked one or the
> other.
> 
> To improve readability, can you also change the name of "encoder" to
> "possible_clone" like below so it's super obvious what this does?
> 

Sure, will do.

> > +
> > +void DrmEncoder::add_possible_clone(DrmEncoder *possible_clone) {
> > +  possible_clones_[possible_clone] = true;
> > +}
> > +
> >  void DrmEncoder::set_crtc(DrmCrtc *crtc) {
> >crtc_ = crtc;
> >set_display(crtc->display());
> > diff --git a/drmencoder.h b/drmencoder.h
> > index 7e06691..5e7c010 100644
> > --- a/drmencoder.h
> > +++ b/drmencoder.h
> > @@ -21,6 +21,7 @@
> >  
> >  #include 
> >  #include 
> > +#include 
> 
> Alphabetical

Sure, wil do.

> 
> >  #include 
> >  
> >  namespace android {
> > @@ -43,6 +44,8 @@ class DrmEncoder {
> >const std::vector &possible_crtcs() const {
> >  return possible_crtcs_;
> >}
> > +  bool can_clone(DrmEncoder *encoder);
> > +  void add_possible_clone(DrmEncoder *possible_clone);
> >  
> >   private:
> >uint32_t id_;
> > @@ -50,6 +53,7 @@ class DrmEncoder {
> >int display_;
> >  
> >std::vector possible_crtcs_;
> > +  std::map possible_clones_;
> >  };
> >  }
> >  
> > diff --git a/drmresources.cpp b/drmresources.cpp
> > index a5ddda0..39f50be 100644
> > --- a/drmresources.cpp
> > +++ b/drmresources.cpp
> > @@ -97,6 +97,7 @@ int DrmResources::Init(ResourceManager *resource_manager, 
> > char *path,
> >  crtcs_.emplace_back(std::move(crtc));
> >}
> >  
> > +  std::vector possible_clones;
> >for (int i = 0; !ret && i < res->count_encoders; ++i) {
> >  drmModeEncoderPtr e = drmModeGetEncoder(fd(), res->encoders[i]);
> >  if (!e) {
> > @@ -117,12 +118,18 @@ int DrmResources::Init(ResourceManager 
> > *resource_manager, char *path,
> >  
> >  std::unique_ptr enc(
> >  new DrmEncoder(e, current_crtc, possible_crtcs));
> > -
> > +possible_clones.push_back(e->possible_clones);
> >  drmModeFreeEncoder(e);
> >  
> >  encoders_.emplace_back(std::move(enc));
> >}
> >  
> > +  for (uint32_t i = 0; i < encoders_.size(); i++) {
> > +for (uint32_t j = 0; j < encoders_.size(); j++)
> 
> for (auto &enc: encoders_) {
>   for (auto &clone: encoders_) {
> 
> Or something similarly C++'y, looping through indices is sooo last decade :-)

Oldie but goldie. 
I do need the index in order to check the possible clones mask.
I will try to find something more millennial/Generation z :).

> 
> 
> > +  if (possible_clones[i] & (1 << j))
> > +encoders_[i]->add_possible_clone(encoders_[j].get());
> > +  }
> > +
> >for (int i = 0; !ret && i < res->count_connectors; ++i) {
> >  drmModeConnectorPtr c = drmModeGetConnector(fd(), res->connectors[i]);
> >  if (!c) {
> > -- 
> > 2.7.4
> > 
> 
> -- 
> Sean Paul, Software Engineer, Google / Chromium OS

-- 
Cheers,
Alex G
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH hwc v2 08/18] drm_hwcomposer: Parse and store possible_clones information

2018-04-16 Thread Sean Paul
On Wed, Apr 11, 2018 at 04:22:19PM +0100, Alexandru Gheorghe wrote:
> drmModeEncoder has a field called possible_clones. It's a bit mask
> which tells if the encoder could be simultaneously connected, to the
> same CRTC, with the encoders specified in the possible_clones mask.
> 
> Signed-off-by: Alexandru Gheorghe 
> ---
>  drmencoder.cpp   | 8 
>  drmencoder.h | 4 
>  drmresources.cpp | 9 -
>  3 files changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/drmencoder.cpp b/drmencoder.cpp
> index 1da7ec3..ff675f5 100644
> --- a/drmencoder.cpp
> +++ b/drmencoder.cpp
> @@ -39,6 +39,14 @@ DrmCrtc *DrmEncoder::crtc() const {
>return crtc_;
>  }
>  
> +bool DrmEncoder::can_clone(DrmEncoder *encoder) {
> +  return possible_clones_.find(encoder) != possible_clones_.end();
> +}

The find() call is probably enough to justify CamelCase for this function. FTR,
I _hate_ this part of the style guide and wish I had just picked one or the
other.

To improve readability, can you also change the name of "encoder" to
"possible_clone" like below so it's super obvious what this does?

> +
> +void DrmEncoder::add_possible_clone(DrmEncoder *possible_clone) {
> +  possible_clones_[possible_clone] = true;
> +}
> +
>  void DrmEncoder::set_crtc(DrmCrtc *crtc) {
>crtc_ = crtc;
>set_display(crtc->display());
> diff --git a/drmencoder.h b/drmencoder.h
> index 7e06691..5e7c010 100644
> --- a/drmencoder.h
> +++ b/drmencoder.h
> @@ -21,6 +21,7 @@
>  
>  #include 
>  #include 
> +#include 

Alphabetical

>  #include 
>  
>  namespace android {
> @@ -43,6 +44,8 @@ class DrmEncoder {
>const std::vector &possible_crtcs() const {
>  return possible_crtcs_;
>}
> +  bool can_clone(DrmEncoder *encoder);
> +  void add_possible_clone(DrmEncoder *possible_clone);
>  
>   private:
>uint32_t id_;
> @@ -50,6 +53,7 @@ class DrmEncoder {
>int display_;
>  
>std::vector possible_crtcs_;
> +  std::map possible_clones_;
>  };
>  }
>  
> diff --git a/drmresources.cpp b/drmresources.cpp
> index a5ddda0..39f50be 100644
> --- a/drmresources.cpp
> +++ b/drmresources.cpp
> @@ -97,6 +97,7 @@ int DrmResources::Init(ResourceManager *resource_manager, 
> char *path,
>  crtcs_.emplace_back(std::move(crtc));
>}
>  
> +  std::vector possible_clones;
>for (int i = 0; !ret && i < res->count_encoders; ++i) {
>  drmModeEncoderPtr e = drmModeGetEncoder(fd(), res->encoders[i]);
>  if (!e) {
> @@ -117,12 +118,18 @@ int DrmResources::Init(ResourceManager 
> *resource_manager, char *path,
>  
>  std::unique_ptr enc(
>  new DrmEncoder(e, current_crtc, possible_crtcs));
> -
> +possible_clones.push_back(e->possible_clones);
>  drmModeFreeEncoder(e);
>  
>  encoders_.emplace_back(std::move(enc));
>}
>  
> +  for (uint32_t i = 0; i < encoders_.size(); i++) {
> +for (uint32_t j = 0; j < encoders_.size(); j++)

for (auto &enc: encoders_) {
  for (auto &clone: encoders_) {

Or something similarly C++'y, looping through indices is sooo last decade :-)


> +  if (possible_clones[i] & (1 << j))
> +encoders_[i]->add_possible_clone(encoders_[j].get());
> +  }
> +
>for (int i = 0; !ret && i < res->count_connectors; ++i) {
>  drmModeConnectorPtr c = drmModeGetConnector(fd(), res->connectors[i]);
>  if (!c) {
> -- 
> 2.7.4
> 

-- 
Sean Paul, Software Engineer, Google / Chromium OS
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel


[PATCH hwc v2 08/18] drm_hwcomposer: Parse and store possible_clones information

2018-04-11 Thread Alexandru Gheorghe
drmModeEncoder has a field called possible_clones. It's a bit mask
which tells if the encoder could be simultaneously connected, to the
same CRTC, with the encoders specified in the possible_clones mask.

Signed-off-by: Alexandru Gheorghe 
---
 drmencoder.cpp   | 8 
 drmencoder.h | 4 
 drmresources.cpp | 9 -
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/drmencoder.cpp b/drmencoder.cpp
index 1da7ec3..ff675f5 100644
--- a/drmencoder.cpp
+++ b/drmencoder.cpp
@@ -39,6 +39,14 @@ DrmCrtc *DrmEncoder::crtc() const {
   return crtc_;
 }
 
+bool DrmEncoder::can_clone(DrmEncoder *encoder) {
+  return possible_clones_.find(encoder) != possible_clones_.end();
+}
+
+void DrmEncoder::add_possible_clone(DrmEncoder *possible_clone) {
+  possible_clones_[possible_clone] = true;
+}
+
 void DrmEncoder::set_crtc(DrmCrtc *crtc) {
   crtc_ = crtc;
   set_display(crtc->display());
diff --git a/drmencoder.h b/drmencoder.h
index 7e06691..5e7c010 100644
--- a/drmencoder.h
+++ b/drmencoder.h
@@ -21,6 +21,7 @@
 
 #include 
 #include 
+#include 
 #include 
 
 namespace android {
@@ -43,6 +44,8 @@ class DrmEncoder {
   const std::vector &possible_crtcs() const {
 return possible_crtcs_;
   }
+  bool can_clone(DrmEncoder *encoder);
+  void add_possible_clone(DrmEncoder *possible_clone);
 
  private:
   uint32_t id_;
@@ -50,6 +53,7 @@ class DrmEncoder {
   int display_;
 
   std::vector possible_crtcs_;
+  std::map possible_clones_;
 };
 }
 
diff --git a/drmresources.cpp b/drmresources.cpp
index a5ddda0..39f50be 100644
--- a/drmresources.cpp
+++ b/drmresources.cpp
@@ -97,6 +97,7 @@ int DrmResources::Init(ResourceManager *resource_manager, 
char *path,
 crtcs_.emplace_back(std::move(crtc));
   }
 
+  std::vector possible_clones;
   for (int i = 0; !ret && i < res->count_encoders; ++i) {
 drmModeEncoderPtr e = drmModeGetEncoder(fd(), res->encoders[i]);
 if (!e) {
@@ -117,12 +118,18 @@ int DrmResources::Init(ResourceManager *resource_manager, 
char *path,
 
 std::unique_ptr enc(
 new DrmEncoder(e, current_crtc, possible_crtcs));
-
+possible_clones.push_back(e->possible_clones);
 drmModeFreeEncoder(e);
 
 encoders_.emplace_back(std::move(enc));
   }
 
+  for (uint32_t i = 0; i < encoders_.size(); i++) {
+for (uint32_t j = 0; j < encoders_.size(); j++)
+  if (possible_clones[i] & (1 << j))
+encoders_[i]->add_possible_clone(encoders_[j].get());
+  }
+
   for (int i = 0; !ret && i < res->count_connectors; ++i) {
 drmModeConnectorPtr c = drmModeGetConnector(fd(), res->connectors[i]);
 if (!c) {
-- 
2.7.4

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel