Skip to content

Commit 3890379

Browse files
committed
cobalt: Move VideoGeometrySetterService on gpu thread
1 parent d46cb33 commit 3890379

28 files changed

+205
-183
lines changed

cobalt/browser/cobalt_content_browser_client.cc

Lines changed: 1 addition & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@
4242
#include "cobalt/browser/metrics/cobalt_metrics_services_manager_client.h"
4343
#include "cobalt/browser/user_agent/user_agent_platform_info.h"
4444
#include "cobalt/common/features/starboard_features_initialization.h"
45-
#include "cobalt/media/service/mojom/video_geometry_setter.mojom.h"
4645
#include "cobalt/media/service/platform_window_provider_service.h"
47-
#include "cobalt/media/service/video_geometry_setter_service.h"
4846
#include "cobalt/shell/browser/shell.h"
4947
#include "cobalt/shell/common/shell_paths.h"
5048
#include "cobalt/shell/common/shell_switches.h"
@@ -69,8 +67,6 @@
6967
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
7068
#include "services/network/public/cpp/features.h"
7169
#include "services/network/public/mojom/network_context.mojom.h"
72-
#include "services/service_manager/public/cpp/binder_registry.h"
73-
#include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h"
7470
#include "third_party/blink/public/common/web_preferences/web_preferences.h"
7571

7672
#if BUILDFLAG(IS_ANDROID)
@@ -170,12 +166,7 @@ blink::UserAgentMetadata GetCobaltUserAgentMetadata() {
170166
return metadata;
171167
}
172168

