Changeset 88582 in webkit


Ignore:
Timestamp:
Jun 10, 2011 5:39:10 PM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2011-06-10 Vsevolod Vlasov <vsevik@chromium.org>

Reviewed by James Robinson.

Web Inspector: [Chromium] DevTools does not highlight elements when accelerated compositing is on.
https://bugs.webkit.org/show_bug.cgi?id=62149

Added page overlay for inspector highlight support.

  • WebKit.gyp:
  • src/ChromeClientImpl.cpp: (WebKit::ChromeClientImpl::attachRootGraphicsLayer):
  • src/PageOverlay.cpp: Added. (WebKit::PageOverlay::create): (WebKit::PageOverlay::PageOverlay): (WebKit::OverlayGraphicsLayerClientImpl::create): (WebKit::OverlayGraphicsLayerClientImpl::~OverlayGraphicsLayerClientImpl): (WebKit::OverlayGraphicsLayerClientImpl::notifyAnimationStarted): (WebKit::OverlayGraphicsLayerClientImpl::notifySyncRequired): (WebKit::OverlayGraphicsLayerClientImpl::paintContents): (WebKit::OverlayGraphicsLayerClientImpl::showDebugBorders): (WebKit::OverlayGraphicsLayerClientImpl::showRepaintCounter): (WebKit::OverlayGraphicsLayerClientImpl::OverlayGraphicsLayerClientImpl): (WebKit::PageOverlay::clear): (WebKit::PageOverlay::update): (WebKit::PageOverlay::paintWebFrame): (WebKit::PageOverlay::invalidateWebFrame):
  • src/PageOverlay.h: Added. (WebKit::PageOverlay::~PageOverlay): (WebKit::PageOverlay::setClient):
  • src/WebDevToolsAgentImpl.cpp: (WebKit::WebDevToolsAgentImpl::paintPageOverlay): (WebKit::WebDevToolsAgentImpl::highlight): (WebKit::WebDevToolsAgentImpl::hideHighlight):
  • src/WebDevToolsAgentImpl.h:
  • src/WebFrameImpl.cpp: (WebKit::WebFrameImpl::paintWithContext):
  • src/WebViewImpl.cpp: (WebKit::WebViewImpl::WebViewImpl): (WebKit::WebViewImpl::setPageOverlayClient): (WebKit::WebViewImpl::setOverlayLayer): (WebKit::WebViewImpl::setRootGraphicsLayer): (WebKit::WebViewImpl::setRootPlatformLayer): (WebKit::WebViewImpl::setIsAcceleratedCompositingActive): (WebKit::WebViewImpl::doComposite): (WebKit::WebViewImpl::reallocateRenderer):
  • src/WebViewImpl.h: (WebKit::WebViewImpl::pageOverlay):
