Skip to content

Commit 4dd9666

Browse files
committed
cobalt: Move VideoGeometrySetterService on gpu thread
1 parent 203785b commit 4dd9666

24 files changed

+185
-174
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)
@@ -160,12 +156,7 @@ blink::UserAgentMetadata GetCobaltUserAgentMetadata() {
160156
return metadata;
161157
}
162158

163-
CobaltContentBrowserClient::CobaltContentBrowserClient()
164-
: video_geometry_setter_service_(
165-
std::unique_ptr<cobalt::media::VideoGeometrySetterService,
166-
base::OnTaskRunnerDeleter>(
167-
nullptr,
168-
base::OnTaskRunnerDeleter(nullptr))) {
159+
CobaltContentBrowserClient::CobaltContentBrowserClient() {
169160
COBALT_DETACH_FROM_THREAD(thread_checker_);
170161
#if BUILDFLAG(IS_STARBOARD)
171162
// TODO: b/476434249 - Revisit if Cobalt supports multiple tabs/windows.
@@ -366,40 +357,6 @@ void CobaltContentBrowserClient::RegisterBrowserInterfaceBindersForFrame(
366357
render_frame_host, map);
367358
}
368359

369-
void CobaltContentBrowserClient::CreateVideoGeometrySetterService() {
370-
DCHECK(!video_geometry_setter_service_);
371-
video_geometry_setter_service_ =
372-
std::unique_ptr<cobalt::media::VideoGeometrySetterService,
373-
base::OnTaskRunnerDeleter>(
374-
new media::VideoGeometrySetterService,
375-
base::OnTaskRunnerDeleter(
376-
base::SingleThreadTaskRunner::GetCurrentDefault()));
377-
}
378-
379-
void CobaltContentBrowserClient::ExposeInterfacesToRenderer(
380-
service_manager::BinderRegistry* registry,
381-
blink::AssociatedInterfaceRegistry* associated_registry,
382-
content::RenderProcessHost* render_process_host) {
383-
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
384-
if (!video_geometry_setter_service_) {
385-
CreateVideoGeometrySetterService();
386-
}
387-
registry->AddInterface<cobalt::media::mojom::VideoGeometryChangeSubscriber>(
388-
video_geometry_setter_service_->GetBindSubscriberCallback(),
389-
base::SingleThreadTaskRunner::GetCurrentDefault());
390-
}
391-
392-
void CobaltContentBrowserClient::BindGpuHostReceiver(
393-
mojo::GenericPendingReceiver receiver) {
394-
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
395-
if (!video_geometry_setter_service_) {
396-
CreateVideoGeometrySetterService();
397-
}
398-
if (auto r = receiver.As<media::mojom::VideoGeometrySetter>()) {
399-
video_geometry_setter_service_->GetVideoGeometrySetter(std::move(r));
400-
}
401-
}
402-
403360
void CobaltContentBrowserClient::WillCreateURLLoaderFactory(
404361
content::BrowserContext* browser_context,
405362
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.
@@ -144,13 +135,10 @@ class CobaltContentBrowserClient : public content::ShellContentBrowserClient {
144135
uint64_t GetSbWindowHandle() const { return cached_sb_window_; }
145136

146137
private:
147-
void CreateVideoGeometrySetterService();
148138
void DispatchEvent(const std::string&, base::OnceClosure);
149139
void OnSbWindowCreated(SbWindow window);
150140

151141
std::unique_ptr<CobaltWebContentsObserver> web_contents_observer_;
152-
std::unique_ptr<media::VideoGeometrySetterService, base::OnTaskRunnerDeleter>
153-
video_geometry_setter_service_;
154142

155143
uint64_t cached_sb_window_ = 0;
156144
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:

content/gpu/gpu_service_factory.cc

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@
2424
#include "media/mojo/services/media_service_factory.h" // nogncheck
2525
#endif // BUILDFLAG(ENABLE_MOJO_MEDIA_IN_GPU_PROCESS)
2626

27+
#if BUILDFLAG(USE_STARBOARD_MEDIA)
28+
#include "content/public/common/content_client.h"
29+
#include "content/public/gpu/content_gpu_client.h"
30+
#endif // BUILDFLAG(USE_STARBOARD_MEDIA)
31+
2732
namespace content {
2833

2934
GpuServiceFactory::GpuServiceFactory(
@@ -88,10 +93,24 @@ void GpuServiceFactory::RunMediaService(
8893
}
8994
}
9095

96+
#if BUILDFLAG(USE_STARBOARD_MEDIA)
97+
content::ContentGpuClient* client = GetContentClient()->gpu();
98+
cobalt::media::VideoGeometrySetterService* video_geometry_setter_service = nullptr;
99+
if (client) {
100+
video_geometry_setter_service =
101+
client->GetVideoGeometrySetterService();
102+
}
103+
#endif // BUILDFLAG(USE_STARBOARD_MEDIA)
104+
91105
media::GpuMojoMediaClientTraits traits(
92106
gpu_preferences_, gpu_workarounds_, gpu_feature_info_, gpu_info_,
93107
/*gpu_task_runner=*/task_runner_, android_overlay_factory_cb_,
94-
media_gpu_channel_manager_);
108+
media_gpu_channel_manager_
109+
#if BUILDFLAG(USE_STARBOARD_MEDIA)
110+
,
111+
video_geometry_setter_service
112+
#endif // BUILDFLAG(USE_STARBOARD_MEDIA)
113+
);
95114
auto gpu_client = media::GpuMojoMediaClient::Create(traits);
96115

97116
using FactoryCallback =

content/public/gpu/content_gpu_client.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,11 @@ ContentGpuClient::GetGrContextOptionsProvider() {
3030
}
3131
#endif
3232

33+
#if BUILDFLAG(USE_STARBOARD_MEDIA)
34+
cobalt::media::VideoGeometrySetterService*
35+
ContentGpuClient::GetVideoGeometrySetterService() {
36+
return nullptr;
37+
}
38+
#endif // BUILDFLAG(USE_STARBOARD_MEDIA)
39+
3340
} // namespace content

content/public/gpu/content_gpu_client.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@
1313
#include "gpu/command_buffer/service/shared_context_state.h"
1414
#include "mojo/public/cpp/bindings/binder_map.h"
1515

16+
#if BUILDFLAG(USE_STARBOARD_MEDIA)
17+
namespace cobalt::media {
18+
class VideoGeometrySetterService;
19+
}
20+
#endif // BUILDFLAG(USE_STARBOARD_MEDIA)
21+
1622
namespace gpu {
1723
struct GpuPreferences;
1824
class GpuDriverBugWorkarounds;
@@ -61,6 +67,10 @@ class CONTENT_EXPORT ContentGpuClient {
6167
virtual const gpu::SharedContextState::GrContextOptionsProvider*
6268
GetGrContextOptionsProvider();
6369
#endif
70+
71+
#if BUILDFLAG(USE_STARBOARD_MEDIA)
72+
virtual cobalt::media::VideoGeometrySetterService* GetVideoGeometrySetterService();
73+
#endif // BUILDFLAG(USE_STARBOARD_MEDIA)
6474
};
6575

6676
} // namespace content

0 commit comments

Comments
 (0)