[webkit-gtk] enable-accelerated-compositing flag does not work correctly

Jianhua Shao alex.sjh at gmail.com
Wed Apr 24 23:27:34 PDT 2013


On Thu, Apr 25, 2013 at 1:58 PM, Emmanuel Rodriguez <
emmanuel.rodriguez at gmail.com> wrote:

> On 25 April 2013 03:37, Jianhua Shao <alex.sjh at gmail.com> wrote:
>
>> On Thu, Apr 25, 2013 at 5:32 AM, Emmanuel Rodriguez <
>> emmanuel.rodriguez at gmail.com> wrote:
>>
>>>
>>>
>>> Thanks for sharing your experience.
>>>
>> The version 1.6.3 does not meet my requirements.
>> "enable-accelerated-compositing" is what I need in the newer version, from
>> the dev document I found it is available from version 1.7.5.
>> Seems I can give a try on version 1.7.x.
>>
> I just ment to try it and see if the transparencies where still enabled in
> 1.6.3
>
>
>>
>> And have you read my another mail,
>>
>> cairo_surface_t* surface = webkit_web_view_get_snapshot(view);
>> cairo_surface_write_to_png(surface, "/home/meego/dump.png");
>>
>> will result a transparent png file...
>> Maybe I need to do some configuration on cario/gtk, but I am new on this
>> subject, anyone can give me some hint?
>>
>
> By the looks of the code of 1.6.3 and 1.10.2 it seems that
>  webkit_web_view_get_snapshot() behaves like the old webkit_web_view_draw().
>
> In 1.6.3 the draw operation is done with:
>
> static void paintWebView(Frame* frame, gboolean transparent,
> GraphicsContext& context, const IntRect& clipRect, const Vector<IntRect>&
> rects)
> {
>     bool coalesce = true;
>
>     if (rects.size() > 0)
>         coalesce = shouldCoalesce(clipRect, rects);
>
>     if (coalesce) {
>         context.clip(clipRect);
>         if (transparent)
>             context.clearRect(clipRect);
>         frame->view()->paint(&context, clipRect);
>     } else {
>         for (size_t i = 0; i < rects.size(); i++) {
>             IntRect rect = rects[i];
>             context.save();
>             context.clip(rect);
>             if (transparent)
>                 context.clearRect(rect);
>             frame->view()->paint(&context, rect);
>             context.restore();
>         }
>     }
>
>     context.save();
>     context.clip(clipRect);
>     frame->page()->inspectorController()->drawHighlight(context);
>     context.restore();
> }
>
>
> In 1.10.2 webkit_web_view_get_snapshot is done with:
>
> cairo_surface_t*
> webkit_web_view_get_snapshot(WebKitWebView* webView)
> {
>     g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0);
>
>     Frame* frame = core(webView)->mainFrame();
>     if (!frame || !frame->contentRenderer() || !frame->view())
>         return 0;
>
>     frame->view()->updateLayoutAndStyleIfNeededRecursive();
>     GtkAllocation allocation;
>     gtk_widget_get_allocation(GTK_WIDGET(webView), &allocation);
>     cairo_surface_t* surface =
> cairo_image_surface_create(CAIRO_FORMAT_ARGB32, allocation.width,
> allocation.height);
>     RefPtr<cairo_t> cr = adoptRef(cairo_create(surface));
>     GraphicsContext gc(cr.get());
>
>     IntRect rect = allocation;
>     gc.applyDeviceScaleFactor(frame->page()->deviceScaleFactor());
>     gc.save();
>     gc.clip(rect);
>     if (webView->priv->transparent)
>         gc.clearRect(rect);
>     frame->view()->paint(&gc, rect);
>     gc.restore();
>
>     return surface;
> }
>
>
> Both functions have the same drawing logic:
>
>         context.clip(clipRect);
>         if (transparent)
>             context.clearRect(clipRect);
>         frame->view()->paint(&context, clipRect);
>         context.restore();
>
> Wit the exception that webkit_web_view_get_snapshot() forces the drawing
> into an image surface except of accepting a cairo context.
>
> Yeah, I have modified "webkit_web_view_expose_event" (the
webkit_web_view_draw thing for gtk2), and I have made it transparent now.

Then I tried setting 'enable-accelerated-compositing' flag. the result page
I got is not correct. The appearance is a little wired I think.
Firstly, a correct page shows up, then immediately after that (I mean,
maybe 0.1 second after that), the page turns gray in most part, and stay at
gray.

The issue exists even if I did not modify "webkit_web_view_expose_event".

Now I am trying to figure out whether something wrong with
"WEBKIT_WEB_VIEW(widget)->priv->backingStore->cairoSurface()".


-- 
> Emmanuel Rodriguez
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.webkit.org/pipermail/webkit-gtk/attachments/20130425/c9329606/attachment-0001.html>


More information about the webkit-gtk mailing list