[cairo] [cairo-commit] src/cairo-skia-surface.cpp

RAVI NANJUNDAPPA nravi.n at samsung.com
Mon Jul 14 02:43:55 PDT 2014


Hi Uli, 

> -----Original Message-----
> From: Uli Schlachter [mailto:psychon at znc.in]
> Sent: Monday, July 14, 2014 2:30 PM
> To: nravi.n at samsung.com
> Cc: cairo
> Subject: Re: [cairo] [cairo-commit] src/cairo-skia-surface.cpp
> 
> Hi,
> 
> On 14.07.2014 10:36, RAVI NANJUNDAPPA wrote:
> > In such a case,"return  _cairo_surface_create_in_error (_cairo_error
> > (CAIRO_STATUS_INVALID_FORMAT));"  ( the earlier code) makes more
> sense, as it returns a NULL backend surface with the valid status result.
> > Let me know if I'm missing anything.
> 
> The caller will interpret the NULL as "not supported" and will then "do
> something else" to try and continue. If you return an error surface, then
it
> will just stop trying. Look e.g. at cairo_surface_create_similar() or
> _cairo_surface_create_scratch().
> 

Ok. I understand that now. Thanks for the comments. 

> Also, I just noticed the following:
> 
> From cairo-skia-surface.cpp:
> 
> [...]
> static const struct _cairo_surface_backend cairo_skia_surface_backend = {
>     CAIRO_SURFACE_TYPE_SKIA,
>     _cairo_skia_surface_create_similar,
>     _cairo_skia_surface_finish,
>     _cairo_skia_surface_acquire_source_image,
>     _cairo_skia_surface_release_source_image,
>     _cairo_skia_surface_acquire_dest_image,
>     _cairo_skia_surface_release_dest_image,
> [...]
> 
> From cairo-surface-backend-private.h:
> 
> [...]
> struct _cairo_surface_backend {
>     cairo_surface_type_t type;
>     cairo_warn cairo_status_t
>     (*finish)			(void			*surface);
>     cairo_t *
>     (*create_context)		(void			*surface);
>     cairo_surface_t *
>     (*create_similar)		(void			*surface,
> 				 cairo_content_t	 content,
> 				 int			 width,
> 				 int			 height);
>     cairo_surface_t *
>     (*create_similar_image)	(void			*surface,
> 				 cairo_format_t		format,
> 				 int			 width,
> 				 int			 height);
>     cairo_image_surface_t *
>     (*map_to_image)		(void			*surface,
> 				 const cairo_rectangle_int_t  *extents);
>     cairo_int_status_t
>     (*unmap_image)		(void			*surface,
> 				 cairo_image_surface_t	*image);
> [...]
> 
> Since cairo-skia seems to be unmaintained and no even noticed that it does
> not work AT ALL in ages, can't we just drop it? (Does this even compile? I
> would have expected the C++ compiler to complain loudly about these
> implicit casts.)
> 
> I will from now on ignore cairo-skia.

I just started getting the basic Skia build free of initial hiccups and
there is lot of effort involved in making 
Skia backend more stable, which I feel is a continuous effort.  There is lot
of code cleanup required as well.
I understand the initial state of code is annoying but it'll be always
helpful if we get 3rd eye to catch up such error prone code.
I hope this is fine.

- Thanks 
N Ravi

> 
> Cheers,
> Uli
> 
> > ------- Original Message -------
> > Sender : Uli Schlachter<psychon at znc.in> Date : Jul 14, 2014 13:44
> > (GMT+05:30) Title : Re: [cairo] [cairo-commit]
> > src/cairo-skia-surface.cpp
> >
> > Hi Ravi,
> >
> > On 14.07.2014 08:42, RAVI NANJUNDAPPA wrote:
> >> Hi Chris,
> >>
> >> Please see if this patch fulfils the need.
> >>
> >> Thanks,
> >> N Ravi
> >>
> >>> -----Original Message-----
> >>> From: Chris Wilson [mailto:chris at chris-wilson.co.uk]
> >>> Sent: Friday, July 11, 2014 11:28 AM
> >>> To: RAVI NANJUNDAPPA
> >>> Cc: cairo at cairographics.org; cairo-commit at cairographics.org
> >>> Subject: Re: Re: [cairo] [cairo-commit] src/cairo-skia-surface.cpp
> >>>
> >>> On Fri, Jul 11, 2014 at 04:33:52AM +0000, RAVI NANJUNDAPPA wrote:
> >>>> Hi Chris,
> >>>>
> >>>> I understand your point.
> >>>> May be in such a case, where the user has not explicitly passed any
> >> format
> >>> type, then we can fallback to   "
> _cairo_image_surface_create_with_content
> >>> (content, width, height);" statement,
> >>>> which ideally should be the case (I'm using this from
> >>> _cairo_gl_surface_create_similar()).
> >>>> I hope this is fine ?
> >>>
> >>> If the create_similar backend returns NULL, it is an indication that
> >>> the operation is unsupported for that backend. The caller then
> >>> decides how to handle the unsupported operation. In the user facing
> >>> function, an image surface is created instead.
> >>> -Chris
> >
> > The attached effectively reverts your change and makes this return
> > NULL again, but it also adds a comment explaining why this shouldn't
make
> a difference.
> >
> > What Chris meant is: The old code returned NULL and that is the right
> > thing to do. The calling function has to be able to handle NULL and
> > fall back in this case. But if you return an error surface, no
> > fallback happens and the error is propagated. And implementing the
> > fallback here in cairo-skia isn't necessary and would be inconsistent
with
> other backends.
> >
> > This isn't a git formatted patch on purpose. Someone else can handle
this.
> >
> > Uli
> >
> 
> 
> --
> "Every once in a while, declare peace. It confuses the hell out of your
> enemies"
>  - 79th Rule of Acquisition



More information about the cairo mailing list