173-
CobaltContentBrowserClient::CobaltContentBrowserClient()
174-
: video_geometry_setter_service_(
175-
std::unique_ptr<cobalt::media::VideoGeometrySetterService,
176-
base::OnTaskRunnerDeleter>(
177-
nullptr,
178-
base::OnTaskRunnerDeleter(nullptr))) {
169+
CobaltContentBrowserClient::CobaltContentBrowserClient() {
179170
COBALT_DETACH_FROM_THREAD(thread_checker_);
180171
#if BUILDFLAG(IS_STARBOARD)
181172
// TODO: b/476434249 - Revisit if Cobalt supports multiple tabs/windows.
@@ -376,40 +367,6 @@ void CobaltContentBrowserClient::RegisterBrowserInterfaceBindersForFrame(
376367
render_frame_host, map);
377368
}
378369

379-
void CobaltContentBrowserClient::CreateVideoGeometrySetterService() {
380-
DCHECK(!video_geometry_setter_service_);
381-
video_geometry_setter_service_ =
382-
std::unique_ptr<cobalt::media::VideoGeometrySetterService,
383-
base::OnTaskRunnerDeleter>(
384-
new media::VideoGeometrySetterService,
385-
base::OnTaskRunnerDeleter(
386-
base::SingleThreadTaskRunner::GetCurrentDefault()));
387-
}
388-
389-
void CobaltContentBrowserClient::ExposeInterfacesToRenderer(
390-
service_manager::BinderRegistry* registry,
391-
blink::AssociatedInterfaceRegistry* associated_registry,
392-
content::RenderProcessHost* render_process_host) {
393-
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
394-
if (!video_geometry_setter_service_) {
395-
CreateVideoGeometrySetterService();
396-
}
397-
registry->AddInterface<cobalt::media::mojom::VideoGeometryChangeSubscriber>(
398-
video_geometry_setter_service_->GetBindSubscriberCallback(),
399-
base::SingleThreadTaskRunner::GetCurrentDefault());
400-
}
401-
402-
void CobaltContentBrowserClient::BindGpuHostReceiver(
403-
mojo::GenericPendingReceiver receiver) {
404-
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
405-
if (!video_geometry_setter_service_) {
406-
CreateVideoGeometrySetterService();
407-
}
408-
if (auto r = receiver.As<media::mojom::VideoGeometrySetter>()) {
409-
video_geometry_setter_service_->GetVideoGeometrySetter(std::move(r));
410-
}
411-
}
412-
413370
void CobaltContentBrowserClient::WillCreateURLLoaderFactory(
414371
content::BrowserContext* browser_context,
415372
content::RenderFrameHost* frame,

cobalt/browser/cobalt_content_browser_client.h

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,6 @@ class BinderMapWithContext;
4848

4949
namespace cobalt {
5050

51-
namespace media {
52-
class VideoGeometrySetterService;
53-
} // namespace media
54-
5551
class CobaltMetricsServicesManagerClient;
5652
class CobaltWebContentsObserver;
5753

@@ -102,11 +98,6 @@ class CobaltContentBrowserClient : public content::ShellContentBrowserClient {
10298
content::RenderFrameHost* render_frame_host,
10399
mojo::BinderMapWithContext<content::RenderFrameHost*>* binder_map)
104100
override;
105-
void ExposeInterfacesToRenderer(
106-
service_manager::BinderRegistry* registry,
107-
blink::AssociatedInterfaceRegistry* associated_registry,
108-
content::RenderProcessHost* render_process_host) override;
109-
void BindGpuHostReceiver(mojo::GenericPendingReceiver receiver) override;
110101

111102
// Initializes all necessary parameters to create the feature list and calls
112103
// base::FeatureList::SetInstance() to set the global instance.
@@ -148,13 +139,10 @@ class CobaltContentBrowserClient : public content::ShellContentBrowserClient {
148139
#endif // !BUILDFLAG(IS_ANDROIDTV)
149140

150141
private:
151-
void CreateVideoGeometrySetterService();
152142
void DispatchEvent(const std::string&, base::OnceClosure);
153143
void OnSbWindowCreated(SbWindow window);
154144

155145
std::unique_ptr<CobaltWebContentsObserver> web_contents_observer_;
156-
std::unique_ptr<media::VideoGeometrySetterService, base::OnTaskRunnerDeleter>
157-
video_geometry_setter_service_;
158146

159147
uint64_t cached_sb_window_ = 0;
160148
std::vector<

cobalt/gpu/BUILD.gn

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ source_set("gpu") {
2020

2121
deps = [
2222
"//base",
23+
"//cobalt/media/service",
24+
"//cobalt/media/service/mojom",
2325
"//cobalt/media/service/mojom",
2426
"//components/viz/common",
2527
"//components/viz/service",

cobalt/gpu/cobalt_content_gpu_client.cc

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,27 +18,58 @@
1818

1919
#include "base/memory/ptr_util.h"
2020
#include "base/task/single_thread_task_runner.h"
21+
#include "cobalt/media/service/mojom/video_geometry_setter.mojom.h"
22+
#include "cobalt/media/service/video_geometry_setter_service.h"
2123
#include "components/viz/service/display/starboard/video_geometry_setter.h"
2224
#include "content/public/child/child_thread.h"
2325

2426
namespace cobalt {
2527

26-
CobaltContentGpuClient::CobaltContentGpuClient() = default;
28+
CobaltContentGpuClient::CobaltContentGpuClient()
29+
: video_geometry_setter_service_(
30+
std::unique_ptr<cobalt::media::VideoGeometrySetterService,
31+
base::OnTaskRunnerDeleter>(
32+
nullptr,
33+
base::OnTaskRunnerDeleter(nullptr))) {}
34+
2735
CobaltContentGpuClient::~CobaltContentGpuClient() = default;
2836

2937
void CobaltContentGpuClient::PostCompositorThreadCreated(
3038
base::SingleThreadTaskRunner* task_runner) {
39+
if (!video_geometry_setter_service_) {
40+
CreateVideoGeometrySetterService();
41+
}
3142
// Initialize PendingRemote for VideoGeometrySetter and post it
3243
// to compositor thread (viz service). This is called on gpu thread
3344
// right after the compositor thread is created.
3445
mojo::PendingRemote<cobalt::media::mojom::VideoGeometrySetter>
3546
video_geometry_setter;
36-
content::ChildThread::Get()->BindHostReceiver(
37-
video_geometry_setter.InitWithNewPipeAndPassReceiver());
47+
mojo::PendingReceiver<cobalt::media::mojom::VideoGeometrySetter>
48+
pending_receiver = video_geometry_setter.InitWithNewPipeAndPassReceiver();
49+
video_geometry_setter_service_->GetVideoGeometrySetter(
50+
std::move(pending_receiver));
3851

3952
task_runner->PostTask(FROM_HERE,
4053
base::BindOnce(&viz::ConnectVideoGeometrySetter,
4154
std::move(video_geometry_setter)));
4255
}
4356

57+
media::VideoGeometrySetterService*
58+
CobaltContentGpuClient::GetVideoGeometrySetterService() {
59+
if (!video_geometry_setter_service_) {
60+
CreateVideoGeometrySetterService();
61+
}
62+
return video_geometry_setter_service_.get();
63+
}
64+
65+
void CobaltContentGpuClient::CreateVideoGeometrySetterService() {
66+
DCHECK(!video_geometry_setter_service_);
67+
video_geometry_setter_service_ =
68+
std::unique_ptr<cobalt::media::VideoGeometrySetterService,
69+
base::OnTaskRunnerDeleter>(
70+
new media::VideoGeometrySetterService,
71+
base::OnTaskRunnerDeleter(
72+
base::SingleThreadTaskRunner::GetCurrentDefault()));
73+
}
74+
4475
} // namespace cobalt

cobalt/gpu/cobalt_content_gpu_client.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020

2121
namespace cobalt {
2222

23+
namespace media {
24+
class VideoGeometrySetterService;
25+
} // namespace media
26+
2327
// This class utilizes embedder API for participating in gpu logic.
2428
// It allows Cobalt to interact with viz service and compositor thread.
2529
class CobaltContentGpuClient : public content::ContentGpuClient {
@@ -34,6 +38,13 @@ class CobaltContentGpuClient : public content::ContentGpuClient {
3438
// content::ContentGpuClient:
3539
void PostCompositorThreadCreated(
3640
base::SingleThreadTaskRunner* task_runner) override;
41+
media::VideoGeometrySetterService* GetVideoGeometrySetterService() override;
42+
43+
private:
44+
void CreateVideoGeometrySetterService();
45+
46+
std::unique_ptr<media::VideoGeometrySetterService, base::OnTaskRunnerDeleter>
47+
video_geometry_setter_service_;
3748
};
3849

3950
} // namespace cobalt

cobalt/renderer/cobalt_content_renderer_client.cc

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
#include "media/base/media_log.h"
2020
#include "media/base/renderer_factory.h"
2121
#include "media/mojo/clients/starboard/starboard_renderer_client_factory.h"
22-
#include "media/starboard/bind_host_receiver_callback.h"
23-
#include "mojo/public/cpp/bindings/generic_pending_receiver.h"
2422
#include "starboard/media.h"
2523
#include "starboard/player.h"
2624
#include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
@@ -91,17 +89,8 @@ ::media::SupportedCodecs GetStarboardEmeSupportedCodecs() {
9189
return codecs;
9290
}
9391

94-
void BindHostReceiverWithValuation(mojo::GenericPendingReceiver receiver) {
95-
content::RenderThread::Get()->BindHostReceiver(std::move(receiver));
96-
}
97-
9892
} // namespace
9993

100-
static_assert(std::is_same<::media::BindHostReceiverCallback,
101-
base::RepeatingCallback<
102-
decltype(BindHostReceiverWithValuation)>>::value,
103-
"These two types must be the same");
104-
10594
CobaltContentRendererClient::CobaltContentRendererClient() {
10695
CHECK_CALLED_ON_VALID_THREAD(main_thread_checker_);
10796
}
@@ -233,12 +222,6 @@ void CobaltContentRendererClient::RunScriptsAtDocumentStart(
233222
communication->RunScriptsAtDocumentStart();
234223
}
235224

236-
void CobaltContentRendererClient::BindHostReceiver(
237-
mojo::GenericPendingReceiver receiver) {
238-
CHECK(content::RenderThread::IsMainThread());
239-
BindHostReceiverWithValuation(std::move(receiver));
240-
}
241-
242225
void CobaltContentRendererClient::GetStarboardRendererFactoryTraits(
243226
::media::RendererFactoryTraits* renderer_factory_traits) {
244227
CHECK(content::RenderThread::IsMainThread());
@@ -256,11 +239,6 @@ void CobaltContentRendererClient::GetStarboardRendererFactoryTraits(
256239
renderer_factory_traits->get_sb_window_handle_callback = base::BindRepeating(
257240
&CobaltContentRendererClient::GetSbWindowHandle, base::Unretained(this));
258241
#endif // BUILDFLAG(IS_STARBOARD)
259-
// TODO(b/405424096) - Cobalt: Move VideoGeometrySetterService to Gpu thread.
260-
renderer_factory_traits->bind_host_receiver_callback =
261-
base::BindPostTaskToCurrentDefault(
262-
base::BindRepeating(&CobaltContentRendererClient::BindHostReceiver,
263-
weak_factory_.GetWeakPtr()));
264242
}
265243

266244
void CobaltContentRendererClient::PostSandboxInitialized() {

cobalt/renderer/cobalt_content_renderer_client.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,6 @@ class MediaLog;
2929
class RendererFactory;
3030
} // namespace media
3131

32-
namespace mojo {
33-
class GenericPendingReceiver;
34-
} // namespace mojo
35-
3632
namespace cobalt {
3733
// This class utilizes embedder API for participating in renderer logic.
3834
// It allows Cobalt to customize content Renderer module.
@@ -60,11 +56,6 @@ class CobaltContentRendererClient : public content::ContentRendererClient {
6056
::media::RendererFactoryTraits* traits) override;
6157
void PostSandboxInitialized() override;
6258

63-
// Bind Host Receiver to VideoGeometryChangeSubscriber on Browser thread.
64-
// This is called from StarboardRenderer with |BindPostTaskToCurrentDefault|
65-
// on media thread to post the task on Renderer thread.
66-
void BindHostReceiver(mojo::GenericPendingReceiver receiver);
67-
6859
uint64_t GetSbWindowHandle() const { return sb_window_handle_; }
6960

7061
private:

cobalt/testing/browser_tests/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,7 @@ static_library("cobalt_shell_test_lib") {
466466
":cobalt_browsertests_support",
467467
":cobalt_browsertests_support_mojom",
468468
"//cc/base",
469+
"//cobalt/media/service",
469470
"//cobalt/media/service/mojom",
470471
"//cobalt/shell:cobalt_shell_app",
471472
"//cobalt/shell:cobalt_shell_lib",

cobalt/testing/browser_tests/gpu/shell_content_gpu_test_client.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "base/functional/bind.h"
1818
#include "base/task/single_thread_task_runner.h"
1919
#include "cobalt/media/service/mojom/video_geometry_setter.mojom.h"
20+
#include "cobalt/media/service/video_geometry_setter_service.h"
2021
#include "cobalt/testing/browser_tests/common/power_monitor_test_impl.h"
2122
#include "components/viz/service/display/starboard/video_geometry_setter.h"
2223
#include "content/public/child/child_thread.h"
@@ -50,4 +51,9 @@ void ShellContentGpuTestClient::PostCompositorThreadCreated(
5051
std::move(video_geometry_setter)));
5152
}
5253

54+
cobalt::media::VideoGeometrySetterService*
55+
ShellContentGpuTestClient::GetVideoGeometrySetterService() {
56+
return &video_geometry_setter_service_;
57+
}
58+
5359
} // namespace content

cobalt/testing/browser_tests/gpu/shell_content_gpu_test_client.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#ifndef COBALT_TESTING_BROWSER_TESTS_GPU_SHELL_CONTENT_GPU_TEST_CLIENT_H_
1616
#define COBALT_TESTING_BROWSER_TESTS_GPU_SHELL_CONTENT_GPU_TEST_CLIENT_H_
1717

18+
#include "cobalt/media/service/video_geometry_setter_service.h"
1819
#include "content/public/gpu/content_gpu_client.h"
1920
#include "services/network/public/mojom/network_service_test.mojom-forward.h"
2021

@@ -38,6 +39,12 @@ class ShellContentGpuTestClient : public ContentGpuClient {
3839

3940
void PostCompositorThreadCreated(
4041
base::SingleThreadTaskRunner* task_runner) override;
42+
43+
cobalt::media::VideoGeometrySetterService* GetVideoGeometrySetterService()
44+
override;
45+
46+
private:
47+
cobalt::media::VideoGeometrySetterService video_geometry_setter_service_;
4148
};
4249

4350
} // namespace content

0 commit comments

Comments
 (0)