[webkit-reviews] review denied: [Bug 76661] [Qt] [WK2] Support threaded renderer in WK2 : [Attachment 123209] One more windows build fix.

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Thu Jan 19 15:53:12 PST 2012


Noam Rosenthal <noam.rosenthal at nokia.com> has denied Viatcheslav Ostapenko
<ostapenko.viatcheslav at nokia.com>'s request for review:
Bug 76661: [Qt] [WK2] Support threaded renderer in WK2
https://bugs.webkit.org/show_bug.cgi?id=76661

Attachment 123209: One more windows build fix.
https://bugs.webkit.org/attachment.cgi?id=123209&action=review

------- Additional Comments from Noam Rosenthal <noam.rosenthal at nokia.com>
View in context: https://bugs.webkit.org/attachment.cgi?id=123209&action=review


OK, needs lots of work :)

> Source/WebKit2/Target.pri:258
> +    UIProcess/qt/LayerTreeHostProxyNodeQt.h \

Name is not by convention, since this is not a subclass of a WebCore/WebKit
class.
How about QtLayerTreeSceneGraphNode

> Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:95
> +    return 0;

Why are we returning zero?

> Source/WebKit2/UIProcess/LayerTreeHostProxy.h:41
> +#include <QObject>

?

> Source/WebKit2/UIProcess/LayerTreeHostProxy.h:68
> +    void paintToCurrentGLContext(const WebCore::TransformationMatrix&,
float, bool syncRemoteLayerData = true);

I tried to follow the logic of when syncRemoteLayerData is called and when
not... I still don't get it.

> Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:187
> +template<typename T> struct MainThreadMessageSender {
> +    struct CallbackContext {
> +	   CallbackContext(const T& message, LayerTreeHostProxy*
layerTreeHostProxy) :
> +		   m_messageID(T::messageID)
> +	       ,   m_layerTreeHostProxy(layerTreeHostProxy)
> +	   {
> +	       m_encoder = CoreIPC::ArgumentEncoder::create(0);
> +	       m_encoder->encode(message);
> +	   }
> +	   ~CallbackContext()
> +	   {
> +	   }
> +	   OwnPtr<CoreIPC::ArgumentEncoder> m_encoder;
> +	   CoreIPC::MessageID m_messageID;
> +	   RefPtr<LayerTreeHostProxy> m_layerTreeHostProxy;
> +    };
> +    static void mainThreadCallback(void* data)
> +    {
> +	   CallbackContext* context = static_cast<CallbackContext*>(data);
> +	   DrawingAreaProxy* drawingAreaProxy =
context->m_layerTreeHostProxy->drawingAreaProxy();
> +	   if (drawingAreaProxy) {
> +	       // Have to initialize destanation ID here because this data
cannot be accessed from
> +	       // painting thread.
> +	       *reinterpret_cast<uint64_t*>(context->m_encoder->buffer()) =
drawingAreaProxy->page()->pageID();
> +	       CoreIPC::Connection* connection =
drawingAreaProxy->page()->process()->connection();
> +	       if (connection)
> +		   connection->sendMessage(context->m_messageID,
context->m_encoder.release(), 0);
> +	   }
> +	   delete context;
> +    }
> +
> +    static void sendMessageOnMainThread(const T& message,
LayerTreeHostProxy* layerTreeHostProxy)
> +    {
> +	   CallbackContext* context = new CallbackContext(message,
layerTreeHostProxy);
> +	   callOnMainThread(&mainThreadCallback, context);
> +    }
> +};

You need to do all that just to call updateViewport on the main thread?

> Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:220
> +static updateViewportOnMainThread(LayerTreeHostProxy* layerTreeHostProxy)
> +{
> +    layerTreeHostProxy->updateViewport();
> +}
> +#endif

the pointer to LayerTreeHostProxy is not thread safe, since that proxy might be
deleted before the painting stopped.

> Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:178
> +    if (itemRect.isEmpty())
> +	   return;
> +

Is this related?


More information about the webkit-reviews mailing list