Commit 7df6313c authored by Michael Tang's avatar Michael Tang Committed by Commit Bot

[Paint Preview] Make PaintPreviewBaseService::StartCompositorService static

Change-Id: I021f64713a2b19b9e40f5ddab7258a3fc97fd88a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2357454Reviewed-by: default avatarCalder Kitagawa <ckitagawa@chromium.org>
Commit-Queue: Calder Kitagawa <ckitagawa@chromium.org>
Cr-Commit-Position: refs/heads/master@{#798615}
parent a9cc9ef6
...@@ -113,9 +113,8 @@ IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest, ...@@ -113,9 +113,8 @@ IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest,
IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest, CompositorCreate) { IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest, CompositorCreate) {
CreateServiceInstance(); CreateServiceInstance();
auto* base_service = GetBaseService(); auto compositor_service =
auto compositor_service = ToCompositorServiceImpl( ToCompositorServiceImpl(StartCompositorService(base::DoNothing()));
base_service->StartCompositorService(base::DoNothing()));
base::RunLoop loop; base::RunLoop loop;
auto compositor = ToCompositorClientImpl( auto compositor = ToCompositorClientImpl(
...@@ -133,9 +132,8 @@ IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest, CompositorCreate) { ...@@ -133,9 +132,8 @@ IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest, CompositorCreate) {
IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest, IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest,
MultipleCompositorCreate) { MultipleCompositorCreate) {
CreateServiceInstance(); CreateServiceInstance();
auto* base_service = GetBaseService(); auto compositor_service =
auto compositor_service = ToCompositorServiceImpl( ToCompositorServiceImpl(StartCompositorService(base::DoNothing()));
base_service->StartCompositorService(base::DoNothing()));
EXPECT_EQ(0U, compositor_service->ActiveClientsForTesting().size()); EXPECT_EQ(0U, compositor_service->ActiveClientsForTesting().size());
EXPECT_FALSE(compositor_service->HasActiveClients()); EXPECT_FALSE(compositor_service->HasActiveClients());
...@@ -174,12 +172,11 @@ IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest, ...@@ -174,12 +172,11 @@ IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest,
IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest, IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest,
KillWithActiveCompositors) { KillWithActiveCompositors) {
CreateServiceInstance(); CreateServiceInstance();
auto* base_service = GetBaseService();
// NOTE: the disconnect handler for the service as a whole only triggers if // NOTE: the disconnect handler for the service as a whole only triggers if
// the service is killed unexpectedly. Here the |compositor_service| object // the service is killed unexpectedly. Here the |compositor_service| object
// is deleted (performing a graceful shutdown) so the handler won't run. // is deleted (performing a graceful shutdown) so the handler won't run.
auto compositor_service = ToCompositorServiceImpl( auto compositor_service =
base_service->StartCompositorService(base::DoNothing())); ToCompositorServiceImpl(StartCompositorService(base::DoNothing()));
base::RunLoop loop; base::RunLoop loop;
auto compositor = ToCompositorClientImpl( auto compositor = ToCompositorClientImpl(
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/bind.h" #include "base/bind.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "components/discardable_memory/service/discardable_shared_memory_manager.h" #include "components/discardable_memory/service/discardable_shared_memory_manager.h"
#include "components/paint_preview/browser/paint_preview_compositor_service_impl.h"
#include "components/paint_preview/browser/service_sandbox_type.h" #include "components/paint_preview/browser/service_sandbox_type.h"
#include "components/services/paint_preview_compositor/public/mojom/paint_preview_compositor.mojom.h" #include "components/services/paint_preview_compositor/public/mojom/paint_preview_compositor.mojom.h"
#include "components/strings/grit/components_strings.h" #include "components/strings/grit/components_strings.h"
...@@ -31,6 +32,31 @@ void BindDiscardableSharedMemoryManagerOnIOThread( ...@@ -31,6 +32,31 @@ void BindDiscardableSharedMemoryManagerOnIOThread(
} // namespace } // namespace
std::unique_ptr<PaintPreviewCompositorService> StartCompositorService(
base::OnceClosure disconnect_handler) {
// Create a dedicated sequence for communicating with the compositor. This
// sequence will handle message serialization/deserialization of bitmaps so it
// affects user visible elements. This is an implementation detail and the
// caller should continue to communicate with the compositor via the sequence
// that called this.
auto compositor_task_runner = base::ThreadPool::CreateSequencedTaskRunner(
{base::TaskPriority::USER_VISIBLE,
base::ThreadPolicy::MUST_USE_FOREGROUND});
// The discardable memory manager isn't initialized here. This is handled in
// the constructor of PaintPreviewCompositorServiceImpl once the pending
// remote becomes bound.
mojo::PendingRemote<mojom::PaintPreviewCompositorCollection> pending_remote;
compositor_task_runner->PostTask(
FROM_HERE,
base::BindOnce(&CreateCompositorCollectionPending,
pending_remote.InitWithNewPipeAndPassReceiver()));
return std::make_unique<PaintPreviewCompositorServiceImpl>(
std::move(pending_remote), compositor_task_runner,
std::move(disconnect_handler));
}
mojo::Remote<mojom::PaintPreviewCompositorCollection> mojo::Remote<mojom::PaintPreviewCompositorCollection>
CreateCompositorCollection() { CreateCompositorCollection() {
mojo::Remote<mojom::PaintPreviewCompositorCollection> collection; mojo::Remote<mojom::PaintPreviewCompositorCollection> collection;
......
...@@ -5,11 +5,16 @@ ...@@ -5,11 +5,16 @@
#ifndef COMPONENTS_PAINT_PREVIEW_BROWSER_COMPOSITOR_UTILS_H_ #ifndef COMPONENTS_PAINT_PREVIEW_BROWSER_COMPOSITOR_UTILS_H_
#define COMPONENTS_PAINT_PREVIEW_BROWSER_COMPOSITOR_UTILS_H_ #define COMPONENTS_PAINT_PREVIEW_BROWSER_COMPOSITOR_UTILS_H_
#include "components/paint_preview/public/paint_preview_compositor_service.h"
#include "components/services/paint_preview_compositor/public/mojom/paint_preview_compositor.mojom.h" #include "components/services/paint_preview_compositor/public/mojom/paint_preview_compositor.mojom.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
namespace paint_preview { namespace paint_preview {
// Starts the compositor service in a utility process.
std::unique_ptr<PaintPreviewCompositorService> StartCompositorService(
base::OnceClosure disconnect_handler);
// Creates a utility process via the service manager that is sandboxed and // Creates a utility process via the service manager that is sandboxed and
// running an instance of the PaintPreviewCompositorCollectionImpl. This can be // running an instance of the PaintPreviewCompositorCollectionImpl. This can be
// used to create compositor instances that composite Paint Previews into // used to create compositor instances that composite Paint Previews into
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include "components/keyed_service/core/keyed_service.h" #include "components/keyed_service/core/keyed_service.h"
#include "components/paint_preview/browser/compositor_utils.h" #include "components/paint_preview/browser/compositor_utils.h"
#include "components/paint_preview/browser/paint_preview_client.h" #include "components/paint_preview/browser/paint_preview_client.h"
#include "components/paint_preview/browser/paint_preview_compositor_service_impl.h"
#include "components/paint_preview/common/mojom/paint_preview_recorder.mojom.h" #include "components/paint_preview/common/mojom/paint_preview_recorder.mojom.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
...@@ -115,32 +114,6 @@ void PaintPreviewBaseService::CapturePaintPreview( ...@@ -115,32 +114,6 @@ void PaintPreviewBaseService::CapturePaintPreview(
start_time, std::move(callback))); start_time, std::move(callback)));
} }
std::unique_ptr<PaintPreviewCompositorService>
PaintPreviewBaseService::StartCompositorService(
base::OnceClosure disconnect_handler) {
// Create a dedicated sequence for communicating with the compositor. This
// sequence will handle message serialization/deserialization of bitmaps so it
// affects user visible elements. This is an implementation detail and the
// caller should continue to communicate with the compositor via the sequence
// that called this.
auto compositor_task_runner = base::ThreadPool::CreateSequencedTaskRunner(
{base::TaskPriority::USER_VISIBLE,
base::ThreadPolicy::MUST_USE_FOREGROUND});
// The discardable memory manager isn't initialized here. This is handled in
// the constructor of PaintPreviewCompositorServiceImpl once the pending
// remote becomes bound.
mojo::PendingRemote<mojom::PaintPreviewCompositorCollection> pending_remote;
compositor_task_runner->PostTask(
FROM_HERE,
base::BindOnce(&CreateCompositorCollectionPending,
pending_remote.InitWithNewPipeAndPassReceiver()));
return std::make_unique<PaintPreviewCompositorServiceImpl>(
std::move(pending_remote), compositor_task_runner,
std::move(disconnect_handler));
}
void PaintPreviewBaseService::OnCaptured( void PaintPreviewBaseService::OnCaptured(
int frame_tree_node_id, int frame_tree_node_id,
base::TimeTicks start_time, base::TimeTicks start_time,
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include "components/paint_preview/common/file_utils.h" #include "components/paint_preview/common/file_utils.h"
#include "components/paint_preview/common/mojom/paint_preview_recorder.mojom.h" #include "components/paint_preview/common/mojom/paint_preview_recorder.mojom.h"
#include "components/paint_preview/common/proto/paint_preview.pb.h" #include "components/paint_preview/common/proto/paint_preview.pb.h"
#include "components/paint_preview/public/paint_preview_compositor_service.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
namespace paint_preview { namespace paint_preview {
...@@ -128,10 +127,6 @@ class PaintPreviewBaseService : public KeyedService { ...@@ -128,10 +127,6 @@ class PaintPreviewBaseService : public KeyedService {
size_t max_per_capture_size, size_t max_per_capture_size,
OnCapturedCallback callback); OnCapturedCallback callback);
// Starts the compositor service in a utility process.
std::unique_ptr<PaintPreviewCompositorService> StartCompositorService(
base::OnceClosure disconnect_handler);
private: private:
void OnCaptured(int frame_tree_node_id, void OnCaptured(int frame_tree_node_id,
base::TimeTicks start_time, base::TimeTicks start_time,
......
...@@ -113,10 +113,9 @@ PlayerCompositorDelegate::PlayerCompositorDelegate( ...@@ -113,10 +113,9 @@ PlayerCompositorDelegate::PlayerCompositorDelegate(
TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("paint_preview", TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("paint_preview",
"PlayerCompositorDelegate CreateCompositor", "PlayerCompositorDelegate CreateCompositor",
TRACE_ID_LOCAL(this)); TRACE_ID_LOCAL(this));
paint_preview_compositor_service_ = paint_preview_compositor_service_ = StartCompositorService(
paint_preview_service_->StartCompositorService(base::BindOnce( base::BindOnce(&PlayerCompositorDelegate::OnCompositorServiceDisconnected,
&PlayerCompositorDelegate::OnCompositorServiceDisconnected, weak_factory_.GetWeakPtr()));
weak_factory_.GetWeakPtr()));
paint_preview_compositor_client_ = paint_preview_compositor_client_ =
paint_preview_compositor_service_->CreateCompositor( paint_preview_compositor_service_->CreateCompositor(
......
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