Location:
trunk/Source/WebKit/chromium
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/chromium/ChangeLog

    r88578 r88582  
     12011-06-10  Vsevolod Vlasov  <vsevik@chromium.org>
     2
     3        Reviewed by James Robinson.
     4
     5        Web Inspector: [Chromium] DevTools does not highlight elements when accelerated compositing is on.
     6        https://bugs.webkit.org/show_bug.cgi?id=62149
     7
     8        Added page overlay for inspector highlight support.
     9
     10        * WebKit.gyp:
     11        * src/ChromeClientImpl.cpp:
     12        (WebKit::ChromeClientImpl::attachRootGraphicsLayer):
     13        * src/PageOverlay.cpp: Added.
     14        (WebKit::PageOverlay::create):
     15        (WebKit::PageOverlay::PageOverlay):
     16        (WebKit::OverlayGraphicsLayerClientImpl::create):
     17        (WebKit::OverlayGraphicsLayerClientImpl::~OverlayGraphicsLayerClientImpl):
     18        (WebKit::OverlayGraphicsLayerClientImpl::notifyAnimationStarted):
     19        (WebKit::OverlayGraphicsLayerClientImpl::notifySyncRequired):
     20        (WebKit::OverlayGraphicsLayerClientImpl::paintContents):
     21        (WebKit::OverlayGraphicsLayerClientImpl::showDebugBorders):
     22        (WebKit::OverlayGraphicsLayerClientImpl::showRepaintCounter):
     23        (WebKit::OverlayGraphicsLayerClientImpl::OverlayGraphicsLayerClientImpl):
     24        (WebKit::PageOverlay::clear):
     25        (WebKit::PageOverlay::update):
     26        (WebKit::PageOverlay::paintWebFrame):
     27        (WebKit::PageOverlay::invalidateWebFrame):
     28        * src/PageOverlay.h: Added.
     29        (WebKit::PageOverlay::~PageOverlay):
     30        (WebKit::PageOverlay::setClient):
     31        * src/WebDevToolsAgentImpl.cpp:
     32        (WebKit::WebDevToolsAgentImpl::paintPageOverlay):
     33        (WebKit::WebDevToolsAgentImpl::highlight):
     34        (WebKit::WebDevToolsAgentImpl::hideHighlight):
     35        * src/WebDevToolsAgentImpl.h:
     36        * src/WebFrameImpl.cpp:
     37        (WebKit::WebFrameImpl::paintWithContext):
     38        * src/WebViewImpl.cpp:
     39        (WebKit::WebViewImpl::WebViewImpl):
     40        (WebKit::WebViewImpl::setPageOverlayClient):
     41        (WebKit::WebViewImpl::setOverlayLayer):
     42        (WebKit::WebViewImpl::setRootGraphicsLayer):
     43        (WebKit::WebViewImpl::setRootPlatformLayer):
     44        (WebKit::WebViewImpl::setIsAcceleratedCompositingActive):
     45        (WebKit::WebViewImpl::doComposite):
     46        (WebKit::WebViewImpl::reallocateRenderer):
     47        * src/WebViewImpl.h:
     48        (WebKit::WebViewImpl::pageOverlay):
     49
    1502011-06-10  David Levin  <levin@chromium.org>
    251
  • trunk/Source/WebKit/chromium/WebKit.gyp

    r88523 r88582  
    394394                'src/NotificationPresenterImpl.cpp',
    395395                'src/painting/GraphicsContextBuilder.h',
     396                'src/PageOverlay.cpp',
     397                'src/PageOverlay.h',
    396398                'src/PlatformBridge.cpp',
    397399                'src/PlatformMessagePortChannel.cpp',
  • trunk/Source/WebKit/chromium/src/ChromeClientImpl.cpp

    r88288 r88582  
    837837void ChromeClientImpl::attachRootGraphicsLayer(Frame* frame, GraphicsLayer* graphicsLayer)
    838838{
    839     m_webView->setRootGraphicsLayer(graphicsLayer ? graphicsLayer->platformLayer() : 0);
     839    m_webView->setRootGraphicsLayer(graphicsLayer);
    840840}
    841841
  • trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp

    r88010 r88582  
    3535#include "DebuggerAgentManager.h"
    3636#include "ExceptionCode.h"
     37#include "GraphicsContext.h"
    3738#include "InjectedScriptHost.h"
    3839#include "InspectorBackendDispatcher.h"
     
    4142#include "Page.h"
    4243#include "PageGroup.h"
     44#include "PageOverlay.h"
    4345#include "PageScriptDebugServer.h"
    4446#include "PlatformString.h"
     
    272274}
    273275
     276// PageOverlayClient
     277void WebDevToolsAgentImpl::paintPageOverlay(GraphicsContext& gc)
     278{
     279    InspectorController* ic = inspectorController();
     280    if (ic)
     281        ic->drawNodeHighlight(gc);
     282}
     283
    274284void WebDevToolsAgentImpl::highlight(Node* node)
    275285{
    276     // InspectorController does the actuall tracking of the highlighted node
    277     // and the drawing of the highlight. Here we just make sure to invalidate
    278     // the rects of the old and new nodes.
    279     hideHighlight();
     286    m_webViewImpl->setPageOverlayClient(this);
    280287}
    281288
    282289void WebDevToolsAgentImpl::hideHighlight()
    283290{
    284     // FIXME: able to invalidate a smaller rect.
    285     // FIXME: Is it important to just invalidate the rect of the node region
    286     // given that this is not on a critical codepath?  In order to do so, we'd
    287     // have to take scrolling into account.
    288     const WebSize& size = m_webViewImpl->size();
    289     WebRect damagedRect(0, 0, size.width, size.height);
    290     if (m_webViewImpl->client())
    291         m_webViewImpl->client()->didInvalidateRect(damagedRect);
     291    m_webViewImpl->setPageOverlayClient(0);
    292292}
    293293
  • trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.h

    r88010 r88582  
    3434#include "InspectorClient.h"
    3535
     36#include "PageOverlay.h"
    3637#include "WebDevToolsAgentPrivate.h"
    3738
     
    4243class Document;
    4344class Frame;
     45class GraphicsContext;
    4446class InspectorClient;
    4547class InspectorController;
     
    6163
    6264class WebDevToolsAgentImpl : public WebDevToolsAgentPrivate,
    63                              public WebCore::InspectorClient {
     65                             public WebCore::InspectorClient,
     66                             public PageOverlay::PageOverlayClient {
    6467public:
    6568    WebDevToolsAgentImpl(WebViewImpl* webViewImpl, WebDevToolsAgentClient* client);
     
    9194    int hostId() { return m_hostId; }
    9295
     96    // PageOverlayClient
     97    virtual void paintPageOverlay(WebCore::GraphicsContext&);
     98
    9399private:
    94100    WebCore::InspectorController* inspectorController();
  • trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp

    r88109 r88582  
    105105#include "InspectorController.h"
    106106#include "Page.h"
     107#include "PageOverlay.h"
    107108#include "painting/GraphicsContextBuilder.h"
    108109#include "Performance.h"
     
    20222023        gc.clip(dirtyRect);
    20232024        frameView()->paint(&gc, dirtyRect);
    2024         m_frame->page()->inspectorController()->drawNodeHighlight(gc);
     2025        if (viewImpl()->pageOverlay())
     2026            viewImpl()->pageOverlay()->paintWebFrame(gc);
    20252027    } else
    20262028        gc.fillRect(dirtyRect, Color::white, ColorSpaceDeviceRGB);
  • trunk/Source/WebKit/chromium/src/WebViewImpl.cpp

    r88288 r88582  
    330330#if USE(ACCELERATED_COMPOSITING)
    331331    , m_layerRenderer(0)
     332    , m_rootGraphicsLayer(0)
    332333    , m_isAcceleratedCompositingActive(false)
    333334    , m_compositorCreationFailed(false)
     
    22912292}
    22922293
     2294void WebViewImpl::setPageOverlayClient(PageOverlay::PageOverlayClient* pageOverlayClient)
     2295{
     2296    if (pageOverlayClient) {
     2297        if (!m_pageOverlay)
     2298            m_pageOverlay = PageOverlay::create(this, pageOverlayClient);
     2299        else
     2300            m_pageOverlay->setClient(pageOverlayClient);
     2301        m_pageOverlay->update();
     2302        setRootLayerNeedsDisplay();
     2303    } else {
     2304        if (m_pageOverlay) {
     2305            m_pageOverlay->clear();
     2306            m_pageOverlay = nullptr;
     2307            setRootLayerNeedsDisplay();
     2308        }
     2309    }
     2310}
     2311
     2312void WebViewImpl::setOverlayLayer(WebCore::GraphicsLayer* layer)
     2313{
     2314    if (m_rootGraphicsLayer) {
     2315        if (layer->parent() != m_rootGraphicsLayer)
     2316            m_rootGraphicsLayer->addChild(layer);
     2317    }
     2318}
     2319
    22932320#if ENABLE(NOTIFICATIONS)
    22942321NotificationPresenterImpl* WebViewImpl::notificationPresenterImpl()
     
    23732400}
    23742401
    2375 void WebViewImpl::setRootGraphicsLayer(WebCore::PlatformLayer* layer)
     2402void WebViewImpl::setRootGraphicsLayer(WebCore::GraphicsLayer* layer)
     2403{
     2404    m_rootGraphicsLayer = layer;
     2405    setRootPlatformLayer(layer ? layer->platformLayer() : 0);
     2406}
     2407
     2408void WebViewImpl::setRootPlatformLayer(WebCore::PlatformLayer* layer)
    23762409{
    23772410    setIsAcceleratedCompositingActive(layer);
     
    24782511            m_isAcceleratedCompositingActive = true;
    24792512            m_compositorCreationFailed = false;
     2513            if (m_pageOverlay)
     2514                m_pageOverlay->update();
    24802515        } else {
    24812516            m_isAcceleratedCompositingActive = false;
     
    25052540    hud->setShowFPSCounter(settings()->showFPSCounter());
    25062541    hud->setShowPlatformLayerTree(settings()->showPlatformLayerTree());
     2542
     2543    if (m_pageOverlay)
     2544        m_pageOverlay->update();
    25072545
    25082546    m_layerRenderer->updateAndDrawLayers();
     
    25292567        // function properly until its reshape method is called.
    25302568        newContext->reshape(std::max(1, m_size.width), std::max(1, m_size.height));
    2531         setRootGraphicsLayer(m_layerRenderer->rootLayer());
     2569        setRootPlatformLayer(m_layerRenderer->rootLayer());
    25322570        // Forces ViewHostMsg_DidActivateAcceleratedCompositing to be sent so
    25332571        // that the browser process can reacquire surfaces.
    25342572        m_client->didActivateAcceleratedCompositing(true);
     2573        if (m_pageOverlay)
     2574            m_pageOverlay->update();
    25352575    } else
    2536         setRootGraphicsLayer(0);
     2576        setRootPlatformLayer(0);
    25372577}
    25382578#endif
  • trunk/Source/WebKit/chromium/src/WebViewImpl.h

    r88203 r88582  
    4949#include "LayerRendererChromium.h"
    5050#include "NotificationPresenterImpl.h"
     51#include "PageOverlay.h"
    5152#include <wtf/OwnPtr.h>
    5253#include <wtf/RefCounted.h>
     
    207208    WebDevToolsAgentPrivate* devToolsAgentPrivate() { return m_devToolsAgent.get(); }
    208209
     210    PageOverlay* pageOverlay() const { return m_pageOverlay.get(); }
     211    void setPageOverlayClient(PageOverlay::PageOverlayClient*);
     212
     213    void setOverlayLayer(WebCore::GraphicsLayer*);
     214
    209215    const WebPoint& lastMouseDownPoint() const
    210216    {
     
    346352    bool allowsAcceleratedCompositing();
    347353    bool pageHasRTLStyle() const;
    348     void setRootGraphicsLayer(WebCore::PlatformLayer*);
     354    void setRootGraphicsLayer(WebCore::GraphicsLayer*);
     355    void setRootPlatformLayer(WebCore::PlatformLayer*);
    349356    void setRootLayerNeedsDisplay();
    350357    void scrollRootLayerRect(const WebCore::IntSize& scrollDelta, const WebCore::IntRect& clipRect);
     
    509516
    510517    OwnPtr<WebDevToolsAgentPrivate> m_devToolsAgent;
     518    OwnPtr<PageOverlay> m_pageOverlay;
    511519
    512520    // Whether the webview is rendering transparently.
     
    534542    WebCore::IntRect m_rootLayerScrollDamage;
    535543    RefPtr<WebCore::LayerRendererChromium> m_layerRenderer;
     544    WebCore::GraphicsLayer* m_rootGraphicsLayer;
    536545    bool m_isAcceleratedCompositingActive;
    537546    bool m_compositorCreationFailed;
Note: See TracChangeset for help on using the changeset viewer.