Commit c6f0d877 authored by Yuki Yamada's avatar Yuki Yamada Committed by Commit Bot

Switch BeginFrameProvider to GarbageCollected

Makes BeginFrameProvider a GarbageCollected class, and also makes
BeginFrameProvider a GarbageCollectedMixin class.
This was split into multiple CLs. Another CL:
https://chromium-review.googlesource.com/c/chromium/src/+/2145746

Bug: 1049056
Change-Id: I0346e4db178b0cf85e08e2b4e54c961872457e37
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2145739Reviewed-by: default avatarKeishi Hattori <keishi@chromium.org>
Reviewed-by: default avatarKouhei Ueno <kouhei@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Yuki Yamada <yukiy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#758733}
parent 7f5e955d
...@@ -15,8 +15,8 @@ WorkerAnimationFrameProvider::WorkerAnimationFrameProvider( ...@@ -15,8 +15,8 @@ WorkerAnimationFrameProvider::WorkerAnimationFrameProvider(
ExecutionContext* context, ExecutionContext* context,
const BeginFrameProviderParams& begin_frame_provider_params) const BeginFrameProviderParams& begin_frame_provider_params)
: begin_frame_provider_( : begin_frame_provider_(
std::make_unique<BeginFrameProvider>(begin_frame_provider_params, MakeGarbageCollected<BeginFrameProvider>(begin_frame_provider_params,
this)), this)),
callback_collection_(context), callback_collection_(context),
context_(context) {} context_(context) {}
...@@ -81,9 +81,11 @@ void WorkerAnimationFrameProvider::DeregisterOffscreenCanvas( ...@@ -81,9 +81,11 @@ void WorkerAnimationFrameProvider::DeregisterOffscreenCanvas(
} }
void WorkerAnimationFrameProvider::Trace(Visitor* visitor) { void WorkerAnimationFrameProvider::Trace(Visitor* visitor) {
visitor->Trace(begin_frame_provider_);
visitor->Trace(callback_collection_); visitor->Trace(callback_collection_);
visitor->Trace(offscreen_canvases_); visitor->Trace(offscreen_canvases_);
visitor->Trace(context_); visitor->Trace(context_);
BeginFrameProviderClient::Trace(visitor);
} }
} // namespace blink } // namespace blink
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/dom/frame_request_callback_collection.h" #include "third_party/blink/renderer/core/dom/frame_request_callback_collection.h"
#include "third_party/blink/renderer/platform/graphics/begin_frame_provider.h" #include "third_party/blink/renderer/platform/graphics/begin_frame_provider.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/heap/handle.h"
namespace blink { namespace blink {
...@@ -28,6 +29,8 @@ class OffscreenCanvas; ...@@ -28,6 +29,8 @@ class OffscreenCanvas;
class CORE_EXPORT WorkerAnimationFrameProvider class CORE_EXPORT WorkerAnimationFrameProvider
: public GarbageCollected<WorkerAnimationFrameProvider>, : public GarbageCollected<WorkerAnimationFrameProvider>,
public BeginFrameProviderClient { public BeginFrameProviderClient {
USING_GARBAGE_COLLECTED_MIXIN(WorkerAnimationFrameProvider);
public: public:
WorkerAnimationFrameProvider( WorkerAnimationFrameProvider(
ExecutionContext* context, ExecutionContext* context,
...@@ -36,7 +39,7 @@ class CORE_EXPORT WorkerAnimationFrameProvider ...@@ -36,7 +39,7 @@ class CORE_EXPORT WorkerAnimationFrameProvider
int RegisterCallback(FrameRequestCallbackCollection::FrameCallback* callback); int RegisterCallback(FrameRequestCallbackCollection::FrameCallback* callback);
void CancelCallback(int id); void CancelCallback(int id);
void Trace(Visitor* visitor); void Trace(Visitor* visitor) override;
// BeginFrameProviderClient // BeginFrameProviderClient
void BeginFrame(const viz::BeginFrameArgs&) override; void BeginFrame(const viz::BeginFrameArgs&) override;
...@@ -47,7 +50,7 @@ class CORE_EXPORT WorkerAnimationFrameProvider ...@@ -47,7 +50,7 @@ class CORE_EXPORT WorkerAnimationFrameProvider
static const int kInvalidCallbackId = -1; static const int kInvalidCallbackId = -1;
private: private:
const std::unique_ptr<BeginFrameProvider> begin_frame_provider_; const Member<BeginFrameProvider> begin_frame_provider_;
DISALLOW_COPY_AND_ASSIGN(WorkerAnimationFrameProvider); DISALLOW_COPY_AND_ASSIGN(WorkerAnimationFrameProvider);
FrameRequestCallbackCollection callback_collection_; FrameRequestCallbackCollection callback_collection_;
......
...@@ -42,6 +42,8 @@ include_rules = [ ...@@ -42,6 +42,8 @@ include_rules = [
"+third_party/blink/renderer/platform/image-encoders", "+third_party/blink/renderer/platform/image-encoders",
"+third_party/blink/renderer/platform/instrumentation", "+third_party/blink/renderer/platform/instrumentation",
"+third_party/blink/renderer/platform/json", "+third_party/blink/renderer/platform/json",
"+third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h",
"+third_party/blink/renderer/platform/mojo/heap_mojo_remote.h",
"+third_party/blink/renderer/platform/mojo/mojo_helper.h", "+third_party/blink/renderer/platform/mojo/mojo_helper.h",
"+third_party/blink/renderer/platform/platform_export.h", "+third_party/blink/renderer/platform/platform_export.h",
"+third_party/blink/renderer/platform/runtime_enabled_features.h", "+third_party/blink/renderer/platform/runtime_enabled_features.h",
......
...@@ -77,7 +77,7 @@ void BeginFrameProvider::CreateCompositorFrameSinkIfNeeded() { ...@@ -77,7 +77,7 @@ void BeginFrameProvider::CreateCompositorFrameSinkIfNeeded() {
compositor_frame_sink_.BindNewPipeAndPassReceiver()); compositor_frame_sink_.BindNewPipeAndPassReceiver());
compositor_frame_sink_.set_disconnect_with_reason_handler(base::BindOnce( compositor_frame_sink_.set_disconnect_with_reason_handler(base::BindOnce(
&BeginFrameProvider::OnMojoConnectionError, weak_factory_.GetWeakPtr())); &BeginFrameProvider::OnMojoConnectionError, WrapWeakPersistent(this)));
} }
void BeginFrameProvider::RequestBeginFrame() { void BeginFrameProvider::RequestBeginFrame() {
...@@ -120,4 +120,8 @@ void BeginFrameProvider::FinishBeginFrame(const viz::BeginFrameArgs& args) { ...@@ -120,4 +120,8 @@ void BeginFrameProvider::FinishBeginFrame(const viz::BeginFrameArgs& args) {
compositor_frame_sink_->DidNotProduceFrame(viz::BeginFrameAck(args, false)); compositor_frame_sink_->DidNotProduceFrame(viz::BeginFrameAck(args, false));
} }
void BeginFrameProvider::Trace(Visitor* visitor) {
visitor->Trace(begin_frame_client_);
}
} // namespace blink } // namespace blink
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
#include "services/viz/public/mojom/compositing/compositor_frame_sink.mojom-blink.h" #include "services/viz/public/mojom/compositing/compositor_frame_sink.mojom-blink.h"
#include "third_party/blink/public/mojom/frame_sinks/embedded_frame_sink.mojom-blink.h" #include "third_party/blink/public/mojom/frame_sinks/embedded_frame_sink.mojom-blink.h"
#include "third_party/blink/renderer/platform/graphics/begin_frame_provider.h" #include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/platform_export.h"
namespace blink { namespace blink {
...@@ -22,14 +22,15 @@ struct PLATFORM_EXPORT BeginFrameProviderParams final { ...@@ -22,14 +22,15 @@ struct PLATFORM_EXPORT BeginFrameProviderParams final {
viz::FrameSinkId frame_sink_id; viz::FrameSinkId frame_sink_id;
}; };
class PLATFORM_EXPORT BeginFrameProviderClient { class PLATFORM_EXPORT BeginFrameProviderClient : public GarbageCollectedMixin {
public: public:
virtual void BeginFrame(const viz::BeginFrameArgs&) = 0; virtual void BeginFrame(const viz::BeginFrameArgs&) = 0;
virtual ~BeginFrameProviderClient() = default; virtual ~BeginFrameProviderClient() = default;
}; };
class PLATFORM_EXPORT BeginFrameProvider class PLATFORM_EXPORT BeginFrameProvider
: public viz::mojom::blink::CompositorFrameSinkClient, : public GarbageCollected<BeginFrameProvider>,
public viz::mojom::blink::CompositorFrameSinkClient,
public mojom::blink::EmbeddedFrameSinkClient { public mojom::blink::EmbeddedFrameSinkClient {
public: public:
explicit BeginFrameProvider( explicit BeginFrameProvider(
...@@ -65,6 +66,8 @@ class PLATFORM_EXPORT BeginFrameProvider ...@@ -65,6 +66,8 @@ class PLATFORM_EXPORT BeginFrameProvider
bool IsValidFrameProvider(); bool IsValidFrameProvider();
void Trace(Visitor*);
~BeginFrameProvider() override = default; ~BeginFrameProvider() override = default;
private: private:
...@@ -80,9 +83,7 @@ class PLATFORM_EXPORT BeginFrameProvider ...@@ -80,9 +83,7 @@ class PLATFORM_EXPORT BeginFrameProvider
viz::FrameSinkId frame_sink_id_; viz::FrameSinkId frame_sink_id_;
viz::FrameSinkId parent_frame_sink_id_; viz::FrameSinkId parent_frame_sink_id_;
mojo::Remote<viz::mojom::blink::CompositorFrameSink> compositor_frame_sink_; mojo::Remote<viz::mojom::blink::CompositorFrameSink> compositor_frame_sink_;
BeginFrameProviderClient* begin_frame_client_; Member<BeginFrameProviderClient> begin_frame_client_;
base::WeakPtrFactory<BeginFrameProvider> weak_factory_{this};
}; };
} // namespace blink } // namespace blink
......
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