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,
IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest, CompositorCreate) {
CreateServiceInstance();
auto* base_service = GetBaseService();
auto compositor_service = ToCompositorServiceImpl(
base_service->StartCompositorService(base::DoNothing()));
auto compositor_service =
ToCompositorServiceImpl(StartCompositorService(base::DoNothing()));
base::RunLoop loop;
auto compositor = ToCompositorClientImpl(
......@@ -133,9 +132,8 @@ IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest, CompositorCreate) {
IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest,
MultipleCompositorCreate) {
CreateServiceInstance();
auto* base_service = GetBaseService();
auto compositor_service = ToCompositorServiceImpl(
base_service->StartCompositorService(base::DoNothing()));
auto compositor_service =
ToCompositorServiceImpl(StartCompositorService(base::DoNothing()));
EXPECT_EQ(0U, compositor_service->ActiveClientsForTesting().size());
EXPECT_FALSE(compositor_service->HasActiveClients());
......@@ -174,12 +172,11 @@ IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest,
IN_PROC_BROWSER_TEST_F(PaintPreviewCompositorBrowserTest,
KillWithActiveCompositors) {
CreateServiceInstance();
auto* base_service = GetBaseService();
// NOTE: the disconnect handler for the service as a whole only triggers if
// the service is killed unexpectedly. Here the |compositor_service| object
// is deleted (performing a graceful shutdown) so the handler won't run.
auto compositor_service = ToCompositorServiceImpl(
base_service->StartCompositorService(base::DoNothing()));
auto compositor_service =
ToCompositorServiceImpl(StartCompositorService(base::DoNothing()));
base::RunLoop loop;
auto compositor = ToCompositorClientImpl(
......
......@@ -9,6 +9,7 @@
#include "base/bind.h"
#include "build/build_config.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/services/paint_preview_compositor/public/mojom/paint_preview_compositor.mojom.h"
#include "components/strings/grit/components_strings.h"
......@@ -31,6 +32,31 @@ void BindDiscardableSharedMemoryManagerOnIOThread(
} // 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>
CreateCompositorCollection() {
mojo::Remote<mojom::PaintPreviewCompositorCollection> collection;
......
......@@ -5,11 +5,16 @@
#ifndef 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 "mojo/public/cpp/bindings/remote.h"
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
// running an instance of the PaintPreviewCompositorCollectionImpl. This can be
// used to create compositor instances that composite Paint Previews into
......
......@@ -18,7 +18,6 @@
#include "components/keyed_service/core/keyed_service.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_compositor_service_impl.h"
#include "components/paint_preview/common/mojom/paint_preview_recorder.mojom.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/web_contents.h"
......@@ -115,32 +114,6 @@ void PaintPreviewBaseService::CapturePaintPreview(
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(
int frame_tree_node_id,
base::TimeTicks start_time,
......
......@@ -24,7 +24,6 @@
#include "components/paint_preview/common/file_utils.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/public/paint_preview_compositor_service.h"
#include "content/public/browser/web_contents.h"
namespace paint_preview {
......@@ -128,10 +127,6 @@ class PaintPreviewBaseService : public KeyedService {
size_t max_per_capture_size,
OnCapturedCallback callback);
// Starts the compositor service in a utility process.
std::unique_ptr<PaintPreviewCompositorService> StartCompositorService(
base::OnceClosure disconnect_handler);
private:
void OnCaptured(int frame_tree_node_id,
base::TimeTicks start_time,
......
......@@ -113,10 +113,9 @@ PlayerCompositorDelegate::PlayerCompositorDelegate(
TRACE_EVENT_NESTABLE_ASYNC_BEGIN0("paint_preview",
"PlayerCompositorDelegate CreateCompositor",
TRACE_ID_LOCAL(this));
paint_preview_compositor_service_ =
paint_preview_service_->StartCompositorService(base::BindOnce(
&PlayerCompositorDelegate::OnCompositorServiceDisconnected,
weak_factory_.GetWeakPtr()));
paint_preview_compositor_service_ = StartCompositorService(
base::BindOnce(&PlayerCompositorDelegate::OnCompositorServiceDisconnected,
weak_factory_.GetWeakPtr()));
paint_preview_compositor_client_ =
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