Skip to content

Commit

Permalink
Remove GraphicsLayerClient
Browse files Browse the repository at this point in the history
Bug: 1277748
Change-Id: I0e0886bb6b60635f4405b10ea4ed96519f1395f4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3321662
Reviewed-by: Stefan Zager <szager@chromium.org>
Commit-Queue: Philip Rogers <pdr@chromium.org>
Auto-Submit: Philip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/main@{#949780}
  • Loading branch information
progers authored and Chromium LUCI CQ committed Dec 8, 2021
1 parent 9efc94b commit f92fdc9
Show file tree
Hide file tree
Showing 13 changed files with 25 additions and 645 deletions.
75 changes: 1 addition & 74 deletions third_party/blink/renderer/core/frame/frame_overlay.cc
Expand Up @@ -39,10 +39,7 @@
#include "third_party/blink/renderer/core/layout/layout_view.h"
#include "third_party/blink/renderer/core/page/page.h"
#include "third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h"
#include "third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.h"
#include "third_party/blink/renderer/platform/graphics/graphics_context.h"
#include "third_party/blink/renderer/platform/graphics/graphics_layer.h"
#include "third_party/blink/renderer/platform/graphics/graphics_layer_client.h"
#include "third_party/blink/renderer/platform/graphics/paint/scoped_paint_chunk_properties.h"

namespace blink {
Expand All @@ -64,9 +61,6 @@ void FrameOverlay::Destroy() {
frame_->View()->SetVisualViewportOrOverlayNeedsRepaint();

delegate_.reset();
if (layer_)
layer_.Release()->Destroy();

#if DCHECK_IS_ON()
is_destroyed_ = true;
#endif
Expand All @@ -75,35 +69,7 @@ void FrameOverlay::Destroy() {
void FrameOverlay::UpdatePrePaint() {
// Invalidate DisplayItemClient.
Invalidate();

if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) {
delegate_->Invalidate();
return;
}

auto* parent_layer = frame_->LocalFrameRoot()
.View()
->GetLayoutView()
->Compositor()
->PaintRootGraphicsLayer();
if (!parent_layer) {
layer_ = nullptr;
return;
}

if (!layer_) {
layer_ = MakeGarbageCollected<GraphicsLayer>(*this);
layer_->SetDrawsContent(true);
layer_->SetHitTestable(false);
}

DCHECK(parent_layer);
if (layer_->Parent() != parent_layer ||
// Keep the layer the last child of parent to make it topmost.
parent_layer->Children().back() != layer_)
parent_layer->AddChild(layer_);
layer_->SetLayerState(DefaultPropertyTreeState(), gfx::Vector2d());
layer_->SetSize(Size());
delegate_->Invalidate();
}

gfx::Size FrameOverlay::Size() const {
Expand All @@ -113,52 +79,13 @@ gfx::Size FrameOverlay::Size() const {
return size;
}

gfx::Rect FrameOverlay::ComputeInterestRect(const GraphicsLayer* graphics_layer,
const gfx::Rect&) const {
DCHECK(!RuntimeEnabledFeatures::CompositeAfterPaintEnabled());
DCHECK(!RuntimeEnabledFeatures::CullRectUpdateEnabled());
return gfx::Rect(gfx::Point(), Size());
}

gfx::Rect FrameOverlay::PaintableRegion(
const GraphicsLayer* graphics_layer) const {
DCHECK(!RuntimeEnabledFeatures::CompositeAfterPaintEnabled());
DCHECK(RuntimeEnabledFeatures::CullRectUpdateEnabled());
return gfx::Rect(gfx::Point(), Size());
}

void FrameOverlay::PaintContents(const GraphicsLayer* graphics_layer,
GraphicsContext& context,
GraphicsLayerPaintingPhase phase,
const gfx::Rect& interest_rect) const {
DCHECK(!RuntimeEnabledFeatures::CompositeAfterPaintEnabled());
DCHECK_EQ(graphics_layer, layer_);
DCHECK_EQ(DefaultPropertyTreeState(), layer_->GetPropertyTreeState());
Paint(context);
}

void FrameOverlay::GraphicsLayersDidChange() {
frame_->View()->SetPaintArtifactCompositorNeedsUpdate();
}

PaintArtifactCompositor* FrameOverlay::GetPaintArtifactCompositor() {
return frame_->View()->GetPaintArtifactCompositor();
}

void FrameOverlay::ServiceScriptedAnimations(
base::TimeTicks monotonic_frame_begin_time) {
delegate_->ServiceScriptedAnimations(monotonic_frame_begin_time);
}

String FrameOverlay::DebugName(const GraphicsLayer*) const {
DCHECK(!RuntimeEnabledFeatures::CompositeAfterPaintEnabled());
return "Frame Overlay Content Layer";
}

void FrameOverlay::Trace(Visitor* visitor) const {
visitor->Trace(frame_);
visitor->Trace(layer_);
GraphicsLayerClient::Trace(visitor);
DisplayItemClient::Trace(visitor);
}

Expand Down
23 changes: 2 additions & 21 deletions third_party/blink/renderer/core/frame/frame_overlay.h
Expand Up @@ -30,20 +30,19 @@
#define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_FRAME_OVERLAY_H_

#include <memory>
#include "base/time/time.h"
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/platform/graphics/graphics_layer.h"
#include "third_party/blink/renderer/platform/graphics/graphics_layer_client.h"
#include "third_party/blink/renderer/platform/graphics/paint/display_item_client.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"

namespace blink {

class GraphicsContext;
class LocalFrame;
class PropertyTreeState;

// Manages a layer that is overlaid on a WebLocalFrame's content.
class CORE_EXPORT FrameOverlay : public GarbageCollected<FrameOverlay>,
public GraphicsLayerClient,
public DisplayItemClient {
public:
class Delegate {
Expand Down Expand Up @@ -73,11 +72,6 @@ class CORE_EXPORT FrameOverlay : public GarbageCollected<FrameOverlay>,
// For CompositeAfterPaint.
void Paint(GraphicsContext&) const;

GraphicsLayer* GetGraphicsLayer() const {
DCHECK(!RuntimeEnabledFeatures::CompositeAfterPaintEnabled());
return layer_;
}

// FrameOverlay is always the same size as the viewport.
gfx::Size Size() const;

Expand All @@ -90,26 +84,13 @@ class CORE_EXPORT FrameOverlay : public GarbageCollected<FrameOverlay>,
// DisplayItemClient.
String DebugName() const final { return "FrameOverlay"; }

// GraphicsLayerClient implementation. Not needed for CompositeAfterPaint.
bool NeedsRepaint(const GraphicsLayer&) const override { return true; }
gfx::Rect ComputeInterestRect(const GraphicsLayer*,
const gfx::Rect&) const override;
gfx::Rect PaintableRegion(const GraphicsLayer*) const override;
void PaintContents(const GraphicsLayer*,
GraphicsContext&,
GraphicsLayerPaintingPhase,
const gfx::Rect& interest_rect) const override;
void GraphicsLayersDidChange() override;
PaintArtifactCompositor* GetPaintArtifactCompositor() override;
String DebugName(const GraphicsLayer*) const override;
void Trace(Visitor*) const override;

PropertyTreeState DefaultPropertyTreeState() const;

private:
Member<LocalFrame> frame_;
std::unique_ptr<FrameOverlay::Delegate> delegate_;
Member<GraphicsLayer> layer_;

#if DCHECK_IS_ON()
bool is_destroyed_ = false;
Expand Down
75 changes: 5 additions & 70 deletions third_party/blink/renderer/core/frame/frame_overlay_test.cc
Expand Up @@ -105,23 +105,8 @@ TEST_P(FrameOverlayTest, AcceleratedCompositing) {
Property(&SkPaint::getColor, SK_ColorYELLOW)));

auto* builder = MakeGarbageCollected<PaintRecordBuilder>();
if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) {
frame_overlay->Paint(builder->Context());
builder->EndRecording()->Playback(&canvas);
} else {
auto* graphics_layer = frame_overlay->GetGraphicsLayer();
EXPECT_FALSE(graphics_layer->IsHitTestable());
EXPECT_EQ(PropertyTreeState::Root(),
graphics_layer->GetPropertyTreeState());
HeapVector<PreCompositedLayerInfo> pre_composited_layers;
PaintController::CycleScope cycle_scope;
graphics_layer->PaintRecursively(builder->Context(), pre_composited_layers,
cycle_scope);
ASSERT_EQ(1u, pre_composited_layers.size());
SkiaPaintCanvas(&canvas).drawPicture(
graphics_layer->GetPaintController().GetPaintArtifact().GetPaintRecord(
PropertyTreeState::Root()));
}
frame_overlay->Paint(builder->Context());
builder->EndRecording()->Playback(&canvas);
frame_overlay->Destroy();
}

Expand Down Expand Up @@ -164,61 +149,11 @@ TEST_P(FrameOverlayTest, DeviceEmulationScale) {

PaintController paint_controller(PaintController::kTransient);
GraphicsContext context(paint_controller);
if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) {
frame_overlay->Paint(context);
paint_controller.CommitNewDisplayItems();
check_paint_results(paint_controller);
} else {
auto* graphics_layer = frame_overlay->GetGraphicsLayer();
EXPECT_FALSE(graphics_layer->IsHitTestable());
EXPECT_EQ(state, graphics_layer->GetPropertyTreeState());
HeapVector<PreCompositedLayerInfo> pre_composited_layers;
PaintController::CycleScope cycle_scope;
graphics_layer->PaintRecursively(context, pre_composited_layers,
cycle_scope);
check_paint_results(graphics_layer->GetPaintController());
}
frame_overlay->Paint(context);
paint_controller.CommitNewDisplayItems();
check_paint_results(paint_controller);
frame_overlay->Destroy();
}

TEST_P(FrameOverlayTest, LayerOrder) {
// This test doesn't apply in CompositeAfterPaint.
if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled())
return;

auto* frame_overlay1 = CreateSolidYellowOverlay();
auto* frame_overlay2 = CreateSolidYellowOverlay();
frame_overlay1->UpdatePrePaint();
frame_overlay2->UpdatePrePaint();

auto* parent_layer = GetWebView()
->MainFrameImpl()
->GetFrameView()
->GetLayoutView()
->Compositor()
->PaintRootGraphicsLayer();
ASSERT_EQ(3u, parent_layer->Children().size());
EXPECT_EQ(parent_layer, frame_overlay1->GetGraphicsLayer()->Parent());
EXPECT_EQ(parent_layer->Children()[1], frame_overlay1->GetGraphicsLayer());
EXPECT_EQ(parent_layer, frame_overlay2->GetGraphicsLayer()->Parent());
EXPECT_EQ(parent_layer->Children()[2], frame_overlay2->GetGraphicsLayer());

auto* extra_layer =
MakeGarbageCollected<GraphicsLayer>(parent_layer->Client());
parent_layer->AddChild(extra_layer);

frame_overlay1->UpdatePrePaint();
frame_overlay2->UpdatePrePaint();
ASSERT_EQ(4u, parent_layer->Children().size());
EXPECT_EQ(parent_layer, frame_overlay1->GetGraphicsLayer()->Parent());
EXPECT_EQ(parent_layer->Children()[2], frame_overlay1->GetGraphicsLayer());
EXPECT_EQ(parent_layer, frame_overlay2->GetGraphicsLayer()->Parent());
EXPECT_EQ(parent_layer->Children()[3], frame_overlay2->GetGraphicsLayer());

extra_layer->Destroy();
frame_overlay1->Destroy();
frame_overlay2->Destroy();
}

} // namespace
} // namespace blink
Expand Up @@ -997,12 +997,9 @@ void InspectorOverlayAgent::PaintOverlay(GraphicsContext& context) {
bool InspectorOverlayAgent::IsInspectorLayer(const cc::Layer* layer) const {
if (!frame_overlay_)
return false;
if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) {
return layer == static_cast<const InspectorPageOverlayDelegate*>(
frame_overlay_->GetDelegate())
->GetLayer();
}
return layer == &frame_overlay_->GetGraphicsLayer()->CcLayer();
return layer == static_cast<const InspectorPageOverlayDelegate*>(
frame_overlay_->GetDelegate())
->GetLayer();
}

LocalFrame* InspectorOverlayAgent::GetFrame() const {
Expand Down
Expand Up @@ -7,6 +7,7 @@

#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/frame/frame_overlay.h"
#include "third_party/blink/renderer/platform/heap/persistent.h"
#include "third_party/blink/renderer/platform/text/text_direction.h"
#include "third_party/blink/renderer/platform/wtf/forward.h"

Expand Down

0 comments on commit f92fdc9

Please sign in to comment.