Commit f30231c5 authored by Robert Flack's avatar Robert Flack Committed by Commit Bot

Convert Layer's LayerClient to a WeakPtr.

Bug: 813520
Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I3f5b734202c69346c4681c11a40ebb58922f7e64
Reviewed-on: https://chromium-review.googlesource.com/969587Reviewed-by: default avatarChris Harrelson <chrishtr@chromium.org>
Reviewed-by: default avatarIan Vollick <vollick@chromium.org>
Commit-Queue: Robert Flack <flackr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#544359}
parent bd2c6530
......@@ -460,8 +460,8 @@ void WebLayerImpl::SetScrollOffsetFromImplSideForTesting(
layer_->SetScrollOffsetFromImplSide(offset);
}
void WebLayerImpl::SetLayerClient(cc::LayerClient* client) {
layer_->SetLayerClient(client);
void WebLayerImpl::SetLayerClient(base::WeakPtr<cc::LayerClient> client) {
layer_->SetLayerClient(std::move(client));
}
const cc::Layer* WebLayerImpl::CcLayer() const {
......
......@@ -122,7 +122,7 @@ class CC_BLINK_EXPORT WebLayerImpl : public blink::WebLayer {
const override;
void SetScrollClient(blink::WebLayerScrollClient* client) override;
void SetScrollOffsetFromImplSideForTesting(const gfx::ScrollOffset&) override;
void SetLayerClient(cc::LayerClient* client) override;
void SetLayerClient(base::WeakPtr<cc::LayerClient> client) override;
const cc::Layer* CcLayer() const override;
cc::Layer* CcLayer() override;
void SetElementId(const cc::ElementId&) override;
......
......@@ -335,7 +335,9 @@ class CC_EXPORT Layer : public base::RefCounted<Layer> {
TakeDebugInfo();
virtual void didUpdateMainThreadScrollingReasons();
void SetLayerClient(LayerClient* client) { inputs_.client = client; }
void SetLayerClient(base::WeakPtr<LayerClient> client) {
inputs_.client = std::move(client);
}
virtual bool IsSnapped();
......@@ -627,7 +629,7 @@ class CC_EXPORT Layer : public base::RefCounted<Layer> {
bool hide_layer_and_subtree : 1;
// The following elements can not and are not serialized.
LayerClient* client;
base::WeakPtr<LayerClient> client;
base::Callback<void(const gfx::ScrollOffset&, const ElementId&)>
did_scroll_callback;
std::vector<std::unique_ptr<viz::CopyOutputRequest>> copy_requests;
......
......@@ -105,13 +105,14 @@ GraphicsLayer::GraphicsLayer(GraphicsLayerClient& client)
contents_layer_(nullptr),
contents_layer_id_(0),
scrollable_area_(nullptr),
rendering_context3d_(0) {
rendering_context3d_(0),
weak_ptr_factory_(this) {
#if DCHECK_IS_ON()
client.VerifyNotPainting();
#endif
layer_ = Platform::Current()->CompositorSupport()->CreateContentLayer(this);
layer_->Layer()->SetDrawsContent(draws_content_ && contents_visible_);
layer_->Layer()->SetLayerClient(this);
layer_->Layer()->SetLayerClient(weak_ptr_factory_.GetWeakPtr());
UpdateTrackingRasterInvalidations();
}
......@@ -556,7 +557,7 @@ void GraphicsLayer::SetContentsLayer(WebLayer* contents_layer) {
contents_layer_id_ = 0;
return;
}
contents_layer_->SetLayerClient(this);
contents_layer_->SetLayerClient(weak_ptr_factory_.GetWeakPtr());
contents_layer_id_ = contents_layer_->Id();
}
......@@ -1292,7 +1293,7 @@ void GraphicsLayer::SetPaintingPhase(GraphicsLayerPaintingPhase phase) {
void GraphicsLayer::AddLinkHighlight(LinkHighlight* link_highlight) {
DCHECK(link_highlight && !link_highlights_.Contains(link_highlight));
link_highlights_.push_back(link_highlight);
link_highlight->Layer()->SetLayerClient(this);
link_highlight->Layer()->SetLayerClient(weak_ptr_factory_.GetWeakPtr());
UpdateChildList();
}
......
......@@ -28,6 +28,7 @@
#define GraphicsLayer_h
#include <memory>
#include "base/memory/weak_ptr.h"
#include "cc/layers/layer_client.h"
#include "platform/PlatformExport.h"
#include "platform/geometry/FloatPoint.h"
......@@ -430,6 +431,8 @@ class PLATFORM_EXPORT GraphicsLayer : public cc::LayerClient,
std::unique_ptr<LayerState> layer_state_;
std::unique_ptr<CompositedLayerRasterInvalidator> raster_invalidator_;
base::WeakPtrFactory<GraphicsLayer> weak_ptr_factory_;
};
// ObjectPaintInvalidatorWithContext::InvalidatePaintRectangleWithContext uses
......
......@@ -241,7 +241,7 @@ class WebLayer {
virtual void SetSnapContainerData(base::Optional<cc::SnapContainerData>) = 0;
// Sets the cc-side layer client.
virtual void SetLayerClient(cc::LayerClient*) = 0;
virtual void SetLayerClient(base::WeakPtr<cc::LayerClient>) = 0;
// Gets the underlying cc layer.
virtual const cc::Layer* CcLayer() const = 0;
......
......@@ -113,7 +113,8 @@ Layer::Layer()
device_scale_factor_(1.0f),
cache_render_surface_requests_(0),
deferred_paint_requests_(0),
trilinear_filtering_request_(0) {
trilinear_filtering_request_(0),
weak_ptr_factory_(this) {
CreateCcLayer();
}
......@@ -140,7 +141,8 @@ Layer::Layer(LayerType type)
device_scale_factor_(1.0f),
cache_render_surface_requests_(0),
deferred_paint_requests_(0),
trilinear_filtering_request_(0) {
trilinear_filtering_request_(0),
weak_ptr_factory_(this) {
CreateCcLayer();
}
......@@ -628,7 +630,7 @@ void Layer::SwitchToLayer(scoped_refptr<cc::Layer> new_layer) {
DCHECK(child->cc_layer_);
cc_layer_->AddChild(child->cc_layer_);
}
cc_layer_->SetLayerClient(this);
cc_layer_->SetLayerClient(weak_ptr_factory_.GetWeakPtr());
cc_layer_->SetTransformOrigin(gfx::Point3F());
cc_layer_->SetContentsOpaque(fills_bounds_opaquely_);
cc_layer_->SetIsDrawable(type_ != LAYER_NOT_DRAWN);
......@@ -1263,7 +1265,7 @@ void Layer::CreateCcLayer() {
cc_layer_->SetTransformOrigin(gfx::Point3F());
cc_layer_->SetContentsOpaque(true);
cc_layer_->SetIsDrawable(type_ != LAYER_NOT_DRAWN);
cc_layer_->SetLayerClient(this);
cc_layer_->SetLayerClient(weak_ptr_factory_.GetWeakPtr());
cc_layer_->SetElementId(cc::ElementId(cc_layer_->id()));
RecomputePosition();
}
......
......@@ -14,6 +14,7 @@
#include "base/compiler_specific.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/observer_list.h"
#include "cc/base/region.h"
......@@ -623,6 +624,8 @@ class COMPOSITOR_EXPORT Layer : public LayerAnimationDelegate,
// layer.
unsigned trilinear_filtering_request_;
base::WeakPtrFactory<Layer> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(Layer);
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment