PassRefPtr<TypeBuilder::LayerTree::Layer> InspectorLayerTreeAgent::buildObjectForLayer(ErrorString* errorString, RenderLayer* renderLayer) { RenderObject* renderer = &renderLayer->renderer(); RenderLayerBacking* backing = renderLayer->backing(); Node* node = renderer->node(); bool isReflection = renderLayer->isReflection(); bool isGenerated = (isReflection ? renderer->parent() : renderer)->isBeforeOrAfterContent(); bool isAnonymous = renderer->isAnonymous(); if (renderer->isRenderView()) node = &renderer->document(); else if (isReflection && isGenerated) node = renderer->parent()->generatingElement(); else if (isGenerated) node = renderer->generatingNode(); else if (isReflection || isAnonymous) node = renderer->parent()->element(); // Basic set of properties. RefPtr<TypeBuilder::LayerTree::Layer> layerObject = TypeBuilder::LayerTree::Layer::create() .setLayerId(bind(renderLayer)) .setNodeId(idForNode(errorString, node)) .setBounds(buildObjectForIntRect(renderer->absoluteBoundingBoxRect())) .setMemory(backing->backingStoreMemoryEstimate()) .setCompositedBounds(buildObjectForIntRect(enclosingIntRect(backing->compositedBounds()))) .setPaintCount(backing->graphicsLayer()->repaintCount()); if (node && node->shadowHost()) layerObject->setIsInShadowTree(true); if (isReflection) layerObject->setIsReflection(true); if (isGenerated) { if (isReflection) renderer = renderer->parent(); layerObject->setIsGeneratedContent(true); layerObject->setPseudoElementId(bindPseudoElement(toPseudoElement(renderer->node()))); if (renderer->isBeforeContent()) layerObject->setPseudoElement("before"); else if (renderer->isAfterContent()) layerObject->setPseudoElement("after"); } // FIXME: RenderView is now really anonymous but don't tell about it to the frontend before making sure it can handle it. if (isAnonymous && !renderer->isRenderView()) { layerObject->setIsAnonymous(true); if (RenderStyle* style = renderer->style()) { if (style->styleType() == FIRST_LETTER) layerObject->setPseudoElement("first-letter"); else if (style->styleType() == FIRST_LINE) layerObject->setPseudoElement("first-line"); } } return layerObject; }
void InspectorTimelineAgent::didPaint(RenderObject* renderer, GraphicsContext*, const LayoutRect& clipRect) { TimelineRecordEntry& entry = m_recordStack.last(); ASSERT(entry.type == TimelineRecordType::Paint); FloatQuad quad; localToPageQuad(*renderer, clipRect, &quad); entry.data = TimelineRecordFactory::createPaintData(quad, idForNode(renderer->generatingNode())); didCompleteCurrentRecord(TimelineRecordType::Paint); }
void InspectorTimelineAgent::willPaint(RenderObject* renderer) { Frame* frame = renderer->frame(); TRACE_EVENT_INSTANT2("instrumentation", InstrumentationEvents::Paint, InstrumentationEventArguments::PageId, reinterpret_cast<unsigned long long>(frame->page()), InstrumentationEventArguments::NodeId, idForNode(renderer->generatingNode())); pushCurrentRecord(InspectorObject::create(), TimelineRecordType::Paint, true, frame, true); }
void InspectorTimelineAgent::didLayout(RenderObject* root) { if (m_recordStack.isEmpty()) return; TimelineRecordEntry& entry = m_recordStack.last(); ASSERT(entry.type == TimelineRecordType::Layout); Vector<FloatQuad> quads; root->absoluteQuads(quads); if (quads.size() >= 1) TimelineRecordFactory::appendLayoutRoot(entry.data.get(), quads[0], idForNode(root->generatingNode())); else ASSERT_NOT_REACHED(); didCompleteCurrentRecord(TimelineRecordType::Layout); }
void InspectorLayerTreeAgent::buildLayerIdToNodeIdMap(PaintLayer* root, LayerIdToNodeIdMap& layerIdToNodeIdMap) { if (root->hasCompositedLayerMapping()) { if (Node* node = root->layoutObject()->generatingNode()) { GraphicsLayer* graphicsLayer = root->compositedLayerMapping()->childForSuperlayers(); layerIdToNodeIdMap.set(graphicsLayer->platformLayer()->id(), idForNode(node)); } } for (PaintLayer* child = root->firstChild(); child; child = child->nextSibling()) buildLayerIdToNodeIdMap(child, layerIdToNodeIdMap); if (!root->layoutObject()->isLayoutIFrame()) return; FrameView* childFrameView = toFrameView(toLayoutPart(root->layoutObject())->widget()); if (LayoutView* childLayoutView = childFrameView->layoutView()) { if (PaintLayerCompositor* childCompositor = childLayoutView->compositor()) buildLayerIdToNodeIdMap(childCompositor->rootLayer(), layerIdToNodeIdMap); } }
QString QmlAnchorBindingProxy::horizontalTarget() const { return idForNode(m_horizontalTarget); }
QString QmlAnchorBindingProxy::verticalTarget() const { return idForNode(m_verticalTarget); }
QString QmlAnchorBindingProxy::rightTarget() const { return idForNode(m_rightTarget); }
QString QmlAnchorBindingProxy::bottomTarget() const { return idForNode(m_bottomTarget); }
QString QmlAnchorBindingProxy::topTarget() const { return idForNode(m_topTarget); }